(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-07-28
(54)【発明の名称】コード変更の自動識別
(51)【国際特許分類】
G06N 3/08 20060101AFI20220721BHJP
G06N 3/04 20060101ALI20220721BHJP
G06F 8/75 20180101ALI20220721BHJP
G06F 8/36 20180101ALI20220721BHJP
【FI】
G06N3/08
G06N3/04
G06F8/75
G06F8/36
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2021563230
(86)(22)【出願日】2020-05-18
(85)【翻訳文提出日】2021-12-23
(86)【国際出願番号】 US2020033448
(87)【国際公開番号】W WO2020236744
(87)【国際公開日】2020-11-26
(32)【優先日】2019-05-21
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】516326438
【氏名又は名称】エックス デベロップメント エルエルシー
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100126480
【氏名又は名称】佐藤 睦
(72)【発明者】
【氏名】ニ,ビン
(72)【発明者】
【氏名】シリングス,ブノワ
(72)【発明者】
【氏名】エヴァンゲロプロス,ジョージオス
(72)【発明者】
【氏名】ハタルスキー,オリヴィア
(72)【発明者】
【氏名】チャン,チェンユー
(72)【発明者】
【氏名】ブロネヴェツキー,グリゴリー
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC38
5B376DA22
(57)【要約】
【課題】レガシーソースコードベースへの変更を自動的に識別、推奨、および/または実行する技術を提供する。
【解決手段】本明細書において、他の類似したレガシーコードベースに対して行われた以前の更新から得られる知識を活用することによって、レガシーソースコードベースへの変更を自動的に識別、推奨、および/または実行するための実施態様が記載されている。いくつかの実施態様において、潜在空間内の新しいソースコード埋め込みを生成するために、第1バージョンソースコードスニペットに関連付けられたデータを、1つ以上の機械学習モデルにわたる入力として適用することができる。参照埋め込みを、潜在空間内の新しいソースコード埋め込みからの距離に基づいて、潜在空間内で識別することができる。参照埋め込みは、以前のコードベース更新中に行われた個々の変更に関連付けられ得る。識別された1つ以上の参照埋め込みに基づいて、第2バージョンソースコードスニペットを作成するために第1バージョンソースコードスニペットに加えられる変更を識別、推奨、および/または実行することができる。
【選択図】
図2
【特許請求の範囲】
【請求項1】
1つ以上のプロセッサを使用して実施される方法であって、
潜在空間内の新しいソースコード埋め込みを生成するために、第1バージョンソースコードスニペットに関連付けられたデータを、1つ以上の機械学習モデルにわたる入力として適用することと、
1つ以上の参照埋め込みと前記潜在空間内の前記新しいソースコード埋め込みとの間の1つ以上の距離に基づいて、前記潜在空間内の前記1つ以上の参照埋め込みを識別することであって、前記1つ以上の参照埋め込みの各々が、前記機械学習モデルのうちの1つ以上にわたる入力として、参照第2バージョンソースコードスニペットをもたらすために、参照第1バージョンソースコードスニペットに加えられた変更を示すデータを適用することによって生成される、識別することと、
前記識別された1つ以上の参照埋め込みに基づいて、第2バージョンソースコードスニペットを作成するために前記第1バージョンソースコードスニペットに加えられる1つ以上の変更を識別することと、を含む、方法。
【請求項2】
前記第1バージョンソースコードスニペットに関連付けられる前記データが、前記第1バージョンソースコードスニペットから生成される抽象構文木(「AST」)を含む、請求項1に記載の方法。
【請求項3】
前記機械学習モデルのうちの1つ以上が、グラフニューラルネットワーク(「GNN」)を含む、請求項1または2に記載の方法。
【請求項4】
前記1つ以上の参照埋め込みに関連付けられる1つ以上のルックアップテーブルに基づいて、前記1つ以上の変更が識別される、請求項1~3のいずれか一項に記載の方法。
【請求項5】
1つ以上のコンピューティングデバイス上にレンダリングされる出力を生成することをさらに含み、前記出力が、レンダリングされるときに、前記第1バージョンソースコードスニペットについて前記1つ以上の変更を考慮することを推奨する、請求項1~4のいずれか一項に記載の方法。
【請求項6】
前記第1バージョンソースコードスニペットにおける前記1つ以上の変更を自動的に実行することをさらに含む、請求項1~5のいずれか一項に記載の方法。
【請求項7】
前記第1バージョンソースコードスニペットが、ソースコードファイルを含む、請求項1~6のいずれか一項に記載の方法。
【請求項8】
1つ以上のプロセッサを使用して実施される方法であって、
第1バージョンソースコードスニペットと第2バージョンソースコードスニペットとの間の変更を示すデータを取得することと、
変更タイプによって、前記変更を示す前記データをラベル付けすることと、
潜在空間内の新しい埋め込みを生成するために、機械学習モデルにわたる入力として、前記変更を示す前記データを適用することと、
前記新しい埋め込みと、同じ前記変更タイプに関連付けられた前記潜在空間内の以前の埋め込みとの間の前記潜在空間内の距離を決定することと、
少なくとも部分的に前記距離に基づいて前記機械学習モデルを訓練することと、を含む、方法。
【請求項9】
前記機械学習モデルがグラフニューラルネットワーク(「GNN」)を含む、請求項8に記載の方法。
【請求項10】
前記変更を示す前記データが変化グラフを含む、請求項8に記載の方法。
【請求項11】
前記変化グラフが、前記第1バージョンソースコードスニペットから生成された第1の抽象構文木(「AST」)および前記第2バージョンソースコードスニペットから生成された第2のASTから生成される、請求項10に記載の方法。
【請求項12】
前記距離が第1の距離を含み、前記方法が、
前記新しい埋め込みと、異なる変更タイプに関連付けられた前記潜在空間内の別の以前の埋め込みとの間の前記潜在空間内の第2の距離を決定することと、
損失関数を使用して、前記第1の距離および前記第2の距離に基づいてエラーを計算することと、をさらに含み、
前記訓練が前記エラーに基づく、請求項8~11のいずれか一項に記載の方法。
【請求項13】
前記変更を示す前記データが、第1の変更を示す第1のデータを含み、前記新しい埋め込みが、第1の新しい埋め込みを含み、前記方法が、
前記第1バージョンソースコードスニペットと前記第2バージョンソースコードスニペットとの間の第2の変更を示す第2のデータを取得することと、
第2の変更タイプによって、前記第2の変更を示す前記第2のデータをラベル付けすることと、
前記潜在空間内の第2の新しい埋め込みを生成するために、前記機械学習モデルにわたる入力として、前記第2の変更を示す前記第2のデータを適用することと、
前記第2の新しい埋め込みと、前記第2の変更タイプに関連付けられた前記潜在空間内の以前の埋め込みとの間の前記潜在空間内の追加の距離を決定することと、
少なくとも部分的に前記追加の距離に基づいて前記機械学習モデルを訓練することと、をさらに含む、請求項8~11のいずれか一項に記載の方法。
【請求項14】
1つ以上のプロセッサと、命令を格納するメモリとを備えるシステムであって、前記命令は、前記1つ以上のプロセッサによる前記命令の実行に応答して、前記1つ以上のプロセッサに、
潜在空間内の新しいソースコード埋め込みを生成するために、第1バージョンソースコードスニペットに関連付けられたデータを、1つ以上の機械学習モデルにわたる入力として適用することと、
1つ以上の参照埋め込みと前記潜在空間内の前記新しいソースコード埋め込みとの間の1つ以上の距離に基づいて、前記潜在空間内の前記1つ以上の参照埋め込みを識別することであって、前記1つ以上の参照埋め込みの各々が、前記機械学習モデルのうちの1つ以上にわたる入力として、参照第2バージョンソースコードスニペットをもたらすために、参照第1バージョンソースコードスニペットに加えられた変更を示すデータを適用することによって生成される、識別することと、
前記識別された1つ以上の参照埋め込みに基づいて、第2バージョンソースコードスニペットを作成するために前記第1バージョンソースコードスニペットに加えられる1つ以上の変更を識別することと、を行わせる、システム。
【請求項15】
前記第1バージョンソースコードスニペットに関連付けられる前記データが、前記第1バージョンソースコードスニペットから生成される抽象構文木(「AST」)を含む、請求項14に記載のシステム。
【請求項16】
前記機械学習モデルのうちの1つ以上が、グラフニューラルネットワーク(「GNN」)を含む、請求項14または15に記載のシステム。
【請求項17】
前記1つ以上の参照埋め込みに関連付けられる1つ以上のルックアップテーブルに基づいて、前記1つ以上の変更が識別される、請求項14~16のいずれか一項に記載のシステム。
【請求項18】
1つ以上のコンピューティングデバイス上にレンダリングされる出力を生成するための命令をさらに備え、前記出力が、レンダリングされるときに、前記第1バージョンソースコードスニペットについて前記1つ以上の変更を考慮することを推奨する、請求項14~17のいずれか一項に記載のシステム。
【請求項19】
前記第1バージョンソースコードスニペットにおける前記1つ以上の変更を自動的に実行するための命令をさらに備える、請求項14~18のいずれか一項に記載のシステム。
【請求項20】
前記第1バージョンソースコードスニペットが、ソースコードファイルを含む、請求項14~19のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
(背景技術)
ソフトウェアシステムは、ソースコード「ベース」に基づいて構築され、これは通常、プログラミング言語(Java、Python、C++など)、フレームワーク、共有ライブラリ、ランタイム環境など、多くの独立したソフトウェア技術に依存し、および/またはこれらを組み込んでいる。各ソフトウェア技術は、独自の速度で進化し得、独自のブランチおよび/またはバージョンを含み得る。各ソフトウェア技術は、他の様々な技術にも依存する場合がある。したがって、大規模なソフトウェアシステムのソースコードベースは、複雑な依存関係グラフで表され得る。
【0002】
ソフトウェア技術を最新の状態に保つことには利点がある。新しいバージョンには、セキュリティホールおよび/またはバグを修正する重要な改善が含まれているだけでなく、新しい機能も含まれていることがある。残念ながら、特に特定のソフトウェアシステムのコードベースの一部として、これらのソフトウェア技術を最新の状態に保つために必要とされることがあるリソースの量は、非常に多くなる可能性がある。その結果、多くのソフトウェアシステムは可能な限り頻繁には更新されない。古いソフトウェア技術は、バグ、セキュリティの脆弱性、継続的なサポートの欠如など、無数の問題につながる可能性がある。
【発明の概要】
【0003】
他の類似したレガシーコードベースに対して以前に行われた更新に基づいて、レガシーソースコードベースへの変更を自動的に識別、推奨、および/または自動的に実行するための技法が本明細書に記載されている。直感的には、複雑なソフトウェアシステムコードベースの複数の以前の「移行」または大量更新を分析して、行われた変更を特定することができる。いくつかの実施態様では、これらの変更に関する知識は、機械学習および潜在空間埋め込みを使用して保持することができる。以前に更新されたコードベースの1つ以上に類似した新しいソフトウェアシステムコードベースを更新する場合、これらの以前に実施された変更は、機械学習および前述の潜在空間埋め込みを使用して識別することができる。識別されると、これらの変更は自動的に識別、推奨、および/または実行することができる。これらの変更を自動的に識別、推奨、および/または実行することにより、依存関係グラフにわたって関連するソフトウェア技術への変更を適切に反映するために、多数のソースコードスニペットを手動で変更する時間および費用を削減またはさらには排除することができる。
【0004】
いくつかの実施態様では、グラフニューラルネットワーク(「GNN」)またはシーケンス間モデル(例えば、エンコーダ-デコーダネットワークなど)などの1つ以上の機械学習モデルを、ソースコードスニペットに基づいて埋め込みを生成するように訓練することができる。これらの埋め込みは、ソースコードスニペットの意味的特性および/または構文的特性、ならびにそれらのスニペットが展開されるコンテキストをキャプチャすることができる。いくつかの実施態様では、これらの埋め込みは、ソースコードベースの以前の移行中にソースコードスニペットに行われた以前の変更を表す「参照」埋め込みの形式をとることがある。言い換えれば、これらの参照埋め込みは、以前のコードベースの変更を潜在空間にマッピングまたは投影する。これらの参照埋め込みは、次いで、新しいソースコードベースの新しい移行の変更候補を特定するために使用することができる。
【0005】
本開示の選択された態様で構成された機械学習モデルを訓練することができる方法の非限定的な例として、いくつかの実施態様では、第1バージョンソースコードスニペット(例えば、バージョン1.1.1)を使用して、抽象構文木(「AST」)などのデータ構造を生成することができる。ASTは、変数、オブジェクト、関数など、第1バージョンソースコードスニペットにおいて発生する構造、およびこれらのコンポーネント間の構文関係を表すことができる。別のASTは、第1バージョンソースコードスニペットの次のバージョンまたは「反復」であり得る第2バージョンソースコードスニペット(例えば、1.1.2)のために生成され得る。次に、2つのASTを使用して、ソースコードスニペットを第1のバージョンから第2のバージョンに更新するために行われる1つ以上の変更を表す、1つ以上の変化グラフなど、1つ以上のデータ構造を生成することができる。いくつかの実施態様では、第1のバージョンから第2のバージョンへの進化中に、ソースコードスニペットへの変更ごとに1つの変化グラフが生成され得る。
【0006】
変化グラフが作成されると、それらは機械学習モデルを訓練するための訓練例として使用することができる。いくつかの実施態様では、変化グラフは、機械学習(例えば、GNNまたはシーケンス間)モデルを使用して処理され、対応する参照埋め込みを生成することができる。いくつかの実施態様では、変化グラフは、潜在空間内のそれぞれの領域への変更をマッピングするために使用される変更タイプなどの情報によってラベル付けされ得る。例えば、「変数名変更」というラベルを1つの変更に適用することができ、「API署名変更」という別のラベルを別の変更に適用することができる、など。
【0007】
機械学習モデルにわたってより多くの変化グラフが入力されると、これらのラベルは、同等の変更が潜在空間で適切にともにクラスタ化されているか否かを判定する損失関数の一部として使用することができる。特定の変更タイプの変更(例えば、「変数名変更」)から生成された埋め込みが同じ変更タイプの他の埋め込みに十分に近接していない場合(例えば、他の変更タイプの埋め込みに近い場合)、機械学習モデルは、例えば、勾配降下法および誤差逆伝搬などの技法を使用して訓練することができる。この訓練プロセスは、機械学習モデルが変化グラフ、より一般的には、ソースコードスニペットを表すデータ構造を、構文的/意味的に類似した他のデータ構造に近い潜在空間の領域に正確にマッピングすることが可能になるまで、多数の訓練例にわたって繰り返すことができる。
【0008】
機械学習モデルは、訓練されると、更新予定のソフトウェアシステムコードベースの更新中に使用して、コードベース内のソースコードの様々なスニペットへの変更を識別し、場合によっては自動的に実行することができる。いくつかの実施態様では、更新予定のコードベースの第1のバージョンのコードスニペットに関連付けられたデータを、埋め込みを生成するために、訓練された機械学習モデルにわたる入力として適用することができる。訓練中と同様に、第1バージョンソースコードスニペットに関連付けられているデータは、ASTなどのデータ構造とすることができる。ただし、訓練中とは異なり、第1バージョンソースコードスニペットはまだ次のバージョンに更新されていない。したがって、第2バージョンソースコードスニペットおよび変化グラフは存在しない。
【0009】
それにもかかわらず、第1バージョンソースコードスニペットから生成されるASTまたは他のデータ構造が、機械学習(例えば、GNNまたはシーケンス間)モデルを使用して処理される場合、結果として生じるソースコード埋め込みは、以前のコードベースの移行中に類似した(またはさらには同一の)ソースコードスニペットに加えられた変更を表す潜在空間内の参照埋め込みに近接し得る。言い換えれば、第1バージョンソースコードスニペットは潜在空間にマッピングされて、過去に類似の状況で類似のソースコードに加えられた変更を識別する。これらの変更は、次いで、第1バージョンソースコードスニペットを第2バージョンソースコードスニペットに更新するために、推奨および/または自動的に実行することができる。
【0010】
いくつかの実施態様では、ソースコード埋め込みと過去のソースコードの変更を表す参照埋め込みとの間の潜在空間内の距離は、例えば、変更を推奨するか、変更を自動的に実行するか、または変更を推奨しないかを、どのように進めるかを決定するために使用することができる。潜在空間におけるこれらの空間的関係(類似度に対応することができる)は、ドット積、コサイン類似度などを使用するなど、様々な方法で決定することができる。例として、参照埋め込みがソースコード埋め込みの潜在空間の第1の半径内にある場合、埋め込みによって表される変更は、例えば、ユーザの確認なしに自動的に行うことができる。参照埋め込みがソースコード埋め込みの第1の半径の外側であるが、ソースコード埋め込みの第2の半径内にある場合、埋め込みによって表される変更がユーザに推奨され得るが、ユーザ確認が必要になる場合がある。以下、同様である。いくつかの実施態様では、ソースコード埋め込みからの距離に基づいて候補の変更にスコアを割り当てることができ、そのスコアは、例えば、ユーザが変更を実行するべきか否かを判定するのに役立つ一致率または信頼度スコアとしてユーザに提示することができる。
【0011】
ソースコード埋め込みが複数の参照埋め込みに同様に近接しているいくつかの実施態様では、複数の埋め込みによって表される変更は、候補変更としてユーザ(例えば、ソフトウェアエンジニア)に提示することができる。複数の変更が互いに競合しない場合、複数の変更は単に自動的に実施することができる。
【0012】
変更タイプは訓練データの潜在的なラベルとして以前に言及されたが、これは限定を意味するものではない。変更タイプに加えて、または変更タイプの代わりに、他の属性を示すラベルを訓練例に割り当てることができる。例えば、いくつかの実施態様では、変更タイプに加えて、またはその代わりに、変化グラフ(またはソースコードのバージョン間の変更を表す他のデータ構造)を、「良い」変更、「悪い」変更、「不要な」変更、「重複する」変更、好ましいコーディングスタイルに一致する、または一致しないなどとしてラベル付けすることができる。これらのラベルは、潜在空間をさらにマッピングするために、変更タイプまたは他のタイプのラベルに加えて、またはその代わりに使用することができる。後で、新しいソースコード埋め込みが生成され、「悪い」というラベルの付いた参照埋め込みに近接していることが判明した場合、参照埋め込みによって表される変更は実施または推奨されない場合がある。
【0013】
いくつかの実施態様では、1つ以上のプロセッサによって実行される方法であって、潜在空間内の新しいソースコード埋め込みを生成するために、1つ以上の機械学習モデルにわたる入力として、第1バージョンソースコードスニペットに関連付けられたデータを適用することと、1つ以上の参照埋め込みと潜在空間内の新しいソースコード埋め込みとの間の1つ以上の距離に基づいて、潜在空間内の1つ以上の参照埋め込みを識別することであって、1つ以上の参照埋め込みの各々は、1つ以上の機械学習モデルにわたる入力として、参照第2バージョンソースコードスニペットをもたらすために、参照第1バージョンソースコードスニペットに加えられた変更を示すデータを適用することによって生成される、識別することと、識別された1つ以上の参照埋め込みに基づいて、第2バージョンソースコードスニペットを作成するために第1バージョンソースコードスニペットに加えられる1つ以上の変更を識別することとを含む、方法が提供される。
【0014】
様々な実施態様において、第1バージョンソースコードスニペットに関連付けられるデータは、第1バージョンソースコードスニペットから生成される抽象構文木(「AST」)を含む。様々な実施態様では、1つ以上の機械学習モデルは、グラフニューラルネットワーク(「GNN」)を含む。様々な実施態様では、1つ以上の参照埋め込みに関連付けられる1つ以上のルックアップテーブルに基づいて、1つ以上の変更が識別される。
【0015】
様々な実施態様において、方法は、1つ以上のコンピューティングデバイス上にレンダリングされる出力を生成することをさらに含み、出力は、レンダリングされるときに、第1バージョンソースコードスニペットについて1つ以上の変更を考慮することを推奨する。様々な実施態様において、方法は、第1バージョンソースコードスニペットにおける1つ以上の変更を自動的に実行することをさらに含む。様々な実施態様では、第1バージョンソースコードスニペットはソースコードファイルを含む。
【0016】
別の態様では、1つ以上のプロセッサを使用して実施される方法は、第1バージョンソースコードスニペットと第2バージョンソースコードスニペットとの間の変更を示すデータを取得することと、変更を示すデータを変更タイプによってラベル付けすることと、潜在空間に新しい埋め込みを生成するために、機械学習モデルにわたる入力として、変更を示すデータを適用することと、同じ変更タイプに関連付けられた潜在空間内での新しい埋め込みと以前の埋め込みとの間の潜在空間内の距離を決定することと、少なくとも部分的に距離に基づいて機械学習モデルを訓練することと、を含むことができる。
【0017】
さらに、いくつかの実施態様は、1つ以上のコンピューティングデバイスの1つ以上のプロセッサを含み、1つ以上のプロセッサは、関連するメモリに格納された命令を実行するように動作可能であり、命令は、前述の方法のいずれかを実行させるように構成される。いくつかの実施態様はまた、前述の方法のいずれかを実行するために1つ以上のプロセッサによって実行可能なコンピュータ命令を格納する1つ以上の非一時的コンピュータ可読記憶媒体を含む。
【0018】
本明細書でより詳細に説明される前述の概念および追加の概念のすべての組み合わせが、本明細書において開示される主題の一部であると企図されることを理解されたい。例えば、本開示の終わりに現れる特許請求される主題のすべての組み合わせが、本明細書に開示される主題の一部であると企図される。
【図面の簡単な説明】
【0019】
【
図1】様々な実施形態による、本開示の選択された態様が実施され得る例示的な環境を概略的に表す。
【
図2】例示的なプロセスフローのブロック図である。
【
図3】推論段階中に本明細書において説明する機械学習モデルを使用して、潜在空間埋め込みを生成することができる方法の一例を概略的に示す。
【
図4】訓練段階中に本明細書において説明する機械学習モデルを使用して、潜在空間埋め込みを生成することができる方法の一例を概略的に示す。
【
図5】本明細書に開示された実施態様による例示的な方法を示すフローチャートを表す。
【
図6】本明細書に開示された実施態様による別の例示的な方法を示すフローチャートを示す。
【
図7】コンピューティングデバイスの例示的なアーキテクチャを示す。
【発明を実施するための形態】
【0020】
図1は、様々な実施態様による、本開示の選択された態様が実施され得る例示的な環境を概略的に表す。
図1または図の他の場所に表されている任意のコンピューティングデバイスは、メモリに格納されたコンピュータ可読命令を実行する1つ以上のマイクロプロセッサ(例えば、中央処理装置または「CPU」、グラフィカル処理装置または「GPU」)などのロジック、または特定用途向け集積回路(「ASIC」)、フィールドプログラマブルゲートアレイ(「FPGA」)などの他のタイプのロジックを含んでもよい。コード知識システム102など、
図1に表されるシステムのいくつかは、「クラウドインフラストラクチャ」と呼ばれることもあるものを形成する1つ以上のサーバコンピューティングデバイスを使用して実施されてもよいが、これは必須ではない。
【0021】
コード知識システム102は、1つ以上のクライアント1101~Pが1つ以上の対応するレガシーコードベース1121~Pを更新するのを助けるために、本開示の選択された態様を実行するように構成され得る。各クライアント110は、例えば、企業(例えば、金融機関、銀行など)、非営利団体、クラブ、大学、政府機関、または1つ以上のソフトウェアシステムを運用する任意の他の組織などのエンティティまたは組織であり得る。例えば、銀行は、預け入れおよび引き出しの追跡、ローンの追跡、投資の追跡などを含む、その管理下にある金銭を管理するために1つ以上のソフトウェアシステムを運用する場合がある。航空会社は、フライト予約の予約/キャンセル/再予約、フライトの遅延または欠航の管理、乗客、航空乗務員、および地上勤務員などのフライトに関連する人の管理、空港ゲートの管理などのために1つ以上のソフトウェアシステムを運用する場合がある。
【0022】
これらのエンティティのソフトウェアシステムの多くは、ミッションクリティカルであり得る。最小量のダウンタイムまたは誤動作でさえ、エンティティと、場合によってはその顧客の安全の両方にとって、非常に破壊的または壊滅的でさえある可能性がある。さらに、所与のレガシーコードベース112は、複雑な依存関係グラフを伴って比較的大きいことがある。その結果、ソフトウェアシステムを実行しているエンティティ110の側で、そのレガシーコードベース112を更新することがためらわれることが多い。
【0023】
コード知識システム102は、エンティティのソフトウェアシステムの基礎となるレガシーコードベースを更新するプロセスを合理化するために、過去のコードベース更新または「移行」の知識を活用するように構成され得る。例えば、コード知識システム102は、移行の一部として様々なソースコード片への特定の変更を推奨するように構成することができる。いくつかの実施態様では、コード知識システム102は、例えば、提案されたソースコード変更に十分な信頼性がある場合、ソースコード変更を自動的に実施することさえできる。
【0024】
様々な実施態様において、コード知識システム102は、1つ以上の訓練された機械学習モデル106
1~Nを示すデータを含む機械学習(
図1の「ML」)データベース104を含むことができる。これらの訓練された機械学習モデル106
1~Nは、グラフニューラルネットワーク(「GNN」)、様々な特色のリカレントニューラルネットワーク(例えば、長短期記憶または「LSTM」、ゲートリカレントユニットまたは「GRU」など)またはエンコーダ-デコーダなどのシーケンス間モデル、および、本開示の選択された態様を容易にするために適用することができる任意の他のタイプの機械学習モデルを含むがこれらに限定されない、以下でより詳細に説明される様々な形式をとることができる。
【0025】
いくつかの実施態様では、コード知識システム102はまた、1つ以上の最新のコードベース1081~Mにアクセスすることができる。いくつかの実施態様では、これらの最新のコードベース1081~Mは、例えば、機械学習モデル1061~Nのうちの1つ以上を訓練するために使用され得る。いくつかのそのような実施態様では、下記にさらに詳細に説明するように、最新のコードベース1081~Mを他のデータと組み合わせて使用して、最新のコードベース1081~Mをもたらすように更新された最新のものでないコードベース(図には表されていない)などの、機械学習モデル1061~Nを訓練することができる。本明細書で使用される「最新」は、コードベース内のすべてのソースコードが絶対的に最新のバージョンであることを要求することを意味するものではない。むしろ、「最新」とは、コードベースの所望の状態を指すことができ、その所望の状態が最新バージョンのコードベースであるか、「安定」と考えられるコードベースの最新バージョンであるか、他の基準を満たす(例えば、特定のライブラリに依存する、何らかのセキュリティプロトコルまたは規格を満たす)コードベースの最新バージョンなどであるかは関係ない。
【0026】
様々な実施態様において、そのレガシーコードベース112を更新することを所望するクライアント110は、コード知識システム102をホストするエンティティ(
図1には表されていない)との関係を確立することができる。次いで、いくつかの実施態様では、ホスト知識システム102は、クライアントのレガシーソースコードベース112の全部または一部を、例えば、インターネットなどの1つ以上のネットワーク114を介して取得し、推奨される変更を示すデータ、またはさらには更新されたソースコードをクライアント110に返すことができる。例えば、更新されているクライアントのレガシーコードベース112が大規模である他の実施態様では、コード知識システム102をホストするエンティティの1以上の代表者が、クライアントの現場に移動して、更新を実行し、および/または推奨を行うことができる。
【0027】
図2は、機械学習モデル106
1~Nの訓練中に、および/または、レガシーコードベース112にどのような変更を行う必要があるか/行うことができるかを予測するためのそれらのモデルの使用(「推論」)中に、に、コード知識システム102によって全体的または部分的に実施され得る例示的なプロセスフローのブロック図である。最初に訓練について説明し、次に推論について説明する。特に明記されていない限り、
図2の様々な構成要素は、ハードウェアとコンピュータ可読命令との任意の組み合わせを使用して実施することができる。
【0028】
左上から始めて、コードベース216は、1つ以上のタイプの1つ以上のソースコードスニペット2181~Qを含み得る。例えば、場合によっては、第1のソースコードスニペット2181は、Pythonで書かれてもよく、別のソースコードスニペット2182は、Javaで書かれてもよく、別のソースコードスニペット2183はC/C++で書かれてもよく、以下同様である。付加的にまたは代替的に、各要素2181~Qは、特定のライブラリ、エンティティ、および/またはアプリケーションプログラミングインターフェース(「API」)からの1つ以上のソースコードスニペットを表すことができる。各ソースコードスニペット218は、状況に応じて、ソースコードファイルのサブセットまたはソースコードファイル全体を含み得る。例えば、特に大きいソースコードファイルが、より小さいスニペットに分割されてもよく(例えば、関数、オブジェクトなどに線引きされる)、一方、比較的短いソースコードファイルが処理全体を通じてそのまま保持されてもよい。
【0029】
コードベース112のソースコードスニペット218
1~Qの少なくともいくつかは、それらが追加の処理を受けるために、グラフまたはツリー形式などの代替形式に変換され得る。例えば、
図2では、ソースコードスニペット218
1~Qが処理されて、抽象構文木(「AST」)222
1~Rが生成される。QとRはどちらも正の整数であってもよく、互いに等しくてもよく、または等しくなくてもよい。前述のように、ASTは、変数、オブジェクト、関数など、所与のソースコードスニペット内で発生する構造、およびこれらのコンポーネント間の構文的関係を表すことができる。いくつかの実施態様では、訓練中に、AST 220は、ソースコードスニペットの第1のバージョン(例えば、「更新予定の」バージョン)のための第1のAST、ソースコードスニペットの第2のバージョン(例えば、「ターゲットバージョン」)のための別のAST、および第1のソースコードスニペットと第2のソースコードスニペットとの間の差を伝達する第3のASTを含むことができる。
【0030】
ハードウェアと機械可読命令の任意の組み合わせを使用して実装することができるデータセットビルダ224が、入力としてAST 222
1~Rを受信し、出力として、下流処理において様々な目的に使用することができる様々な異なるタイプのデータを生成することができる。例えば、
図2では、データセットビルダ224は、「差分データ」226として、変化グラフ228、AST-ASTデータ230、および変更ラベル232を生成する。上記のように、それ自体がASTの形態をとってもよい変化グラフ228は、更新予定の/ターゲットソースコードスニペットのそれぞれのペアから生成されるASTの1つ以上のペアから生成される1つ以上の変化グラフを含み得る。言い換えれば、各ソースコードスニペット218は、AST 222にマッピングされ得る。一方がソースコードスニペットの第1のバージョンを表し、もう一方がソースコードスニペットの第2のバージョンを表すASTのペアは、変化グラフ228にマッピングされ得る。したがって、各変化グラフ228は、ソースコードスニペットを第1の(更新予定の)バージョンから第2の(ターゲット)バージョンに更新するために行われた1つ以上の変更を表す。いくつかの実施態様では、第1のバージョンから第2のバージョンへの進化中に、ソースコードスニペットへの変更ごとに個別の変化グラフが生成され得る。
【0031】
変更タイプラベル232は、訓練目的のために変化グラフ228に割り当てられるラベルを含み得る。各ラベルは、検討中の変化グラフの基礎となるソースコードスニペットに加えられた変更のタイプを指定することができる。例えば、変化グラフ228の各々は、変更タイプラベル232のそれぞれの変更タイプによってラベル付けされ得る。それぞれの変更タイプを使用して、変化グラフ228によって伝達される変更を潜在空間内のそれぞれの領域にマッピングすることができる。例えば、ラベル「変数名変更」をソースコードスニペットの1つの変更に適用することができ、別のラベル「関数名変更」を別のソースコードスニペットの別の変更に適用することができ、以下同様である。
【0032】
AST2VECコンポーネント234は、差分データ226から、1つ以上の特徴ベクトル、すなわち「潜在空間」埋め込み244を生成するように構成され得る。例えば、AST2VECコンポーネント234は、1つ以上の機械学習モデルにわたる入力として変化グラフ228を適用して、それぞれの潜在空間埋め込み244を生成することができる。機械学習モデルは、GNN 252、シーケンス間モデル254(例えば、エンコーダ-デコーダ)など、前述のように様々な形式をとることができる。
【0033】
訓練中、訓練モジュール250は、ソースコードスニペット2181~Qに直接的または間接的に基づいて埋め込み244を生成するように、GNN252またはシーケンス間モデル254などの機械学習モデルを訓練することができる。これらの埋め込み244は、ソースコードスニペット2181~Qの意味的特性および/または構文的特性、ならびにそれらのスニペットが展開されるコンテキストをキャプチャすることができる。いくつかの実施態様において、機械学習モデル(特にGNN 252)にわたって複数の変化グラフ228が入力されると、それらに割り当てられる変更タイプラベル232は、同等の変更が潜在空間で適切にともにクラスタ化されているか否かを判定する損失関数の一部として使用することができる。特定の変更タイプの変更(例えば、「変数名変更」)から生成された埋め込みが同じ変更タイプの他の埋め込みに十分に近接していない場合(例えば、他の変更タイプの埋め込みに近い場合)、GNN252は、例えば、勾配降下法および誤差逆伝搬などの技法を使用して訓練することができる。この訓練プロセスは、GNN252が変化グラフ、より一般的には、ソースコードスニペットを表すデータ構造を、構文的/意味的に類似した他のデータ構造に近い潜在空間の領域に正確にマッピングすることが可能になるまで、多数の訓練例にわたって繰り返すことができる。
【0034】
特にGNN252では、リコールがソースコードスニペットから生成されており、ASTの形態の変化グラフを含み得る差分データ226の構成ASTは、以下のように操作され得る。特徴(手動で選択するか、または訓練中に学習することができる)をASTの各ノードについて抽出して、各ノードの特徴ベクトルを生成することができる。ASTのノードは、変数、オブジェクト、または他のプログラミング構造を表し得ることを想起されたい。したがって、ノードについて生成される特徴ベクトルの特徴は、変数タイプ(例えば、int、float、文字列、ポインタなど)、名前、オペランドとして変数に作用する演算子などのような特徴を含み得る。任意の時点でのノードの特徴ベクトルは、そのノードの「状態」と見なされる場合がある。
【0035】
一方、ASTの各エッジには、機械学習モデル、例えば、特定のタイプの機械学習モデルまたは特定のデータで訓練された特定の機械学習モデルを割り当てることができる。例えば、「if」文を表すエッジには、各々、第1のニューラルネットワークを割り当てることができる。「else」文を表すエッジに、各々、第1のニューラルネットワークを割り当てることもできる。条件を表すエッジには、各々、第2のニューラルネットワークを割り当てることができる。以下、同様である。
【0036】
次に、一連の時間ステップの各時間ステップについて、各ノードの特徴ベクトル、または状態は、例えば、潜在空間への投影として、エッジ/機械学習モデルに沿ってそれらの隣接ノードに伝播することができる。いくつかの実施態様では、各時間ステップにおける所与のノードへの入来ノード状態は、例えば、互いに、および所与のノードの現在の状態と合計され得る(これは、順序不変である)。より多くの時間ステップが経過すると、ASTの所与のノードに影響を与える隣接ノードの半径が増加する。
【0037】
直感的には、隣接ノードに関する知識は各ノードの状態に増分的に「織り込まれ」、機械学習モデルがますます繰り返されるにつれて、所与のノードの状態に蓄積される遠隔隣接ノードに関する知識がますます増える。いくつかの実施態様では、必要な回数の反復が実行された後に、ASTのすべてのノードは「最終」状態に到達し得る。この反復回数は、GNN252のハイパーパラメータであり得る。いくつかのそのような実施態様では、これらの最終状態を合計して、ASTの全体的な状態または埋め込み(例えば、244)をもたらすことができる。
【0038】
いくつかの実施態様では、変化グラフ228について、変更の一部を形成するエッジおよび/またはノードは、GNN252を使用する処理中に、基礎となるソースコードスニペットのバージョン間で一定のままである他のエッジ/ノードよりも重く重み付けされ得る。その結果、基礎となるソースコードスニペットのバージョン間の変更は、変化グラフ228全体を表す結果の状態または埋め込みにより大きい影響を与えることがある。これにより、これらの埋め込みを取り巻くコンテキストの一部が多少異なる場合でも、潜在空間の類似した変更から生成された埋め込みのクラスタ化が容易になり得る。
【0039】
シーケンス間モデル254について、訓練は、基礎となるソースコードへの一連の変更において明示される黙示的ラベルを使用して実施することができる。ソースASTおよびターゲットASTで訓練するのではなく、ソースコードスニペットの第1のバージョンからソースコードスニペットの第2のバージョンへの変更パス全体を使用して訓練することが可能である。例えば、シーケンス間モデル254は、ソースコード要素(例えば、トークン、演算子など)のシーケンスに基づいて、更新されたソースコードスニペットを表すソースコード要素の「更新された」シーケンスを予測するように訓練され得る。いくつかの実施態様では、GNN252およびシーケンス間モデル254の両方を、別個におよび/または同時に利用することができる。
【0040】
機械学習モデル(例えば、252~254)が適切に訓練されると、推論段階中にそれらを使用して、新しいクライアントが、まだ更新されていないコードベースを移行することを助けることができる。再び左上から開始して、コードベース216はここで、クライアント110のレガシーコードベース112を表すことができる。訓練中とは異なり、推論中、コードベース216は、更新されるレガシーソースコードのみを含み得る。ただし、
図2の他の動作の多くは、訓練時と同様に動作する。
【0041】
更新予定のソースコードスニペット2181~Qは、AST 2221~Rを生成するために再び使用される。ただし、AST 2221~Rは、データセットビルダ224によって処理されるのではなく、例えば、AST2VECコンポーネント234によって、訓練された機械学習モデル(例えば、252、254)のうちの1つ以上にわたる入力として単純に適用されて、潜在空間内の新しいソースコード埋め込み244を生成することができる。その後、潜在空間内の1つ以上の参照埋め込みは、1つ以上の参照埋め込みと潜在空間内の新しいソースコード埋め込みとの間のそれぞれの距離に基づいて、例えば、変更リスト(「CL」)ジェネレータ246によって識別され得る。上記のように、1つ以上の参照埋め込みの各々は、例えば、訓練モジュール250によって、1つ以上の機械学習モデル(例えば、252-254)にわたる入力として、参照第2バージョンソースコードスニペットをもたらすために参照第1バージョンソースコードスニペットに加えられる変更を示すデータを適用することによって、以前に生成されていることがある。
【0042】
識別された1つ以上の参照埋め込みに基づいて、CLジェネレータ246は、更新予定のソースコードスニペットに加えられる1つ以上の変更を識別して、更新されたソースコードスニペットを作成することができる。これらの推奨されるコード変更(例えば、変更予定のコードから生成され、変更されたコード)は、ブロック248において出力され得る。付加的にまたは代替的に、いくつかの実施態様では、コード変更推奨が十分な信頼度で決定された場合、コード変更推奨は、ユーザからの入力なしに実行され得る。さらに他の実施態様では、コード変更推奨は、1つ以上の自動コード単位テストに合格するなど、他のイベントに応答して自動的に実施され得る。
【0043】
図3は、ソースコードスニペット350が潜在空間352にどのように埋め込まれ得るかの一例を示している。ソースコードスニペットsource.cc350は、そのASTがAST2VECコンポーネント234に到達するまで、
図2の様々な描写されていない構成要素を使用して処理される。前述のように、AST2VECコンポーネント234は、source.cc350から生成されたASTをGNN252などの1つ以上の機械学習モデルにわたって適用して、潜在空間352への埋め込み(
図3の暗い円によって表される)を作成する。
【0044】
図3の例では、前述の訓練プロセスが、変更タイプに対応する潜在空間352の領域354
1~Tへのマッピングを学習するために使用されている。Tは、訓練中に
図2の変化グラフ228に適用される個別の変更タイプラベル232の数に等しい正の整数であり得る。例えば、第1の領域354
1は、第1の変更タイプ、例えば、「変数名変更」に対応し得る。ソースコードスニペットにおける変数名の変更を表す変化グラフから生成された参照埋め込み(
図3の小さい円)のクラスタは、第1の領域354
1内に存在し得る。第2の領域354
2は、第2の変更タイプ、例えば、「関数名変更」に対応し得る。ソースコードスニペットにおける関数名の変更を表す変化グラフから生成された参照埋め込みの別のクラスタは、第2の領域354
2内に存在し得る。以下、同様である。これらの領域354(および
図4の454)は、特定の変更タイプのすべての既存の/既知の埋め込みの最大の囲み円または「凸包」を使用するなどによって、様々な方法で定義することができる。
【0045】
図3の例では、source.cc 350は、例えば、特定のクライアント110のための、更新予定のソースコードスニペットである。source.cc 350から生成された埋め込み(
図3の暗い点)が潜在空間352内で複数の異なる変更タイプに近接する可能性は十分にある。これは、同じまたは類似のソースコードスニペットが以前に更新されたときに、複数のタイプの変更が含まれていたことが原因であることがある。したがって、
図3の例では、source.cc 350から生成される埋め込みは、領域351
1~3の共通部分内の暗い点の位置によって示されるように
、第1の領域354
1、第2の領域354
2、および第3の領域354
3に同時にマッピングされ得る。
【0046】
どの変更を行うか、および/または推奨するかを決定するために、様々な実施態様において、1つ以上の参照埋め込みと潜在空間352内の新しいソースコード埋め込み(暗い小さい円)との間の1つ以上の距離に基づいて、潜在空間352内の1つ以上の参照埋め込み(
図3の小さい円)を識別することができる。これらの距離、または「類似度」は、コサイン類似度、ドット積など、様々な方法で計算することができる。いくつかの実施態様では、新しいソースコード埋め込みに最も近い参照埋め込みを識別して、対応するソースコード編集を決定するために使用することができる。
【0047】
例えば、いくつかの実施態様では、各参照埋め込みは、例えば、ルックアップテーブルおよび/またはデータベースにおいて、その参照埋め込みをもたらした1つ以上のソースコードの変更に関連付けられ得る。変数名変更領域3541内の最も近い参照埋め込みが、変数名「var1」を「varA」に置き換えたソースコードの変更に関連付けられていると仮定する。いくつかの実施態様では、例えば、オーディオまたは視覚出力として、更新予定のソースコードベースに同じ変更を採用することを推奨する推奨が生成および提示され得る。いくつかの実施態様では、この出力は、コードに加えられる実際の変更、および/またはコード変更に関連するコメントを伝達し得る。
【0048】
いくつかの実施態様では、そのような変更の信頼度は、例えば、より大きい信頼性に対応する新しいソースコード埋め込みと最も近い参照埋め込みとの間のより短い距離によって決定され得る。いくつかのそのような実施態様では、信頼度が非常に大きい場合、例えば、1つ以上の閾値を満たす場合、最初にユーザに促すことなく、変更を自動的に実施することができる。
【0049】
図4は、ソースコードスニペット460を使用して、参照埋め込みを作成し、および/またはGNN252などの機械学習モデルを訓練することができる方法の一例を表している。ソースコードスニペットの更新予定の第1のバージョン460は、この例では1.0.0である。ソースコードスニペットの第2の「ターゲット」バージョン460’は、この例では1.0.1である。
図4に示されるように、AST 464、464’は、それぞれ、ソースコードスニペットの第1のバージョン460および第2のバージョン460’から生成され得る。この例について、1.0.0と1.0.1との間のソースコードスニペットへの唯一の変更は、AST 464’の左下に新しいノードが追加されたことに反映されているように、変数名の変更であると想定する。
【0050】
AST 464、464’は、例えば、データセットビルダ224によって比較されて、この変化を反映する変化グラフ228を生成することができる。次に、変化グラフ228は、例えば、GNN252および/またはシーケンス間モデル254などの機械学習モデルを使用するAST2VEC234によって処理されて、矢印によって示されるような潜在空間埋め込みを生成することができる。この例では、潜在空間の埋め込みは
、潜在空間452の領域454
1に該当し、変数名変更を伴う他の参照埋め込み(
図4においても再び小さい円で表されている)も見出される。
【0051】
機械学習モデルの訓練の一環として、いくつかの実施態様では、第1バージョンソースコードスニペットと第2バージョンソースコードスニペットとの間の変更を示すデータ、例えば、変化グラフ228を、変更タイプで(232で)ラベルを付けることができる。次に、変化グラフ228を、例えば、AST2VECコンポーネント234によって、機械学習モデル(例えば、252)にわたる入力として適用して、潜在空間452内に新しい埋め込みを生成することができる。次に、新しい埋め込みと、同じ変更タイプに関連付けられた潜在空間内の以前の(例えば、参照)埋め込みとの間の潜在空間内の距離を決定し、機械学習モデルを訓練するために使用することができる。例えば、距離が大きすぎる場合、例えば、新しい埋め込みと、異なる変更タイプの参照埋め込みとの間の距離よりも大きい場合、誤差逆伝搬および勾配降下法などの技法を適用して、機械学習モデルの重みおよび/またはパラメータを変更することができる。最終的に、十分な訓練の後、同じ変更タイプの参照埋め込みが潜在空間452(
図3の潜在空間352に対応し得る)内で一緒にクラスタ化される。
【0052】
図5は、本明細書に開示される実施態様に従って、訓練された機械学習モデルを利用して、更新予定のソースコードスニペットを、参照埋め込みを含む潜在空間にマッピングする例示的な方法500を示すフローチャートである。便宜上、フローチャートの動作は、動作を実行するシステムを参照して説明されている。このシステムは、コード知識システム102の1つ以上の構成要素など、様々なコンピュータシステムの様々な構成要素を含み得る。さらに、方法500の動作は特定の順序で示されているが、これは限定を意味するものではない。1つ以上の動作を並べ替え、省略、または追加することができる。
【0053】
ブロック502において、システムは、第1バージョンソースコードスニペット(例えば、
図5の350)に関連付けられたデータを、1つ以上の機械学習モデル(例えば、252)にわたる入力として適用して、潜在空間(例えば、352)内の新しいソースコード埋め込みを生成することができる。第1バージョンソースコードスニペットに関連付けられたこのデータは、ソースコードスニペット自体を含み得、および/またはAST(例えば、222)などのソースコードスニペットの別の表現を含み得る。いくつかの実施態様では、ソースコードスニペットはソースコードファイルの一部であってもよく、またはさらにはソースコードファイル全体であってもよい。
【0054】
ブロック504において、システムは、1つ以上の参照埋め込みと潜在空間内の新しいソースコード埋め込みとの間の1つ以上の距離に基づいて、潜在空間内の1つ以上の参照埋め込みを識別し得る。前述のように、1つ以上の参照埋め込みの各々は、1つ以上の機械学習モデルにわたる入力として、参照第2バージョンソースコードスニペット(
図4の460’)をもたらすために参照第1バージョンソースコードスニペット(
図4の460)に加えられる変更を示すデータ(例えば、228)を適用することによって、(例えば、
図4に示すように)生成されていることがある。また、様々な実施態様において、各参照埋め込みは、例えば、ルックアップテーブルおよび/またはデータベースにおいて、参照埋め込みの基礎となるソースコードに行われた1つ以上の変更に関連付けられ得る。
【0055】
ブロック506において、システムは、識別された1つ以上の参照埋め込みに基づいて、第2バージョンソースコードスニペットを作成するために、第1バージョンソースコードスニペットに加えられている1つ以上の変更を識別することができる。例えば、システムは、ルックアップテーブルまたはデータベース内の最も近い参照埋め込みに関連付けられた1つ以上の変更を検索し得る。
【0056】
ブロック508において、ブロック506の識別に関連する信頼度測度は、1つ以上の閾値と比較され得る。この信頼度測度は、例えば、新しいソースコード埋め込みと潜在空間内の最も近い参照埋め込みとの間の距離に基づいて決定することができる。例えば、いくつかの実施態様では、信頼度測度、または、より一般的には、信頼度測度によって示される信頼性は、この距離に反比例し得る。
【0057】
ブロック508において、信頼度測度が閾値を満たしている場合、方法は、ブロック510に進むことができ、その時点で、ブロック506において識別された1つ以上の変更が自動的に実施され得る。しかしながら、ブロック508において、信頼度測度が閾値を満たさない場合、ブロック512において、システムは、例えば、クライアント110によって操作される1つ以上のコンピューティングデバイスにコード変更を推奨させるデータを生成することができる。いくつかのそのような実施態様では、クライアントは、例えば、グラフィカルユーザインターフェース上のボタンを押すことによって、または確認を発話することによって、変更を「受け入れる」ことが可能であり得る。いくつかの実施態様では、推奨されるコード変更の受け入れを使用して、本明細書で説明される1つ以上の機械学習モデル、例えば、GNN252またはシーケンス間モデル254をさらに訓練することができる。
【0058】
図6は、本明細書に開示される実施態様に従って、更新予定のソースコードスニペットを、参照埋め込みを含む潜在空間にマッピングするようにGNN252などの機械学習モデルを訓練する例示的な方法600を示すフローチャートである。便宜上、フローチャートの動作は、動作を実行するシステムを参照して説明されている。このシステムは、コード知識システム102の1つ以上の構成要素など、様々なコンピュータシステムの様々な構成要素を含み得る。さらに、方法600の動作は特定の順序で示されているが、これは限定を意味するものではない。1つ以上の動作を並べ替え、省略、または追加することができる。
【0059】
ブロック602において、システムは、第1バージョンソースコードスニペットと第2バージョンソースコードスニペットとの間の変更を示すデータを取得することができる。例えば、変化グラフ228は、例えば、データセットビルダ224によって、第1バージョンソースコードスニペット460および第2の(または「ターゲット」)バージョンのソースコードスニペット460’に基づいて生成され得る。ブロック604において、システムは、例えば、データセットビルダ224を介して、変更タイプラベル(例えば、
図2の232)によって変更を示すデータをラベル付けすることができる。
【0060】
ブロック606において、システムは、機械学習モデル、例えば、GNN252にわたる入力として、変更を示すデータ(例えば、変化グラフ228)を適用して、潜在空間(例えば、452)内の新しい埋め込みを生成することができる。ブロック608において、システムは、同じおよび/または異なる変更タイプに関連付けられた、潜在空間内の新しい埋め込みと以前の埋め込みとの間の潜在空間における距離を決定することができる。これらの距離は、コサイン類似度、ドット積などの技法を使用して計算できる。
【0061】
ブロック610において、システムは、損失関数およびブロック608において決定された距離を使用してエラーを計算することができる。例えば、変更タイプ「変数名変更」を有する新しい埋め込みが、「変数名変更」タイプの以前の埋め込みよりも「関数名変更」タイプの以前の埋め込みに近い場合、これは、新しい埋め込みを生成した機械学習モデルを更新または訓練する必要があることを示し得る。したがって、ブロック612において、システムは、ブロック610において計算されたエラーに少なくとも部分的に基づいて、機械学習モデルを訓練することができる。ブロック612の訓練は、勾配降下法および/または誤差逆伝搬などの技法を伴い得る。付加的にまたは代替的に、様々な実施態様において、類似/非類似または近接/非近接などのラベルの使用を含み得る、弱教師またはトリプレット損失などの、他のタイプのラベルおよび/または訓練技法を使用して、機械学習モデルを訓練することができる。
【0062】
図7は、本明細書に記載の技法の1つ以上の態様を実行するために任意選択的に利用することができる例示的なコンピューティングデバイス710のブロック図である。コンピューティングデバイス710は、典型的には、バスサブシステム712を介していくつかの周辺デバイスと通信する少なくとも1つのプロセッサ714を含む。これらの周辺デバイスは、例えば、メモリサブシステム725およびファイルストレージサブシステム726を含むストレージサブシステム724と、ユーザインターフェース出力デバイス720と、ユーザインターフェース入力デバイス722と、ネットワークインターフェースサブシステム716とを含むことができる。入力および出力デバイスは、コンピューティングデバイス710とのユーザのインタラクションを可能にする。ネットワークインターフェースサブシステム716は、外部ネットワークへのインターフェースを提供し、他のコンピューティングデバイス内の対応するインターフェースデバイスに結合される。
【0063】
ユーザインターフェース入力デバイス722は、キーボード、マウス、トラックボール、タッチパッド、またはグラフィックタブレットなどのポインティングデバイス、スキャナ、ディスプレイに組み込まれたタッチスクリーン、音声認識システム、マイクロフォンなどの音声入力デバイス、および/または他のタイプの入力デバイスを含んでもよい。一般に、「入力デバイス」という用語の使用は、コンピューティングデバイス710または通信ネットワークに情報を入力するためのすべての可能なタイプのデバイスおよび方法を含むことを意図している。
【0064】
ユーザインターフェース出力デバイス720は、ディスプレイサブシステム、プリンタ、ファックス機、またはオーディオ出力デバイスなどの非視覚的表示を含み得る。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)などのフラットパネルデバイス、投影デバイス、または可視画像を作成するための他の何らかのメカニズムを含んでもよい。ディスプレイサブシステムはまた、オーディオ出力デバイスなどを介した非視覚的表示を提供してもよい。一般に、「出力デバイス」という用語の使用は、コンピューティングデバイス710からユーザまたは別のマシンもしくはコンピューティングデバイスに情報を出力するためのすべての可能なタイプのデバイスおよび方法を含むことを意図している。
【0065】
ストレージサブシステム724は、本明細書で説明されるモジュールのいくつかまたはすべての機能を提供するプログラミングおよびデータ構造を格納する。例えば、ストレージサブシステム724は、
図5~
図6の方法の選択された態様を実行するためのロジック、ならびに
図1~
図2に表される様々な構成要素を実施するためのロジックを含み得る。
【0066】
これらのソフトウェアモジュールは、一般に、プロセッサ714によって単独で、または他のプロセッサと組み合わせて実行される。ストレージサブシステム724内で使用されるメモリ725は、プログラム実行中に命令およびデータを格納するためのメインランダムアクセスメモリ(RAM)730、ならびに、固定命令が格納される読み出し専用メモリ(ROM)732を含むいくつかのメモリを含むことができる。ファイルストレージサブシステム726は、プログラムおよびデータファイルのための永続的な記憶を提供することができ、ハードディスクドライブ、関連する取り外し可能媒体を伴うフロッピーディスクドライブ、CD-ROMドライブ、光学ドライブ、または取り外し可能媒体カートリッジを含んでもよい。特定の実施態様の機能を実施するモジュールは、ファイルストレージサブシステム726によって、ストレージサブシステム724内に、またはプロセッサ714によってアクセス可能な他のマシンに格納され得る。
【0067】
バスサブシステム712は、コンピューティングデバイス710の様々な構成要素およびサブシステムを意図したように互いに通信させるためのメカニズムを提供する。バスサブシステム712は、単一のバスとして概略的に示されているが、バスサブシステムの代替の実施態様は、複数のバスを使用してもよい。
【0068】
コンピューティングデバイス710は、ワークステーション、サーバ、コンピューティングクラスタ、ブレードサーバ、サーバファーム、または他の任意のデータ処理システムもしくはコンピューティングデバイスを含む様々なタイプのものであってもよい。コンピュータおよびネットワークの絶えず変化する性質のために、
図7に表されるコンピューティングデバイス710の説明は、いくつかの実施態様を示すための特定の例としてのみ意図されている。
図7に表されるコンピューティングデバイスよりも多いまたは少ない構成要素を有する、コンピューティングデバイス710の他の多くの構成が可能である。
【0069】
いくつかの実施態様を本明細書において説明および図示してきたが、機能を実行するため、ならびに/または本明細書に記載の結果および/もしくは1つ以上の利点を得るための様々な他の手段および/または構造を利用することができ、そのような変形例および/または修正例の各々は、本明細書に記載されている実施態様の範囲内であると見なされる。より一般的には、本明細書に記載のすべてのパラメータ、寸法、材料、および構成は例示的であるように意図されており、実際のパラメータ、寸法、材料、および/または構成が、本教示が用いられる1つ以上の特定の用途に依存することが意図されている。当業者は、日常の実験のみを使用して、本明細書に記載されている特定の実施態様に対する多くの均等物を認識することになり、または、それを究明することが可能になる。それゆえ、上記の実施態様は例としてのみ提示されていること、ならびに、添付の特許請求項およびその均等物の範囲内で、実施態様は、具体的に説明および特許請求されているものとは他の様態で実践されてもよいことが理解されるべきである。本開示の実施態様は、本明細書において記載されている各個々の特徴、システム、物品、材料、キット、および/または方法を対象とする。加えて、そのような特徴、システム、物品、材料、キット、および/または方法が相互に矛盾しない場合、2つ以上のそのような特徴、システム、物品、材料、キット、および/または方法の任意の組み合わせが、本開示の範囲内に含まれる。
【国際調査報告】