JP2019153270A - クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別 - Google Patents

クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別 Download PDF

Info

Publication number
JP2019153270A
JP2019153270A JP2018156256A JP2018156256A JP2019153270A JP 2019153270 A JP2019153270 A JP 2019153270A JP 2018156256 A JP2018156256 A JP 2018156256A JP 2018156256 A JP2018156256 A JP 2018156256A JP 2019153270 A JP2019153270 A JP 2019153270A
Authority
JP
Japan
Prior art keywords
target project
project
target
similarity score
candidate
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
JP2018156256A
Other languages
English (en)
Other versions
JP7131199B2 (ja
Inventor
ケイ サハ・リポン
K Saha Ripon
ケイ サハ・リポン
アール プラサド・ムクル
R Prasad Mukul
アール プラサド・ムクル
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2019153270A publication Critical patent/JP2019153270A/ja
Application granted granted Critical
Publication of JP7131199B2 publication Critical patent/JP7131199B2/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/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • 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/20Software design

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Computer Security & Cryptography (AREA)
  • Artificial Intelligence (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別を可能とする方法、及びコンピュータプログラムを提供する。【解決手段】ソフトウェアプログラムである一以上のターゲットプロジェクト候補、及び対象プロジェクトのフィーチャ情報にアクセスして、ターゲットプロジェクト候補の各々のフィーチャ情報と、対象プロジェクトのフィーチャ情報との間の類似度スコアを決定する。次に、ターゲットプロジェクト候補の各フィーチャのフィーチャ情報の類似度スコアを合計して、各ターゲットプロジェクト候補の合計類似度スコアを生成し、類似ターゲットプロジェクトセットを生成する。生成した類似ターゲットプロジェクトに基づいて、推奨されたコードを対象プロジェクトに実装して、不具合を修復する。【選択図】図9

Description

この出願は、概して、クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別に関する。
クロスプロジェクト学習により、既存プロジェクトのレビューに基づき対象プロジェクトの修正が可能になる。例えば、既存プロジェクトのレビューにより、対象プロジェクト中の問題の識別が可能になり、それらは対象プロジェクトにおいて修復することができる。さらに、クロスプロジェクト学習においては、既存のプロジェクトに組み込まれた既存の解を用いて、対象プロジェクトの問題を修復することができる。このようにすれば、リワーク量が減少し得る。例えば、対象プロジェクトの問題を修復する効率は、既存プロジェクトに対してすでに行われたワークを用いることにより、改善し得る。
クロスプロジェクト学習においては、従来のツールはワンサイズ・フィッツオール(one−size−fits−all)アプローチに従う。例えば、従来のツールの多くは、多くの、整理されておらず無関係なソフトウェアプログラムを含む一般コーパスを用いる。一般コーパスはどの対象プロジェクトやどのコードサーチにも用いられる。一般コーパスの利用は無関係なプロジェクトも含まれる。無関係なプロジェクトはノイズとなり、コードサーチと学習プロセスに関連するコストを増大させる。
特許請求の範囲に記載した主題は、何らかの欠点を解消する実施形態や、上記のような環境のみで動作する実施形態に限定されない。むしろ、この背景技術は、この明細書に説明する幾つかの実施形態を実施できる技術分野例を示すだけである。
一実施形態の一態様では、対象プロジェクトを改善するクロスプロジェクト学習の方法は、ターゲットプロジェクト候補データベースが、一以上のターゲットプロジェクト候補のフィーチャ情報を含むフィーチャにアクセスすることを含んでいてもよい。本方法は、サーバが、対象プロジェクトのフィーチャ情報を含むフィーチャにアクセスすることを含んでもよい。ターゲットプロジェクト候補と対象プロジェクトとはソフトウェアプログラムを含んでいてもよい。本方法は、各ターゲットプロジェクト候補のフィーチャ情報と対象プロジェクトのフィーチャ情報との間の類似度スコアを決定することを含んでいてもよい。類似度スコアは、各ターゲットプロジェクト候補の各フィーチャに対して決定されてもよい。本方法は、前記ターゲットプロジェクト候補の各フィーチャの類似度スコアを合計して、前記ターゲットプロジェクト候補の各々の合計類似度スコアを生成することを含んでいてもよい。本方法は、前記合計類似度スコアにより前記ターゲットプロジェクト候補をソートすることを含んでいてもよい。本方法は、前記合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることを含んでいてもよい。本方法は、合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む、類似ターゲットプロジェクトのセットを生成することとを含んでいてもよい。本方法は、前記類似ターゲットプロジェクトに基づいて対象プロジェクト中の不具合を特定することを含んでいてもよい。本方法は、前記類似ターゲットプロジェクトに基づいて、前記対象プロジェクト中の不具合を修復するコードを推奨することを含んでいてもよい。本方法は、推奨されたコードを前記対象プロジェクトに実装して前記不具合を修復することにより前記対象プロジェクトを修正することを含んでいてもよい。
実施形態の目的と利点は、少なくとも、特許請求の範囲に具体的に記載した要素、特徴、及び組み合わせにより実現及び達成される。言うまでもなく、上記の概要と、下記の詳細な説明とは、説明をするためのものであり、特許請求の範囲に記載された本開示を制限するものではない。
添付した図面を用いて、実施形態の例をさらに具体的に詳しく説明する。
対象プロジェクトのクロスプロジェクト学習が実施され得る例示的な第1のクロスプロジェクト学習環境を示す図である。
対象プロジェクトのクロスプロジェクト学習が実施され得る例示的な第2のクロスプロジェクト学習環境を示す図である。
プロジェクト間の類似度スコアを決定する例示的なプロセスを示す模式図である。
図3のプロセスを用いるクロスプロジェクト学習の例示的な応用を示す図である。
図4の例示的な応用の結果を示す図である。
特徴(features)の特徴情報を抽出する例示的な方法を示すフロー図である。
特徴情報を前処理する例示的な方法を示すフロー図である。
ベクトルを構成し比較する例示的な方法を示すフロー図である。
関連特徴情報検索の例示的な方法を示すフロー図である。
テストデータ生成と修正対象プロジェクト検証(modified subject project validation)の例示的な方法を示すフロー図である。
すべての図は、本開示に説明される少なくとも1つの実施形態に従う。
ソフトウェア開発では、クロスプロジェクト学習を利用して、ソフトウェア問題をより効率的に解決することができる。クロスプロジェクト学習を利用することにより、現在のソフトウェア問題に対する解決策が全体で再作成されない。それどころか、現在のソフトウェア問題に対する解決策が過去のソフトウェア問題に対して実施された解決策に基づく。例えば、ソフトウェア開発者や自動化ツールは、以前の関連プロジェクトにおいて同様のソフトウェアバグがどのように解決されたかを学習することにより、ソフトウェアバグを解決することができる。
クロスプロジェクト学習においては、ソフトウェアプログラムのデータベースを利用して現在のソフトウェア問題に関してより多くを学習する。現在のソフトウェアは対象プロジェクトとも呼ばれることがある。しかし、従来のクロスプロジェクト学習では、この単一データベースは、ソフトウェアプログラムの固定リポジトリであり、対象プロジェクトに関わらず利用され得る。したがって、データベースを用いて実施されるコードサーチにより、ターゲットプロジェクトの複数候補の識別情報が得られる。ターゲットプロジェクトの複数候補には、関連するプログラムも無関係のプログラムも含まれ、目的、機能、言語、ドメインなどで、ある範囲に入るプログラムも含み得る。ターゲットプロジェクト候補の広がりと範囲により、クロスプロジェクト学習が非効率的になり、計算リソースが無駄になる。
また、いくつかのコードサーチアプリケーションは、所望のコーパスを決定するのに役立ち得る。例えば、開発者のくせが予測されるアプリケーションなどの一般的なコードサーチアプリケーションは、複数の異なるプログラムタイプと言語を有するコーパスの利益を受け得る。例えば、幾つかのコードサーチアプリケーションは、C、C++、JAVA(登録商標)その他のプログラミング言語などの複数のプログラミング言語のコーパスの利益を受け得る。その他の場合は、単一言語コーパスの利益を受け得る。例えば、Null−Pointer−Exception(NPE)バグの修復などの特定言語アプリケーションは、JAVAプロジェクトのみのコーパスの利益を受け得る。同様に、幾つかの特定ドメインアプリケーションは、関連するソフトウェアプロジェクトのみのコーパスの利益を受け得る。例えば、アプリケーションプログラミングインターフェース(API)に関係するバグを直すことは、関連ソフトウェアプロジェクトのみのコーパスの利益を受け得る。
したがって、本開示の幾つかの実施形態は、関連するソフトウェアプロジェクトを用いて対象プロジェクトを改良するクロスプロジェクト学習の方法を含む。
本開示で説明する実施形態は、クロスプロジェクト学習の方法を含み得る。関連するプロジェクトのコーパスはデータベースに格納された大きなプロジェクトセットから選択され得る。データベースに格納された大きなプロジェクトセットは、関連プロジェクトのコーパスとして選択される関連プロジェクトに加えて、無関係のプロジェクトを含み得る。幾つかの実施形態はコンピュータ及びネットワーク環境の機能を改善する。例えば、幾つかの実施形態は、類似のターゲットプロジェクトに基づき対象プロジェクトの不具合を特定すること、前記類似のターゲットプロジェクトに基づき、前記対象プロジェクトの不具合の修復するコードを推奨することと、推奨されるコードを前記対象プロジェクトに実装することにより前記対象プロジェクトを修正して、前記不具合を修復することとを含み得る。対象プロジェクトを修正することにより、よりクオリティが高いコードパッチが得られ、計算のオーバーヘッドとネットワーク輻輳が低減され、ダウンタイムが短縮され、コード実行中の効率が良くなり、不要なコードが削除され、ループや長い計算が統合され、ウォーム、ウィルス及びマルウェアから保護または修復され、コール機能がより効率的または適切になり、分析的出力のエラーマージンが低下し、プロセッサやサーバで必要となる計算パワーのサイズが縮小し、ネットワーク機能のスピードが速くなり、またはこれらの組み合わせが得られる。
追加的にまたは代替的に、幾つかの実施形態は、ターゲットプロジェクト候補の各々の特徴情報と、対象プロジェクトの特徴情報との間の類似度スコアを決定することであって、類似度スコアはターゲットプロジェクト候補の各々の各特徴に対して決定され得ることと、ターゲットプロジェクト候補の各特徴の類似度スコアを合計して、ターゲットプロジェクト候補の各々の合計類似度スコアを生成することと、合計類似度スコアによりターゲットプロジェクト候補をソートすることと、合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることと、合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む、類似ターゲットプロジェクトのセットを生成することとを含み得る。上記の例示的ステップの1つ又は複数により、クロスプロジェクト学習におけるサーチ結果がより高速に求まり、サーチコストが低くなり、コードパッチがより効果的になり、実行可能が減り、及び/又は計算オーバーヘッドが低減される。
また、本明細書に説明する方法は、ソフトウェア開発、分析、欠陥予測、不具合修復及び/又はテスト生成の技術分野を改善できる。例えば、幾つかの実施形態は、類似のターゲットプロジェクトに基づき対象プロジェクトの不具合を特定すること、前記類似のターゲットプロジェクトに基づき、前記対象プロジェクトの不具合の修復を推奨することと、推奨されるコードを前記対象プロジェクトに実装することにより前記対象プロジェクトを修正して、前記不具合を修復することとを含み得る。本開示で説明する方法に基づき修正された対象プロジェクトにより、クロスプロジェクト学習がより効率的になり、同様に、ソフトウェア開発、コードのデバッグ、コード分析がより高速になり、その他のソフトウェア的改善が得られる。対象プロジェクトを修正するそのような方法は、従来の方法に対する改善である。従来の方法では、コンピュータソフトウェアプログラムの固定リポジトリの利用のため非効率的であり、幾つかのアプリケーションや実施例では、不要なサイズオーバーのサーチ結果出力のために計算オーバーヘッドが過剰になり、性能(例えば、スピード性能)が低下したり、不要な/強制されたパラメータにより(例えば、エンベディッドデバイスへのインストールの場合)特定ドメインのコンパチビリティや機能性などのオブジェクトに対して制限されたりすることがある。
本開示で説明する幾つかの実施形態は、(対象プロジェクトに関する)学習が関連プロジェクトのコーパスを用いて実行され得るクロスプロジェクト学習の方法を含み得る。学習する関連プロジェクトを得るため、プロジェクト候補の大きいコーパスを最初に分析して対象プロジェクトへの類似度を求めてもよい。候補プロジェクトの対象プロジェクトに対する類似度に基づき、各候補プロジェクトは類似度スコアを与えられる。類似度スコアは非類似の候補プロジェクトをフィルタ除去するのに用いられ得る。例えば、類似度スコアが最高の候補プロジェクトが選択されてもよい。選択された候補プロジェクトに基づいて、対象プロジェクトの不具合を特定することができ、その不具合を修復するコードが推奨されてもよい。推奨されるコードを前記対象プロジェクトに実装することにより、対象プロジェクトが修正され、不具合を修復することができる。
幾つかの実施形態では、類似度の分析は特徴(features)に基づいても良い。特徴には、例えば、プロジェクトの説明、クラス名、メソッド名、変数名、コメント、及び依存するAPI名などが含まれても良い。対象プロジェクトと候補プロジェクトの特徴情報は、特徴レベルで類似度スコアが提供されるように類似度に基づいて比較される。このように、幾つかの実施形態では、各候補プロジェクトの各特徴は、対象プロジェクトの特徴に関する類似度スコアを有していてもよい。追加的に又は代替的に、各候補プロジェクトにおける各特徴の類似度スコアは、足し合わせることができ、全体として候補プロジェクトの複合または合計類似度スコアとなり得る。合計類似度スコアに基づき、対象プロジェクトに最も関連する又は最も類似する候補プロジェクトが選択され得る。
これらの又は他の実施形態を、添付した図面を参照して説明する。添付した図面において、特に断らなければ、同様の項目番号を有する特徴および構成要素は、同様の構造および機能を示す。添付した図面は、必ずしもスケール通りには描かれていない。
図を参照して、図1は、本開示で説明する少なくとも1つの実施形態にしたがって構成される第1の例示的なクロスプロジェクト学習環境(第1の実施形態)100を示す。図示したように、第1の実施形態100は、サーバ102と対象プロジェクト105とを含み得る。対象プロジェクト105は、ソースコード110、リードミーファイル115、及び一以上のテストケース120を含み得る。追加的に、第1の実施形態100は、バス123を介して通信可能に結合されたコンポーネントを含むサーチモジュール122を有する計算デバイス121を含む。サーチモジュール122は、ターゲットプロジェクト候補データベース(図1の「ターゲットプロジェクト候補」)125、フィルタ130、類似ターゲットプロジェクト135、及びプロセッサ137を含み得る。幾つかの実施形態では、第1の環境100は、パッチ候補140、テストモジュール145を有する計算デバイス141、及びプローザブルパッチ(plausible patch)150も含み得る。第1の環境100において、クロスプロジェクト学習及び/又は不具合修復は、下記の実施形態を参照して説明するように自動的または半自動的に行われ得る。
幾つかの実施形態では、対象プロジェクト105は、問題があるとして、又はそうでなければコード修復を必要としているとして特定され得る。例えば、対象プロジェクト105は、実行されたとき、エラーを起こすソフトウェア問題であってもよい。このように、エラーを生じる不具合を修復するため、対象プロジェクト105の情報が、サーバ102からサーチモジュール122によりアクセスされ得る。サーバ102からアクセスされる情報は、類似した特徴を含むターゲットプロジェクト候補を、またはすでに実行された潜在的に類似したコード修復を、特定するために利用されてもよい。
例えば、対象プロジェクト105は不具合を含んでいるかも知れず、これはソースコード110の一以上の潜在的位置に位置しても良く、この位置はバグ位置と呼ばれ得る。追加的に又は代替的に、ユーザは、サーチモジュール122により実行されるコードサーチのために、ソースコード110の一以上のバグ位置を選択することができる。コードサーチにより、バグのあるソースコード110に対する潜在的な修復やパッチを得ることができる。コードサーチを実行するため、サーチモジュール122は、対象プロジェクト105と、ターゲットプロジェクト候補データベース125中のターゲットプロジェクト候補とに関する情報にアクセスして、アクセスされた情報を比較して、フィルタ130により類似度を求める。
例えば、対象プロジェクト105のソースコード110、リードミーファイル115、及びテストケース120の一以上のテキスト情報が、サーチモジュール122により、サーバ102からアクセスされ得る。追加的に又は代替的に、ターゲットプロジェクト候補データベース125中の一以上のターゲットプロジェクト候補のテキスト情報にアクセスしてもよい。これには、一以上のターゲットプロジェクト候補のソースコード、リードミーファイル、及びテストケースの一部または全部が含まれる。これらの又は他の実施形態において、対象プロジェクト105と、ターゲットプロジェクト候補データベース125のターゲットプロジェクト候補のうち一方または両方は、ソフトウェアプログラム(ソフトウェアプログラムの一部又は全部)であってもよい。
幾つかの実施形態では、対象プロジェクト105とターゲットプロジェクト候補とのアクセスされるテキスト情報は、フィルタ130により比較され、類似度(similarity)が得られる。例えば、対象プロジェクト105に関して類似度がある値または量のターゲットプロジェクト候補が、フィルタ130を用いてプロセッサ137により選択され得る。後で詳細に説明するように、対象プロジェクト105とターゲットプロジェクト候補との間の類似の程度は、テキストの類似度に基づいても良いし、様々な式を用いて決定されてもよい。さらに、幾つかの実施形態では、選択されるターゲットプロジェクト候補は、類似したターゲットプロジェクト135を含んでいてもよい。
幾つかの実施形態では、類似ターゲットプロジェクト135に基づいて、パッチ候補140が、対象プロジェクト105中の不具合を修復するのに潜在的に有益であるとして、サーチモジュール122により決定されてもよい。例えば、コードサーチ手法を用いて、サーチモジュール122はパッチ候補140を決定してもよい。コードサーチ手法の例にはssFix、すなわちプログラム構文を利用してバグを修正するプログラム修復ツールが含まれてもよい。
幾つかの実施形態では、テストモジュール145はパッチ候補140をテストすることができる。例えば、予め決定された性能標準を用いて、パッチ候補140のうちのプローザブルパッチ(plausible patch)150が特定され得る。所定の性能標準には、産業標準、速度要求、精度要求、計算オーバーヘッド要求、クライアントドリブンまたはエンドユーザドリブン要求などが含まれる。追加的に又は代替的に、所定の性能標準は、未修復の不具合を有する対象プロジェクト105の性能に対し、プローザブルパッチ150が適用された対象プロジェクト(例えば、修正された対象プロジェクト105)の性能に基づいていてもよい。
プローザブルパッチ150により、対象プロジェクト105の不具合は、例えば、自動的に又は半自動的に修復できる。追加的に又は代替的に、次のうち一部または全部が実行されてもよい:対象プロジェクト105中の他の不具合(defects)の予測、対象プロジェクト105中の一以上の不具合を修復する、類似ターゲットプロジェクト135に基づくコードの推奨、修正対象プロジェクト105をテストするテストデータの精製、エンドユーザへの修正された対象プロジェクト105のダウンロードのプッシュなど。これらの例は、例えば、類似ターゲットプロジェクト135中の関連コードの決定、又はパッチ候補140の決定に応じて実行されるアクティブステップであってもよい。例えば、本明細書で説明する方法により、プロセッサ137は、(例えば、グラフィカルユーザインターフェイス(GUI)を介して)ユーザに、対象プロジェクト105に適用されるパッチ候補140の1つを、確認、選択、延期、無視、又は否定するように促す。同様に、本明細書に説明の方法により、プロセッサ137は、追加的に必要な修復を予測し、類似のターゲットプロジェクト135を考慮して追加的な修復を行うことを、ユーザに推奨してもよい。
図2は、本開示で説明する少なくとも1つの実施形態にしたがって構成され得る第2の例示的環境200を示す図である。第2の環境200は、ソフトウェア開発者205、ソフトウェアエンドユーザ210、ターゲットプロジェクト候補データベース215、開発者入力220、ユーザ入力225、クローラー230、原データ235、決定モジュール240と類似ターゲットプロジェクトデータベース245とを有する計算デバイス237、検索モジュール250を有する計算デバイス247、アプリケーションモジュール255を有する計算デバイス252、及び人間の開発者260を含み得る。これらの又は他の実施形態において、第2の環境200は第1の環境100より広いコンテキストを示すことができる。
幾つかの実施形態では、ソフトウェア開発者205は開発者入力220を生成し得る。開発者入力220には、例えば、ドキュメンテーション、メタデータ、リードミーファイル、テストケース、疑似コード、ソースコード、ディスカッション、ノート、コメント、タグ、パッチなどが含まれてもよい。幾つかの実施形態では、ソフトウェア開発者210は開発者入力225を生成し得る。ユーザ入力225には、例えば、バグレポート、ユーザレビュー、分析レポート、エラーメッセージ、バックアップファイル、リカバリーファイル、ビジュアルディスプレイ、チャート、グラフ、スプレッドシート、その他の好適な入力及びこれらの組み合わせが含まれてもよい。これらの又は他の実施形態において、開発者入力220とユーザ入力225が生成され、ターゲットプロジェクト候補データベース215に格納される。
クローラー(crawler)230は、ターゲットプロジェクト候補データベースをクロール(crawl)して、情報をスクラップし、原データ235を生成してもよい。原データ235はターゲットプロジェクト候補の1つと関連付けられ続けてもよい。幾つかの実施形態では、決定モジュール240は原データ235から好適な抽象をする。例えば、決定モジュール240は、原データ235の様々な部分を抽出して、前処理などの様々な操作を実行することができる。前処理は、本開示において以下にさらに説明するが、識別名称の分離、ストップワードの削除、及び残った言葉のステミング(stemming)を含み得る。幾つかの実施形態では、前処理には、文法及び/又は単語の順序を無視するbag−of−wordsアプローチが含まれてもよい。追加的に又は代替的に、類似ターゲットプロジェクトデータベース245においてインデックス及びアーカイブするのに、原データ235のどの情報が適切であるか、決定モジュール240が判定してもよい。例えば、決定モジュール240は、類似度を求めるため、(対象プロジェクト105などの)対象プロジェクトの情報を、一以上のターゲットプロジェクト候補に関連する原データ235と比較してもよい。類似の程度が十分であると判定されると、決定モジュール240は、類似ターゲットプロジェクトのセットを生成して、類似ターゲットプロジェクトデータベース245に格納してもよい。類似ターゲットプロジェクトセットの生成は、原データ235と、対象プロジェクトに対する類似度が十分大きい、関連するターゲットプロジェクト候補と、に基づくものであってもよい。類似ターゲットプロジェクトの情報は、適切にインデックスされて、類似ターゲットプロジェクトデータベース245にアーカイブされてもよい。このデータベース245では、各類似ターゲットプロジェクトの各特徴が、あるインデックスに関連付けられていてもよい。本開示では、用語「特徴(feature)」は、ソフトウェアプログラム中の測定可能な特性(property or characteristic)であって、関連するソフトウェアプログラムを識別するために区別するために使用できるものとして解釈できる。
幾つかの実施形態では、検索(retrieval)モジュール250は、ソフトウェアプログラム分析、コードサーチ、及び/又は人工知能機能、例えば対象プロジェクトに対して反復的に改善するために(深層学習を含む)機械学習を実行してもよい。追加的に又は代替的に、検索モジュール250は、類似ターゲットプロジェクトセットが、サーチされたコーパスであるコードサーチを実行してもよい。
類似ターゲットプロジェクトを用いるコードサーチに基づいて、パッチ候補が決定され、及び/又はアプリケーションモジュール255において使用のためテストされる。例えば、人間開発者260は、性能テストを行っても良く、そうでなければアプリケーションモジュールにおけるパッチ候補を管理してもよい。幾つかの実施形態では、アプリケーションモジュール255は、統合開発環境(IDE)を含んでいてもよく、検索モジュール250と人間開発者260のうち一方または両方から入力を受け取ってもよい。追加的に又は代替的に、アプリケーションモジュール255は、検索モジュール250及び人間開発者260のうち一方または両方への出力を生成してもよい。
他の実施形態では、類似ターゲットプロジェクトを用いるコードサーチに基づき、不具合が予測され得る。かかる不具合予測はアプリケーションモジュール255における利用にとって有用であり得る。例えば、不具合が明示的に特定されてもよく、他の場合では、不具合がありそうだと予測されてもよい。例えば、不具合の存在がある確率で予測されてもよい。追加的に又は代替的に、不具合が、対象プロジェクト中のある行、あるセクション、ある関数、及び/又はある場所に存在すると予測されてもよい。これらの又はその他の実施形態では、不具合予測はパッチ候補を含んでもよく、一方、他の実施形態では、不具合予測にはパッチ候補が含まれていなくてもよい。
図1と図2を両方とも参照して、サーチモジュール122、テストモジュール145、決定モジュール240、検索モジュール250、及びアプリケーションモジュール255を含め、各モジュールは、一以上の動作を実行するように構成された一以上のルーチンを含むソフトウェアとして実施することができる。これらのモジュールは、以下に説明する機能を提供する、プロセッサにより実行可能な命令セットを含んでいてもよい。幾つかの実施例では、モジュールは、計算デバイス121、計算デバイス141、計算デバイス237、計算デバイス247、及び計算デバイス252の、対応するメモリに、記憶され、又は少なくとも一時的にロードされてもよい。また、モジュールは一以上のプロセッサによりアクセス可能であり、かつ実行可能であってもよい。これらのモジュールのうち一以上は、バス123などのバスを介して、計算デバイス121、141、237、247、及び252の一以上のプロセッサ及びコンポーネントと協働及び通信するように構成されていてもよい。
図3は、図1の第1の環境100において実施され得る、プロジェクト間の類似度スコア決定の図式300を示す概略図である。図式300で表されるプロセスは、対象プロジェクト310を改善するように実施され得る。図示した実施形態では、図式300は、ターゲットプロジェクト候補305(図3の「候補プロジェクト」)、対象プロジェクト310、ターゲットフィーチャ315、対象フィーチャ320、前処理325、BM25ベースのベクトル空間モデル330、類似度スコア335(図3のS1−S6)、合計類似度スコア340、ソートモジュール345、閾値350、選択モジュール355、及び類似ターゲットプロジェクト360を含み得る。
幾つかの実施形態では、図式300は、ターゲットプロジェクト候補305と対象プロジェクト310において何の情報がアクセスされるかを示す。例えば、ターゲットフィーチャ315は、ターゲットプロジェクト候補305の1つに属するが、アクセスされ得る。同様に、例えば、対象フィーチャ320は、対象プロジェクト310に属するが、アクセスされ得る。
追加的に又は代替的に、図式300は、(前処理325などの)類似度比較の前に、アクセスされた情報に何をするか、及び(BM25ベースのベクトル空間モデル330など)類似度比較をどう行うかを示す。類似度比較が行われると、図式300は、幾つかの例示的結果に何が含まれるか(類似度スコア335、合計類似度スコア340、及び類似ターゲットプロジェクト360など)及び/又はその例示的結果を用いて何が実現できるかを示す。
幾つかの実施形態では、ターゲットプロジェクト候補305と対象プロジェクト310は、ソフトウェアプログラムであってもよく、ソフトウェアプログラムを含んでもよく、又はソフトウェアプログラムに結びつけられてもよい。ターゲットプロジェクト候補305と対象プロジェクト310は、フィーチャ(例えば、ターゲットフィーチャ315または対象フィーチャ320)のサブセットを含み得る。例えば、ターゲットプロジェクト候補305は、ターゲットフィーチャ315a−315fなどのフィーチャのサブセットを含み得る。同様に、他のターゲットプロジェクト候補305は、異なるフィーチャサブセットを含み得る。また、対象プロジェクト310は、対象フィーチャ320a−320fなどのフィーチャサブセットを含み得る。
より具体的に、ターゲットフィーチャの例には、プロジェクト説明315a、クラス名315b、メソッド名315c、変数名315d、コメント315e、及び依存API名315fを含まれ得る。同様に、対象フィーチャ320の例には、プロジェクト説明320a、クラス名320b、メソッド名320c、変数名320d、コメント320e、及び依存API名320fを含み得る。これらの又はその他の実施形態では、情報は多かれ少なかれターゲットフィーチャ315及び/又は対象フィーチャ320を含み得る。例えば、ターゲットフィーチャ315と対象フィーチャ320のうち一方または両方は、ドキュメンテーション、メタデータ、リードミーファイル、テストケース、疑似コード、ソースコード、ディスカッション、ノート、コメント、タグ、パッチなどに基づくテキスト情報または構造情報を含み得る。
幾つかの実施形態では、ターゲットフィーチャ315と対象フィーチャ320は、前処理325により前処理されてもよい。前処理には、識別子名の分離、ストップワードの削除、残った言葉のステミング(stemming)が含まれ得る。例えば、変数名は「termsInDocument」を含み得る。識別名の分離は、「terms in document」と分離することを含み、単語間にスペースが入れられている。ストップワードの削除は、「terms in document」のように言葉「in」が抹消または削除される。ストップワードは、サーチエンジンが無視するようにプログラムされた、「the」などの一般的に用いられる単語である。残った言葉のステミングは、単語の原形を求めるために、「terms document」のように、複数を示す文字「s」を抹消または削除する。残るのは、この例では、「term document」である。
ターゲットフィーチャ315のフィーチャ情報と、対象フィーチャ320のフィーチャ情報とが前処理325された後、クエリとドキュメントと呼ばれるエンティティが、BM25ベースのベクトル空間モデル330において、ターゲットフィーチャ315を対象フィーチャ320と比較する準備として構成されポピュレート(populate)される。例えば、クエリは、構成され、対象フィーチャ320の前処理されたフィーチャ情報でポピュレート(populate)されてもよく、ドキュメントは、構成され、ターゲットフィーチャ315の前処理されたフィーチャ情報でポピュレートされてもよい。追加的に又は代替的に、クエリとドキュメントの両方の前処理されたフィーチャ情報は、インデックスされ、ベクトル表現が生成される。例えば、ドキュメントベクトルは、
(外1)
Figure 2019153270
と表せる。クエリベクトルは
(外2)
Figure 2019153270
と表せる。クエリベクトルとドキュメントベクトルは、例示のBM25表現にしたがって、
Figure 2019153270
と計算できる。上記の式で、パラメータx’は、ターゲットプロジェクト候補305の1つのドキュメント中の言葉のBM25ベース加重を表し得る。パラメータy’は、対象プロジェクト310のクエリ中の言葉のBM25ベース加重を表し得る。パラメータtf(x)は、ターゲットプロジェクト候補305の1つのドキュメント中のi番目の言葉の平滑化された語出現頻度を表し、「平滑化された」とは、急激な変化、ランダムな変化、又は外れ値などのノイズを低減するデータ点(例えば、語出現頻度)の修正と解釈してもよい。パラメータtf(x)は、ターゲットプロジェクト候補310の1つのドキュメント中のi番目の言葉の平滑化された語出現頻度を表し、「平滑化された」とは、急激な変化、ランダムな変化、又は外れ値などのノイズを低減するデータ点(例えば、語出現頻度)の修正と解釈してもよい。パラメータidf(t)は、i番目の言葉tの逆文書頻度を表し得る。パラメータxは語出現頻度を表し得る。パラメータyは語出現頻度を表し得る。パラメータbはスケーリングファクタを表し得る。パラメータlは文書長を表し得る。パラメータlは平均文書長を表し得る。パラメータnは、言葉tを有するターゲットプロジェクト候補中のドキュメント数を表し得る。パラメータNは、辞書中の単語の総数を表し得る。演算子×はスカラー乗算である。
ポピュレートされたクエリベクトルとドキュメントベクトルを用いて、BM25ベースのベクトル空間モデル330において、ドキュメントベクトルは、第2の例示的BM25式
Figure 2019153270
を用いて、クエリベクトルに対して比較され、類似度を求めることができる。第2のBM25式において、s()はフィーチャレベルで類似度スコアを比較する関数を表し得る。残りのパラメータは上述の通りである。
このように、幾つかの実施形態では、BM25ベース・ベクトル空間モデル330の出力は、類似度スコア335を含み得る。類似度スコア335は、クエリベクトルとドキュメントベクトルとの間の類似度を表し、または対象フィーチャ320とターゲットフィーチャ315との間の類似度を表すことができる。幾つかの実施形態では、類似度スコア335は、ターゲットプロジェクト候補305と対象プロジェクト310とのうち一方または両方から抽出されるフィーチャの数に応じて、幾つの類似度スコア335(例えば、S1−Sn)を含んでもよい。
幾つかの実施形態では、類似度スコア335は1対1関係を有しても良い。例えば、類似度スコア335のS1は、プロジェクト説明315aとプロジェクト説明320aとの間の類似度に対応し得る。他の実施形態では、類似度スコア335間の関係は1対1で無くてもよい。例えば、クラス名320bは、類似度を求めるために、クラス名315bと比較されるだけでなく、メソッド名315cおよび変数名315dとも比較され得る。このように、この例では、類似度スコア335のS2は、クラス名320bと複数のターゲットフィーチャ315との間の類似度を表し得る。
これらの又はその他の実施形態において、類似度スコア335は、足し合わされ、ターゲットプロジェクト候補305の1つに対する合計類似度スコア340を生成できる。幾つかの実施形態では、合計類似度スコア340は、0または1に等しく、又は0と1との間にあってもよく、他の実施形態では、大きさが1ないし4桁変動する。他の実施形態では、合計類似度スコア340は任意の正数であってもよい。
幾つかの実施形態では、一以上のターゲットプロジェクト候補305に対する合計類似度スコア340の決定は、例示的合計類似性スコアの式
Figure 2019153270
にしたがって行われ得る。合計類似度スコアの式において、関数s’()は合計類似度スコアを表す。パラメータwは加重係数を表し得る。パラメータfieldsはフィーチャを表す。
幾つかの実施形態では、及び(ターゲットプロジェクト候補データベース125などの)プロジェクトデータベース中のターゲットプロジェクト候補305の数に応じて、複数のターゲットプロジェクト候補305は、前処理325において前処理され、BM25ベース・ベクトル空間モデル330中の対象プロジェクト310と比較されてもよい。例えば、分析及び比較するターゲットプロジェクト候補305が残っていないとき、ソートモジュール345は合計類似度スコア340にしたがってターゲットプロジェクト候補305をソートしてもよい。
追加的に又は代替的に、ターゲットプロジェクト候補305は、閾値350にしたがってフィルタされてもよい。例えば、合計類似度スコア340が閾値350より低いターゲットプロジェクト候補305は、選択モジュール355により選択されなくてもよい。選択モジュール355は、類似ターゲットプロジェクト360のセットを生成してもよい。これは、合計類似度スコア340が閾値350以上である、選択されたターゲットプロジェクト候補305であってもよい。幾つかの実施形態では、生成される類似ターゲットプロジェクト360セットは、合計類似度スコア340が上位のパーセンタイルにランクされているターゲットプロジェクト候補305と、合計類似度スコア340がすべての合計類似度スコア340のうち上位の数にランクされているターゲットプロジェクト候補305と、合計類似度スコア340が閾値合計類似度スコア以上であるターゲットプロジェクト候補305のうち一以上を含み得る。
幾つかの実施形態では、類似ターゲットプロジェクト360は、(プローザブルパッチ150などの)プローザブルパッチを決定するのに使われてもよい。プローザブルパッチを決定する例示的プロセスの詳細を図4および図5を参照してさらに説明する。
図4は、バグ修復の決定に用いることができる、図3のプロセス300の例示的アプリケーション400を示す。図4に示すように、アプリケーション400は、Commons Lang(Bug ID:LANG−677)の例示的なバグ修復であってもよく、エラー410と415を含むエラーライン405と、修正425と430を含む置換ライン420とを含んでいてもよい。
アプリケーション400において、修復(fix)は複数の編集を要する。例えば、修復は2つのAPI中のパラメータの変更を要する。複数の編集を要するような場合には、合成ベース・プログラム修復は、例えば、トライアンドエラーをしなければならないため、コストが高くなり得る。このように、バグ修復に関係するコードが同じプロジェクト中または他の関連プロジェクト中のどこか他のところに見つかった場合、コードサーチベースのアプローチは、エラーライン405を修復するのに好適であり得る。図3のプロセスを用いて、修正ライン420中に示す適切なパッチは、(図5を参照して以下に説明する)sourceforge.netにホスティングされたターゲットプロジェクト候補データベースの「adempiere」と呼ばれるプロジェクト中に見つけられる。
図5は、図4のアプリケーションの例示的な予備的結果500を示す図である。予備的結果500は、概要結果501と詳細結果テーブル503とを含み得る。概要結果501は、コーパスまたはデータベース中の複数のプロジェクトを特定してもよい。図5において、プロジェクト数は980である。他の場合には、プロジェクト数は別のプロジェクト数を含み得る。概要結果501は、正しいコードを含むプロジェクトと、正しいコードを含むプロジェクトのランクとを特定することもできる。例えば、図5において、正しいコードを含むプロジェクトは、「Adempiere」と名付けられ、詳細結果503テーブル中の24番目の位置にランキングされている。これは、類似度スコアでランキングしたとき、980プロジェクト中トップ3%に入る。
詳細結果テーブル503は、コーパスまたはデータベース中の各プロジェクトに対して、ランク505、プロジェクト名510、及び合計類似度スコア(図5では「スコア」)515を含み得る。コーパスやデータベース中のプロジェクトは、提示される実施形態中のどこかで説明されたターゲットプロジェクト候補305とほぼ同様であり、対応するものであり得る。また、類似ターゲットプロジェクト360は、ランク505が30などのある番号以上である、またはスコア515が0.330以上であるターゲットプロジェクト候補305を含み得る。予備的結果500を用いて、正しいコードを含むプロジェクト(例えば、「Adempiere」)が迅速に特定でき、それからプローザブルパッチが決定できる。
図6は、本開示において説明された少なくとも1つの実施形態にしたがって構成されたフィーチャ情報を抽出する例示的方法600を示すフロー図である。離散的ブロックとして示したが、所望の実施形態に応じて、様々なブロックは、複数のブロックに分割されてもよく、より少ないブロックに結合されてもよく、又は削除されてもよい。
方法600はブロック605で始まり、ターゲットプロジェクト候補のフィーチャと対象プロジェクトのフィーチャとがアクセスされる。候補プロジェクトデータベース中のターゲットプロジェクト候補のフィーチャがアクセスされてもよい。また、サーバ中の対象プロジェクトのフィーチャがアクセスされてもよい。フィーチャはフィーチャ情報を含んでいてもよい。
ブロック610において、ソースコード、テストケース、及びリードミーファイルのうち一以上が解析(parse)される。例えば、ターゲットプロジェクト候補と対象プロジェクトのソースコード、テストコード、及びリードミーファイルが解析されてもよい。解析には、テキスト解析、構造解析、ビジュアル解析などが含まれていてもよい。解析は、ボット及び/又は解析アルゴリズムにより実行されてもよい。幾つかの例示的な解析アルゴリズムには、Eclipse JDT ParserやANTLRが含まれていても良い。
ブロック615において、テキスト情報と構造情報が抽出されてもよい。テキスト情報と構造情報は解析されたソースコード、テストケース、及びリードミーファイルから抽出されてもよい。ドキュメントとクエリは、抽出されたテキスト情報と構造情報を用いて構成できる。例えば、対象プロジェクトのフィーチャから得られたテキスト情報と構造情報は、インデックスされ、クエリに入れられてもよい。同様に、候補プロジェクトの1つのフィーチャから得られたテキスト情報と構造情報は、インデックスされ、ドキュメントに入れられてもよい。
本技術分野の当業者には言うまでもないが、ここに開示のこれらの及びその他のプロセス及び方法について、その手続及び方法で実行される機能は、異なる順序で実装されてもよい。さらに、概要を述べたステップと動作は、単なる例であり、開示された実施形態を損なうことなく、そのステップと動作のうち幾つかは、任意的であり、結合されてより少ないステップと動作にされてもよく、拡張されてより多くのステップと動作にされてもよい。
図7は、本開示において説明された少なくとも1つの実施形態にしたがって、フィーチャ情報を前処理する例示的方法700を示すフロー図である。幾つかの実施形態では、方法700は類似度スコアの決定より前に実行されてもよい。離散的ブロックとして示したが、所望の実施形態に応じて、様々なブロックは、複数のブロックに分割されてもよく、より少ないブロックに結合されてもよく、又は削除されてもよい。
方法700はブロック705で始まり、フィーチャ情報が受け取られる。ブロック710において、識別子名が分離される。例えば、複数の単語が1つの名前として形成された識別子名は、分離されて単語間にスペースが入れられてもよい。ブロック715において、ストップワードが削除されてもよい。例えば、ストップワードは、サーチエンジンまたはアルゴリズムが破棄する、または双でなくてもクエリに対して重要でないとしてディスカウントされる、一般的に用いられる言葉である。ストップワードの幾つかの例としては、「in」と「the」がある。
ブロック720において、残っている一以上の言葉がステミング(stemmed)され得る。例えば、語根でない形式の残りの語は、単語の語根に到達するように変更することができる。非語根形式の例には、複数語(documents versus document)、動名詞(run versus running)、または分詞(gone versus go)がある。
図8は、本開示において説明された少なくとも1つの実施形態にしたがって構成される、ベクトルを構成及び比較する例示的方法800を示すフロー図である。離散的ブロックとして示したが、所望の実施形態に応じて、様々なブロックは、複数のブロックに分割されてもよく、より少ないブロックに結合されてもよく、又は削除されてもよい。
方法800はブロック805で始まり、クエリベクトルが構成されてもよい。クエリベクトルは、対象プロジェクトのフィーチャ情報から得られたクエリタームを含んでいてもよい。クエリベクトルは、クエリ中のインデックスされたクエリタームに少なくとも部分的に基づいていてもよい。ブロック810において、ドキュメントベクトルが構成され得る。ドキュメントベクトルは、ターゲットプロジェクト候補のフィーチャ情報から得られたドキュメントタームを含んでいてもよい。ドキュメントベクトルは、ドキュメント中のインデックスされたドキュメントタームに少なくとも部分的に基づいていてもよい。
ブロック815において、ターゲットプロジェクト候補のフィーチャが選択される。選択されたフィーチャはドキュメントベクトル中のドキュメントタームを含んでいてもよい。ブロック820において、クエリベクトルとドキュメントベクトルとの間のコサイン類似度(cosine similarity)が決定される。
ブロック825において、ターゲットプロジェクト候補の選択されたフィーチャのコサイン類似度が、合計スコアに加算されてもよい。このように、少なくともブロック815と820とは、所定数のフィーチャ及びフィーチャタイプに対して、必要に応じて繰り替えされてもよい。例えば、幾つかの実施形態では、所定数のフィーチャは約6フィーチャであってもよく、約10フィーチャであってもよく、その他の好適な数のフィーチャであってもよい。幾つかの実施形態では、所定数のフィーチャは、様々なタイプのフィーチャ、及び/又はその様々なタイプのフィーチャが区別される程度(例えば、分類、識別、又はナローイング(narrowing)を支援するフィーチャ)に基づき決定されてもよい。ターゲットプロジェクト候補の所望のフィーチャを対象プロジェクトの一以上のフィーチャに対して比較した後、合計スコアをまとめる。
図9は、本開示において説明された少なくとも1つの実施形態にしたがって構成される、関連フィーチャ情報を検索する例示的方法900を示すフロー図である。離散的ブロックとして示したが、所望の実施形態に応じて、様々なブロックは、複数のブロックに分割されてもよく、より少ないブロックに結合されてもよく、又は削除されてもよい。
方法900はブロック905で始まり、一以上のターゲットプロジェクト候補のターゲットフィーチャがアクセスされる。ターゲットプロジェクト候補データベースのターゲットフィーチャがアクセスされる。ターゲットフィーチャはターゲットフィーチャ情報を含んでいてもよい。ターゲットプロジェクト候補のターゲットフィーチャには、プロジェクト説明、クラス名、メソッド名、変数名、依存API名、コメント、外部ライブラリ、その他のフィーチャ、またはこれらの組み合わせが含まれ得る。ブロック910において、対象プロジェクトの対象フィーチャはサーバからアクセスすることができる。対象プロジェクトの対象フィーチャには、プロジェクト説明、クラス名、メソッド名、変数名、依存API名、コメント、外部ライブラリ、その他のフィーチャ、またはこれらの組み合わせのうち一以上が含まれ得る。
ブロック915において、類似度スコアが決定され得る。類似度スコアは、一以上の又は各ターゲットプロジェクト候補のターゲットフィーチャ情報と、対象プロジェクトの対象フィーチャ情報との間で決定される。幾つかの実施形態では、類似度スコアは、各ターゲットプロジェクト候補の各ターゲットフィーチャに対して決定されてもよい。ブロック920において、類似度スコアが合計されてもよい。類似度スコアは、各ターゲットプロジェクト候補の合計類似度スコアを生成するため合計される。例えば、幾つかの実施形態では、ターゲットプロジェクト候補の各ターゲットフィーチャの類似度が合計されてもよい。
ブロック925において、ターゲットプロジェクト候補がソートされる。ターゲットプロジェクト候補は合計類似度スコアによりソートされてもよい。例えば、合計類似度スコアが最高(例えば、最大数)であるターゲットプロジェクト候補は、ターゲットプロジェクト候補の多くまたは全部に対してトップ部分に、またはトップランクにソートされてもよい。ブロック930において、ターゲットプロジェクト候補がフィルタされてもよい。例えば、合計類似度スコアがある閾値より低いターゲットプロジェクト候補がフィルタされてもよい。
ブロック935において、類似ターゲットプロジェクトセットが生成されてもよい。類似ターゲットプロジェクトのセットは、合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含み得る。例えば、閾値は、パーセンテージ(例えば、トップ25%、トップ15%、またはその他の好適なパーセンテージ)を含んでもよく、数(例えば、トップ5、トップ7、またはその他の好適な数)を含んでもよく、ターゲットプロジェクト候補が合計類似度スコアによりランキングされる場合には、合計類似度スコア(例えば、0.7、0.55、またはその他の好適な類似度スコア)を含んでもよい。
ブロック940において、対象プロジェクトの不具合(defect)が特定され得る。類似のターゲットプロジェクトに基づいて不具合を特定することができる。例えば、(データベースで要求され得る)一以上の類似ターゲットプロジェクトの文書化された不具合は、対象プロジェクトの一部にテキスト的または構造的に類似していると特定されてもよい。したがって、文書化された不具合は、対象プロジェクト中の不具合として特定されてもよい。ブロック945において、コードが推奨され得る。類似のターゲットプロジェクトに基づいてコードが推奨されてもよい。対象プロジェクト中の特定された不具合を修復するコードが推奨されてもよい。例えば、類似ターゲットプロジェクト中の文書化された不具合を修復するのに用いられるコードが、対象プロジェクトへの適用のため推奨されてもよい。ブロック950において、対象プロジェクトが修正されてもよい。推奨されるコードを対象プロジェクトに実装することにより、対象プロジェクトが修正され、特定された不具合を修復することができる。
図10は、本開示において説明された少なくとも1つの実施形態にしたがって構成される、テストデータを生成し、修正された対象プロジェクトを検証する例示的方法1000を示すフロー図である。離散的ブロックとして示したが、所望の実施形態に応じて、様々なブロックは、複数のブロックに分割されてもよく、より少ないブロックに結合されてもよく、又は削除されてもよい。
方法1000はブロック1005で始まり、新しいデータが生成される。新しいデータが生成され、修正された対象プロジェクトがテストされてもよい。例えば、対象プロジェクトは、不具合を修復するプローザブルパッチの実装により修正されていてもよい。生成された新しいデータは、プローザブルパッチ(plausible patch)を含む対象プロジェクトをテストするために用いられる新しいテストケースを含んでもよい。
ブロック1010において、修正対象プロジェクトが検証されてもよい。修正対象プロジェクトは、所定の性能標準を用いて検証されてもよい。例えば、所定の性能標準は、対象プロジェクトが修正される前の、その対象プロジェクトの性能に基づいても良い。所定の性能標準には、産業標準、速度要求、精度要求、計算オーバーヘッド要求、クライアントドリブンまたはエンドユーザドリブン要求、その他の性能標準、またはこれらの組み合わせが含まれる。
ブロック1015において、対象プロジェクトの不具合(defect)を予測することができる。例えば、対象プロジェクト中の不具合が明示的に特定されてもよく、他の場合では、対象プロジェクトに不具合がありそうだと予測されてもよい。例えば、不具合の存在がある確率で予測されてもよい。追加的に又は代替的に、不具合が、対象プロジェクト中のある行、あるセクション、ある関数、及び/又はある場所に存在すると予測されてもよい。これらの又はその他の実施形態では、不具合予測はパッチ候補を含んでもよく、一方、他の実施形態では、不具合予測にはパッチ候補が含まれていなくてもよい。
幾つかの実施形態では、方法600、700、800、900及び1000は、環境100及び200などのネットワーク環境で全体的に、または部分的に実施されてもよい。追加的に又は代替的に、方法600、700、800、900及び1000は、図1を参照して説明したように、プロセッサ137などのプロセッサにより実行されてもよい。これらの又は他の実施形態では、方法600、700、800、900及び1000のステップの一部または全部は、一以上の非一時的コンピュータ可読メディアに記憶された命令の実行に基づいて実行されてもよい。
一般的に、本開示では、プロセッサは、任意の好適な特定目的又は汎用コンピュータ、計算エンティティ、又は様々なコンピュータハードウェア又はソフトウェアモジュールを含む処理デバイスを含んでも良く、任意の適用し得るコンピュータ読み取り可能ストレージメディアに格納された命令を実行するように構成されていてもよい。例えば、プロセッサは、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラム命令を解釈及び/又は実行する、及び/又はデータを処理するように構成されたその他のデジタル又はアナログ回路を含んでもよい。
言うまでもなく、プロセッサは、本明細書に説明した任意数の動作を個別に又は集合的に実行するように構成された、任意数のネットワークまたは物理的場所にわたって分散された任意数のプロセッサを含んでいてもよい。幾つかの実施形態では、プロセッサは、メモリに記憶されたプログラム命令を解釈及び/又は実行しても、データを処理してもよい。メモリに記憶されたプログラム命令を解釈及び/又は実行することにより、及び/又はデータを処理することにより、本デバイスは、図1のプロセッサ137により実行される動作などの動作を実行してもよい。
さらに、本開示によれば、サーバ、データベースなどに見られるメモリは、コンピュータ可読記憶媒体を含んでもよく、またはコンピュータ実行可能命令またはデータ構造を保持または格納するための1つまたは複数のコンピュータ可読記憶媒体を含むことができる。かかるコンピュータ読み取り可能媒体は、汎用又は特殊用途コンピュータシステムによりアクセスできる、利用できるどんな媒体であってもよい。限定ではなく一例として、かかるコンピュータ読み取り可能媒体は、非一時的コンピュータ読み取り可能記憶媒体を含み、これはランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、電気的消去可能プログラマブルリードオンリーメモリ(EEPROM)、コンパクトディスクリードオンリーメモリ(CD−ROM)、又はその他の光ディスクストレージ、磁気ディスクストレージ、その他の磁気ストレージデバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、又はその他の任意のストレージ媒体であって所望のプログラムコードを、汎用又は特殊用途コンピュータによりアクセスしてもよいコンピュータ実行可能命令又はデータ構造の形式で担う又は格納するのに用いられるものを含む。上記のものの任意の組合せを、コンピュータ読み取り可能ストレージ媒体の範囲内に含んでもよい。これらおよび他の実施形態では、本明細書で使用される「非一時的」という用語は、連邦巡回裁判所決定In re Nuijten(500 F.3d 1346(Fed. Cir. 2007))において特許可能な主題の範囲外にあるとされた一時的媒体の種類のみを排除すると解釈されるべきである。幾つかの実施形態では、コンピュータ実行可能命令は、本開示で説明したように、例えば、プロセッサに、ある動作又は動作のグループを実行させるように構成された命令及びデータを含んでも良い。
一般的な実務によれば、図面に示された様々なフィーチャ(features)はスケール通りに描かれていない可能性がある。本開示に提示される図は、特定の装置(例えば、装置、システムなど)または方法の実際のビューを意味するものではなく、本開示の様々な実施形態を説明するために使用される単なる理想化された表象である。したがって、様々なフィーチャの寸法は、明確にするために任意に拡大または縮小することができる。さらに、図面の一部は、明瞭にするために簡略化されている場合がある。したがって、図面は、所与の装置(例えば、装置)のすべての構成要素または方法のすべての動作を示すものではない。
ここに用い、特に添付した特許請求の範囲で用いる用語は、一般的に「オープン」タームであることが意図されている(例えば、用語「含む」は「含むが限定されない」と解釈すべきであり、用語「有する」は「少なくとも〜を有する」と解釈すべきであり、用語「含む」は「含むが限定されない」と解釈すべきである。「約(about)」および「およそ(approximately)」という用語は、実際の値の10%(パーセント)または当業者が理解する別のパーセンテージとして解釈されてもよい。
また、請求項において数を特定しようと意図する場合は、請求項中に明示的に記載し、そうでなければ、そのような意図はない。例えば、理解の助けとして、下記に添付した特許請求の範囲は、その記載に「少なくとも1つの」や「一以上の」との導入句を含んでいることがある。しかし、かかるフレーズの使用は、不定冠詞「a」または「an」を付けることが、たとえ同じ請求項が「一以上の」又は「少なくとも1つの」という導入句と「a」や「an」などの不定冠詞を含んでいたとしても、かかる請求項記載を含む請求項を、かかる記載を1つだけ含む実施形態に限定することを示唆していると解してはならない。(例えば、「a」及び/又は「an」は「少なくとも1つの」又は「一以上の」を意味するものと解釈すべきである);請求項記載を導入する定冠詞の使用についても同様である。
また、導入された請求項記載について特定の数が明示的に記載されていたとしても、当業者には言うまでもなく、かかる記載は少なくとも記載された数という意味と解釈すべきである(例えば、他の修飾語を付けずに「2つの」と言った場合、これは少なくとも2つ、すなわち2以上を意味する)。さらに、「A,B,及びCなどのうち少なくとも1つ」又は「A,B、及びCなどのうち一以上」などの表現を用いる場合、一般的に、かかる表現は、Aのみ、Bのみ、Cのみ、AとB、AとC、BとC、又はAとBとCなどを含むことを意図している。例えば、「及び/又は」との言葉の使用は、このように解釈することを意図している。
さらに、2以上の代替的用語を提示する宣言的単語又は句は、明細書、特許請求の範囲、又は図面にかかわらず、その用語のうち一つ、その用語のどちらか、又は両方の用語を含む可能性を想定していると理解すべきである。例えば、「AまたはB」は、「A」、または「B」、又は「A及びB」の可能性を含むと理解すべきである。
しかし、かかるフレーズの使用は、不定冠詞「a」または「an」を付けることが、たとえ同じ請求項が「一以上の」又は「少なくとも1つの」という導入句と「a」や「an」などの不定冠詞を含んでいたとしても、かかる請求項記載を含む請求項を、かかる記載を1つだけ含む実施形態に限定することを示唆していると解してはならない。(例えば、「a」及び/又は「an」は「少なくとも1つの」又は「一以上の」を意味するものと解釈すべきである);請求項記載を導入する定冠詞の使用についても同様である。
また、「第1」、「第2」、「第3」などという用語の使用は、本明細書では必ずしも要素の特定の順序または数を暗示するために使用されるものではない。一般に、「第1」、「第2」、「第3」という用語は、一般的な識別子として異なる要素を区別するために使用される。「第1」、「第2」、「第3」などの用語が特定の順序を意味することを示すことがなければ、これらの用語は特定の順序を暗示するものと理解してはならない。「第1」、「第2」、「第3」などの用語が特定の順序を意味することを示すことがなければ、これらの用語は特定の順序を暗示するものと理解してはならない。例えば、第1のウィジェットは第1面を有するものとして説明され、第2ウィジェットは第2面を有するものとして説明されてもよい。第2のウィジェットに関する用語「第2面」の使用は、第2のウィジェットのその面を第1のウィジェットの「第1面」と区別し、第2のウィジェットが2つの側面を有することを暗示するものではない。
ここに記載したすべての例と条件付きの言葉は、発明者が技術発展に対してなした本発明とコンセプトとを、読者が理解しやすいようにするためのものであり、その解釈は具体的に記載した実施例や制約に限定されるべきではない。 本開示の実施形態を詳細に説明したが、言うまでもなく、本開示の精神と範囲から逸脱することなく、これらの実施形態に変更、置換、代替を施すことができる。
上記の実施形態について、次の通り付記する。
(付記1) 対象プロジェクトを改善するクロスプロジェクト学習の方法であって、
ターゲットプロジェクト候補データベースが、一以上のターゲットプロジェクト候補のフィーチャ情報を含むフィーチャにアクセスすることと、
サーバが、対象プロジェクトのフィーチャ情報を含むフィーチャにアクセスすることであって、前記ターゲットプロジェクト候補と前記対象プロジェクトはソフトウェアプログラムである、ことと、
前記ターゲットプロジェクト候補の各々のフィーチャ情報と、前記対象プロジェクトのフィーチャ情報との間の類似度スコアを決定することであって、類似度スコアは前記ターゲットプロジェクト候補の各々の各フィーチャに対して決定される、ことと、
前記ターゲットプロジェクト候補の各フィーチャの類似度スコアを合計して、前記ターゲットプロジェクト候補の各々の合計類似度スコアを生成することと、
前記合計類似度スコアにより前記ターゲットプロジェクト候補をソートすることと、
前記合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることと、
前記合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む類似ターゲットプロジェクトのセットを生成することと、
前記類似ターゲットプロジェクトに基づいて対象プロジェクト中の不具合を特定することと、
前記類似ターゲットプロジェクトに基づいて、前記対象プロジェクト中の不具合を修復するコードを推奨することと、
推奨されたコードを前記対象プロジェクトに実装して前記不具合を修復することにより前記対象プロジェクトを修正することとを含む、
方法。
(付記2) 修正された対象プロジェクトをテストする新しいデータを生成することと、
前記対象プロジェクト中の他の不具合を予測することと、
のうち一方または両方を含む、付記1に記載の方法。
(付記3) 所定性能標準を用いて、修正された対象プロジェクトを検証することをさらに含み、前記所定性能標準は、前記対象プロジェクトが修正される前の前記対象プロジェクトの性能に基づく、
付記1に記載の方法。
(付記4) 前記ターゲットプロジェクト候補のフィーチャと、前記対象プロジェクトのフィーチャとは、プロジェクト説明、クラス名、メソッド名、変数名、依存API名、コメント、又は外部ライブラリを含み、
前記フィーチャ情報は、前記フィーチャに対応するテキスト情報と構造情報とを含む、
付記1に記載の方法。
(付記5) 生成された類似ターゲットプロジェクトのセットは、
合計類似度スコアが上位のパーセンテージにランクされたターゲットプロジェクト候補と、
合計類似度スコアがすべての合計類似度スコアの上位にランクされたターゲットプロジェクト候補と、
合計類似度スコアが合計類似度スコア閾値以上のターゲットプロジェクト候補とを含む、
付記1に記載の方法。
(付記6) 前記ターゲットプロジェクト候補のフィーチャにアクセスすることと、前記対象プロジェクトのフィーチャにアクセスすることとは、
前記ターゲットプロジェクト候補のフィーチャのソースコード、テストケース、及びリードミーファイルのうち一以上または組み合わせを解析することと、
それからテキスト情報と構造情報とを抽出して、ドキュメントとクエリとを構成することと、
前記クエリと前記ドキュメントとをインデックスすることとを含み、
前記ドキュメントは前記ターゲットプロジェクト候補のフィーチャに対応し、前記クエリは前記対象プロジェクトのフィーチャに対応する、
付記1に記載の方法。
(付記7) 前記類似度スコアを決定することは、数式
Figure 2019153270
により実行され、
’は前記ターゲットプロジェクト候補の1つのドキュメント中の言葉のBM25ベースの重みを表し、
’は前記対象プロジェクトのクエリ中の言葉のBM25ベースの重みを表し、
s()は類似度スコアを計算する関数を表し、
tf(x)は前記ターゲットプロジェクト候補の1つのドキュメント中のi番目の言葉の平滑化された語出現頻度を表し、
tf(y)は前記対象プロジェクトのクエリ中のi番目の言葉の平滑化された語出現頻度を表し、
idf(t)はi番目の言葉tの逆文書頻度を表し、
xは語出現頻度を表し、
yは語出現頻度を表し、
ベクトルはドキュメントベクトルを表し、
ベクトルはクエリベクトルを表し、
bはスケーリング係数を表し、
はドキュメント長を表し、
は平均ドキュメント長を表し、
は言葉tを有するターゲットプロジェクト候補中のドキュメント数を表し、
Nはディクショナリ中の単語の総数を表し、
×はスカラー乗算である、
付記1に記載の方法。
(付記8) 各ターゲットプロジェクト候補の合計類似度スコアを決定することは、数式
Figure 2019153270
により実行され、
s’()は合計類似度を表し、
は加重係数を表し、
fieldsはフィーチャと等価である、
付記7に記載の方法。
(付記9) 前記類似度スコアを決定する前に、前記フィーチャ情報を前処理することをさらに含み、前記前処理することは、
識別子名を分離することと、
ストップワードを削除することと、
一以上の残った言葉をステミングすることとを含む、
付記1に記載の方法。
(付記10) 前記類似度スコアを決定することは、
前記対象プロジェクトのフィーチャ情報から得られたクエリタームを含むクエリベクトルを構成することと、
前記ターゲットプロジェクト候補のフィーチャ情報から得られたドキュメントタームを含むドキュメントベクトルを構成することと、
ターゲットプロジェクト候補中のフィーチャを選択することであって、選択されるフィーチャは前記ドキュメントベクトル中のドキュメントタームを含む、ことと、
選択されたフィーチャに対して、前記クエリベクトルと前記ドキュメントベクトルとの間のコサイン類似度を決定することと、
選択されたフィーチャのコサイン類似度を合計スコアに加えることとを含む、
付記1に記載の方法。
(付記11) 動作を実行するように、又は動作の実行を制御するように、一以上のプロセッサにより実行可能なプログラミングコードをエンコードされた非一時的コンピュータ可読媒体であって、前記動作は、
ターゲットプロジェクト候補データベースが、一以上のターゲットプロジェクト候補のフィーチャ情報を含むフィーチャにアクセスすることと、
サーバが、対象プロジェクトのフィーチャ情報を含むフィーチャにアクセスすることであって、前記ターゲットプロジェクト候補と前記対象プロジェクトはソフトウェアプログラムである、ことと、
前記ターゲットプロジェクト候補の各々のフィーチャ情報と、前記対象プロジェクトのフィーチャ情報との間の類似度スコアを決定することであって、類似度スコアは前記ターゲットプロジェクト候補の各々の各フィーチャに対して決定される、ことと、
前記ターゲットプロジェクト候補の各フィーチャの類似度スコアを合計して、前記ターゲットプロジェクト候補の各々の合計類似度スコアを生成することと、
前記合計類似度スコアにより前記ターゲットプロジェクト候補をソートすることと、
前記合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることと、
前記合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む類似ターゲットプロジェクトのセットを生成することと、
前記類似ターゲットプロジェクトに基づいて対象プロジェクト中の不具合を特定することと、
前記類似ターゲットプロジェクトに基づいて、前記対象プロジェクト中の不具合を修復するコードを推奨することと、
推奨されたコードを前記対象プロジェクトに実装して前記不具合を修復することにより前記対象プロジェクトを修正することとを含む、
非一時的コンピュータ可読媒体。
(付記12) 前記動作は、
修正された対象プロジェクトをテストする新しいデータを生成することと、
前記対象プロジェクト中の他の不具合を予測することと、のうち一方または両方をさらに含む、
付記11に記載の非一時的コンピュータ可読媒体。
(付記13) 前記動作は、所定性能標準を用いて、修正された対象プロジェクトを検証することをさらに含み、
前記所定性能標準は、前記対象プロジェクトが修正される前の、前記対象プロジェクトの性能に基づく、
付記11に記載の非一時的コンピュータ可読媒体。
(付記14) 前記ターゲットプロジェクト候補のフィーチャと、前記対象プロジェクトのフィーチャとは、プロジェクト説明、クラス名、メソッド名、変数名、依存API名、コメント、又は外部ライブラリを含み、
前記フィーチャ情報は、前記フィーチャに対応するテキスト情報と構造情報とを含む、
付記11に記載の非一時的コンピュータ可読媒体。
(付記15) 生成された類似ターゲットプロジェクトのセットは、
合計類似度スコアが上位パーセンテージにランクされたターゲットプロジェクト候補と、
合計類似度スコアがすべての合計類似度スコアの上位にランクされたターゲットプロジェクト候補と、
合計類似度スコアが合計類似度スコア閾値以上のターゲットプロジェクト候補とを含む、
付記11に記載の非一時的コンピュータ可読媒体。
(付記16) 前記ターゲットプロジェクト候補のフィーチャにアクセスすることと、前記対象プロジェクトのフィーチャにアクセスすることとは、
前記ターゲットプロジェクト候補のフィーチャのソースコード、テストケース、及びリードミーファイルのうち一以上または組み合わせを解析することと、
それからテキスト情報と構造情報とを抽出して、ドキュメントとクエリとを構成することと、
前記クエリと前記ドキュメントとをインデックスすることとを含み、
前記ドキュメントは前記ターゲットプロジェクト候補のフィーチャに対応し、前記クエリは前記対象プロジェクトのフィーチャに対応する、
付記11に記載の非一時的コンピュータ可読媒体。
(付記17) 前記類似度スコアを決定することは、数式
Figure 2019153270
により実行され、
’は前記ターゲットプロジェクト候補の1つのドキュメント中の言葉の達M25ベースの重みを表し、
’は前記対象プロジェクトのクエリ中の言葉のBM25ベースの重みを表し、
s()は類似度スコアを計算する関数を表し、
tf(x)は前記ターゲットプロジェクト候補の1つのドキュメント中のi番目の言葉の平滑化された語出現頻度を表し、
tf(y)は前記対象プロジェクトのクエリ中のi番目の言葉の平滑化された語出現頻度を表し、
idf(t)はi番目の言葉tの逆文書頻度を表し、
xは語出現頻度を表し、
yは語出現頻度を表し、
ベクトルはドキュメントベクトルを表し、
ベクトルはクエリベクトルを表し、
bはスケーリング係数を表し、
はドキュメント長を表し、
は平均ドキュメント長を表し、
は言葉tを有するターゲットプロジェクト候補中のドキュメント数を表し、
Nはディクショナリ中の単語の総数を表し、
×はスカラー乗算である、
付記11に記載の非一時的コンピュータ可読媒体。
(付記18) 各ターゲットプロジェクト候補の合計類似度スコアを決定することは、数式
Figure 2019153270
により実行され、
s’()は合計類似度を表し、
は加重係数を表し、
fieldsはフィーチャと等価である、
付記17に記載の非一時的コンピュータ可読媒体。
(付記19) 前記動作は、前記類似度スコアを決定する前に、前記フィーチャ情報を前処理することをさらに含み、
前記前処理することは、
識別子名を分離することと、
ストップワードを削除することと、
一以上の残った言葉をステミングすることとを含む、
付記11に記載の非一時的コンピュータ可読媒体。
(付記20) 前記類似度スコアを決定することは、
前記対象プロジェクトのフィーチャ情報から得られたクエリタームを含むクエリベクトルを構成することと、
前記ターゲットプロジェクト候補のフィーチャ情報から得られたドキュメントタームを含むドキュメントベクトルを構成することと、
ターゲットプロジェクト候補中のフィーチャを選択することであって、選択されるフィーチャは前記ドキュメントベクトル中のドキュメントタームを含む、ことと、
選択されたフィーチャに対して、前記クエリベクトルと前記ドキュメントベクトルとの間のコサイン類似度を決定することと、
選択されたフィーチャのコサイン類似度を合計スコアに加えることとを含む、
付記11に記載の非一時的コンピュータ可読媒体。

Claims (9)

  1. 対象プロジェクトを改善するクロスプロジェクト学習の方法であって、
    ターゲットプロジェクト候補データベースが、一以上のターゲットプロジェクト候補のフィーチャ情報を含むフィーチャにアクセスすることと、
    サーバが、対象プロジェクトのフィーチャ情報を含むフィーチャにアクセスすることであって、前記ターゲットプロジェクト候補と前記対象プロジェクトはソフトウェアプログラムである、ことと、
    前記ターゲットプロジェクト候補の各々のフィーチャ情報と、前記対象プロジェクトのフィーチャ情報との間の類似度スコアを決定することであって、類似度スコアは前記ターゲットプロジェクト候補の各々の各フィーチャに対して決定される、ことと、
    前記ターゲットプロジェクト候補の各フィーチャの類似度スコアを合計して、前記ターゲットプロジェクト候補の各々の合計類似度スコアを生成することと、
    前記合計類似度スコアにより前記ターゲットプロジェクト候補をソートすることと、
    前記合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることと、
    前記合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む類似ターゲットプロジェクトのセットを生成することと、
    前記類似ターゲットプロジェクトに基づいて対象プロジェクト中の不具合を特定することと、
    前記類似ターゲットプロジェクトに基づいて、前記対象プロジェクト中の不具合を修復するコードを推奨することと、
    推奨されたコードを前記対象プロジェクトに実装して前記不具合を修復することにより前記対象プロジェクトを修正することとを含む、
    方法。
  2. 修正された対象プロジェクトをテストする新しいデータを生成することと、
    前記対象プロジェクト中の他の不具合を予測することと、
    のうち一方または両方を含む、請求項1に記載の方法。
  3. 所定性能標準を用いて、修正された対象プロジェクトを検証することをさらに含み、前記所定性能標準は、前記対象プロジェクトが修正される前の前記対象プロジェクトの性能に基づく、
    請求項1に記載の方法。
  4. 前記ターゲットプロジェクト候補のフィーチャと、前記対象プロジェクトのフィーチャとは、プロジェクト説明、クラス名、メソッド名、変数名、依存API名、コメント、又は外部ライブラリを含み、
    前記フィーチャ情報は、前記フィーチャに対応するテキスト情報と構造情報とを含む、
    請求項1に記載の方法。
  5. 生成された類似ターゲットプロジェクトのセットは、
    合計類似度スコアが上位のパーセンテージにランクされたターゲットプロジェクト候補と、
    合計類似度スコアがすべての合計類似度スコアの上位にランクされたターゲットプロジェクト候補と、
    合計類似度スコアが合計類似度スコア閾値以上のターゲットプロジェクト候補とを含む、
    請求項1に記載の方法。
  6. 前記ターゲットプロジェクト候補のフィーチャにアクセスすることと、前記対象プロジェクトのフィーチャにアクセスすることとは、
    前記ターゲットプロジェクト候補のフィーチャのソースコード、テストケース、及びリードミーファイルのうち一以上または組み合わせを解析することと、
    それからテキスト情報と構造情報とを抽出して、ドキュメントとクエリとを構成することと、
    前記クエリと前記ドキュメントとをインデックスすることとを含み、
    前記ドキュメントは前記ターゲットプロジェクト候補のフィーチャに対応し、前記クエリは前記対象プロジェクトのフィーチャに対応する、
    請求項1に記載の方法。
  7. 前記類似度スコアを決定することは、数式
    Figure 2019153270
    により実行され、
    ’は前記ターゲットプロジェクト候補の1つのドキュメント中の言葉のBM25ベースの重みを表し、
    ’は前記対象プロジェクトのクエリ中の言葉のBM25ベースの重みを表し、
    s()は類似度スコアを計算する関数を表し、
    tf(x)は前記ターゲットプロジェクト候補の1つのドキュメント中のi番目の言葉の平滑化された語出現頻度を表し、
    tf(y)は前記対象プロジェクトのクエリ中のi番目の言葉の平滑化された語出現頻度を表し、
    idf(t)はi番目の言葉tの逆文書頻度を表し、
    xは語出現頻度を表し、
    yは語出現頻度を表し、
    ベクトルはドキュメントベクトルを表し、
    ベクトルはクエリベクトルを表し、
    bはスケーリング係数を表し、
    はドキュメント長を表し、
    は平均ドキュメント長を表し、
    は言葉tを有するターゲットプロジェクト候補中のドキュメント数を表し、
    Nはディクショナリ中の単語の総数を表し、
    ×はスカラー乗算である、
    請求項1に記載の方法。
  8. 前記類似度スコアを決定することは、
    前記対象プロジェクトのフィーチャ情報から得られたクエリタームを含むクエリベクトルを構成することと、
    前記ターゲットプロジェクト候補のフィーチャ情報から得られたドキュメントタームを含むドキュメントベクトルを構成することと、
    ターゲットプロジェクト候補中のフィーチャを選択することであって、選択されるフィーチャは前記ドキュメントベクトル中のドキュメントタームを含む、ことと、
    選択されたフィーチャに対して、前記クエリベクトルと前記ドキュメントベクトルとの間のコサイン類似度を決定することと、
    選択されたフィーチャのコサイン類似度を合計スコアに加えることとを含む、
    請求項1に記載の方法。
  9. コンピュータプログラムであって、コンピュータの一以上のプロセッサに、
    ターゲットプロジェクト候補データベースが、一以上のターゲットプロジェクト候補のフィーチャ情報を含むフィーチャにアクセスすることと、
    サーバが、対象プロジェクトのフィーチャ情報を含むフィーチャにアクセスすることであって、前記ターゲットプロジェクト候補と前記対象プロジェクトはソフトウェアプログラムである、ことと、
    前記ターゲットプロジェクト候補の各々のフィーチャ情報と、前記対象プロジェクトのフィーチャ情報との間の類似度スコアを決定することであって、類似度スコアは前記ターゲットプロジェクト候補の各々の各フィーチャに対して決定される、ことと、
    前記ターゲットプロジェクト候補の各フィーチャの類似度スコアを合計して、前記ターゲットプロジェクト候補の各々の合計類似度スコアを生成することと、
    前記合計類似度スコアにより前記ターゲットプロジェクト候補をソートすることと、
    前記合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることと、
    前記合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む類似ターゲットプロジェクトのセットを生成することと、
    前記類似ターゲットプロジェクトに基づいて対象プロジェクト中の不具合を特定することと、
    前記類似ターゲットプロジェクトに基づいて、前記対象プロジェクト中の不具合を修復するコードを推奨することと、
    推奨されたコードを前記対象プロジェクトに実装して前記不具合を修復することにより前記対象プロジェクトを修正することとを実行させる、
    コンピュータプログラム。
JP2018156256A 2018-02-28 2018-08-23 クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別 Active JP7131199B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/908,346 US10521224B2 (en) 2018-02-28 2018-02-28 Automatic identification of relevant software projects for cross project learning
US15/908346 2018-02-28

Publications (2)

Publication Number Publication Date
JP2019153270A true JP2019153270A (ja) 2019-09-12
JP7131199B2 JP7131199B2 (ja) 2022-09-06

Family

ID=67684519

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018156256A Active JP7131199B2 (ja) 2018-02-28 2018-08-23 クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別

Country Status (2)

Country Link
US (1) US10521224B2 (ja)
JP (1) JP7131199B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102156931B1 (ko) * 2020-01-16 2020-09-16 주식회사 소프트센 블록 코딩된 프로그램 코드의 평가 장치, 시스템, 방법 및 기록 매체에 저장된 프로그램
JP2022544173A (ja) * 2019-09-20 2022-10-17 エヌイーシー ラボラトリーズ アメリカ インク 自動コードレビューア推薦方法

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20200371778A1 (en) * 2019-05-21 2020-11-26 X Development Llc Automated identification of code changes
US10782941B1 (en) * 2019-06-20 2020-09-22 Fujitsu Limited Refinement of repair patterns for static analysis violations in software programs
CN110751186B (zh) * 2019-09-26 2022-04-08 北京航空航天大学 一种基于监督式表示学习的跨项目软件缺陷预测方法
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
CN111367801B (zh) * 2020-02-29 2024-07-12 杭州电子科技大学 一种面向跨公司软件缺陷预测的数据变换方法
US11630649B2 (en) 2020-06-02 2023-04-18 International Business Machines Corporation Intelligent application library management
CN111966586A (zh) * 2020-08-05 2020-11-20 南通大学 一种基于模块选择和权重更新的跨项目缺陷预测方法
US11403304B2 (en) 2020-09-02 2022-08-02 Fujitsu Limited Automatically curating existing machine learning projects into a corpus adaptable for use in new machine learning projects
US11551151B2 (en) 2020-09-02 2023-01-10 Fujitsu Limited Automatically generating a pipeline of a new machine learning project from pipelines of existing machine learning projects stored in a corpus
US12039419B2 (en) 2020-09-02 2024-07-16 Fujitsu Limited Automatically labeling functional blocks in pipelines of existing machine learning projects in a corpus adaptable for use in new machine learning projects
CN113176998A (zh) * 2021-05-10 2021-07-27 南通大学 基于源选择的跨项目软件缺陷预测方法
CN113392184A (zh) * 2021-06-09 2021-09-14 平安科技(深圳)有限公司 一种相似文本的确定方法、装置、终端设备及存储介质
EP4364062A1 (en) * 2021-07-01 2024-05-08 Google LLC Detecting inactive projects based on usage signals and machine learning
CN118095294B (zh) * 2024-04-25 2024-07-09 广东汉佳信息技术有限公司 基于人工智能的项目文档生成方法、装置和电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070266367A1 (en) * 2004-01-07 2007-11-15 International Business Machines Corporation Relationship Management For Data Modeling In An Integrated Development Environment
JP2014127036A (ja) * 2012-12-26 2014-07-07 Fujitsu Ltd 情報処理プログラム、情報処理方法及び装置
JP2017111486A (ja) * 2015-12-14 2017-06-22 富士通株式会社 予兆検知プログラム、装置、及び方法
JP2017151977A (ja) * 2016-02-23 2017-08-31 富士通株式会社 ソフトウエアプログラムの修復のための方法及びプログラム

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4142881B2 (ja) * 2002-03-07 2008-09-03 富士通株式会社 文書類似度算出装置、クラスタリング装置および文書抽出装置
US7735068B2 (en) * 2005-12-01 2010-06-08 Infosys Technologies Ltd. Automated relationship traceability between software design artifacts
JP2011165118A (ja) * 2010-02-15 2011-08-25 Hitachi Ltd プロジェクト支援方法及びその装置並びにその実行プログラム
US20120054117A1 (en) * 2010-08-27 2012-03-01 Christopher Peltz Identifying an individual in response to a query seeking to locate personnel with particular experience
US20120197674A1 (en) * 2011-01-27 2012-08-02 Maher Rahmouni Estimating a future project characteristic based on the similarity of past projects
US20130041711A1 (en) * 2011-08-09 2013-02-14 Bank Of America Corporation Aligning project deliverables with project risks
US8881104B2 (en) * 2012-04-09 2014-11-04 Accenture Global Services Limited Component discovery from source code
US20140115565A1 (en) * 2012-10-18 2014-04-24 Microsoft Corporation Test similarity detection with method call sequence analysis
JP2017010476A (ja) * 2015-06-26 2017-01-12 三菱電機株式会社 類似判定装置、類似判定方法及び類似判定プログラム
US10218728B2 (en) * 2016-06-21 2019-02-26 Ebay Inc. Anomaly detection for web document revision
US10635693B2 (en) * 2016-11-11 2020-04-28 International Business Machines Corporation Efficiently finding potential duplicate values in data
US10782964B2 (en) * 2017-06-29 2020-09-22 Red Hat, Inc. Measuring similarity of software components

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070266367A1 (en) * 2004-01-07 2007-11-15 International Business Machines Corporation Relationship Management For Data Modeling In An Integrated Development Environment
JP2014127036A (ja) * 2012-12-26 2014-07-07 Fujitsu Ltd 情報処理プログラム、情報処理方法及び装置
JP2017111486A (ja) * 2015-12-14 2017-06-22 富士通株式会社 予兆検知プログラム、装置、及び方法
JP2017151977A (ja) * 2016-02-23 2017-08-31 富士通株式会社 ソフトウエアプログラムの修復のための方法及びプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
NGUYEN, HOAN ANH ET AL: "Using Topic Model to Suggest Fine-grained Source Code Changes", 2016 IEEEINTERNATIONAL CONFERENCE ON SOFTWARE MAINTENANCE AND EVOLUTION(ICSME), JPN6022016980, 16 January 2017 (2017-01-16), US, pages 200 - 210, ISSN: 0004766005 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022544173A (ja) * 2019-09-20 2022-10-17 エヌイーシー ラボラトリーズ アメリカ インク 自動コードレビューア推薦方法
KR102156931B1 (ko) * 2020-01-16 2020-09-16 주식회사 소프트센 블록 코딩된 프로그램 코드의 평가 장치, 시스템, 방법 및 기록 매체에 저장된 프로그램

Also Published As

Publication number Publication date
US20190265970A1 (en) 2019-08-29
US10521224B2 (en) 2019-12-31
JP7131199B2 (ja) 2022-09-06

Similar Documents

Publication Publication Date Title
JP7131199B2 (ja) クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別
US9298453B2 (en) Source code analytics platform using program analysis and information retrieval
US9542176B2 (en) Predicting software build errors
Roy Detection and analysis of near-miss software clones
EP3674918B1 (en) Column lineage and metadata propagation
CN108763091B (zh) 用于回归测试的方法、装置及系统
US9389852B2 (en) Technique for plagiarism detection in program source code files based on design pattern
CN111026433A (zh) 基于代码变更历史的软件代码质量问题自动修复方法、系统及介质
Xia et al. An effective change recommendation approach for supplementary bug fixes
Islam et al. How bugs are fixed: Exposing bug-fix patterns with edits and nesting levels
Richter et al. TSSB-3M: Mining single statement bugs at massive scale
Eghbali et al. De-hallucinator: Iterative grounding for llm-based code completion
CN117851101A (zh) 一种基于大语言模型的仓库级别代码缺陷自动修复的方法
US20230385037A1 (en) Method and system for automated discovery of artificial intelligence (ai)/ machine learning (ml) assets in an enterprise
Higo et al. Identifying clone removal opportunities based on co-evolution analysis
Ma et al. Capturing the Long-Distance Dependency in the Control Flow Graph via Structural-Guided Attention for Bug Localization.
Han et al. Two-phase assessment approach to improve the efficiency of refactoring identification
Kumar et al. Code clone detection and analysis using software metrics and neural network-a literature review
Biringa et al. Automated user experience testing through multi-dimensional performance impact analysis
Nguyen et al. Using topic model to suggest fine-grained source code changes
Cuadrado et al. Deriving OCL optimization patterns from benchmarks
Cholakov et al. Duplicate code detection algorithm
Asad et al. Impact of Combining Syntactic and Semantic Similarities on Patch Prioritization.
Romanov et al. Approaches for Representing Software as Graphs for Machine Learning Applications
Mohan et al. Automated Refactoring of Software using Version History and a Code Element Recentness Measure.

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210513

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220506

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220510

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220708

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: 20220726

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220808

R150 Certificate of patent or registration of utility model

Ref document number: 7131199

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150