JP2022546636A - ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 - Google Patents

ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 Download PDF

Info

Publication number
JP2022546636A
JP2022546636A JP2022526211A JP2022526211A JP2022546636A JP 2022546636 A JP2022546636 A JP 2022546636A JP 2022526211 A JP2022526211 A JP 2022526211A JP 2022526211 A JP2022526211 A JP 2022526211A JP 2022546636 A JP2022546636 A JP 2022546636A
Authority
JP
Japan
Prior art keywords
source code
code
target source
training
insight
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2022526211A
Other languages
English (en)
Other versions
JP7220833B2 (ja
Inventor
イバンコビッチ,マルコ
ヤンコビッチ,ベドラナ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2022546636A publication Critical patent/JP2022546636A/ja
Priority to JP2023012833A priority Critical patent/JP7503671B2/ja
Application granted granted Critical
Publication of JP7220833B2 publication Critical patent/JP7220833B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • G06F9/453Help systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Medical Informatics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Human Computer Interaction (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Stored Programmes (AREA)

Abstract

方法(500)は、ターゲットソースコード(210)のコードインサイト(400)を要求するコードインサイト要求(112)を受信することを備える。コードインサイト要求(112)は、ターゲットソースコード(210)と、ソフトウェア開発ツール(418)がコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定するツールタイプインジケータ(205)とを含む。本方法はさらに、ツールタイプインジケータに基づいて機械学習モデル(308)を取得することと、機械学習モデルを使用してコードインサイトを生成することとを備える。コードインサイトは、ツールタイプインジケータが、ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールからなることを指定する場合のターゲットソースコードの予測ラベル(400a)、またはツールタイプインジケータが、ソフトウェア開発ツールがコード変形タイプのソフトウェア開発ツールからなることを指定する場合のターゲットソースコードの予測コード変形(400b)のうちの1つからなる。

Description

技術分野
本開示は、ソースコード上で動作するソフトウェアツールのための機械学習モデルの生成に関する。
背景
プログラミングツールまたはソフトウェア開発ツールは、ソフトウェア開発者が他のプログラムおよびアプリケーションを、作成、デバッグ、保守、またはその他の態様ではサポートするために使用するコンピュータプログラムである。この用語は通常、物理的なオブジェクトを修正するために複数のハンドツールを使用するのと同じように、タスクを達成するために組合わせることができる比較的単純なプログラムを指す。最も基本的なツールは、ソースコードエディタおよびコンパイラまたはインタープリタである。その他のツールは、言語、開発方法および個々のエンジニアに応じて多かれ少なかれ使用され、デバッガ、プロファイラ、または静的プログラムアナライザのように、個別のタスクに使用されることがよくある。静的プログラム分析は、実際にプログラムを実行せずに行われるコンピュータソフトウェアの分析である。ほとんどの場合、分析はあるバージョンのソースコードに対して行われる。ソフトウェア開発ツールは、たとえばコマンドラインから別個に実行される個別のプログラムの場合もあれば、統合開発環境(integrated development environment:IDE)と呼ばれることもある単一の大きなプログラムの一部である場合もある。
コードベース(codebaseまたはcode base)は、特定のソフトウェアシステム、アプリケーション、またはソフトウェアコンポーネントをビルドするために使用される、人間が書いた、および機械が生成したソースコードスニペットの集合である。コードベースは通常、ソースコードリポジトリに格納される。コードベースの改訂は、バージョンコントロールシステムによって管理されることがある。特定のソフトウェア開発ツールをビルドするためのコードベースを作成するのに、専門のソフトウェアエンジニアが数ヶ月かかる場合が多い。機械学習モデルは、人間が書いたソースコードスニペットの誤りを自動的に識別することによって、これらのソフトウェア開発ツールのビルドプロセスを迅速化するのに役立つ可能性がある。しかしながら、このような機械学習モデルは、ビルドされるソフトウェア開発ツールに特化したものであり、実際にソフトウェア開発ツールをビルドする異なるソフトウェアエンジニアが使用できるように機械学習モデルを作成するためには、専門のソフトウェアエンジニアが必要である。
概要
本開示のある態様は、コードインサイトを生成するための方法を提供する。方法は、データ処理ハードウェアにおいて、ターゲットソースコードのコードインサイトを要求するコードインサイト要求を、ソフトウェア開発ツールをビルドするためにターゲットソースコードを使用する開発者に関連付けられた開発者デバイスから受信することを備える。コードインサイト要求は、ターゲットソースコードと、ツールタイプインジケータとを含む。ツールタイプインジケータは、ソフトウェア開発ツールが、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定する。方法はさらに、データ処理ハードウェアが、ツールタイプインジケータに基づいて、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられた訓練ソースコードで訓練された機械学習モデルを取得することを備える。方法はさらに、データ処理ハードウェアが、機械学習モデルを使用して、ターゲットソースコードのコードインサイトを生成することを備える。ツールタイプインジケータが、ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールからなることを指定する場合、ターゲットソースコードのコードインサイトは、ターゲットソースコードの予測ラベルを含む。ツールタイプインジケータが、ソフトウェア開発ツールがコード変形タイプのソフトウェア開発ツールからなることを指定する場合、ターゲットソースコードのコードインサイトは、訓練ソースコードの予測コード変形を含む。方法はさらに、データ処理ハードウェアが、コードインサイトを開発者デバイスに送信することを備え、コードインサイトは、開発者デバイスによって受信されると、開発者デバイスで実行されているグラフィカルユーザインターフェイスに、コードインサイトを開発者デバイスの表示画面に表示させる。
本開示の実装は、以下に記載の任意の特徴のうちの1つ以上を含み得る。いくつかの実装では、方法はさらに、データ処理ハードウェアが、機械学習モデルへの入力に適したターゲットソースコードの構文表現に対応するターゲット特徴のセットを、ターゲットソースコードから抽出することを備える。これらの実装では、機械学習モデルは、ターゲット特徴のセットを入力として受信し、ターゲットソースコードのコードインサイトを出力として生成するように構成されている。ターゲットソースコードの構文表現は、構文表現木(Abstract Syntax Tree:AST)を含み得る。いくつかの例では、機械学習モデルを取得することは、機械学習モデル生成器を使用して、選択された訓練ソースコードで機械学習モデルを訓練することによってコードインサイト要求を受信することに応答して、機械学習モデルを生成することを含む。訓練ソースコードは、データ処理ハードウェアと通信しているメモリハードウェアに格納されているソースコードリポジトリから選択可能であり、訓練ソースコードは、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられている。いくつかの実装では、方法はさらに、データ処理ハードウェアが、機械学習モデルを訓練するのに適した訓練ソースコードの構文表現に対応する訓練特徴のセットを、選択された訓練ソースコードから抽出することを備える。訓練ソースコードの構文表現は、抽象構文木(AST)を含み得る。
いくつかの実装では、コードインサイト要求はさらに、コードインサイトに関連付けられた、開発者によって定義された結果特性タイプを含み、ツールタイプインジケータに基づいて機械学習モデルを取得することはさらに、結果特性タイプに基づいてもよい。これらの実装では、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することはさらに、機械学習モデルを使用して、コードインサイト要求の結果特性タイプに関連付けられた、コードインサイトのエミュレートされた結果特性を生成することを含み得る。方法はさらに、データ処理ハードウェアが、データ処理ハードウェアと通信しているメモリハードウェアに格納されているソースコードリポジトリから、コードインサイト要求の結果特性タイプに関連付けられた対応する結果特性とペアにされた訓練ソースコードの訓練例を識別することを備え得る。方法はさらに、データ処理ハードウェアが、機械学習モデルを、対応する結果特性とペアにされた訓練ソースコードを含む訓練例で訓練することを備え得る。
コードインサイトのエミュレートされた結果特性は、ターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされたビルド結果、ターゲットソースコードもしくはターゲットソースコードの変形を実行するためのエミュレートされた経過時間、ターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされたメタデータ、またはターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされた、人間が生成したコメントのうちの1つを含み得る。方法はさらに、ターゲットソースコードの予測コード変形が実行可能なコードを含む場合、データ処理ハードウェアが、機械学習モデルを、訓練ソースコードをコンパイルまたは解釈することによって生じる対応する訓練実行可能なコードとペアにされた訓練ソースコードを含む訓練例で訓練することを備え得る。いくつかの実装では、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することは、ターゲットソースコードから抽出されるターゲット特徴のセットを特徴入力として受信するように構成された機械学習モデルを使用して、ターゲットソースコードのベクトル表現を生成することと、データ処理ハードウェアと通信しているメモリハードウェアに格納されている訓練ソースコードスニペットのプールの類似スコアを求めることとを含み、類似スコアの各々は、対応する訓練コードスニペットに関連付けられており、かつ、ターゲットソースコードのベクトル表現と、対応する訓練コードスニペットのそれぞれのベクトル表現との類似レベルを示し、生成することはさらに、類似閾値を満たす類似スコアを有する訓練ソースコードスニペットのプールから、1つ以上の訓練ソースコードスニペットを、ターゲットソースコードのミューテーションに対応するものとして識別することを含む。
ターゲットソースコードは、ターゲットコードベースからのターゲットソースコードスニペットのペアを含んでもよく、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することは、ターゲットソースコードスニペットのペア内のターゲットソースコードスニペットごとに、対応するターゲットソースコードスニペットから抽出されるターゲット特徴のセットを特徴入力として受信するように構成された機械学習モデルを使用して、対応するターゲットソースコードスニペットのベクトル表現を生成することと、ベクトル表現に基づいて、ターゲットソースコードスニペットのペアの間のベクトル空間距離を求めることと、ベクトル空間距離が距離閾値を満たす場合、ターゲットソースコードスニペットのペアは互いの複製であると判断することとを含み得る。訓練ソースコードの予測ラベルは、ターゲットソースコードの複雑さの予測レベル、ターゲットソースコードの予測品質、ターゲットソースコードの予測テスト要件、またはターゲットソースコードの予測難易度評価のうちの少なくとも1つを含み得る。ターゲットソースコードの予測コード変形は、ターゲットソースコード内のビルドエラーを修正する更新済みターゲットソースコード、ターゲットソースコードの実行可能なコード、ターゲットソースコードの改訂、またはターゲットソースコードを置換するための推奨される置換ソースコードのうちの少なくとも1つを含み得る。
本開示の他の態様は、コードインサイトを生成するためのシステムを提供する。システムは、データ処理ハードウェアと、データ処理ハードウェアと通信しており、データ処理ハードウェアで実行されると、データ処理ハードウェアに動作を実行させる命令を格納したメモリハードウェアとを備える。動作は、ターゲットソースコードのコードインサイトを要求するコードインサイト要求を、ソフトウェア開発ツールをビルドするためにターゲットソースコードを使用する開発者に関連付けられた開発者デバイスから受信することを含む。コードインサイト要求は、ターゲットソースコードと、ツールタイプインジケータとを含む。ツールタイプインジケータは、ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定する。動作はさらに、ツールタイプインジケータに基づいて、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられた訓練ソースコードで訓練された機械学習モデルを取得することを含む。動作はさらに、機械学習モデルを使用して、ターゲットソースコードのコードインサイトを生成することを含む。ツールタイプインジケータが、ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールからなることを指定する場合、ターゲットソースコードのコードインサイトは、ターゲットソースコードの予測ラベルを含む。ツールタイプインジケータが、ソフトウェア開発ツールがコード変形タイプのソフトウェア開発ツールからなることを指定する場合、ターゲットソースコードのコードインサイトは、訓練ソースコードの予測コード変形を含む。動作はさらに、コードインサイトを開発者デバイスに送信することを含み、コードインサイトは、開発者デバイスによって受信されると、開発者デバイスで実行されているグラフィカルユーザインターフェイスに、コードインサイトを開発者デバイスの表示画面に表示させることを含む。
本開示の実装は、以下の任意の特徴のうちの1つ以上を含み得る。いくつかの実装では、動作はさらに、機械学習モデルへの入力に適したターゲットソースコードの構文表現に対応するターゲット特徴のセットを、ターゲットソースコードから抽出することを含む。これらの実装では、機械学習モデルは、ターゲット特徴のセットを入力として受信し、ターゲットソースコードのコードインサイトを出力として生成するように構成されている。ターゲットソースコードの構文表現は、構文表現木(AST)を含み得る。いくつかの例では、機械学習モデルを取得することは、機械学習モデル生成器を使用して、選択された訓練ソースコードで機械学習モデルを訓練することによってコードインサイト要求を受信することに応答して、機械学習モデルを生成することを含む。訓練ソースコードは、データ処理ハードウェアと通信しているメモリハードウェアに格納されているソースコードリポジトリから選択可能であり、訓練ソースコードは、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられている。いくつかの実装では、動作はさらに、機械学習モデルを訓練するのに適した訓練ソースコードの構文表現に対応する訓練特徴のセットを、選択された訓練ソースコードから抽出することを含む。訓練ソースコードの構文表現は、抽象構文木(AST)を含み得る。
いくつかの実装では、コードインサイト要求はさらに、コードインサイトに関連付けられた、開発者によって定義された結果特性タイプを含み、ツールタイプインジケータに基づいて機械学習モデルを取得することはさらに、結果特性タイプに基づく。これらの実装では、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することはさらに、機械学習モデルを使用して、コードインサイト要求の結果特性タイプに関連付けられた、エミュレートされた結果特性を生成することを含み得る。動作はさらに、メモリハードウェアに格納されているソースコードリポジトリから、コードインサイト要求の結果特性タイプに関連付けられた対応する結果特性とペアにされた訓練ソースコードの訓練例を識別することを含み得る。動作はさらに、機械学習モデルを、対応する結果特性とペアにされた訓練ソースコードを含む訓練例で訓練することを含み得る。
コードインサイトのエミュレートされた結果特性は、ターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされたビルド結果、ターゲットソースコードもしくはターゲットソースコードの変形を実行するためのエミュレートされた経過時間、ターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされたメタデータ、またはターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされた、人間が生成したコメントのうちの1つを含み得る。動作はさらに、ターゲットソースコードの予測コード変形が実行可能なコードを含む場合、機械学習モデルを、訓練ソースコードをコンパイルまたは解釈することによって生じる対応する訓練実行可能なコードとペアにされた訓練ソースコードを含む訓練例で訓練することを含み得る。いくつかの実装では、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することは、ターゲットソースコードから抽出されるターゲット特徴のセットを特徴入力として受信するように構成された機械学習モデルを使用して、ターゲットソースコードのベクトル表現を生成することと、メモリハードウェアに格納されている訓練ソースコードスニペットのプールの類似スコアを求めることとを含み、類似スコアの各々は、対応する訓練コードスニペットに関連付けられており、かつ、ターゲットソースコードのベクトル表現と、対応する訓練コードスニペットのそれぞれのベクトル表現との類似レベルを示し、さらに、類似閾値を満たす類似スコアを有する訓練ソースコードスニペットのプールから、1つ以上の訓練ソースコードスニペットを、ターゲットソースコードのミューテーションに対応するものとして識別することを含む。
ターゲットソースコードは、ターゲットコードベースからのターゲットソースコードスニペットのペアを含んでもよく、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することは、ターゲットソースコードスニペットのペア内のターゲットソースコードスニペットごとに、対応するターゲットソースコードスニペットから抽出されるターゲット特徴のセットを特徴入力として受信するように構成された機械学習モデルを使用して、対応するターゲットソースコードスニペットのベクトル表現を生成することと、ベクトル表現に基づいて、ターゲットソースコードスニペットのペアの間のベクトル空間距離を求めることと、ベクトル空間距離が距離閾値を満たす場合、ターゲットソースコードスニペットのペアは互いの複製であると判断することとを含み得る。訓練ソースコードの予測ラベルは、ターゲットソースコードの複雑さの予測レベル、ターゲットソースコードの予測品質、ターゲットソースコードの予測テスト要件、またはターゲットソースコードの予測難易度評価のうちの少なくとも1つを含み得る。ターゲットソースコードの予測コード変形は、ターゲットソースコード内のビルドエラーを修正する更新済みターゲットソースコード、ターゲットソースコードの実行可能なコード、ターゲットソースコードの改訂、またはターゲットソースコードを置換するための推奨される置換ソースコードのうちの少なくとも1つを含み得る。
本開示の1つ以上の実装は、添付の図面および以下の説明に詳細に記載されている。他の態様、特性、および利点は、説明および図面、ならびに特許請求の範囲から明らかになるであろう。
ソフトウェア開発ツールで使用される機械学習モデルを訓練するための環境の例を示す概略図である。 ターゲットソースコードから抽出されるターゲット特徴のセットの例を示す概略図である。 ソフトウェア開発ツールの機械学習モデルの訓練の例を示す模式図である。 ソフトウェア開発に用いられる機械学習モデルを実行する例を示す概略図である。 ソフトウェア開発に用いられる機械学習モデルを実行する例を示す概略図である。 ソフトウェア開発に用いられる機械学習モデルを実行する例を示す概略図である。 ソフトウェア開発に用いられる機械学習モデルを実行する例を示す概略図である。 機械学習モデルをターゲットソースコードに適用する方法の動作の配置例を示す図である。 例示的なコンピューティングデバイスを示す概略図である。
図面中の同様の符号は、同様の要素を示す。
詳細な説明
本開示の態様は、ソフトウェア開発ツールの機械学習モデルに関する。ソフトウェア開発者は、ソフトウェア開発ツールを使用して、ソフトウェアアプリケーション、ウェブサイト、または他のソフトウェアシステムもしくはコンポーネントを、作成、デバッグ、維持、またはその他の態様ではサポートする。ソフトウェア開発ツールは、たとえばコマンドインタープリタから別個に実行される個別のプログラムでもよい、または、統合開発環境(IDE)と呼ばれることが多い単一の大きなプログラムの一部である場合もある。プログラムのバグを発見し、アプリケーションの拡張時に新たなバグが発生するのを防ぎ、一般に認められたプログラミング手法に従うために、コードベースを認識するソフトウェア開発ツールが使用されることがある。コードベース(codebaseまたはcode base)は、特定のソフトウェアシステムまたはソフトウェアコンポーネント(たとえば、ソフトウェア開発ツール)をビルドするために使用されるソースコードの集合である。コードベースは通常、ソースコードリポジトリに格納される。コードベースは一般に、人間が書いたソースコードスニペットを含む。これらのソースコードスニペットは、非常に複雑であるため、または単に長いため、最も経験のあるソフトウェア開発者であっても、コードベースをちらっと見ただけでは、ソースコードスニペットを手動で検査することができないことがよくある。また、高水準プログラミング言語によって提供される抽象化によって、ソースコードとソフトウェアアプリケーションの動作との関係を理解することがさらに難しくなっている。プログラムのバグを発見するため、コードを拡張する際に新たなバグを発生させないため、および一般に認められたプログラミング手法に従うために、ソフトウェア開発者は、ソースコード上で動作するソフトウェア開発ツールをビルドする際に、機械学習モデルを活用することができる。
ソフトウェアアナライザは、通常、ソースコードを評価するためにルールを適用することによって作動する。ルールは、プログラミングエラーの一般的な原因に基づいて、言語固有、および/またはオペレーティングシステム固有になることがある。精度が低すぎるルールは、誤表示が多すぎて、ソフトウェア開発者にとって有用でない可能性がある。精度が高すぎるルールは、限られた状況でのみ適用可能である、および/または、実行に時間がかかりすぎて実用的でない可能性がある。機械学習モデルに基づくソフトウェア開発ツールは、誤表示の回避と実用的な実行時間との適切なバランスを効率的に実現することができる。機械学習モデルに基づくソフトウェア開発ツールは、一般的なプログラミングエラーの検出にとどまらない可能性がある。例示的なコードベースを使用して訓練された機械学習モデルは、例示的なコードベースおよび/または例示的なコードベースから抽出される特徴に基づくインサイトを得ることができる場合がある。
ソースコードを理解する機械学習モデルは、ソフトウェア開発ツールをビルドする時間を大幅に短縮し、全体の品質を向上させることができるが、特定のソフトウェア開発ツールのビルドのために調整された機械学習モデルの作成は、大変な作業であり、機械学習の知識を有する専門のエンジニアが必要になる。また、機械学習モデルの作成と、ソースコード上のソフトウェア開発ツールの作成とに必要なスキルおよび知識は、通常、重複しないため、機械学習およびソフトウェア開発ツールを専門とする別のエンジニアが必要になる。機械学習モデルがソフトウェア開発ツールのビルドを最適化するために提供する利点は、機械学習モデルの作成に必要な追加コストおよびリソースを上回らないことが多い。その結果、機械学習モデルを用いずに従来の方法でソフトウェア開発ツールをビルドする方が簡単であることが多い。
本明細書の実装は、開発者がソフトウェア開発ツールをビルドするために使用しているターゲットソースコードのコードインサイトの生成に使用される機械学習モデルを自動的に生成することに向けられている。ターゲットソースコードを理解する機械学習モデルを生成することによって、開発者は、データ収集、ならびに機械学習モデルを生成する際の専門的なスキルおよび知識を有していることなど、機械学習モデルを生成するためのプロセスのすべての側面から軽減される。たとえば、開発者は、ターゲットソースコード用のコードインサイトを要求するコードインサイト要求を提供してもよく、コードインサイト要求は、ターゲットソースコードと、ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツール(たとえば、難易度評価を提供するツール)またはコード変形タイプのソフトウェア開発ツール(たとえば、コードを入力として受取り、異なるコードを出力として生成するツール)のうちの1つからなることを指定するツールタイプインジケータとを含む。コードインサイト要求は、限定されないが、ビルド結果、ターゲットソースコードを実行するための経過時間、ターゲットソースコードのメタデータ、またはターゲットソースコードの人間が生成したコメントなど、コードインサイトに関連付けられた出力特性タイプを任意に含んでもよい。基本的に、出力特性タイプは開発者によって定義され、どのタイプのデータがビルド中のソフトウェア開発ツールに関連するかについてのヒントを提供する。
ツールタイプインジケータ、および必要に応じて出力特性タイプに基づいて、機械学習システムは、コードインサイトの生成方法を学習するための機械学習モデルをビルドするために、訓練ソースコードデータに関連して自動的に収集および結合するように構成されている。すなわち、機械学習モデルが訓練ソースコード上で訓練されると、開発者は、ターゲットソースコード(たとえば、ソースコードスニペット(複数可))を訓練済みの機械学習モデルへの入力として提供することが可能であり、訓練済みの機械学習モデルは、ターゲットソースコードのコードインサイトを生成することが可能である。ここで、コードインサイトは、ツールタイプインジケータが、ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールからなることを指定する場合のターゲットソースコードの予測ラベル、またはツールタイプインジケータが、ソフトウェア開発ツールがコード変形タイプのソフトウェア開発ツールに対応することを指定する場合の訓練ソースコードの予測コード変形のうちの1つを含む。開発者は、コードインサイトを見て(たとえば、グラフィカルユーザインターフェイス上のディスプレイを介して)、コードインサイトに基づいて、必要に応じてターゲットソースコードを更新することができる。
図1を参照すると、いくつかの実装において、システム100は、ソフトウェア開発者202に関連付けられた開発者デバイス204を備え、ソフトウェア開発者は、たとえば、ネットワーク130を介して、リモートシステム140と通信してもよい。リモートシステム140は、スケーラブル/エラスティックなリソース142を有する分散システム(たとえば、クラウド環境)でもよい。リソース142は、コンピューティングリソース(たとえば、データ処理ハードウェア)144および/またはストレージリソース(たとえば、メモリハードウェア)146を含む。ソフトウェア開発者202は、開発者デバイス204を使用して、ターゲットソースコード210上で動作するソフトウェア開発ツール(たとえば、ソフトウェアツール)418をビルドしてもよい。リモートシステム140は、機械学習モデル308を自動的に取得し、機械学習モデル308を使用して、開発者202がソフトウェアツール418をビルドするために使用しているターゲットソースコード210のコードインサイト400,400a~bを生成するために、コードインサイトサービス150を実行する。ソフトウェア開発者202が、必要なデータをすべて手動で収集し、ターゲットソースコードを分析するために特別に調整された機械学習モデルをビルドする困難なプロセスを引き受ける必要がある従来の技術とは対照的に、コードインサイトサービス150は、ターゲットソースコード210と、ツール418がコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定するツールタイプインジケータ205とを除いて、開発者202からの入力なしに機械学習モデル308を自動的に取得(たとえば、自動的に生成)するように構成されている。さらにロバストな機械学習モデル300を取得/生成するために、開発者202は、コードインサイト400に関連付けられた結果特性タイプ207を追加的に提供してもよい。
開発者デバイス202は、開発者デバイス202の画面上に表示されるグラフィカルユーザインターフェイス(GUI)220を実行してもよい。開発者204は、GUI204を使用して、ターゲットソースコード210上で動作するソフトウェアツール418をビルドしてもよい。たとえば、開発者204は、GUI204を介して、開発者デバイス202にターゲットソースコード210を入力してもよい。開発者204は、GUI220を使用して、コードインサイトサービス150と通信し、たとえば、コードインサイトサービス150にコードインサイト要求110を送信し、コードインサイトサービス150によって生成されるコードインサイト400を表示してもよい。
示された例では、コードインサイトサービス150は、ソフトウェア開発ツール418をビルドするために使用されるターゲットソースコード210のコードインサイト400を要求するコードインサイト要求110を受信する。ターゲットソースコード210は、開発者204が、たとえば、コードインサイト400を介してインサイトを得ようとしているコードベース内の1つ以上のソースコードスニペットを含んでもよい。コードインサイト要求110は、ターゲットソースコード210と、ソフトウェア開発ツール418がコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定するビルドタイプインジケータ205とを含む。別の例では、コードインサイト要求110はさらに、限定されないが、ビルド結果、ターゲットソースコードを実行するための経過期間、ターゲットソースコードのメタデータ、またはターゲットソースコードの人間が生成したコメントなど、コードインサイト400に関連付けられた出力特性タイプ207を含む。基本的に、出力特性タイプ207は、開発者202によって定義され、どのタイプのデータがビルド中のソフトウェア開発ツール418に関連するかについてのヒントを提供し、より詳細なレベルでは、どのタイプのデータが、コードインサイト400の生成に使用される機械学習モデル308の取得/生成に関連するかについてのヒントを提供する。
いくつかの実装では、リモートシステム140上で実行される(たとえば、データ処理ハードウェア144上で実行される)コードインサイトサービス150は、特徴抽出器200、機械学習(machine learning:ML)システム300、およびインサイト生成器410を含む。図示の例では、特徴抽出器200は、開発者デバイス204から受信したコードインサイト要求110に含まれるターゲットソースコード210からターゲット特徴212のセットを抽出するように構成されている。ここで、ターゲット特徴212のセットは、機械学習モデル308への入力に適したターゲットソースコード210の構文表現に対応する。たとえば、ターゲット特徴212を使用してターゲットソースコード210を構文的に表現することによって、ターゲットソースコード210を機械学習モデル308によって読取り可能な形式で表現し、ターゲットソースコード210から不要なデータを除去することによって機械学習モデル308のメモリ要件を低減することができる。いくつかの例では、ターゲットソースコード210の構文表現は、抽象構文木(AST)を含む。
図2は、ターゲットソースコード210からターゲット特徴212のセットを抽出して抽象構文木(AST)表現215にする特徴抽出器200の例を示す図である。同じまたは異なる特徴抽出器200は、同様に、ターゲットソースコード210から訓練特徴を抽出してAST表現215にしてもよい。また、特徴抽出器200は、ターゲットソースコード210から異なる特徴を抽出して、ターゲットソースコード210の他の種類の構文表現を提供するために使用されてもよい。図1は、リモートシステム140上で実行される特徴抽出器200を示しているが、開発者デバイス204は、他の構成で特徴抽出器200を実行してもよい。一般に、ターゲットソースコード210は、高水準の構造化されたコンピュータ言語で表現されるソフトウェアを含む。たとえば、ターゲットソースコード210は、Java(登録商標),JavaScript(登録商標),Python,Ruby,C/C++,C#,Objective-C,SQL,PHPおよび/またはRを含むがこれらに限定されない、定義された構文を有する高レベルの構造化されたコンピュータ言語で表現されたソフトウェアを含んでもよい。ターゲットソースコード210を機械学習モデル308に直接挿入すれば、結果が使用不可能となるほど質の低い結果が生じることになる。さらに、利用可能なリソースよりも膨大なリソースが必要となるだろう。しかしながら、特徴抽出器200は、同じまたはより良い結果を取得し、同時に、メモリ要件を大幅に低減させるために、ノードのペアとそれらの共通の祖先をハッシュ化することによって、ターゲット特徴212のセットを抽出してAST表現215にしてもよい。AST表現215は、ターゲットソースコード210の構造的なまたはコンテンツ関連の特徴212を表現してもよい。たとえば、AST表現215は、ターゲットソースコード210の構造を定義する中括弧、セミコロン、括弧などの句読点および区切り記号を省略してもよい。図2は、ターゲットソースコード210のスニペットを示す。スニペットは、whileループ、if/then/else文、および2つの代入文を含む。AST表現215に基づくターゲット特徴212の一部も示されている。AST表現215は、階層ツリー形式で配置されたターゲットソースコード210の構文特徴212を保持しつつ、コードスニペットの中括弧およびセミコロンを省略する。この例では、木構造の各ボックスは、ターゲットソースコード210から抽出された特徴212,212a~nを表している。
いくつかの例では、AST表現215は、特定のコンピュータ言語に対応する。他の例では、AST表現215は、いくつかのプログラミング言語に広く適用され、それによって、機械学習モデル308が、多数のプログラミング言語、たとえばJavaまたはPythonで表現されたターゲットソースコード210の確立された命名基準への準拠を認識することを学習できるように、訓練ソースコード310のプログラミング言語にとらわれないAST表現で機械学習モデル308を訓練することができる。
図1に戻って、いくつかの実装では、MLシステム300は、開発者デバイス204から受信したコードインサイト要求110に含まれるツールタイプインジケータ205に基づいて、機械学習モデル308を取得するように構成されている。コードインサイト要求110がコードインサイト400に関連付けられた出力特性タイプ207も含む例では、MLシステム300は、ツールタイプインジケータ205と出力特性タイプ207との両方に基づいて機械学習モデル308を取得するように構成されている。図3を参照して以下でより詳細に説明するが、MLシステム300は、ツールタイプインジケータ205および出力特性タイプ207を使用して、機械学習モデル308を生成するための関連データを収集する。より具体的には、MLシステム300は、ツールタイプインジケータ205を使用して、ツールタイプインジケータ205によって指定されたコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つに関連付けられた訓練ソースコード310を選択する。MLシステム300はさらに、出力特性タイプ207を使用して、結果特性タイプ207に関連付けられた対応する結果特性320とペアにされた訓練ソースコード310の訓練例を識別してもよい。図示された例では、MLシステム300は、機械学習モデル308を、訓練ソースコード310、または対応する結果特性320とペアにされた訓練ソースコード310を含む訓練例で訓練する。
MLシステム300が、開発者デバイス204からのコードインサイト要求110の受信に応答して機械学習モデル308を取得した後で、インサイト生成器410は、機械学習モデル308を使用してターゲットソースコード210のコードインサイト400を生成するように構成されている。いくつかの例では、インサイト生成器410は、ターゲットソースコード210から抽出されたターゲット特徴212のセットをモデル308への入力として受信し、ターゲットソースコード210のコードインサイト400を出力として生成する。しかしながら、他の例では、コードインサイトサーバ150は、特徴抽出器200を省略し、代わりに、入力としてターゲットソースコード210からコードインサイト400を生成してもよい。
ツールタイプインジケータ205が、ソフトウェア開発ツール418がコードラベリングタイプのソフトウェア開発ツールからなることを指定する場合、コードインサイト400は、ターゲットソースコード210の予測ラベル400aを含む。たとえば、予測ラベル400aは、ターゲットソースコード210の複雑さの予測レベル(たとえば、複雑対単純)、ターゲットソースコードの予測品質(たとえば、良いコード対悪いコード)、ターゲットソースコードの予測テスト要件(たとえば、テストした方がよい)、またはターゲットソースコードの予測難易度評価のうちの少なくとも1つを含んでもよい。予測ラベル400aは、開発者202が機械学習モデル308にターゲットソースコード210について予測させたい任意のタイプのラベルを含んでもよい。さらに、コードインサイト要求110に含まれるツールタイプインジケータ205は、開発者202がコードインサイト要求110を提供する際に、開発者202が機械学習モデル308に予測させたい特定のラベルを提供する場合に、コードラベリングタイプを指定してもよい。すなわち、コードインサイト要求110は、開発者202がコードインサイトサービス150に(たとえば、機械学習モデル308を介して)ターゲットソースコード210の複雑さ、ターゲットソースコード210の品質、ターゲットソースコード210のテスト要件、またはターゲットソースコード210の難易度評価を予測させたいことを示す場合がある。
一方、ツールタイプインジケータ205が、ソフトウェア開発ツール418がコード変形タイプのソフトウェア開発ツールからなることを指定する場合、コードインサイト400は、ターゲットソースコード210の予測コード変形400bを含む。いくつかの例では、機械学習モデル308は、モデル308がターゲットソースコード210(たとえば、ターゲット特徴212)内の1つ以上のビルドエラーを特定し、特定された1つ以上のビルドエラーを修正する予測コード変形400bを生成するビルドエラー修正器として動作するように構成されている。ここで、予測コード変形400bは、ビルドエラーを修正する更新済みのターゲットソースコード210を含んでもよい、または、ビルドエラーをもたらしたコードの部分を修正するためのコード改訂を含んでもよい。別の例では、予測コード変形400bは、ターゲットソースコード210のコンパイル/解釈をエミュレートする実行可能なコード出力を含む。いくつかの実装では、予測コード変形400bは、ターゲットソースコード210を置換するための推奨される置換コードを含む。
コードインサイト要求110が開発者202によって指定された結果特性タイプ207を含むシナリオでは、インサイト生成器410はさらに、機械学習モデル308を使用して、コードインサイト400のエミュレートされた結果特性320を生成するように構成されている。これらのシナリオでは、エミュレートされた結果属性320は、コードインサイト要求110に含まれる結果特性タイプ207に関連付けられている。たとえば、エミュレートされた結果属性320は、ターゲットソースコード210のビルドが成功するかまたは失敗するかを示す、エミュレートされたビルド結果を含んでもよい。エミュレートされた結果属性320は、追加的または代替的に、ターゲットソースコードを実行するためのエミュレートされた経過時間、および/またはターゲットソースコードのエミュレートされたメタデータを含んでもよい。いくつかの例では、結果特性タイプ207がユーザコメントを指定する場合、エミュレートされた結果属性320は、ターゲットソースコード210のコードレビューから生じるであろうユーザコメントをエミュレートする、ターゲットソースコード210用に人間が生成した、エミュレートされたコメントを含む。
図3は、リモートシステム140上で実行されるコードインサイトサービス150の機械学習(ML)システム300の例を示す。MLシステム300は、データコレクタ340と、機械学習モデル生成器360と、リモートシステム140のメモリハードウェア146に格納されているソースコードリポジトリ315とを含んでもよい。図示された例では、ソースコードリポジトリ315は、モデル生成器360が、ターゲットソースコード210のラベル400aまたはコード変形400bを予測する学習のための訓練済みMLモデル308を生成(すなわち、訓練)するために使用可能な訓練ソースコード310,310a~nのコードベースを含んでもよい。いくつかの例では、ソースコードリポジトリ315は、開発者デバイス204がソフトウェア開発ツール418をビルドするためにアクセスし、コードインサイトサービス150へのコードインサイト要求110に含まれ得る、ターゲットソースコード210のスニペットも含む。コードインサイトサービス150によって受信されたコードインサイト要求110で提供されたビルドタイプインジケータ205(および任意に出力特性タイプ207)に基づいて、データコレクタ340は、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられた訓練ソースコード310を選択するために、ソースコードリポジトリ315に問合わせてもよい。その後、モデル生成器360は、データコレクタ340によって選択された訓練ソースコード310を、機械学習モデル308を訓練するための訓練例350として使用する。このように、MLシステム300は、ソースコードリポジトリ315から訓練ソースコード310を選択し、機械学習モデル生成器360を使用して、選択した訓練ソースコード310で機械学習モデル308を訓練することにより、コードインサイト要求110を受信したことに応答して、機械学習モデル308を生成することができる。
データコレクタ340は、ターゲットソースコード210上で動作するソフトウェア開発ツール418の開発者定義コードインサイト400を生成するために特に調整された機械学習モデル308をビルド/作成するために必要な他の関連データを収集してもよい。モデル生成器360は、深層学習ニューラルネットワークなどのニューラルネットワークに基づく機械学習システムに対応する。モデル生成器360は、機械学習モデル308を訓練するためのニューラルネットワークを生成するために、一般化バックプロパゲーションを実装してもよい。
いくつかの実装では、MLシステム300は、機械学習モデル308を訓練するのに適した(たとえば、読取り可能でメモリ要件を低減する)訓練ソースコード310の構文表現を提供するために、選択された訓練ソースコード310から訓練特徴のセットを抽出する。たとえば、MLシステム300は、図1および図2を参照して上述したように、特徴抽出器200を採用してもよい。いくつかの例では、訓練ソースコード310の構文表現は、AST表現215(図2)を含む。
コードインサイト要求110が、コードインサイト400に関連付けられた結果特性タイプ207も含む場合、データコレクタ340は、ソースコードリポジトリ315から、コードインサイト要求110の結果特性タイプ207に関連付けられた対応する結果特性320とペアにされた訓練ソースコード310の訓練例350を、識別/選択してもよい。ここで、モデル生成器360は、対応する結果特性320とペアにされた訓練ソースコード310の訓練例で機械学習モデル308を訓練してもよい。開発者定義の結果特性タイプ207を提供することによって、機械学習モデル308を訓練するために使用される訓練ソースコード310のプールは洗練されてもよい、および/または、モデル生成器360は、開発者定義の結果特性タイプ207に一致する特定の結果特性320とペアにされた訓練ソースコード310をより優先するために、ニューラルネットワークの重みを調整してもよい。いくつかの例では、結果特性タイプ207は、開発者202が知りたがっているコードインサイト400に基づいて決定される。たとえば、開発者202は、あるターゲットソースコード210が正常にビルドされるかどうかを判断するように、コードインサイトサービス150に(たとえば、コードインサイト要求110で)要求することができる。このシナリオでは、結果特性タイプ207は、「ビルド結果」とペアにされた訓練ソースコード310が、機械学習モデル308の訓練での使用に非常に関連性が高いことを示す可能性がある。
ソースコードリポジトリ315に格納されている訓練ソースコード310の各スニペットは、訓練ソースコード310に関連付けられた1つ以上の結果特性320でラベル付けされてもよい。これらの結果特性320は、限定されないが、コード310の対応するビルド結果、コード310を実行するための経過時間、コード310のメタデータ、またはコード310のレビューサイクルに基づく人間が生成したコメント(たとえば、ユーザコメント)を含む場合がある。いくつかの例では、訓練ソースコード310の結果特性320は、訓練ソースコード310のコンパイル/解釈から生じる、対応する実行可能コードを含む。
開発者202が、コードインサイトサービス150に、ターゲットソースコード210のコンパイル/解釈をエミュレートするための実行可能コード出力を含む予測コード変形400bを生成するように(たとえば、コードインサイト要求110で)要求する例では、モデル生成器360は、訓練ソースコードをコンパイルまたは解釈した結果生じる、対応する訓練実行可能コードとペアにされた訓練ソースコード310を含む訓練例350で機械学習モデル308を訓練してもよい。ここで、訓練実行可能コードは、訓練ソースコード310に関連付けられた結果特性320に対応してもよい。したがって、データコレクタ340は、モデル生成装置360が機械学習モデル308を訓練するために使用する訓練例350として、対応する訓練実行可能コードとペアにされた訓練ソースコード310を選択/識別するために、ソースコードリポジトリ315に問合わせてもよい。
コードインサイト要求110内のビルドタイプインジケータ205がラベリングタイプのソフトウェア開発ツールを指定する場合、モデル生成器360は、機械学習モデル308を正と負との両方の学習例350で訓練してもよい。たとえば、開発者202がコードインサイトサービス150に、ターゲットソースコード210がテストされた方がよいどうかを示す予測ラベル400bを生成するよう要求すると仮定すると、モデル生成器360は、「テストした方がよい」とラベル付けされた訓練ソースコード310を含む正の訓練例350と、「テスト不要」とラベル付けされた訓練ソースコード310を含む負の訓練例350とで、モデル308を訓練してもよい。このシナリオでは、正および負の訓練例350は、モデル308へのソースコード入力が「テストした方がよい」かどうかを学習するように、モデル308を訓練する。同様に、コードが単純か/複雑か(または良い/悪い)どうかを示す予測ラベル400aを要求することは、モデル308へのソースコード入力が単純か複雑か(または良いか/悪いか)をモデル308が学習できるように、単純(または良い)とラベル付けされた訓練ソースコード310を含む正の訓練例、および複雑(または悪い)とラベル付けされた訓練ソースコード310を含む負の訓練例でモデル308を訓練するように、モデル生成装置360に要求することになる。
いくつかの例では、モデル生成器360は、訓練ソースコードスニペットのプール内の訓練ソースコードスニペットごとに対応するベクトル表現を生成するように、モデル308を訓練する。MLシステム300は、インサイト生成器410がターゲットソースコード210の「近隣」の訓練ソースコードスニペットを識別するためにアクセスし得るメモリハードウェア146に、すべてのベクトル表現のベクトル空間マップを格納してもよい。たとえば、図1を参照すると、インサイト生成器410は、特徴入力としてターゲット特徴212のセットを受信するように構成された機械学習モデル308を使用して、ターゲットソースコード210のベクトル表現を生成し、メモリハードウェア146に格納されている訓練ソースコードスニペットのプールの類似度スコアを決定し、類似度閾値を満たす類似度スコアを有する訓練ソースコードスニペットの1つ以上をターゲットソースコード210の「近隣」であると識別してもよい。これらの「近隣」は、インサイト生成器410によって、ターゲットソースコード210を置換するための推奨される置換コード(たとえば、予測コード変形400b)として、または他の例では、ターゲットソースコード210の可能なミューテーション(たとえば、予測ラベル400a)と識別されてもよい。この例では、各類似度スコアは、対応する訓練ソースコードスニペットに関連付けられ、ターゲットソースコード210のベクトル表現と、対応する訓練ソースコードスニペットのそれぞれのベクトル表現との類似度レベルを示す。同様に、インサイト生成器410は、ベクトル空間マップにおけるターゲットソースコード210のベクトル表現を使用して、ターゲットソースコード210がコードベース内のどこに配置されるべきかを予測することができる。
図1および図3を引き続き参照すると、ベクトル表現を生成するようにモデル308を訓練することは、他のタイプのコードインサイト400を生成するためにインサイト生成器410によって同様に使用され得る。たとえば、開発者202は、ターゲットコードベース(たとえば、開発者デバイス204に格納されている、またはメモリハードウェア146に格納されている)からのターゲットソースコードスニペットのペアを含むターゲットソースコード210を有するコードインサイト要求110を送信してもよい。ここで、インサイト生成器410は、ターゲットソースコードスニペットのペアのターゲットソースコードスニペットごとに、対応するターゲットソースコードスニペットから抽出されたターゲット特徴212のセットを特徴入力として受信するように構成された機械学習モデルを使用して、対応するターゲットソースコードスニペットのベクトル表現を生成することによって、ターゲットソースコード210のコードインサイト400を生成してもよい。その後、インサイト生成器410は、ベクトル表現に基づいてターゲットソースコードスニペットのペアの間のベクトル空間距離を求め、ベクトル空間距離が距離閾値を満たす場合、ターゲットソースコードスニペットのペアは互いの重複であると決定し得る。この例では、開発者デバイス204が、開発者202が見るためのコードインサイト400を受信して表示すると、開発者202は、ストレージ要件を節約するために、ターゲットコードスニペットのうちの1つをターゲットコードベースから削除するように選択可能である。
図4Aおよび図4Bは、開発者がコードインサイト要求112を生成し、コードインサイト要求112をコードインサイトサービス150に送信して、ターゲットソースコード210のコードインサイト400を要求できるようにするためのGUI220,220a~bの例を示す。開発者202は、GUI220を使用して、ターゲットソースコード210を入力する。たとえば、開発者202は、ターゲットソースコード210を手動で入力してもよい、または、コードベース、たとえば、ソースコードリポジトリ315(図3)もしくは他の格納場所から、ターゲットソースコード212を取得してもよい。GUI220a,220bの各々は、開発者204に、ツールタイプインジケータ205を選択することによって、開発者がどのタイプのツールをビルドしているかを指定するように促す。たとえば、図4Aは、コードラベリングタイプのソフトウェア開発ツールの選択を示す入力表示を受信するGUI220aを示す。ここで、開発者202は、コードラベリングタイプのソフトウェア開発ツールを指定するツールタイプインジケータ205をGUI200aに選択させるターゲットソースコード210の「テスト要件」ラベルを要求する入力を、(たとえば、マウスカーソルを介して)提供してもよい(たとえば、「コードラベリング」の円内を塗りつぶすことによって)。一方、図4Bは、コード変形タイプのソフトウェア開発ツールの選択を示す入力指示を受信するGUI200bを示し、この場合、開発者202は、ターゲットソースコード210の実行可能コードへの「コンパイラ/インタープリタ」変形を要求する入力を(たとえば、マウスカーソルを介して)提供する。
また、コードインサイト要求GUI220a,220bは、コードインサイト要求110に含めるためのコードインサイト400に関連付けられた結果特性タイプ207を選択するように、開発者202を促してもよい。図4Aおよび図4Bの例は、出力特性タイプ207、たとえば、「ビルド結果」、「ランタイム」、「メタデータ」、および「ユーザコメント」から選択する4つのオプションを提供するが、GUI220a,220bは、より多くのオプションを提供でき、さらに開発者202が結果特性タイプ207を発話またはテキスト入力できるようにしてもよい。図4Aは、「ユーザコメント」出力特性タイプ207の選択を示す入力指示を受信するGUI220aを示し、図4Bは、「ビルド結果」出力特性タイプ207の選択を示す入力指示を受信するGUI220bを示す。GUI220a,220bは、選択されると開発者デバイス202にコードインサイト要求110をコードインサイトサービス150に送信させる「提出」ボタンを含み、それによって、コードインサイト要求110は、ターゲットソースコード210、開発者202によって選択されたツールタイプインジケータ205、および開発者202によって選択された出力特性タイプ207を含む。
図4Cおよび図4Dは、図4Aおよび図4BのGUI220a~bを使用して生成されたコードインサイト要求110に応答してコードインサイトサービス150によって生成されたコードインサイト400を表示するGUI220,220c~dの例を示す。図4Cは、図4AのGUI220aを使用して開発者204が送信したコードインサイト要求110に含まれるターゲットソースコード210の予測ラベル400aを含むコードインサイト400を表示するGUI220cを示す。ここで、予測ラベル400aは、コードインサイト要求110のツールタイプインジケータ205が、ソフトウェア開発ツール418がコードラベリングタイプのソフトウェア開発ツールに対応することを指定したため、ターゲットソースコード210について生成される。図示の例では、予測ラベル400aは、ターゲットソースコード210が「テストした方がよい」ことを示す。具体的には、予測ラベル400aは、「機械学習モデルによるインサイト分析では、提供されたターゲットソースコードは、テストされるのであれば好ましいと予測される。」と通知するメッセージを、開発者に提供してもよい。また、図4Cは、コードインサイト400aのエミュレートされた結果特性320を表示するGUI220cを示し、それによって、エミュレートされた結果特性320は、コードインサイト要求110に含めるために図4AのGUI220aを介して開発者202が選択した「ユーザコメント」の結果特性タイプ207に関連付けられる。図示された例では、エミュレートされた結果特性320は、ターゲットソースコード210のエミュレートされた、人間が生成したコメントを含む。したがって、開発者202は、レビューサイクル中にターゲットソースコード210について人間が生成したコメントがどのようなものである可能性が高いかを確認することができる。
図4Dは、図4BのGUI220bを使用して開発者204が送信したコードインサイト要求110に含まれるターゲットソースコード210の予測コード変形400bを含むコードインサイト400を表示するGUI220dを示す。ここで、予測コード変形400bは、コードインサイト要求110のツールタイプインジケータ205が、ソフトウェア開発ツール418がコード変形タイプのソフトウェア開発ツールに対応することを指定したため、ターゲットソースコード210について生成される。図示された例では、予測コード変形400bは、ターゲットソースコード210から解釈/コンパイルされた実行可能なコードを含む。図4Dはまた、コードインサイト400bのエミュレートされた結果特性320を表示するGUI220dを示し、それによって、エミュレートされた結果特性320は、コードインサイト要求110に含めるために図4BのGUI220bを介して開発者202によって選択された「ビルド結果」の結果特性タイプ207に関連付けられている。図示された例では、エミュレートされた結果特性320は、ターゲットソースコード210について「成功」というエミュレートされたビルド結果判定を提供する。したがって、開発者202は、ターゲットソースコード210のビルドが成功する可能性が高いかどうかを確認することができる。
図5は、コードインサイト400を生成する方法の動作の配置例を示すフローチャートである。動作502で、方法500は、データ処理ハードウェア144において、ソフトウェア開発ツール418をビルドするためにターゲットソースコード210を使用する開発者202に関連付けられた開発者デバイス204から、ターゲットソースコード210のコードインサイト400を要求するコードインサイト要求112を受信することを含む。コードインサイト要求112は、ターゲットソースコード210と、ソフトウェア開発ツール418がコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定するツールタイプインジケータ205とを含む。いくつかの例では、コードインサイト要求112はさらに、コードインサイト400に関連付けられた結果特性タイプ207を含む。これらの例では、結果特性タイプ207は、開発者202によって定義される。
動作504で、方法500は、データ処理ハードウェア144が、ツールタイプインジケータ205に基づいて機械学習モデル308を取得することを含む。機械学習モデル308は、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられた訓練ソースコード310で訓練される。
動作506で、方法500は、データ処理ハードウェア144が、機械学習モデル308を使用してターゲットソースコード210のコードインサイト400を生成することを含む。ターゲットソースコード210のコードインサイト400は、ツールタイプインジケータ205が、ソフトウェア開発ツール418がコードラベリングタイプのソフトウェア開発ツールからなることを指定する場合のターゲットソースコード210の予測ラベル400a、またはツールタイプインジケータ205が、ソフトウェア開発ツール418がコード変形タイプのソフトウェア開発ツールに対応することを指定する場合の訓練ソースコード310の予測コード変形400bのうちの1つを含む。訓練ソースコード310の予測ラベル400aは、ターゲットソースコードの複雑さの予測レベル、ターゲットソースコードの予測品質、ターゲットソースコードの予測テスト要件、またはターゲットソースコードの予測難易度評価のうちの少なくとも1つを含んでもよい。ターゲットソースコードの予測コード変形は、ターゲットソースコードの実行可能な、ターゲットソースコード内のビルドエラーを修正する更新済みのターゲットソースコード、ターゲットソースコードの改訂、またはターゲットソースコードを置換するための推奨される置換ソースコードの少なくとも1つを含んでもよい。
動作508で、方法500は、データ処理ハードウェア144が、コードインサイト400を開発者デバイス204に送信することを含む。コードインサイト400は、開発者デバイス204によって受信されると、開発者デバイス204上で実行されるグラフィカルユーザインターフェイス220に、開発者デバイス204の表示画面上にコードインサイト400を表示させる。
図6は、本明細書で説明するシステムおよび方法(たとえば、方法500)を実施するために使用され得るコンピューティングデバイス600の例を示す概略図である。コンピューティングデバイス600は、ラップトップ、デスクトップ、ワークステーション、パーソナルデジタルアシスタント、サーバ、ブレードサーバ、メインフレーム、および他の適切なコンピュータなどのさまざまな形態のデジタルコンピュータを表すことを意図している。ここに示された構成要素、それらの接続および関係、ならびにそれらの特徴は、例示に過ぎないことを意味しており、本明細書で説明および/または請求される発明の実装を制限するものでない。
コンピューティングデバイス600は、プロセッサ610(データ処理ハードウェアともいう)、メモリ620(メモリハードウェアともいう)、ストレージデバイス630、メモリ620および高速拡張ポート650に接続する高速インターフェイス/コントローラ640、ならびに低速バス670およびストレージデバイス630に接続する低速インターフェイス/コントローラ660を含む。構成要素610,620,630,640,650および660の各々は、各種バスを使用して相互接続され、共通のマザーボードに、または適宜他の態様で搭載することができる。プロセッサ610は、高速インターフェイス640に結合されたディスプレイ680などの外部入出力デバイスにグラフィカルユーザインターフェイス(GUI)のグラフィック情報を表示するために、メモリ620またはストレージデバイス630に格納された命令を含む、コンピューティングデバイス600内で実行するための命令を処理することが可能である。他の実装では、複数のプロセッサおよび/または複数のバスが、複数のメモリおよび複数のタイプのメモリと共に、適宜使用されてもよい。また、複数のコンピューティングデバイス600が接続され、各デバイスが必要な動作の一部を提供してもよい(たとえば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして)。
メモリ620は、コンピューティングデバイス600内の情報を非一時的に格納する。メモリ620は、コンピュータ読取可能媒体、揮発性メモリユニット(複数可)、または不揮発性メモリユニット(複数可)でもよい。非一時的なメモリ620は、コンピューティングデバイス600による使用のために、プログラム(たとえば、命令のシーケンス)またはデータ(たとえば、プログラム状態情報)を一時的または恒久的に格納するために使用される物理デバイスでもよい。不揮発性メモリの例には、フラッシュメモリおよびリードオンリーメモリ(ROM)/プログラマブルリードオンリーメモリ(PROM)/消去可能プログラマブルリードオンリーメモリ(EPROM)/電子的消去可能プログラマブルリードオンリーメモリ(EEPROM)(たとえば、ブートプログラムといった、ファームウェアに通常使用される)があるが、これらに限定されるわけではない。揮発性メモリの例としては、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、相変化メモリ(PCM)、およびディスクまたはテープがあるが、これらに限定されるわけではない。
ストレージデバイス630は、コンピューティングデバイス600のための大容量記憶装置を提供することができる。いくつかの実装では、ストレージデバイス630は、コンピュータ読取可能媒体である。さまざまな異なる実装において、ストレージデバイス630は、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置、またはテープ装置、フラッシュメモリもしくは他の同様の固体メモリ装置、または記憶領域ネットワークもしくは他の構成における装置を含む装置のアレイでもよい。別の実装では、コンピュータプログラム製品は、情報担体において有形に具現化される。コンピュータプログラム製品は、実行されると、上述したような1つ以上の方法を実行する命令を含む。情報担体は、メモリ620、ストレージデバイス630、もしくはプロセッサ610上のメモリなどの、コンピュータまたは機械読取可能媒体である。
高速コントローラ640は、コンピューティングデバイス600の帯域幅集約的な動作を管理し、低速コントローラ660は、より低い帯域幅集約的な動作を管理する。このような機能の割り当ては例示に過ぎない。いくつかの実装では、高速コントローラ640は、メモリ620、ディスプレイ680(たとえば、グラフィックプロセッサまたはアクセラレータを介して)、およびさまざまな拡張カード(図示せず)を受け付けることができる高速拡張ポート650に結合される。いくつかの実装では、低速コントローラ660は、ストレージデバイス630および低速拡張ポート690に結合される。さまざまな通信ポート(たとえば、USB、Bluetooth(登録商標)、イーサネット(登録商標)、無線イーサネット)を含み得る低速拡張ポート690は、キーボード、ポインティングデバイス、スキャナなどの1つ以上の入出力デバイス、またはスイッチもしくはルータなどのネットワークデバイスに、たとえばネットワークアダプタを介して結合されてもよい。
コンピューティングデバイス600は、図に示すように、多数の異なる形態で実装されてもよい。たとえば、標準的なサーバ600aとして、もしくはそのようなサーバ600aのグループ内で複数回、ラップトップコンピュータ600bとして、またはラックサーバシステム600cの一部として、実装されてもよい。
本明細書に記載されたシステムおよび技術のさまざまな実装は、デジタル電子および/または光回路、集積回路、特別に設計された特定用途向け集積回路(application specific integrated circuit:ASIC)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはそれらの組合わせで実現することが可能である。これらのさまざまな実装は、データおよび命令を記憶システムに対して送受信するように結合された、特殊用途または汎用用途であってもよい少なくとも1つのプログラマブルプロセッサ、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含むプログラマブルシステム上で実行可能および/または解釈可能な1つ以上のコンピュータプログラムにおける実装を含み得る。
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、またはコードとしても知られている)は、プログラマブルプロセッサ用の機械命令を含み、高レベルの手続き型および/またはオブジェクト指向プログラミング言語、および/またはアセンブリ/機械言語で実装され得る。本明細書で使用される場合、「機械読取可能媒体」および「コンピュータ読取可能媒体」という用語は、機械命令を機械読取可能信号として受信する機械読取可能媒体を含む、プログラマブルプロセッサに機械命令および/またはデータを提供するために使用される任意のコンピュータプログラム製品、非一時的なコンピュータ読取可能媒体、装置および/またはデバイス(たとえば、磁気ディスク、光ディスク、メモリ、プログラマブル論理デバイス(Programmable Logic Device:PLD)を指す。「機械読取可能信号」という用語は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用されるあらゆる信号を指す。
本明細書に記載された処理および論理フローは、1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルプロセッサによって実行することができ、入力データに対して動作し、出力を生成することによって、特徴を実行する。また、処理および論理フローは、特殊目的論理回路、たとえば、フィールドプログラマブルゲートアレイ(FPGA)またはASIC(特定用途向け集積回路)によって実行することも可能である。コンピュータプログラムの実行に適したプロセッサには、例として、汎用マイクロプロセッサと特殊目的マイクロプロセッサとの両方、および任意の種類のデジタルコンピュータの任意の1つ以上のプロセッサが含まれる。一般に、プロセッサは、読取り専用メモリまたはランダムアクセスメモリまたはその両方から、命令およびデータを受信することになる。コンピュータの本質的な要素は、命令を実行するためのプロセッサと、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置、たとえば、磁気ディスク、光磁気ディスク、もしくは光ディスクを備える、またはデータを格納するための1つ以上の大容量記憶装置、たとえば、磁気ディスク、光磁気ディスク、もしくは光ディスクに対するデータの受信、もしくは転送、もしくはその両方を行うように動作可能に結合されることになる。しかしながら、コンピュータは、そのようなデバイスを有する必要はない。コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能媒体は、例として、半導体メモリデバイス、たとえばEPROM,EEPROMおよびフラッシュメモリデバイス;磁気ディスク、たとえば内蔵ハードディスクまたは取外し可能ディスク;光磁気ディスク;ならびにCD ROMおよびDVD-ROMディスクなどのすべての形式の不揮発メモリ、媒体およびメモリ装置を含む。プロセッサとメモリとを、特殊目的論理回路によって補完する、またはその中に組込むことが可能である。
ユーザとの相互作用を提供するために、本開示の1つ以上の態様は、ユーザに情報を表示するための表示デバイス、たとえばCRT(陰極線管)、LCD(液晶ディスプレイ)モニタ、またはタッチスクリーンと、任意に、ユーザがコンピュータに入力を提供できるキーボードおよびポインティングデバイス、たとえばマウスまたはトラックボールを有するコンピュータ上で実施することができる。他の種類のデバイスも、ユーザとの相互作用を提供するために使用可能である。たとえば、ユーザに提供されるフィードバックは、視覚フィードバック、聴覚フィードバック、または触覚フィードバックなどの任意の形式の感覚フィードバックとすることができ、ユーザからの入力は、音響、音声、または触覚入力などの任意の形式で受信することができる。さらに、コンピュータは、ユーザが使用するデバイスに対して文書を送受信することによって、たとえば、ウェブブラウザから受信した要求に応答して、ユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。
多数の実装について説明した。それにもかかわらず、本開示の精神および範囲から逸脱することなく、さまざまな変更がなされ得ることが理解されよう。したがって、他の実装は、以下の特許請求の範囲内である。

Claims (28)

  1. 方法(500)であって、
    データ処理ハードウェア(144)において、ターゲットソースコード(210)のコードインサイト(400)を要求するコードインサイト要求(112)を、ソフトウェア開発ツール(418)をビルドするために前記ターゲットソースコード(210)を使用する開発者(202)に関連付けられた開発者デバイス(204)から受信することを備え、前記コードインサイト要求(112)は、
    前記ターゲットソースコード(210)と、
    前記ソフトウェア開発ツール(418)がコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定するツールタイプインジケータ(205)とを含み、前記方法はさらに、
    前記データ処理ハードウェア(144)が、前記ツールタイプインジケータ(205)に基づいて、前記コードラベリングタイプのソフトウェア開発ツールまたは前記コード変形タイプのソフトウェア開発ツールのうちの指定された前記1つに関連付けられた訓練ソースコード(310)で訓練された機械学習モデル(308)を取得することと、
    前記データ処理ハードウェアが、前記機械学習モデル(308)を使用して、前記ターゲットソースコード(210)の前記コードインサイト(400)を生成することとを備え、前記ターゲットソースコード(210)の前記コードインサイト(400)は、
    前記ツールタイプインジケータ(205)が、前記ソフトウェア開発ツール(418)が前記コードラベリングタイプのソフトウェア開発ツール(418)からなることを指定する場合の前記ターゲットソースコード(210)の予測ラベル(400a)、または
    前記ツールタイプインジケータ(205)が、前記ソフトウェア開発ツール(418)が前記コード変形タイプのソフトウェア開発ツールからなることを指定する場合の前記ターゲットソースコード(210)の予測コード変形のうちの1つを含み、前記方法はさらに、
    前記データ処理ハードウェア(144)が、前記コードインサイト(400)を前記開発者デバイス(204)に送信することを備え、前記コードインサイト(400)は、前記開発者デバイス(204)によって受信されると、前記開発者デバイス(204)で実行されているグラフィカルユーザインターフェイス(220)に、前記コードインサイト(400)を前記開発者デバイス(204)の表示画面に表示させることを備える、方法。
  2. 前記データ処理ハードウェア(144)が、前記機械学習モデル(308)への入力に適した前記ターゲットソースコード(210)の構文表現に対応するターゲット特徴(212)のセットを、前記ターゲットソースコード(210)から抽出することをさらに備え、
    前記機械学習モデル(308)は、
    前記ターゲット特徴(212)のセットを入力として受信し、
    前記ターゲットソースコード(210)の前記コードインサイト(400)を出力として生成するように構成されている、請求項1に記載の方法(500)。
  3. 前記ターゲットソースコード(210)の前記構文表現は、構文表現木を含む、請求項2に記載の方法(500)。
  4. 前記機械学習モデル(308)を取得することは、
    前記データ処理ハードウェア(144)と通信しているメモリハードウェア(146)に格納されているソースコードリポジトリ(315)から、前記コードラベリングタイプのソフトウェア開発ツールまたは前記コード変形タイプのソフトウェア開発ツールのうちの指定された前記1つに関連付けられた前記訓練ソースコード(310)を選択し、かつ
    機械学習モデル生成器(360)を使用して、選択された前記訓練ソースコード(310)で前記機械学習モデル(308)を訓練することによって、前記コードインサイト要求(110)を受信することに応答して、前記機械学習モデル(308)を生成することを含む、請求項1~3のいずれか1項に記載の方法(500)。
  5. 前記データ処理ハードウェア(144)が、前記機械学習モデル(308)を訓練するのに適した前記訓練ソースコード(310)の構文表現に対応する訓練特徴のセットを、選択された前記訓練ソースコード(310)から抽出することをさらに備える、請求項4に記載の方法(500)。
  6. 前記訓練ソースコード(310)の前記構文表現は、抽象構文木を含む、請求項5に記載の方法(500)。
  7. 前記コードインサイト要求(110)はさらに、前記コードインサイト(400)に関連付けられた、前記開発者によって定義された結果特性タイプ(207)を含み、
    前記ツールタイプインジケータ(205)に基づいて前記機械学習モデル(308)を取得することはさらに、前記結果特性タイプ(207)に基づき、
    前記機械学習モデル(308)を使用して、前記ターゲットソースコード(210)の前記コードインサイト(400)を生成することはさらに、前記機械学習モデル(308)を使用して、前記コードインサイト要求(110)の前記結果特性タイプ(207)に関連付けられた、前記コードインサイト(400)のエミュレートされた結果特性(320)を生成することを含む、請求項1~6のいずれか1項に記載の方法(500)。
  8. 前記データ処理ハードウェア(144)が、前記データ処理ハードウェア(144)と通信しているメモリハードウェア(146)に格納されているソースコードリポジトリ(315)から、前記コードインサイト要求(110)の前記結果特性タイプ(207)に関連付けられた対応する結果特性(320)とペアにされた前記訓練ソースコード(310)の訓練例(350)を識別することと、
    前記データ処理ハードウェア(144)が、前記機械学習モデル(308)を、前記対応する結果特性(320)とペアにされた前記訓練ソースコード(310)を含む前記訓練例(350)で訓練することとをさらに備える、請求項7に記載の方法(500)。
  9. 前記コードインサイト(400)の前記エミュレートされた結果特性(320)は、
    前記ターゲットソースコード(210)のエミュレートされたビルド結果、
    前記ターゲットソースコード(210)を実行するためのエミュレートされた経過時間、
    前記ターゲットソースコード(210)のエミュレートされたメタデータ、または
    前記ターゲットソースコード(210)のエミュレートされた、人間が生成したコメントのうちの1つを含む、請求項7に記載の方法(500)。
  10. 前記ターゲットソースコード(210)の前記予測コード変形(400b)が実行可能なコードを含む場合、前記データ処理ハードウェア(144)が、前記機械学習モデル(308)を、前記訓練ソースコード(310)をコンパイルまたは解釈することによって生じる対応する訓練実行可能なコードとペアにされた前記訓練ソースコード(310)を含む訓練例(350)で訓練することをさらに備える、請求項1~9のいずれか1項に記載の方法(500)。
  11. 前記機械学習モデル(308)を使用して、前記ターゲットソースコード(210)の前記コードインサイト(400)を生成することは、
    前記ターゲットソースコード(210)から抽出されるターゲット特徴(212)のセットを、特徴入力として受信するように構成された前記機械学習モデル(308)を使用して、前記ターゲットソースコード(210)のベクトル表現を生成することと、
    前記データ処理ハードウェア(144)と通信しているメモリハードウェア(146)に格納されている訓練ソースコード(310)スニペットのプールの類似スコアを求めることとを含み、前記類似スコアの各々は、対応する訓練ソースコード(310)スニペットに関連付けられており、かつ、前記ターゲットソースコード(210)の前記ベクトル表現と、前記対応する訓練コード(310)スニペットのプールのそれぞれのベクトル表現との類似レベルを示し、前記生成することはさらに、
    類似閾値を満たす類似スコアを有する前記訓練ソースコード(310)スニペットのプールから、1つ以上の訓練ソースコード(310)スニペットを、前記ターゲットソースコード(210)のミューテーションに対応するものとして識別することを含む、請求項1~10のいずれか1項に記載の方法(500)。
  12. 前記ターゲットソースコード(210)は、ターゲットコードベースからのターゲットソースコード(210)スニペットのペアを含み、
    前記機械学習モデル(308)を使用して、前記ターゲットソースコード(210)の前記コードインサイト(400)を生成することは、
    前記ターゲットソースコード(210)スニペットのペア内のターゲットソースコード(210)スニペットごとに、前記対応するターゲットソースコード(210)スニペットから抽出されるターゲット特徴(212)のセットを特徴(212)入力として受信するように構成された前記機械学習モデル(308)を使用して、前記対応するターゲットソースコード(210)スニペットのベクトル表現を生成することと、
    前記ベクトル表現に基づいて、前記ターゲットソースコード(210)スニペットのペアの間のベクトル空間距離を求めることと、
    前記ベクトル空間距離が距離閾値を満たす場合、前記ターゲットソースコード(210)スニペットのペアは互いの複製であると判断することとを含む、請求項1~11のいずれか1項に記載の方法(500)。
  13. 前記訓練ソースコード(310)の前記予測ラベルは、
    前記ターゲットソースコード(210)の複雑さの予測レベル、
    前記ターゲットソースコード(210)の予測品質、
    前記ターゲットソースコード(210)の予測テスト要件、または
    前記ターゲットソースコード(210)の予測難易度評価のうちの少なくとも1つを含む、請求項1~12のいずれか1項に記載の方法(500)。
  14. 前記ターゲットソースコード(210)の前記予測コード変形(400b)は、
    前記ターゲットソースコード(210)内のビルドエラーを修正する更新済みターゲットソースコード(210)、
    前記ターゲットソースコード(210)から解釈/コンパイルされた実行可能なコード、
    前記ターゲットソースコード(210)の改訂、または
    前記ターゲットソースコード(210)を置換するための推奨される置換ソースコード(310)のうちの少なくとも1つを含む、請求項1~13のいずれか1項に記載の方法(500)。
  15. システム(100)であって、
    データ処理ハードウェア(144)と、
    前記データ処理ハードウェア(144)と通信しており、かつ、前記データ処理ハードウェア(144)で実行されると、前記データ処理ハードウェア(144)に動作を行わせる命令を格納したメモリハードウェア(146)とを含み、前記動作は、
    ターゲットソースコード(210)のコードインサイト(400)を要求するコードインサイト要求(110)を、ソフトウェア開発ツール(418)をビルドするために前記ターゲットソースコード(210)を使用する開発者に関連付けられた開発者デバイス(204)から受信することを備え、前記コードインサイト要求(110)は、
    前記ターゲットソースコード(210)と、
    前記ソフトウェア開発ツール(418)がコードラベリングタイプのソフトウェア開発ツール(418)またはコード変形タイプのソフトウェア開発ツール(418)のうちの1つからなることを指定するツールタイプインジケータ(205)とを含み、前記動作はさらに、
    前記ツールタイプインジケータ(205)に基づいて、前記コードラベリングタイプのソフトウェア開発ツール(418)または前記コード変形タイプのソフトウェア開発ツール(418)のうちの指定された前記1つに関連付けられた訓練ソースコード(310)で訓練された機械学習モデル(308)を取得することと、
    前記機械学習モデル(308)を使用して、前記ターゲットソースコード(210)の前記コードインサイト(400)を生成することとを含み、前記ターゲットソースコード(210)の前記コードインサイト(400)は、
    前記ツールタイプインジケータ(205)が、前記ソフトウェア開発ツール(418)が前記コードラベリングタイプのソフトウェア開発ツール(418)からなることを指定する場合の前記ターゲットソースコード(210)の予測ラベル(400a)、または
    前記ツールタイプインジケータ(205)が、前記ソフトウェア開発ツール(418)が前記コード変形タイプのソフトウェア開発ツールからなることを指定する場合の前記ターゲットソースコード(210)の予測コード変形のうちの1つを含み、前記動作はさらに、
    前記コードインサイト(400)を前記開発者デバイス(204)に送信することを含み、前記コードインサイト(400)は、前記開発者デバイス(204)によって受信されると、前記開発者デバイス(204)で実行されているグラフィカルユーザインターフェイスに、前記コードインサイト(400)を前記開発者デバイス(204)のディスプレイに表示させることを含む、システム(100)。
  16. 前記動作はさらに、前記機械学習モデル(308)への入力に適した前記ターゲットソースコード(210)の構文表現に対応するターゲット特徴(212)のセットを、前記ターゲットソースコード(210)から抽出することを含み、
    前記機械学習モデル(308)は、
    前記ターゲット特徴(212)のセットを入力として受信し、
    前記ターゲットソースコード(210)の前記コードインサイト(400)を出力として生成するように構成されている、請求項15に記載のシステム(100)。
  17. 前記ターゲットソースコード(210)の前記構文表現は、構文表現木を含む、請求項16に記載のシステム(100)。
  18. 前記機械学習モデル(308)を取得することは、
    前記メモリハードウェア(146)に格納されているソースコードリポジトリ(315)から、前記コードラベリングタイプのソフトウェア開発ツール(418)または前記コード変形タイプのソフトウェア開発ツール(418)のうちの指定された前記1つに関連付けられた前記訓練ソースコード(310)を選択し、かつ
    機械学習モデル生成器(360)を使用して、選択された前記訓練ソースコード(310)で前記機械学習モデル(308)を訓練することによって、前記コードインサイト要求(110)を受信することに応答して、前記機械学習モデル(308)を生成することを含む、請求項15~17のいずれか1項に記載のシステム(100)。
  19. 前記動作はさらに、前記機械学習モデル(308)を訓練するのに適した前記訓練ソースコード(310)の構文表現に対応する訓練特徴のセットを、選択された前記訓練ソースコード(310)から抽出することを含む、請求項18に記載のシステム(100)。
  20. 前記訓練ソースコード(310)の前記構文表現は、抽象構文木を含む、請求項19に記載のシステム(100)。
  21. 前記コードインサイト要求(110)はさらに、前記コードインサイト(400)に関連付けられた、前記開発者によって定義された結果特性タイプ(207)を含み、
    前記ツールタイプインジケータ(205)に基づいて前記機械学習モデル(308)を取得することはさらに、前記結果特性タイプ(207)に基づき、
    前記機械学習モデル(308)を使用して、前記ターゲットソースコード(210)の前記コードインサイト(400)を生成することはさらに、前記機械学習モデル(308)を使用して、前記コードインサイト要求(110)の前記結果特性タイプ(207)に関連付けられた、エミュレートされた結果特性(320)を生成することを含む、請求項15~20のいずれか1項に記載のシステム(100)。
  22. 前記動作はさらに、
    前記メモリハードウェア(146)に格納されているソースコードリポジトリ(315)から、前記コードインサイト要求(110)の前記結果特性タイプ(207)に関連付けられた対応する結果特性(320)とペアにされた前記訓練ソースコード(310)の訓練例(350)を識別することと、
    前記機械学習モデル(308)を、前記対応する結果特性(320)とペアにされた前記訓練ソースコード(310)を含む前記訓練例(350)で訓練することとを含む、請求項15~21のいずれか1項に記載のシステム(100)。
  23. 前記コードインサイト(400)の前記エミュレートされた結果特性(320)は、
    前記ターゲットソースコード(210)のエミュレートされたビルド結果、
    前記ターゲットソースコード(210)を実行するためのエミュレートされた経過時間、
    前記ターゲットソースコード(210)のエミュレートされたメタデータ、または
    前記ターゲットソースコード(210)のエミュレートされた、人間が生成したコメントのうちの1つを含む、請求項22に記載のシステム(100)。
  24. 前記動作はさらに、前記ターゲットソースコード(210)の前記予測コード変形がコンパイルまたは解釈されたコードを含む場合、前記機械学習モデル(308)を、前記訓練ソースコード(310)をコンパイルまたは解釈することによって生じる対応する訓練実行可能なコードとペアにされた前記訓練ソースコード(310)を含む訓練例(350)で訓練することを含む、請求項15~23のいずれか1項に記載のシステム(100)。
  25. 前記機械学習モデル(308)を使用して、前記ターゲットソースコード(210)の前記コードインサイト(400)を生成することは、
    前記ターゲットソースコード(210)から抽出されるターゲット特徴(212)のセットを特徴(212)入力として受信するように構成された前記機械学習モデル(308)を使用して、前記ターゲットソースコード(210)のベクトル表現を生成することと、
    前記メモリハードウェア(146)に格納されている訓練ソースコード(310)スニペットのプールの類似スコアを求めることとを含み、各類似スコアは、対応する訓練コードスニペットに関連付けられており、かつ、前記ターゲットソースコード(210)の前記ベクトル表現と、前記対応する訓練コードスニペットのそれぞれのベクトル表現との類似レベルを示し、さらに、
    類似閾値を満たす類似スコアを有する前記訓練ソースコード(310)スニペットのプールから、1つ以上の訓練ソースコード(310)スニペットを、前記ターゲットソースコード(210)のミューテーションに対応するものとして識別することを含む、請求項15~24のいずれか1項に記載のシステム(100)。
  26. 前記ターゲットソースコード(210)は、ターゲットコードベースからのターゲットソースコード(210)スニペットのペアを含み、
    前記機械学習モデル(308)を使用して、前記ターゲットソースコード(210)の前記コードインサイト(400)を生成することは、
    前記ターゲットソースコード(210)スニペットのペア内のターゲットソースコード(210)スニペットごとに、前記対応するターゲットソースコード(210)スニペットから抽出されるターゲット特徴(212)のセットを特徴(212)入力として受信するように構成された前記機械学習モデル(308)を使用して、前記対応するターゲットソースコード(210)スニペットのベクトル表現を生成することと、
    前記ベクトル表現に基づいて、前記ターゲットソースコード(210)スニペットのペアの間のベクトル空間距離を求めることと、
    前記ベクトル空間距離が距離閾値を満たす場合、前記ターゲットソースコード(210)スニペットのペアは互いの複製であると判断することを含む、請求項15~25のいずれか1項に記載のシステム(100)。
  27. 前記訓練ソースコード(310)の前記予測ラベルは、
    前記ターゲットソースコード(210)の複雑さの予測レベル、
    前記ターゲットソースコード(210)の予測品質、
    前記ターゲットソースコード(210)の予測テスト要件、または
    前記ターゲットソースコード(210)の予測難易度評価のうちの少なくとも1つを含む、請求項15~26のいずれか1項に記載のシステム(100)。
  28. 前記ターゲットソースコード(210)の前記予測コード変形(400b)は、
    前記ターゲットソースコード(210)内のビルドエラーを修正する更新済みターゲットソースコード(210)、
    前記ターゲットソースコード(210)から解釈/コンパイルされた実行可能なコード、
    前記ターゲットソースコード(210)の改訂、または
    前記ターゲットソースコード(210)を置換するための推奨される置換ソースコードのうちの少なくとも1つを含む、請求項15~27のいずれか1項に記載のシステム(100)。
JP2022526211A 2019-11-06 2020-11-06 ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 Active JP7220833B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2023012833A JP7503671B2 (ja) 2019-11-06 2023-01-31 ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/676,032 2019-11-06
US16/676,032 US11150877B2 (en) 2019-11-06 2019-11-06 Automatically generating machine learning models for software tools that operate on source code
PCT/US2020/059277 WO2021092283A1 (en) 2019-11-06 2020-11-06 Automatically generating machine learning models for software tools that operate on source code

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2023012833A Division JP7503671B2 (ja) 2019-11-06 2023-01-31 ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成

Publications (2)

Publication Number Publication Date
JP2022546636A true JP2022546636A (ja) 2022-11-04
JP7220833B2 JP7220833B2 (ja) 2023-02-10

Family

ID=73646532

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2022526211A Active JP7220833B2 (ja) 2019-11-06 2020-11-06 ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成
JP2023012833A Active JP7503671B2 (ja) 2019-11-06 2023-01-31 ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2023012833A Active JP7503671B2 (ja) 2019-11-06 2023-01-31 ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成

Country Status (6)

Country Link
US (2) US11150877B2 (ja)
EP (1) EP4055474A1 (ja)
JP (2) JP7220833B2 (ja)
KR (2) KR102443654B1 (ja)
CN (1) CN114616543A (ja)
WO (1) WO2021092283A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11385940B2 (en) 2018-10-26 2022-07-12 EMC IP Holding Company LLC Multi-cloud framework for microservice-based applications
US11533317B2 (en) * 2019-09-30 2022-12-20 EMC IP Holding Company LLC Serverless application center for multi-cloud deployment of serverless applications
US11416245B2 (en) * 2019-12-04 2022-08-16 At&T Intellectual Property I, L.P. System and method for syntax comparison and analysis of software code
US11334347B2 (en) * 2020-05-04 2022-05-17 International Business Machines Corporation Cognitive build recovery from inter-code commit issues
US11593678B2 (en) * 2020-05-26 2023-02-28 Bank Of America Corporation Green artificial intelligence implementation
US11494285B1 (en) * 2020-09-30 2022-11-08 Amazon Technologies, Inc. Static code analysis tool and configuration selection via codebase analysis
EP4174639A1 (en) * 2021-06-22 2023-05-03 Beijing Baidu Netcom Science Technology Co., Ltd. Auxiliary processing method and device for software development, storage medium and program product
US12008365B2 (en) * 2021-06-28 2024-06-11 Jpmorgan Chase Bank , N.A. Systems and method for automated code analysis and tagging
KR102519639B1 (ko) * 2021-06-30 2023-04-06 삼성에스디에스 주식회사 코드 점검 인터페이스 제공 방법, 그리고 이를 구현하기 위한 장치
CN113741964A (zh) * 2021-08-01 2021-12-03 北京工业大学 一种面向代码可读性评估的数据增强方法
US20230185715A1 (en) * 2021-12-13 2023-06-15 Relativity Oda Llc Queue optimization via predicitve caching in cloud computing
US11847436B2 (en) * 2022-01-25 2023-12-19 Hewlett Packard Enterprise Development Lp Machine learning (ML) model-based compiler
CN115774565B (zh) * 2023-02-10 2023-04-18 成都数联云算科技有限公司 一种单代码仓库建设方法及系统及装置及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006338399A (ja) * 2005-06-02 2006-12-14 Canon Inc プログラム開発装置、プログラム開発ソフトウェア及び記憶媒体
CN109739494A (zh) * 2018-12-10 2019-05-10 复旦大学 一种基于Tree-LSTM的API使用代码生成式推荐方法
US20190272171A1 (en) * 2018-03-02 2019-09-05 Microsoft Technology Licensing, Llc Displaying results of a codebase analysis service

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003263255A (ja) * 2002-03-11 2003-09-19 Fujitsu Ltd 通信を行うためのプログラム
US7188345B2 (en) * 2003-03-19 2007-03-06 International Business Machines Corporation Installation of data-driven business integration adapters
US8775526B2 (en) * 2006-01-16 2014-07-08 Zlango Ltd. Iconic communication
US20080295085A1 (en) * 2007-05-25 2008-11-27 Microsoft Corporation Integrated code review tool
US9286063B2 (en) * 2012-02-22 2016-03-15 Veracode, Inc. Methods and systems for providing feedback and suggested programming methods
US9201646B2 (en) * 2013-01-05 2015-12-01 Vmware, Inc. Automatic code review and code reviewer recommendation
US9904672B2 (en) * 2015-06-30 2018-02-27 Facebook, Inc. Machine-translation based corrections
WO2017082906A1 (en) * 2015-11-12 2017-05-18 Hewlett Packard Enterprise Development Lp Classification models for binary code data
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
US10838849B2 (en) * 2016-03-08 2020-11-17 International Business Machines Corporation Analyzing software test failures using natural language processing and machine learning
WO2017165712A1 (en) * 2016-03-23 2017-09-28 FogHorn Systems, Inc. Composition of pattern-driven reactions in real-time dataflow programming
US10282275B2 (en) * 2016-09-22 2019-05-07 Microsoft Technology Licensing, Llc Method and system for managing code
US20180150742A1 (en) * 2016-11-28 2018-05-31 Microsoft Technology Licensing, Llc. Source code bug prediction
US11205103B2 (en) * 2016-12-09 2021-12-21 The Research Foundation for the State University Semisupervised autoencoder for sentiment analysis
US10310821B2 (en) * 2017-06-03 2019-06-04 Apple Inc. Integration of learning models into a software development system
US11720804B2 (en) * 2018-01-21 2023-08-08 Microsoft Technology Licensing, Llc. Data-driven automatic code review
US11188323B2 (en) * 2018-05-10 2021-11-30 Microsoft Technology Licensing, Llc Coding output
US11436056B2 (en) * 2018-07-19 2022-09-06 EMC IP Holding Company LLC Allocation of shared computing resources using source code feature extraction and clustering-based training of machine learning models
US10831448B2 (en) * 2018-08-30 2020-11-10 Accenture Global Solutions Limited Automated process analysis and automation implementation
US11501191B2 (en) * 2018-09-21 2022-11-15 International Business Machines Corporation Recommending machine learning models and source codes for input datasets
US10725748B2 (en) * 2018-11-19 2020-07-28 Microsoft Technology Licensing, Llc Extracting program features for assisting software development
US11157272B2 (en) * 2019-04-23 2021-10-26 Microsoft Technology Licensing, Llc. Automatic identification of appropriate code reviewers using machine learning
US20200410390A1 (en) * 2019-06-26 2020-12-31 Microsoft Technology Licensing, Llc. Machine learning retraining
US11243746B2 (en) * 2019-07-01 2022-02-08 X Development Llc Learning and using programming styles

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006338399A (ja) * 2005-06-02 2006-12-14 Canon Inc プログラム開発装置、プログラム開発ソフトウェア及び記憶媒体
US20190272171A1 (en) * 2018-03-02 2019-09-05 Microsoft Technology Licensing, Llc Displaying results of a codebase analysis service
CN109739494A (zh) * 2018-12-10 2019-05-10 复旦大学 一种基于Tree-LSTM的API使用代码生成式推荐方法

Also Published As

Publication number Publication date
KR102443654B1 (ko) 2022-09-15
US11977859B2 (en) 2024-05-07
US20220027134A1 (en) 2022-01-27
US11150877B2 (en) 2021-10-19
JP7220833B2 (ja) 2023-02-10
KR20220080002A (ko) 2022-06-14
JP2023065366A (ja) 2023-05-12
WO2021092283A1 (en) 2021-05-14
US20210132915A1 (en) 2021-05-06
KR20220127376A (ko) 2022-09-19
CN114616543A (zh) 2022-06-10
EP4055474A1 (en) 2022-09-14
JP7503671B2 (ja) 2024-06-20

Similar Documents

Publication Publication Date Title
JP7220833B2 (ja) ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成
AU2017327823B2 (en) Test case generator built into data-integration workflow editor
US5729746A (en) Computerized interactive tool for developing a software product that provides convergent metrics for estimating the final size of the product throughout the development process using the life-cycle model
US11762717B2 (en) Automatically generating testing code for a software application
US9141344B2 (en) Hover help support for application source code
Trubiani et al. Performance issues? Hey DevOps, mind the uncertainty
Santos et al. Metrics focused on usability ISO 9126 based
Venkatesh et al. Enhancing comprehension and navigation in Jupyter notebooks with static analysis
Zhao et al. Qchecker: Detecting bugs in quantum programs via static analysis
Koyya et al. Feedback for Programming Assignments Using Software‐Metrics and Reference Code
Yin et al. Automatic learning path recommendation for open source projects using deep learning on knowledge graphs
Storer et al. Behave nicely! automatic generation of code for behaviour driven development test suites
Benvenuti et al. Modeling and Assessing User Interaction in Big Data Visualization Systems
CN113051262B (zh) 一种数据质检方法、装置、设备及存储介质
JP2023183447A (ja) 書換プログラム、書換方法および情報処理装置
Huang et al. Context-aware bug reproduction for mobile apps
Alam AI-HUB 2.0 PROJECT REPORT: Application Of Large Language
Rani et al. Web Based Issue Tracker for System Development
Rodrigues et al. BPM2Text: A language independent framework for Business Process Models to Natural Language Text
Sendanayaka Natural Language based Test Automation Model for Web Applications
Jamshidi et al. Performance Issues? Hey DevOps, Mind the Uncertainty!
Vostokov What AI and Machine Learning Can Do for Python Debugging
Bob et al. Behave Nicely! Automatic Generation of Code for Behaviour Driven Development Test Suites
JP2023167588A (ja) 判定装置、判定方法および判定プログラム
KR20230044380A (ko) 코드 점검 인터페이스 제공 방법, 그리고 이를 구현하기 위한 장치

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220916

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220916

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20220916

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230110

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230131

R150 Certificate of patent or registration of utility model

Ref document number: 7220833

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150