IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

特許7503671ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成
<>
  • 特許-ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 図1
  • 特許-ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 図2
  • 特許-ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 図3
  • 特許-ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 図4A
  • 特許-ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 図4B
  • 特許-ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 図4C
  • 特許-ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 図4D
  • 特許-ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 図5
  • 特許-ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-12
(45)【発行日】2024-06-20
(54)【発明の名称】ソースコード上で動作するソフトウェアツールのための機械学習モデルの自動生成
(51)【国際特許分類】
   G06F 8/35 20180101AFI20240613BHJP
   G06N 20/00 20190101ALI20240613BHJP
【FI】
G06F8/35
G06N20/00 130
【請求項の数】 18
【外国語出願】
(21)【出願番号】P 2023012833
(22)【出願日】2023-01-31
(62)【分割の表示】P 2022526211の分割
【原出願日】2020-11-06
(65)【公開番号】P2023065366
(43)【公開日】2023-05-12
【審査請求日】2023-03-07
(31)【優先権主張番号】16/676,032
(32)【優先日】2019-11-06
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】イバンコビッチ,マルコ
(72)【発明者】
【氏名】ヤンコビッチ,ベドラナ
【審査官】山本 俊介
(56)【参考文献】
【文献】米国特許出願公開第2019/0228319(US,A1)
【文献】米国特許出願公開第2019/0272171(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00- 8/77
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
データ処理ハードウェアによって実行されると前記データ処理ハードウェアに動作を実行させる、コンピュータによって実施される方法であって、前記動作は、
開発者デバイスから、ソフトウェア開発ツールをビルドするように構成されたターゲットソースコードに関連するユーザコメントを要求する要求を受信することと、
前記データ処理ハードウェアと通信しているメモリハードウェアに格納されているソースコードリポジトリから、前記ターゲットソースコードを取得することと、
訓練ソースコードで訓練された機械学習モデルを取得することと、
前記機械学習モデルを使用して、前記ターゲットソースコードのコードレビューから生じるであろうユーザコメントをエミュレートする、前記ターゲットソースコード用のエミュレートされた人間が生成したコメントを生成することと、
前記エミュレートされた人間が生成したコメントを前記開発者デバイスに送信することとを含み、
前記要求は、ツールタイプインジケータが、前記ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定することを含む、方法。
【請求項2】
前記エミュレートされた人間が生成したコメントは、前記ターゲットソースコードを置換するための推奨される置換ソースコードを含む、請求項1に記載の方法。
【請求項3】
前記訓練ソースコードは、前記コードラベリングタイプのソフトウェア開発ツールまたは前記コード変形タイプのソフトウェア開発ツールのうちの指定された前記1つに関連付けられている、請求項に記載の方法。
【請求項4】
前記エミュレートされた人間が生成したコメントは、前記開発者デバイスによって受信されると、前記開発者デバイスで実行されているグラフィカルユーザインターフェイスに、前記開発者デバイスの表示画面に前記エミュレートされた人間が生成したコメントを表示させる、請求項1~3のいずれか一項に記載の方法。
【請求項5】
前記ターゲットソースコードは、ターゲットコードベースからのターゲットソースコードスニペットのペアを含む、請求項1~4のいずれか一項に記載の方法。
【請求項6】
前記エミュレートされた人間が生成したコメントを生成することは、
前記ターゲットソースコードスニペットのペア内の対応するターゲットソースコードスニペットごとに、前記対応するターゲットソースコードスニペットから抽出されるターゲット特徴のセットを特徴入力として受信するように構成された前記機械学習モデルを使用して、前記対応するターゲットソースコードスニペットのベクトル表現を生成することと、
前記ベクトル表現に基づいて、前記ターゲットソースコードスニペットのペアの間のベクトル空間距離を求めることと、
前記ベクトル空間距離が距離閾値を満たす場合、前記ターゲットソースコードスニペットのペアは互いの複製であると判断することとを含む、請求項5に記載の方法。
【請求項7】
前記ターゲットソースコードの構文表現は、抽象構文木を含む、請求項1~6のいずれか一項に記載の方法。
【請求項8】
前記機械学習モデルを取得することは、前記要求を受信することに応答して、前記機械学習モデルを生成することを含む、請求項1~7のいずれか一項に記載の方法。
【請求項9】
前記機械学習モデルを生成することは、
前記データ処理ハードウェアと通信しているメモリハードウェアに格納されている第2のソースコードリポジトリから、前記訓練ソースコードを選択することと、
機械学習モデル生成器を使用して、選択された前記訓練ソースコードで前記機械学習モデルを訓練することとを含む、請求項8に記載の方法。
【請求項10】
システムであって、
データ処理ハードウェアと、
前記データ処理ハードウェアと通信しており、かつ、前記データ処理ハードウェアで実行されると、前記データ処理ハードウェアに動作を行わせる命令を格納したメモリハードウェアとを含み、前記動作は、
開発者デバイスから、ソフトウェア開発ツールをビルドするように構成されたターゲットソースコードに関連するユーザコメントを要求する要求を受信することと、
前記データ処理ハードウェアと通信しているメモリハードウェアに格納されているソースコードリポジトリから、前記ターゲットソースコードを取得することと、
訓練ソースコードで訓練された機械学習モデルを取得することと、
前記機械学習モデルを使用して、前記ターゲットソースコードのコードレビューから生じるであろうユーザコメントをエミュレートする、前記ターゲットソースコード用のエミュレートされた人間が生成したコメントを生成することと、
前記エミュレートされた人間が生成したコメントを前記開発者デバイスに送信することとを含み、
前記要求は、ツールタイプインジケータが、前記ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定することを含む、システム
【請求項11】
前記エミュレートされた人間が生成したコメントは、前記ターゲットソースコードを置換するための推奨される置換ソースコードを含む、請求項10に記載のシステム。
【請求項12】
前記訓練ソースコードは、前記コードラベリングタイプのソフトウェア開発ツールまたは前記コード変形タイプのソフトウェア開発ツールのうちの指定された前記1つに関連付けられている、請求項10に記載のシステム。
【請求項13】
前記エミュレートされた人間が生成したコメントは、前記開発者デバイスによって受信されると、前記開発者デバイスで実行されているグラフィカルユーザインターフェイスに、前記開発者デバイスの表示画面に前記エミュレートされた人間が生成したコメントを表示させる、請求項10~12のいずれか一項に記載のシステム。
【請求項14】
前記ターゲットソースコードは、ターゲットコードベースからのターゲットソースコードスニペットのペアを含む、請求項10~13のいずれか一項に記載のシステム。
【請求項15】
前記エミュレートされた人間が生成したコメントを生成することは、
前記ターゲットソースコードスニペットのペア内の対応するターゲットソースコードスニペットごとに、前記対応するターゲットソースコードスニペットから抽出されるターゲット特徴のセットを特徴入力として受信するように構成された前記機械学習モデルを使用して、前記対応するターゲットソースコードスニペットのベクトル表現を生成することと、
前記ベクトル表現に基づいて、前記ターゲットソースコードスニペットのペアの間のベクトル空間距離を求めることと、
前記ベクトル空間距離が距離閾値を満たす場合、前記ターゲットソースコードスニペットのペアは互いの複製であると判断することとを含む、請求項14に記載のシステム。
【請求項16】
前記ターゲットソースコードの構文表現は、抽象構文木を含む、請求項10~15のいずれか一項に記載のシステム。
【請求項17】
前記機械学習モデルを取得することは、前記要求を受信することに応答して、前記機械学習モデルを生成することを含む、請求項10~16のいずれか一項に記載のシステム。
【請求項18】
前記機械学習モデルを生成することは、
前記データ処理ハードウェアと通信しているメモリハードウェアに格納されている第2のソースコードリポジトリから、前記訓練ソースコードを選択することと、
機械学習モデル生成器を使用して、選択された前記訓練ソースコードで前記機械学習モデルを訓練することとを含む、請求項17に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本開示は、ソースコード上で動作するソフトウェアツールのための機械学習モデルの生成に関する。
【背景技術】
【0002】
背景
プログラミングツールまたはソフトウェア開発ツールは、ソフトウェア開発者が他のプログラムおよびアプリケーションを、作成、デバッグ、保守、またはその他の態様ではサポートするために使用するコンピュータプログラムである。この用語は通常、物理的なオブジェクトを修正するために複数のハンドツールを使用するのと同じように、タスクを達成するために組合わせることができる比較的単純なプログラムを指す。最も基本的なツールは、ソースコードエディタおよびコンパイラまたはインタープリタである。その他のツールは、言語、開発方法および個々のエンジニアに応じて多かれ少なかれ使用され、デバッガ、プロファイラ、または静的プログラムアナライザのように、個別のタスクに使用されることがよくある。静的プログラム分析は、実際にプログラムを実行せずに行われるコンピュータソフトウェアの分析である。ほとんどの場合、分析はあるバージョンのソースコードに対して行われる。ソフトウェア開発ツールは、たとえばコマンドラインから別個に実行される個別のプログラムの場合もあれば、統合開発環境(integrated development environment:IDE)と呼ばれることもある単一の大きなプログラムの一部である場合もある。
【0003】
コードベース(codebaseまたはcode base)は、特定のソフトウェアシステム、アプリケーション、またはソフトウェアコンポーネントをビルドするために使用される、人間が書いた、および機械が生成したソースコードスニペットの集合である。コードベースは通常、ソースコードリポジトリに格納される。コードベースの改訂は、バージョンコントロールシステムによって管理されることがある。特定のソフトウェア開発ツールをビルドするためのコードベースを作成するのに、専門のソフトウェアエンジニアが数ヶ月かかる場合が多い。機械学習モデルは、人間が書いたソースコードスニペットの誤りを自動的に識別することによって、これらのソフトウェア開発ツールのビルドプロセスを迅速化するのに役立つ可能性がある。しかしながら、このような機械学習モデルは、ビルドされるソフトウェア開発ツールに特化したものであり、実際にソフトウェア開発ツールをビルドする異なるソフトウェアエンジニアが使用できるように機械学習モデルを作成するためには、専門のソフトウェアエンジニアが必要である。
【発明の概要】
【発明が解決しようとする課題】
【0004】
概要
本開示のある態様は、コードインサイトを生成するための方法を提供する。方法は、データ処理ハードウェアにおいて、ターゲットソースコードのコードインサイトを要求するコードインサイト要求を、ソフトウェア開発ツールをビルドするためにターゲットソースコードを使用する開発者に関連付けられた開発者デバイスから受信することを備える。コードインサイト要求は、ターゲットソースコードと、ツールタイプインジケータとを含む。ツールタイプインジケータは、ソフトウェア開発ツールが、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定する。方法はさらに、データ処理ハードウェアが、ツールタイプイン
ジケータに基づいて、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられた訓練ソースコードで訓練された機械学習モデルを取得することを備える。方法はさらに、データ処理ハードウェアが、機械学習モデルを使用して、ターゲットソースコードのコードインサイトを生成することを備える。ツールタイプインジケータが、ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールからなることを指定する場合、ターゲットソースコードのコードインサイトは、ターゲットソースコードの予測ラベルを含む。ツールタイプインジケータが、ソフトウェア開発ツールがコード変形タイプのソフトウェア開発ツールからなることを指定する場合、ターゲットソースコードのコードインサイトは、訓練ソースコードの予測コード変形を含む。方法はさらに、データ処理ハードウェアが、コードインサイトを開発者デバイスに送信することを備え、コードインサイトは、開発者デバイスによって受信されると、開発者デバイスで実行されているグラフィカルユーザインターフェイスに、コードインサイトを開発者デバイスの表示画面に表示させる。
【0005】
本開示の実装は、以下に記載の任意の特徴のうちの1つ以上を含み得る。いくつかの実装では、方法はさらに、データ処理ハードウェアが、機械学習モデルへの入力に適したターゲットソースコードの構文表現に対応するターゲット特徴のセットを、ターゲットソースコードから抽出することを備える。これらの実装では、機械学習モデルは、ターゲット特徴のセットを入力として受信し、ターゲットソースコードのコードインサイトを出力として生成するように構成されている。ターゲットソースコードの構文表現は、構文表現木(Abstract Syntax Tree:AST)を含み得る。いくつかの例では、機械学習モデルを取得することは、機械学習モデル生成器を使用して、選択された訓練ソースコードで機械学習モデルを訓練することによってコードインサイト要求を受信することに応答して、機械学習モデルを生成することを含む。訓練ソースコードは、データ処理ハードウェアと通信しているメモリハードウェアに格納されているソースコードリポジトリから選択可能であり、訓練ソースコードは、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられている。いくつかの実装では、方法はさらに、データ処理ハードウェアが、機械学習モデルを訓練するのに適した訓練ソースコードの構文表現に対応する訓練特徴のセットを、選択された訓練ソースコードから抽出することを備える。訓練ソースコードの構文表現は、抽象構文木(AST)を含み得る。
【0006】
いくつかの実装では、コードインサイト要求はさらに、コードインサイトに関連付けられた、開発者によって定義された結果特性タイプを含み、ツールタイプインジケータに基づいて機械学習モデルを取得することはさらに、結果特性タイプに基づいてもよい。これらの実装では、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することはさらに、機械学習モデルを使用して、コードインサイト要求の結果特性タイプに関連付けられた、コードインサイトのエミュレートされた結果特性を生成することを含み得る。方法はさらに、データ処理ハードウェアが、データ処理ハードウェアと通信しているメモリハードウェアに格納されているソースコードリポジトリから、コードインサイト要求の結果特性タイプに関連付けられた対応する結果特性とペアにされた訓練ソースコードの訓練例を識別することを備え得る。方法はさらに、データ処理ハードウェアが、機械学習モデルを、対応する結果特性とペアにされた訓練ソースコードを含む訓練例で訓練することを備え得る。
【0007】
コードインサイトのエミュレートされた結果特性は、ターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされたビルド結果、ターゲットソースコードもしくはターゲットソースコードの変形を実行するためのエミュレートされた経過時間、ターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされたメタデータ、またはターゲットソースコードもしくはターゲットソースコードの変形のエ
ミュレートされた、人間が生成したコメントのうちの1つを含み得る。方法はさらに、ターゲットソースコードの予測コード変形が実行可能なコードを含む場合、データ処理ハードウェアが、機械学習モデルを、訓練ソースコードをコンパイルまたは解釈することによって生じる対応する訓練実行可能なコードとペアにされた訓練ソースコードを含む訓練例で訓練することを備え得る。いくつかの実装では、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することは、ターゲットソースコードから抽出されるターゲット特徴のセットを特徴入力として受信するように構成された機械学習モデルを使用して、ターゲットソースコードのベクトル表現を生成することと、データ処理ハードウェアと通信しているメモリハードウェアに格納されている訓練ソースコードスニペットのプールの類似スコアを求めることとを含み、類似スコアの各々は、対応する訓練コードスニペットに関連付けられており、かつ、ターゲットソースコードのベクトル表現と、対応する訓練コードスニペットのそれぞれのベクトル表現との類似レベルを示し、生成することはさらに、類似閾値を満たす類似スコアを有する訓練ソースコードスニペットのプールから、1つ以上の訓練ソースコードスニペットを、ターゲットソースコードのミューテーションに対応するものとして識別することを含む。
【0008】
ターゲットソースコードは、ターゲットコードベースからのターゲットソースコードスニペットのペアを含んでもよく、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することは、ターゲットソースコードスニペットのペア内のターゲットソースコードスニペットごとに、対応するターゲットソースコードスニペットから抽出されるターゲット特徴のセットを特徴入力として受信するように構成された機械学習モデルを使用して、対応するターゲットソースコードスニペットのベクトル表現を生成することと、ベクトル表現に基づいて、ターゲットソースコードスニペットのペアの間のベクトル空間距離を求めることと、ベクトル空間距離が距離閾値を満たす場合、ターゲットソースコードスニペットのペアは互いの複製であると判断することとを含み得る。訓練ソースコードの予測ラベルは、ターゲットソースコードの複雑さの予測レベル、ターゲットソースコードの予測品質、ターゲットソースコードの予測テスト要件、またはターゲットソースコードの予測難易度評価のうちの少なくとも1つを含み得る。ターゲットソースコードの予測コード変形は、ターゲットソースコード内のビルドエラーを修正する更新済みターゲットソースコード、ターゲットソースコードの実行可能なコード、ターゲットソースコードの改訂、またはターゲットソースコードを置換するための推奨される置換ソースコードのうちの少なくとも1つを含み得る。
【0009】
本開示の他の態様は、コードインサイトを生成するためのシステムを提供する。システムは、データ処理ハードウェアと、データ処理ハードウェアと通信しており、データ処理ハードウェアで実行されると、データ処理ハードウェアに動作を実行させる命令を格納したメモリハードウェアとを備える。動作は、ターゲットソースコードのコードインサイトを要求するコードインサイト要求を、ソフトウェア開発ツールをビルドするためにターゲットソースコードを使用する開発者に関連付けられた開発者デバイスから受信することを含む。コードインサイト要求は、ターゲットソースコードと、ツールタイプインジケータとを含む。ツールタイプインジケータは、ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定する。動作はさらに、ツールタイプインジケータに基づいて、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられた訓練ソースコードで訓練された機械学習モデルを取得することを含む。動作はさらに、機械学習モデルを使用して、ターゲットソースコードのコードインサイトを生成することを含む。ツールタイプインジケータが、ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールからなることを指定する場合、ターゲットソースコードのコードインサイトは、ターゲットソースコードの予測ラベルを含む。ツールタイプインジケータが、ソフトウェア開発ツールが
コード変形タイプのソフトウェア開発ツールからなることを指定する場合、ターゲットソースコードのコードインサイトは、訓練ソースコードの予測コード変形を含む。動作はさらに、コードインサイトを開発者デバイスに送信することを含み、コードインサイトは、開発者デバイスによって受信されると、開発者デバイスで実行されているグラフィカルユーザインターフェイスに、コードインサイトを開発者デバイスの表示画面に表示させることを含む。
【0010】
本開示の実装は、以下の任意の特徴のうちの1つ以上を含み得る。いくつかの実装では、動作はさらに、機械学習モデルへの入力に適したターゲットソースコードの構文表現に対応するターゲット特徴のセットを、ターゲットソースコードから抽出することを含む。これらの実装では、機械学習モデルは、ターゲット特徴のセットを入力として受信し、ターゲットソースコードのコードインサイトを出力として生成するように構成されている。ターゲットソースコードの構文表現は、構文表現木(AST)を含み得る。いくつかの例では、機械学習モデルを取得することは、機械学習モデル生成器を使用して、選択された訓練ソースコードで機械学習モデルを訓練することによってコードインサイト要求を受信することに応答して、機械学習モデルを生成することを含む。訓練ソースコードは、データ処理ハードウェアと通信しているメモリハードウェアに格納されているソースコードリポジトリから選択可能であり、訓練ソースコードは、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられている。いくつかの実装では、動作はさらに、機械学習モデルを訓練するのに適した訓練ソースコードの構文表現に対応する訓練特徴のセットを、選択された訓練ソースコードから抽出することを含む。訓練ソースコードの構文表現は、抽象構文木(AST)を含み得る。
【0011】
いくつかの実装では、コードインサイト要求はさらに、コードインサイトに関連付けられた、開発者によって定義された結果特性タイプを含み、ツールタイプインジケータに基づいて機械学習モデルを取得することはさらに、結果特性タイプに基づく。これらの実装では、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することはさらに、機械学習モデルを使用して、コードインサイト要求の結果特性タイプに関連付けられた、エミュレートされた結果特性を生成することを含み得る。動作はさらに、メモリハードウェアに格納されているソースコードリポジトリから、コードインサイト要求の結果特性タイプに関連付けられた対応する結果特性とペアにされた訓練ソースコードの訓練例を識別することを含み得る。動作はさらに、機械学習モデルを、対応する結果特性とペアにされた訓練ソースコードを含む訓練例で訓練することを含み得る。
【0012】
コードインサイトのエミュレートされた結果特性は、ターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされたビルド結果、ターゲットソースコードもしくはターゲットソースコードの変形を実行するためのエミュレートされた経過時間、ターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされたメタデータ、またはターゲットソースコードもしくはターゲットソースコードの変形のエミュレートされた、人間が生成したコメントのうちの1つを含み得る。動作はさらに、ターゲットソースコードの予測コード変形が実行可能なコードを含む場合、機械学習モデルを、訓練ソースコードをコンパイルまたは解釈することによって生じる対応する訓練実行可能なコードとペアにされた訓練ソースコードを含む訓練例で訓練することを含み得る。いくつかの実装では、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することは、ターゲットソースコードから抽出されるターゲット特徴のセットを特徴入力として受信するように構成された機械学習モデルを使用して、ターゲットソースコードのベクトル表現を生成することと、メモリハードウェアに格納されている訓練ソースコードスニペットのプールの類似スコアを求めることとを含み、類似スコアの各々は、対応する訓練コードスニペットに関連付けられており、かつ、ターゲットソースコード
のベクトル表現と、対応する訓練コードスニペットのそれぞれのベクトル表現との類似レベルを示し、さらに、類似閾値を満たす類似スコアを有する訓練ソースコードスニペットのプールから、1つ以上の訓練ソースコードスニペットを、ターゲットソースコードのミューテーションに対応するものとして識別することを含む。
【0013】
ターゲットソースコードは、ターゲットコードベースからのターゲットソースコードスニペットのペアを含んでもよく、機械学習モデルを使用してターゲットソースコードのコードインサイトを生成することは、ターゲットソースコードスニペットのペア内のターゲットソースコードスニペットごとに、対応するターゲットソースコードスニペットから抽出されるターゲット特徴のセットを特徴入力として受信するように構成された機械学習モデルを使用して、対応するターゲットソースコードスニペットのベクトル表現を生成することと、ベクトル表現に基づいて、ターゲットソースコードスニペットのペアの間のベクトル空間距離を求めることと、ベクトル空間距離が距離閾値を満たす場合、ターゲットソースコードスニペットのペアは互いの複製であると判断することとを含み得る。訓練ソースコードの予測ラベルは、ターゲットソースコードの複雑さの予測レベル、ターゲットソースコードの予測品質、ターゲットソースコードの予測テスト要件、またはターゲットソースコードの予測難易度評価のうちの少なくとも1つを含み得る。ターゲットソースコードの予測コード変形は、ターゲットソースコード内のビルドエラーを修正する更新済みターゲットソースコード、ターゲットソースコードの実行可能なコード、ターゲットソースコードの改訂、またはターゲットソースコードを置換するための推奨される置換ソースコードのうちの少なくとも1つを含み得る。
【0014】
本開示の1つ以上の実装は、添付の図面および以下の説明に詳細に記載されている。他の態様、特性、および利点は、説明および図面、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0015】
図1】ソフトウェア開発ツールで使用される機械学習モデルを訓練するための環境の例を示す概略図である。
図2】ターゲットソースコードから抽出されるターゲット特徴のセットの例を示す概略図である。
図3】ソフトウェア開発ツールの機械学習モデルの訓練の例を示す模式図である。
図4A】ソフトウェア開発に用いられる機械学習モデルを実行する例を示す概略図である。
図4B】ソフトウェア開発に用いられる機械学習モデルを実行する例を示す概略図である。
図4C】ソフトウェア開発に用いられる機械学習モデルを実行する例を示す概略図である。
図4D】ソフトウェア開発に用いられる機械学習モデルを実行する例を示す概略図である。
図5】機械学習モデルをターゲットソースコードに適用する方法の動作の配置例を示す図である。
図6】例示的なコンピューティングデバイスを示す概略図である。
【発明を実施するための形態】
【0016】
図面中の同様の符号は、同様の要素を示す。
詳細な説明
本開示の態様は、ソフトウェア開発ツールの機械学習モデルに関する。ソフトウェア開発者は、ソフトウェア開発ツールを使用して、ソフトウェアアプリケーション、ウェブサイト、または他のソフトウェアシステムもしくはコンポーネントを、作成、デバッグ、維
持、またはその他の態様ではサポートする。ソフトウェア開発ツールは、たとえばコマンドインタープリタから別個に実行される個別のプログラムでもよい、または、統合開発環境(IDE)と呼ばれることが多い単一の大きなプログラムの一部である場合もある。プログラムのバグを発見し、アプリケーションの拡張時に新たなバグが発生するのを防ぎ、一般に認められたプログラミング手法に従うために、コードベースを認識するソフトウェア開発ツールが使用されることがある。コードベース(codebaseまたはcode
base)は、特定のソフトウェアシステムまたはソフトウェアコンポーネント(たとえば、ソフトウェア開発ツール)をビルドするために使用されるソースコードの集合である。コードベースは通常、ソースコードリポジトリに格納される。コードベースは一般に、人間が書いたソースコードスニペットを含む。これらのソースコードスニペットは、非常に複雑であるため、または単に長いため、最も経験のあるソフトウェア開発者であっても、コードベースをちらっと見ただけでは、ソースコードスニペットを手動で検査することができないことがよくある。また、高水準プログラミング言語によって提供される抽象化によって、ソースコードとソフトウェアアプリケーションの動作との関係を理解することがさらに難しくなっている。プログラムのバグを発見するため、コードを拡張する際に新たなバグを発生させないため、および一般に認められたプログラミング手法に従うために、ソフトウェア開発者は、ソースコード上で動作するソフトウェア開発ツールをビルドする際に、機械学習モデルを活用することができる。
【0017】
ソフトウェアアナライザは、通常、ソースコードを評価するためにルールを適用することによって作動する。ルールは、プログラミングエラーの一般的な原因に基づいて、言語固有、および/またはオペレーティングシステム固有になることがある。精度が低すぎるルールは、誤表示が多すぎて、ソフトウェア開発者にとって有用でない可能性がある。精度が高すぎるルールは、限られた状況でのみ適用可能である、および/または、実行に時間がかかりすぎて実用的でない可能性がある。機械学習モデルに基づくソフトウェア開発ツールは、誤表示の回避と実用的な実行時間との適切なバランスを効率的に実現することができる。機械学習モデルに基づくソフトウェア開発ツールは、一般的なプログラミングエラーの検出にとどまらない可能性がある。例示的なコードベースを使用して訓練された機械学習モデルは、例示的なコードベースおよび/または例示的なコードベースから抽出される特徴に基づくインサイトを得ることができる場合がある。
【0018】
ソースコードを理解する機械学習モデルは、ソフトウェア開発ツールをビルドする時間を大幅に短縮し、全体の品質を向上させることができるが、特定のソフトウェア開発ツールのビルドのために調整された機械学習モデルの作成は、大変な作業であり、機械学習の知識を有する専門のエンジニアが必要になる。また、機械学習モデルの作成と、ソースコード上のソフトウェア開発ツールの作成とに必要なスキルおよび知識は、通常、重複しないため、機械学習およびソフトウェア開発ツールを専門とする別のエンジニアが必要になる。機械学習モデルがソフトウェア開発ツールのビルドを最適化するために提供する利点は、機械学習モデルの作成に必要な追加コストおよびリソースを上回らないことが多い。その結果、機械学習モデルを用いずに従来の方法でソフトウェア開発ツールをビルドする方が簡単であることが多い。
【0019】
本明細書の実装は、開発者がソフトウェア開発ツールをビルドするために使用しているターゲットソースコードのコードインサイトの生成に使用される機械学習モデルを自動的に生成することに向けられている。ターゲットソースコードを理解する機械学習モデルを生成することによって、開発者は、データ収集、ならびに機械学習モデルを生成する際の専門的なスキルおよび知識を有していることなど、機械学習モデルを生成するためのプロセスのすべての側面から軽減される。たとえば、開発者は、ターゲットソースコード用のコードインサイトを要求するコードインサイト要求を提供してもよく、コードインサイト要求は、ターゲットソースコードと、ソフトウェア開発ツールがコードラベリングタイプ
のソフトウェア開発ツール(たとえば、難易度評価を提供するツール)またはコード変形タイプのソフトウェア開発ツール(たとえば、コードを入力として受取り、異なるコードを出力として生成するツール)のうちの1つからなることを指定するツールタイプインジケータとを含む。コードインサイト要求は、限定されないが、ビルド結果、ターゲットソースコードを実行するための経過時間、ターゲットソースコードのメタデータ、またはターゲットソースコードの人間が生成したコメントなど、コードインサイトに関連付けられた出力特性タイプを任意に含んでもよい。基本的に、出力特性タイプは開発者によって定義され、どのタイプのデータがビルド中のソフトウェア開発ツールに関連するかについてのヒントを提供する。
【0020】
ツールタイプインジケータ、および必要に応じて出力特性タイプに基づいて、機械学習システムは、コードインサイトの生成方法を学習するための機械学習モデルをビルドするために、訓練ソースコードデータに関連して自動的に収集および結合するように構成されている。すなわち、機械学習モデルが訓練ソースコード上で訓練されると、開発者は、ターゲットソースコード(たとえば、ソースコードスニペット(複数可))を訓練済みの機械学習モデルへの入力として提供することが可能であり、訓練済みの機械学習モデルは、ターゲットソースコードのコードインサイトを生成することが可能である。ここで、コードインサイトは、ツールタイプインジケータが、ソフトウェア開発ツールがコードラベリングタイプのソフトウェア開発ツールからなることを指定する場合のターゲットソースコードの予測ラベル、またはツールタイプインジケータが、ソフトウェア開発ツールがコード変形タイプのソフトウェア開発ツールに対応することを指定する場合の訓練ソースコードの予測コード変形のうちの1つを含む。開発者は、コードインサイトを見て(たとえば、グラフィカルユーザインターフェイス上のディスプレイを介して)、コードインサイトに基づいて、必要に応じてターゲットソースコードを更新することができる。
【0021】
図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を追加的に提供してもよい。
【0022】
開発者デバイス202は、開発者デバイス202の画面上に表示されるグラフィカルユーザインターフェイス(GUI)220を実行してもよい。開発者204は、GUI20
4を使用して、ターゲットソースコード210上で動作するソフトウェアツール418をビルドしてもよい。たとえば、開発者204は、GUI204を介して、開発者デバイス202にターゲットソースコード210を入力してもよい。開発者204は、GUI220を使用して、コードインサイトサービス150と通信し、たとえば、コードインサイトサービス150にコードインサイト要求110を送信し、コードインサイトサービス150によって生成されるコードインサイト400を表示してもよい。
【0023】
示された例では、コードインサイトサービス150は、ソフトウェア開発ツール418をビルドするために使用されるターゲットソースコード210のコードインサイト400を要求するコードインサイト要求110を受信する。ターゲットソースコード210は、開発者204が、たとえば、コードインサイト400を介してインサイトを得ようとしているコードベース内の1つ以上のソースコードスニペットを含んでもよい。コードインサイト要求110は、ターゲットソースコード210と、ソフトウェア開発ツール418がコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定するビルドタイプインジケータ205とを含む。別の例では、コードインサイト要求110はさらに、限定されないが、ビルド結果、ターゲットソースコードを実行するための経過期間、ターゲットソースコードのメタデータ、またはターゲットソースコードの人間が生成したコメントなど、コードインサイト400に関連付けられた出力特性タイプ207を含む。基本的に、出力特性タイプ207は、開発者202によって定義され、どのタイプのデータがビルド中のソフトウェア開発ツール418に関連するかについてのヒントを提供し、より詳細なレベルでは、どのタイプのデータが、コードインサイト400の生成に使用される機械学習モデル308の取得/生成に関連するかについてのヒントを提供する。
【0024】
いくつかの実装では、リモートシステム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)を含む。
【0025】
図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を表している。
【0026】
いくつかの例では、AST表現215は、特定のコンピュータ言語に対応する。他の例では、AST表現215は、いくつかのプログラミング言語に広く適用され、それによって、機械学習モデル308が、多数のプログラミング言語、たとえばJavaまたはPythonで表現されたターゲットソースコード210の確立された命名基準への準拠を認識することを学習できるように、訓練ソースコード310のプログラミング言語にとらわれないAST表現で機械学習モデル308を訓練することができる。
【0027】
図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を含む訓練例で訓練する。
【0028】
MLシステム300が、開発者デバイス204からのコードインサイト要求110の受信に応答して機械学習モデル308を取得した後で、インサイト生成器410は、機械学習モデル308を使用してターゲットソースコード210のコードインサイト400を生成するように構成されている。いくつかの例では、インサイト生成器410は、ターゲットソースコード210から抽出されたターゲット特徴212のセットをモデル308への入力として受信し、ターゲットソースコード210のコードインサイト400を出力として生成する。しかしながら、他の例では、コードインサイトサーバ150は、特徴抽出器200を省略し、代わりに、入力としてターゲットソースコード210からコードインサ
イト400を生成してもよい。
【0029】
ツールタイプインジケータ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の難易度評価を予測させたいことを示す場合がある。
【0030】
一方、ツールタイプインジケータ205が、ソフトウェア開発ツール418がコード変形タイプのソフトウェア開発ツールからなることを指定する場合、コードインサイト400は、ターゲットソースコード210の予測コード変形400bを含む。いくつかの例では、機械学習モデル308は、モデル308がターゲットソースコード210(たとえば、ターゲット特徴212)内の1つ以上のビルドエラーを特定し、特定された1つ以上のビルドエラーを修正する予測コード変形400bを生成するビルドエラー修正器として動作するように構成されている。ここで、予測コード変形400bは、ビルドエラーを修正する更新済みのターゲットソースコード210を含んでもよい、または、ビルドエラーをもたらしたコードの部分を修正するためのコード改訂を含んでもよい。別の例では、予測コード変形400bは、ターゲットソースコード210のコンパイル/解釈をエミュレートする実行可能なコード出力を含む。いくつかの実装では、予測コード変形400bは、ターゲットソースコード210を置換するための推奨される置換コードを含む。
【0031】
コードインサイト要求110が開発者202によって指定された結果特性タイプ207を含むシナリオでは、インサイト生成器410はさらに、機械学習モデル308を使用して、コードインサイト400のエミュレートされた結果特性320を生成するように構成されている。これらのシナリオでは、エミュレートされた結果属性320は、コードインサイト要求110に含まれる結果特性タイプ207に関連付けられている。たとえば、エミュレートされた結果属性320は、ターゲットソースコード210のビルドが成功するかまたは失敗するかを示す、エミュレートされたビルド結果を含んでもよい。エミュレートされた結果属性320は、追加的または代替的に、ターゲットソースコードを実行するためのエミュレートされた経過時間、および/またはターゲットソースコードのエミュレートされたメタデータを含んでもよい。いくつかの例では、結果特性タイプ207がユーザコメントを指定する場合、エミュレートされた結果属性320は、ターゲットソースコード210のコードレビューから生じるであろうユーザコメントをエミュレートする、ターゲットソースコード210用に人間が生成した、エミュレートされたコメントを含む。
【0032】
図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を生成することができる。
【0033】
データコレクタ340は、ターゲットソースコード210上で動作するソフトウェア開発ツール418の開発者定義コードインサイト400を生成するために特に調整された機械学習モデル308をビルド/作成するために必要な他の関連データを収集してもよい。モデル生成器360は、深層学習ニューラルネットワークなどのニューラルネットワークに基づく機械学習システムに対応する。モデル生成器360は、機械学習モデル308を訓練するためのニューラルネットワークを生成するために、一般化バックプロパゲーションを実装してもよい。
【0034】
いくつかの実装では、MLシステム300は、機械学習モデル308を訓練するのに適した(たとえば、読取り可能でメモリ要件を低減する)訓練ソースコード310の構文表現を提供するために、選択された訓練ソースコード310から訓練特徴のセットを抽出する。たとえば、MLシステム300は、図1および図2を参照して上述したように、特徴抽出器200を採用してもよい。いくつかの例では、訓練ソースコード310の構文表現は、AST表現215(図2)を含む。
【0035】
コードインサイト要求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の訓練での使用に非常に関連性が高い
ことを示す可能性がある。
【0036】
ソースコードリポジトリ315に格納されている訓練ソースコード310の各スニペットは、訓練ソースコード310に関連付けられた1つ以上の結果特性320でラベル付けされてもよい。これらの結果特性320は、限定されないが、コード310の対応するビルド結果、コード310を実行するための経過時間、コード310のメタデータ、またはコード310のレビューサイクルに基づく人間が生成したコメント(たとえば、ユーザコメント)を含む場合がある。いくつかの例では、訓練ソースコード310の結果特性320は、訓練ソースコード310のコンパイル/解釈から生じる、対応する実行可能コードを含む。
【0037】
開発者202が、コードインサイトサービス150に、ターゲットソースコード210のコンパイル/解釈をエミュレートするための実行可能コード出力を含む予測コード変形400bを生成するように(たとえば、コードインサイト要求110で)要求する例では、モデル生成器360は、訓練ソースコードをコンパイルまたは解釈した結果生じる、対応する訓練実行可能コードとペアにされた訓練ソースコード310を含む訓練例350で機械学習モデル308を訓練してもよい。ここで、訓練実行可能コードは、訓練ソースコード310に関連付けられた結果特性320に対応してもよい。したがって、データコレクタ340は、モデル生成装置360が機械学習モデル308を訓練するために使用する訓練例350として、対応する訓練実行可能コードとペアにされた訓練ソースコード310を選択/識別するために、ソースコードリポジトリ315に問合わせてもよい。
【0038】
コードインサイト要求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に要求することになる。
【0039】
いくつかの例では、モデル生成器360は、訓練ソースコードスニペットのプール内の訓練ソースコードスニペットごとに対応するベクトル表現を生成するように、モデル308を訓練する。MLシステム300は、インサイト生成器410がターゲットソースコード210の「近隣」の訓練ソースコードスニペットを識別するためにアクセスし得るメモリハードウェア146に、すべてのベクトル表現のベクトル空間マップを格納してもよい。たとえば、図1を参照すると、インサイト生成器410は、特徴入力としてターゲット特徴212のセットを受信するように構成された機械学習モデル308を使用して、ターゲットソースコード210のベクトル表現を生成し、メモリハードウェア146に格納されている訓練ソースコードスニペットのプールの類似度スコアを決定し、類似度閾値を満たす類似度スコアを有する訓練ソースコードスニペットの1つ以上をターゲットソースコード210の「近隣」であると識別してもよい。これらの「近隣」は、インサイト生成器410によって、ターゲットソースコード210を置換するための推奨される置換コード
(たとえば、予測コード変形400b)として、または他の例では、ターゲットソースコード210の可能なミューテーション(たとえば、予測ラベル400a)と識別されてもよい。この例では、各類似度スコアは、対応する訓練ソースコードスニペットに関連付けられ、ターゲットソースコード210のベクトル表現と、対応する訓練ソースコードスニペットのそれぞれのベクトル表現との類似度レベルを示す。同様に、インサイト生成器410は、ベクトル空間マップにおけるターゲットソースコード210のベクトル表現を使用して、ターゲットソースコード210がコードベース内のどこに配置されるべきかを予測することができる。
【0040】
図1および図3を引き続き参照すると、ベクトル表現を生成するようにモデル308を訓練することは、他のタイプのコードインサイト400を生成するためにインサイト生成器410によって同様に使用され得る。たとえば、開発者202は、ターゲットコードベース(たとえば、開発者デバイス204に格納されている、またはメモリハードウェア146に格納されている)からのターゲットソースコードスニペットのペアを含むターゲットソースコード210を有するコードインサイト要求110を送信してもよい。ここで、インサイト生成器410は、ターゲットソースコードスニペットのペアのターゲットソースコードスニペットごとに、対応するターゲットソースコードスニペットから抽出されたターゲット特徴212のセットを特徴入力として受信するように構成された機械学習モデルを使用して、対応するターゲットソースコードスニペットのベクトル表現を生成することによって、ターゲットソースコード210のコードインサイト400を生成してもよい。その後、インサイト生成器410は、ベクトル表現に基づいてターゲットソースコードスニペットのペアの間のベクトル空間距離を求め、ベクトル空間距離が距離閾値を満たす場合、ターゲットソースコードスニペットのペアは互いの重複であると決定し得る。この例では、開発者デバイス204が、開発者202が見るためのコードインサイト400を受信して表示すると、開発者202は、ストレージ要件を節約するために、ターゲットコードスニペットのうちの1つをターゲットコードベースから削除するように選択可能である。
【0041】
図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の実行可能コードへの「コンパイラ/インタープリタ」変形を要求する入力を(たとえば、マウスカーソルを介して)提供する。
【0042】
また、コードインサイト要求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を含む。
【0043】
図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について人間が生成したコメントがどのようなものである可能性が高いかを確認することができる。
【0044】
図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のビルドが成功する可能性が高いかどうかを確認することができる。
【0045】
図5は、コードインサイト400を生成する方法の動作の配置例を示すフローチャートである。動作502で、方法500は、データ処理ハードウェア144において、ソフトウェア開発ツール418をビルドするためにターゲットソースコード210を使用する開発者202に関連付けられた開発者デバイス204から、ターゲットソースコード210のコードインサイト400を要求するコードインサイト要求112を受信することを含む。コードインサイト要求112は、ターゲットソースコード210と、ソフトウェア開発ツール418がコードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの1つからなることを指定するツールタイプインジケータ205とを含む。いくつかの例では、コードインサイト要求112はさらに、コードインサイト400に関連付けられた結果特性タイプ207を含む。これらの例では、結果特性タイプ207は、開発者202によって定義される。
【0046】
動作504で、方法500は、データ処理ハードウェア144が、ツールタイプインジケータ205に基づいて機械学習モデル308を取得することを含む。機械学習モデル308は、コードラベリングタイプのソフトウェア開発ツールまたはコード変形タイプのソフトウェア開発ツールのうちの指定された1つに関連付けられた訓練ソースコード310で訓練される。
【0047】
動作506で、方法500は、データ処理ハードウェア144が、機械学習モデル308を使用してターゲットソースコード210のコードインサイト400を生成することを含む。ターゲットソースコード210のコードインサイト400は、ツールタイプインジケータ205が、ソフトウェア開発ツール418がコードラベリングタイプのソフトウェア開発ツールからなることを指定する場合のターゲットソースコード210の予測ラベル400a、またはツールタイプインジケータ205が、ソフトウェア開発ツール418がコード変形タイプのソフトウェア開発ツールに対応することを指定する場合の訓練ソースコード310の予測コード変形400bのうちの1つを含む。訓練ソースコード310の予測ラベル400aは、ターゲットソースコードの複雑さの予測レベル、ターゲットソースコードの予測品質、ターゲットソースコードの予測テスト要件、またはターゲットソースコードの予測難易度評価のうちの少なくとも1つを含んでもよい。ターゲットソースコードの予測コード変形は、ターゲットソースコードの実行可能な、ターゲットソースコード内のビルドエラーを修正する更新済みのターゲットソースコード、ターゲットソースコードの改訂、またはターゲットソースコードを置換するための推奨される置換ソースコードの少なくとも1つを含んでもよい。
【0048】
動作508で、方法500は、データ処理ハードウェア144が、コードインサイト400を開発者デバイス204に送信することを含む。コードインサイト400は、開発者デバイス204によって受信されると、開発者デバイス204上で実行されるグラフィカルユーザインターフェイス220に、開発者デバイス204の表示画面上にコードインサイト400を表示させる。
【0049】
図6は、本明細書で説明するシステムおよび方法(たとえば、方法500)を実施するために使用され得るコンピューティングデバイス600の例を示す概略図である。コンピューティングデバイス600は、ラップトップ、デスクトップ、ワークステーション、パーソナルデジタルアシスタント、サーバ、ブレードサーバ、メインフレーム、および他の適切なコンピュータなどのさまざまな形態のデジタルコンピュータを表すことを意図している。ここに示された構成要素、それらの接続および関係、ならびにそれらの特徴は、例示に過ぎないことを意味しており、本明細書で説明および/または請求される発明の実装を制限するものでない。
【0050】
コンピューティングデバイス600は、プロセッサ610(データ処理ハードウェアともいう)、メモリ620(メモリハードウェアともいう)、ストレージデバイス630、メモリ620および高速拡張ポート650に接続する高速インターフェイス/コントローラ640、ならびに低速バス670およびストレージデバイス630に接続する低速インターフェイス/コントローラ660を含む。構成要素610,620,630,640,650および660の各々は、各種バスを使用して相互接続され、共通のマザーボードに、または適宜他の態様で搭載することができる。プロセッサ610は、高速インターフェイス640に結合されたディスプレイ680などの外部入出力デバイスにグラフィカルユーザインターフェイス(GUI)のグラフィック情報を表示するために、メモリ620またはストレージデバイス630に格納された命令を含む、コンピューティングデバイス600内で実行するための命令を処理することが可能である。他の実装では、複数のプロセッサおよび/または複数のバスが、複数のメモリおよび複数のタイプのメモリと共に、適宜使用されてもよい。また、複数のコンピューティングデバイス600が接続され、各デバイスが必要な動作の一部を提供してもよい(たとえば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして)。
【0051】
メモリ620は、コンピューティングデバイス600内の情報を非一時的に格納する。メモリ620は、コンピュータ読取可能媒体、揮発性メモリユニット(複数可)、または不揮発性メモリユニット(複数可)でもよい。非一時的なメモリ620は、コンピューティングデバイス600による使用のために、プログラム(たとえば、命令のシーケンス)またはデータ(たとえば、プログラム状態情報)を一時的または恒久的に格納するために使用される物理デバイスでもよい。不揮発性メモリの例には、フラッシュメモリおよびリードオンリーメモリ(ROM)/プログラマブルリードオンリーメモリ(PROM)/消去可能プログラマブルリードオンリーメモリ(EPROM)/電子的消去可能プログラマブルリードオンリーメモリ(EEPROM)(たとえば、ブートプログラムといった、ファームウェアに通常使用される)があるが、これらに限定されるわけではない。揮発性メモリの例としては、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、相変化メモリ(PCM)、およびディスクまたはテープがあるが、これらに限定されるわけではない。
【0052】
ストレージデバイス630は、コンピューティングデバイス600のための大容量記憶装置を提供することができる。いくつかの実装では、ストレージデバイス630は、コンピュータ読取可能媒体である。さまざまな異なる実装において、ストレージデバイス630は、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置、またはテープ装置、フラッシュメモリもしくは他の同様の固体メモリ装置、または記憶領域ネットワークもしくは他の構成における装置を含む装置のアレイでもよい。別の実装では、コンピュータプログラム製品は、情報担体において有形に具現化される。コンピュータプログラム製品は、実行されると、上述したような1つ以上の方法を実行する命令を含む。情報担体は、メモリ620、ストレージデバイス630、もしくはプロセッサ610上のメモリなどの、コンピュータまたは機械読取可能媒体である。
【0053】
高速コントローラ640は、コンピューティングデバイス600の帯域幅集約的な動作を管理し、低速コントローラ660は、より低い帯域幅集約的な動作を管理する。このような機能の割り当ては例示に過ぎない。いくつかの実装では、高速コントローラ640は、メモリ620、ディスプレイ680(たとえば、グラフィックプロセッサまたはアクセラレータを介して)、およびさまざまな拡張カード(図示せず)を受け付けることができる高速拡張ポート650に結合される。いくつかの実装では、低速コントローラ660は、ストレージデバイス630および低速拡張ポート690に結合される。さまざまな通信ポート(たとえば、USB、Bluetooth(登録商標)、イーサネット(登録商標)、無線イーサネット)を含み得る低速拡張ポート690は、キーボード、ポインティン
グデバイス、スキャナなどの1つ以上の入出力デバイス、またはスイッチもしくはルータなどのネットワークデバイスに、たとえばネットワークアダプタを介して結合されてもよい。
【0054】
コンピューティングデバイス600は、図に示すように、多数の異なる形態で実装されてもよい。たとえば、標準的なサーバ600aとして、もしくはそのようなサーバ600aのグループ内で複数回、ラップトップコンピュータ600bとして、またはラックサーバシステム600cの一部として、実装されてもよい。
【0055】
本明細書に記載されたシステムおよび技術のさまざまな実装は、デジタル電子および/または光回路、集積回路、特別に設計された特定用途向け集積回路(application specific integrated circuit:ASIC)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはそれらの組合わせで実現することが可能である。これらのさまざまな実装は、データおよび命令を記憶システムに対して送受信するように結合された、特殊用途または汎用用途であってもよい少なくとも1つのプログラマブルプロセッサ、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含むプログラマブルシステム上で実行可能および/または解釈可能な1つ以上のコンピュータプログラムにおける実装を含み得る。
【0056】
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、またはコードとしても知られている)は、プログラマブルプロセッサ用の機械命令を含み、高レベルの手続き型および/またはオブジェクト指向プログラミング言語、および/またはアセンブリ/機械言語で実装され得る。本明細書で使用される場合、「機械読取可能媒体」および「コンピュータ読取可能媒体」という用語は、機械命令を機械読取可能信号として受信する機械読取可能媒体を含む、プログラマブルプロセッサに機械命令および/またはデータを提供するために使用される任意のコンピュータプログラム製品、非一時的なコンピュータ読取可能媒体、装置および/またはデバイス(たとえば、磁気ディスク、光ディスク、メモリ、プログラマブル論理デバイス(Programmable Logic Device:PLD)を指す。「機械読取可能信号」という用語は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用されるあらゆる信号を指す。
【0057】
本明細書に記載された処理および論理フローは、1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルプロセッサによって実行することができ、入力データに対して動作し、出力を生成することによって、特徴を実行する。また、処理および論理フローは、特殊目的論理回路、たとえば、フィールドプログラマブルゲートアレイ(FPGA)またはASIC(特定用途向け集積回路)によって実行することも可能である。コンピュータプログラムの実行に適したプロセッサには、例として、汎用マイクロプロセッサと特殊目的マイクロプロセッサとの両方、および任意の種類のデジタルコンピュータの任意の1つ以上のプロセッサが含まれる。一般に、プロセッサは、読取り専用メモリまたはランダムアクセスメモリまたはその両方から、命令およびデータを受信することになる。コンピュータの本質的な要素は、命令を実行するためのプロセッサと、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置、たとえば、磁気ディスク、光磁気ディスク、もしくは光ディスクを備える、またはデータを格納するための1つ以上の大容量記憶装置、たとえば、磁気ディスク、光磁気ディスク、もしくは光ディスクに対するデータの受信、もしくは転送、もしくはその両方を行うように動作可能に結合されることになる。しかしながら、コンピュータは、そのようなデバイスを有する必要はない。コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能媒体は、例として、半導体メモリデバイス、たとえばEPROM,EEPROMおよびフラッシュメモリ
デバイス;磁気ディスク、たとえば内蔵ハードディスクまたは取外し可能ディスク;光磁気ディスク;ならびにCD ROMおよびDVD-ROMディスクなどのすべての形式の不揮発メモリ、媒体およびメモリ装置を含む。プロセッサとメモリとを、特殊目的論理回路によって補完する、またはその中に組込むことが可能である。
【0058】
ユーザとの相互作用を提供するために、本開示の1つ以上の態様は、ユーザに情報を表示するための表示デバイス、たとえばCRT(陰極線管)、LCD(液晶ディスプレイ)モニタ、またはタッチスクリーンと、任意に、ユーザがコンピュータに入力を提供できるキーボードおよびポインティングデバイス、たとえばマウスまたはトラックボールを有するコンピュータ上で実施することができる。他の種類のデバイスも、ユーザとの相互作用を提供するために使用可能である。たとえば、ユーザに提供されるフィードバックは、視覚フィードバック、聴覚フィードバック、または触覚フィードバックなどの任意の形式の感覚フィードバックとすることができ、ユーザからの入力は、音響、音声、または触覚入力などの任意の形式で受信することができる。さらに、コンピュータは、ユーザが使用するデバイスに対して文書を送受信することによって、たとえば、ウェブブラウザから受信した要求に応答して、ユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。
【0059】
多数の実装について説明した。それにもかかわらず、本開示の精神および範囲から逸脱することなく、さまざまな変更がなされ得ることが理解されよう。したがって、他の実装は、以下の特許請求の範囲内である。
図1
図2
図3
図4A
図4B
図4C
図4D
図5
図6