(57)【要約】      （修正有）【課題】クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別を可能とする方法、及びコンピュータプログラムを提供する。【解決手段】ソフトウェアプログラムである一以上のターゲットプロジェクト候補、及び対象プロジェクトのフィーチャ情報にアクセスして、ターゲットプロジェクト候補の各々のフィーチャ情報と、対象プロジェクトのフィーチャ情報との間の類似度スコアを決定する。次に、ターゲットプロジェクト候補の各フィーチャのフィーチャ情報の類似度スコアを合計して、各ターゲットプロジェクト候補の合計類似度スコアを生成し、類似ターゲットプロジェクトセットを生成する。生成した類似ターゲットプロジェクトに基づいて、推奨されたコードを対象プロジェクトに実装して、不具合を修復する。【選択図】図９
2019153270.tif 000002
【特許請求の範囲】
【請求項１】
対象プロジェクトを改善するクロスプロジェクト学習の方法であって、
ターゲットプロジェクト候補データベースが、一以上のターゲットプロジェクト候補のフィーチャ情報を含むフィーチャにアクセスすることと、
サーバが、対象プロジェクトのフィーチャ情報を含むフィーチャにアクセスすることであって、前記ターゲットプロジェクト候補と前記対象プロジェクトはソフトウェアプログラムである、ことと、
前記ターゲットプロジェクト候補の各々のフィーチャ情報と、前記対象プロジェクトのフィーチャ情報との間の類似度スコアを決定することであって、類似度スコアは前記ターゲットプロジェクト候補の各々の各フィーチャに対して決定される、ことと、
前記ターゲットプロジェクト候補の各フィーチャの類似度スコアを合計して、前記ターゲットプロジェクト候補の各々の合計類似度スコアを生成することと、
前記合計類似度スコアにより前記ターゲットプロジェクト候補をソートすることと、
前記合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることと、
前記合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む類似ターゲットプロジェクトのセットを生成することと、
前記類似ターゲットプロジェクトに基づいて対象プロジェクト中の不具合を特定することと、
前記類似ターゲットプロジェクトに基づいて、前記対象プロジェクト中の不具合を修復するコードを推奨することと、
推奨されたコードを前記対象プロジェクトに実装して前記不具合を修復することにより前記対象プロジェクトを修正することとを含む、
方法。
【請求項２】
修正された対象プロジェクトをテストする新しいデータを生成することと、
前記対象プロジェクト中の他の不具合を予測することと、
のうち一方または両方を含む、請求項１に記載の方法。
【請求項３】
所定性能標準を用いて、修正された対象プロジェクトを検証することをさらに含み、前記所定性能標準は、前記対象プロジェクトが修正される前の前記対象プロジェクトの性能に基づく、
請求項１に記載の方法。
【請求項４】
前記ターゲットプロジェクト候補のフィーチャと、前記対象プロジェクトのフィーチャとは、プロジェクト説明、クラス名、メソッド名、変数名、依存ＡＰＩ名、コメント、又は外部ライブラリを含み、
前記フィーチャ情報は、前記フィーチャに対応するテキスト情報と構造情報とを含む、
請求項１に記載の方法。
【請求項５】
生成された類似ターゲットプロジェクトのセットは、
合計類似度スコアが上位のパーセンテージにランクされたターゲットプロジェクト候補と、
合計類似度スコアがすべての合計類似度スコアの上位にランクされたターゲットプロジェクト候補と、
合計類似度スコアが合計類似度スコア閾値以上のターゲットプロジェクト候補とを含む、
請求項１に記載の方法。
【請求項６】
前記ターゲットプロジェクト候補のフィーチャにアクセスすることと、前記対象プロジェクトのフィーチャにアクセスすることとは、
前記ターゲットプロジェクト候補のフィーチャのソースコード、テストケース、及びリードミーファイルのうち一以上または組み合わせを解析することと、
それからテキスト情報と構造情報とを抽出して、ドキュメントとクエリとを構成することと、
前記クエリと前記ドキュメントとをインデックスすることとを含み、
前記ドキュメントは前記ターゲットプロジェクト候補のフィーチャに対応し、前記クエリは前記対象プロジェクトのフィーチャに対応する、
請求項１に記載の方法。
【請求項７】
前記類似度スコアを決定することは、数式
【数１】
2019153270.tif 000012
により実行され、
ｘ１’は前記ターゲットプロジェクト候補の１つのドキュメント中の言葉のＢＭ２５ベースの重みを表し、
ｙ１’は前記対象プロジェクトのクエリ中の言葉のＢＭ２５ベースの重みを表し、
ｓ（）は類似度スコアを計算する関数を表し、
ｔｆｄ（ｘｉ）は前記ターゲットプロジェクト候補の１つのドキュメント中のｉ番目の言葉の平滑化された語出現頻度を表し、
ｔｆｑ（ｙｉ）は前記対象プロジェクトのクエリ中のｉ番目の言葉の平滑化された語出現頻度を表し、
ｉｄｆ（ｔｉ）はｉ番目の言葉ｔの逆文書頻度を表し、
ｘは語出現頻度を表し、
ｙは語出現頻度を表し、
ｄｆベクトルはドキュメントベクトルを表し、
ｑｆベクトルはクエリベクトルを表し、
ｂはスケーリング係数を表し、
ｌｄはドキュメント長を表し、
ｌｃは平均ドキュメント長を表し、
ｎｔは言葉ｔを有するターゲットプロジェクト候補中のドキュメント数を表し、
Ｎはディクショナリ中の単語の総数を表し、
×はスカラー乗算である、
請求項１に記載の方法。
【請求項８】
前記類似度スコアを決定することは、
前記対象プロジェクトのフィーチャ情報から得られたクエリタームを含むクエリベクトルを構成することと、
前記ターゲットプロジェクト候補のフィーチャ情報から得られたドキュメントタームを含むドキュメントベクトルを構成することと、
ターゲットプロジェクト候補中のフィーチャを選択することであって、選択されるフィーチャは前記ドキュメントベクトル中のドキュメントタームを含む、ことと、
選択されたフィーチャに対して、前記クエリベクトルと前記ドキュメントベクトルとの間のコサイン類似度を決定することと、
選択されたフィーチャのコサイン類似度を合計スコアに加えることとを含む、
請求項１に記載の方法。
【請求項９】
コンピュータプログラムであって、コンピュータの一以上のプロセッサに、
ターゲットプロジェクト候補データベースが、一以上のターゲットプロジェクト候補のフィーチャ情報を含むフィーチャにアクセスすることと、
サーバが、対象プロジェクトのフィーチャ情報を含むフィーチャにアクセスすることであって、前記ターゲットプロジェクト候補と前記対象プロジェクトはソフトウェアプログラムである、ことと、
前記ターゲットプロジェクト候補の各々のフィーチャ情報と、前記対象プロジェクトのフィーチャ情報との間の類似度スコアを決定することであって、類似度スコアは前記ターゲットプロジェクト候補の各々の各フィーチャに対して決定される、ことと、
前記ターゲットプロジェクト候補の各フィーチャの類似度スコアを合計して、前記ターゲットプロジェクト候補の各々の合計類似度スコアを生成することと、
前記合計類似度スコアにより前記ターゲットプロジェクト候補をソートすることと、
前記合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることと、
前記合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む類似ターゲットプロジェクトのセットを生成することと、
前記類似ターゲットプロジェクトに基づいて対象プロジェクト中の不具合を特定することと、
前記類似ターゲットプロジェクトに基づいて、前記対象プロジェクト中の不具合を修復するコードを推奨することと、
推奨されたコードを前記対象プロジェクトに実装して前記不具合を修復することにより前記対象プロジェクトを修正することとを実行させる、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この出願は、概して、クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別に関する。
【背景技術】
【０００２】
クロスプロジェクト学習により、既存プロジェクトのレビューに基づき対象プロジェクトの修正が可能になる。例えば、既存プロジェクトのレビューにより、対象プロジェクト中の問題の識別が可能になり、それらは対象プロジェクトにおいて修復することができる。さらに、クロスプロジェクト学習においては、既存のプロジェクトに組み込まれた既存の解を用いて、対象プロジェクトの問題を修復することができる。このようにすれば、リワーク量が減少し得る。例えば、対象プロジェクトの問題を修復する効率は、既存プロジェクトに対してすでに行われたワークを用いることにより、改善し得る。
【０００３】
クロスプロジェクト学習においては、従来のツールはワンサイズ・フィッツオール（ｏｎｅ−ｓｉｚｅ−ｆｉｔｓ−ａｌｌ）アプローチに従う。例えば、従来のツールの多くは、多くの、整理されておらず無関係なソフトウェアプログラムを含む一般コーパスを用いる。一般コーパスはどの対象プロジェクトやどのコードサーチにも用いられる。一般コーパスの利用は無関係なプロジェクトも含まれる。無関係なプロジェクトはノイズとなり、コードサーチと学習プロセスに関連するコストを増大させる。
【０００４】
特許請求の範囲に記載した主題は、何らかの欠点を解消する実施形態や、上記のような環境のみで動作する実施形態に限定されない。むしろ、この背景技術は、この明細書に説明する幾つかの実施形態を実施できる技術分野例を示すだけである。
【発明の概要】
【０００５】
一実施形態の一態様では、対象プロジェクトを改善するクロスプロジェクト学習の方法は、ターゲットプロジェクト候補データベースが、一以上のターゲットプロジェクト候補のフィーチャ情報を含むフィーチャにアクセスすることを含んでいてもよい。本方法は、サーバが、対象プロジェクトのフィーチャ情報を含むフィーチャにアクセスすることを含んでもよい。ターゲットプロジェクト候補と対象プロジェクトとはソフトウェアプログラムを含んでいてもよい。本方法は、各ターゲットプロジェクト候補のフィーチャ情報と対象プロジェクトのフィーチャ情報との間の類似度スコアを決定することを含んでいてもよい。類似度スコアは、各ターゲットプロジェクト候補の各フィーチャに対して決定されてもよい。本方法は、前記ターゲットプロジェクト候補の各フィーチャの類似度スコアを合計して、前記ターゲットプロジェクト候補の各々の合計類似度スコアを生成することを含んでいてもよい。本方法は、前記合計類似度スコアにより前記ターゲットプロジェクト候補をソートすることを含んでいてもよい。本方法は、前記合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることを含んでいてもよい。本方法は、合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む、類似ターゲットプロジェクトのセットを生成することとを含んでいてもよい。本方法は、前記類似ターゲットプロジェクトに基づいて対象プロジェクト中の不具合を特定することを含んでいてもよい。本方法は、前記類似ターゲットプロジェクトに基づいて、前記対象プロジェクト中の不具合を修復するコードを推奨することを含んでいてもよい。本方法は、推奨されたコードを前記対象プロジェクトに実装して前記不具合を修復することにより前記対象プロジェクトを修正することを含んでいてもよい。
【０００６】
実施形態の目的と利点は、少なくとも、特許請求の範囲に具体的に記載した要素、特徴、及び組み合わせにより実現及び達成される。言うまでもなく、上記の概要と、下記の詳細な説明とは、説明をするためのものであり、特許請求の範囲に記載された本開示を制限するものではない。
【図面の簡単な説明】
【０００７】
添付した図面を用いて、実施形態の例をさらに具体的に詳しく説明する。
【０００８】
【図１】対象プロジェクトのクロスプロジェクト学習が実施され得る例示的な第１のクロスプロジェクト学習環境を示す図である。
【０００９】
【図２】対象プロジェクトのクロスプロジェクト学習が実施され得る例示的な第２のクロスプロジェクト学習環境を示す図である。
【００１０】
【図３】プロジェクト間の類似度スコアを決定する例示的なプロセスを示す模式図である。
【００１１】
【図４】図３のプロセスを用いるクロスプロジェクト学習の例示的な応用を示す図である。
【００１２】
【図５】図４の例示的な応用の結果を示す図である。
【００１３】
【図６】特徴（ｆｅａｔｕｒｅｓ）の特徴情報を抽出する例示的な方法を示すフロー図である。
【００１４】
【図７】特徴情報を前処理する例示的な方法を示すフロー図である。
【００１５】
【図８】ベクトルを構成し比較する例示的な方法を示すフロー図である。
【００１６】
【図９】関連特徴情報検索の例示的な方法を示すフロー図である。
【００１７】
【図１０】テストデータ生成と修正対象プロジェクト検証（ｍｏｄｉｆｉｅｄ  ｓｕｂｊｅｃｔ  ｐｒｏｊｅｃｔ  ｖａｌｉｄａｔｉｏｎ）の例示的な方法を示すフロー図である。
【００１８】
すべての図は、本開示に説明される少なくとも１つの実施形態に従う。
【発明を実施するための形態】
【００１９】
ソフトウェア開発では、クロスプロジェクト学習を利用して、ソフトウェア問題をより効率的に解決することができる。クロスプロジェクト学習を利用することにより、現在のソフトウェア問題に対する解決策が全体で再作成されない。それどころか、現在のソフトウェア問題に対する解決策が過去のソフトウェア問題に対して実施された解決策に基づく。例えば、ソフトウェア開発者や自動化ツールは、以前の関連プロジェクトにおいて同様のソフトウェアバグがどのように解決されたかを学習することにより、ソフトウェアバグを解決することができる。
【００２０】
クロスプロジェクト学習においては、ソフトウェアプログラムのデータベースを利用して現在のソフトウェア問題に関してより多くを学習する。現在のソフトウェアは対象プロジェクトとも呼ばれることがある。しかし、従来のクロスプロジェクト学習では、この単一データベースは、ソフトウェアプログラムの固定リポジトリであり、対象プロジェクトに関わらず利用され得る。したがって、データベースを用いて実施されるコードサーチにより、ターゲットプロジェクトの複数候補の識別情報が得られる。ターゲットプロジェクトの複数候補には、関連するプログラムも無関係のプログラムも含まれ、目的、機能、言語、ドメインなどで、ある範囲に入るプログラムも含み得る。ターゲットプロジェクト候補の広がりと範囲により、クロスプロジェクト学習が非効率的になり、計算リソースが無駄になる。
【００２１】
また、いくつかのコードサーチアプリケーションは、所望のコーパスを決定するのに役立ち得る。例えば、開発者のくせが予測されるアプリケーションなどの一般的なコードサーチアプリケーションは、複数の異なるプログラムタイプと言語を有するコーパスの利益を受け得る。例えば、幾つかのコードサーチアプリケーションは、Ｃ、Ｃ＋＋、ＪＡＶＡ(登録商標)その他のプログラミング言語などの複数のプログラミング言語のコーパスの利益を受け得る。その他の場合は、単一言語コーパスの利益を受け得る。例えば、Ｎｕｌｌ−Ｐｏｉｎｔｅｒ−Ｅｘｃｅｐｔｉｏｎ（ＮＰＥ）バグの修復などの特定言語アプリケーションは、ＪＡＶＡプロジェクトのみのコーパスの利益を受け得る。同様に、幾つかの特定ドメインアプリケーションは、関連するソフトウェアプロジェクトのみのコーパスの利益を受け得る。例えば、アプリケーションプログラミングインターフェース（ＡＰＩ）に関係するバグを直すことは、関連ソフトウェアプロジェクトのみのコーパスの利益を受け得る。
【００２２】
したがって、本開示の幾つかの実施形態は、関連するソフトウェアプロジェクトを用いて対象プロジェクトを改良するクロスプロジェクト学習の方法を含む。
【００２３】
本開示で説明する実施形態は、クロスプロジェクト学習の方法を含み得る。関連するプロジェクトのコーパスはデータベースに格納された大きなプロジェクトセットから選択され得る。データベースに格納された大きなプロジェクトセットは、関連プロジェクトのコーパスとして選択される関連プロジェクトに加えて、無関係のプロジェクトを含み得る。幾つかの実施形態はコンピュータ及びネットワーク環境の機能を改善する。例えば、幾つかの実施形態は、類似のターゲットプロジェクトに基づき対象プロジェクトの不具合を特定すること、前記類似のターゲットプロジェクトに基づき、前記対象プロジェクトの不具合の修復するコードを推奨することと、推奨されるコードを前記対象プロジェクトに実装することにより前記対象プロジェクトを修正して、前記不具合を修復することとを含み得る。対象プロジェクトを修正することにより、よりクオリティが高いコードパッチが得られ、計算のオーバーヘッドとネットワーク輻輳が低減され、ダウンタイムが短縮され、コード実行中の効率が良くなり、不要なコードが削除され、ループや長い計算が統合され、ウォーム、ウィルス及びマルウェアから保護または修復され、コール機能がより効率的または適切になり、分析的出力のエラーマージンが低下し、プロセッサやサーバで必要となる計算パワーのサイズが縮小し、ネットワーク機能のスピードが速くなり、またはこれらの組み合わせが得られる。
【００２４】
追加的にまたは代替的に、幾つかの実施形態は、ターゲットプロジェクト候補の各々の特徴情報と、対象プロジェクトの特徴情報との間の類似度スコアを決定することであって、類似度スコアはターゲットプロジェクト候補の各々の各特徴に対して決定され得ることと、ターゲットプロジェクト候補の各特徴の類似度スコアを合計して、ターゲットプロジェクト候補の各々の合計類似度スコアを生成することと、合計類似度スコアによりターゲットプロジェクト候補をソートすることと、合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることと、合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む、類似ターゲットプロジェクトのセットを生成することとを含み得る。上記の例示的ステップの１つ又は複数により、クロスプロジェクト学習におけるサーチ結果がより高速に求まり、サーチコストが低くなり、コードパッチがより効果的になり、実行可能が減り、及び／又は計算オーバーヘッドが低減される。
【００２５】
また、本明細書に説明する方法は、ソフトウェア開発、分析、欠陥予測、不具合修復及び／又はテスト生成の技術分野を改善できる。例えば、幾つかの実施形態は、類似のターゲットプロジェクトに基づき対象プロジェクトの不具合を特定すること、前記類似のターゲットプロジェクトに基づき、前記対象プロジェクトの不具合の修復を推奨することと、推奨されるコードを前記対象プロジェクトに実装することにより前記対象プロジェクトを修正して、前記不具合を修復することとを含み得る。本開示で説明する方法に基づき修正された対象プロジェクトにより、クロスプロジェクト学習がより効率的になり、同様に、ソフトウェア開発、コードのデバッグ、コード分析がより高速になり、その他のソフトウェア的改善が得られる。対象プロジェクトを修正するそのような方法は、従来の方法に対する改善である。従来の方法では、コンピュータソフトウェアプログラムの固定リポジトリの利用のため非効率的であり、幾つかのアプリケーションや実施例では、不要なサイズオーバーのサーチ結果出力のために計算オーバーヘッドが過剰になり、性能（例えば、スピード性能）が低下したり、不要な／強制されたパラメータにより（例えば、エンベディッドデバイスへのインストールの場合）特定ドメインのコンパチビリティや機能性などのオブジェクトに対して制限されたりすることがある。
【００２６】
本開示で説明する幾つかの実施形態は、（対象プロジェクトに関する）学習が関連プロジェクトのコーパスを用いて実行され得るクロスプロジェクト学習の方法を含み得る。学習する関連プロジェクトを得るため、プロジェクト候補の大きいコーパスを最初に分析して対象プロジェクトへの類似度を求めてもよい。候補プロジェクトの対象プロジェクトに対する類似度に基づき、各候補プロジェクトは類似度スコアを与えられる。類似度スコアは非類似の候補プロジェクトをフィルタ除去するのに用いられ得る。例えば、類似度スコアが最高の候補プロジェクトが選択されてもよい。選択された候補プロジェクトに基づいて、対象プロジェクトの不具合を特定することができ、その不具合を修復するコードが推奨されてもよい。推奨されるコードを前記対象プロジェクトに実装することにより、対象プロジェクトが修正され、不具合を修復することができる。
【００２７】
幾つかの実施形態では、類似度の分析は特徴（ｆｅａｔｕｒｅｓ）に基づいても良い。特徴には、例えば、プロジェクトの説明、クラス名、メソッド名、変数名、コメント、及び依存するＡＰＩ名などが含まれても良い。対象プロジェクトと候補プロジェクトの特徴情報は、特徴レベルで類似度スコアが提供されるように類似度に基づいて比較される。このように、幾つかの実施形態では、各候補プロジェクトの各特徴は、対象プロジェクトの特徴に関する類似度スコアを有していてもよい。追加的に又は代替的に、各候補プロジェクトにおける各特徴の類似度スコアは、足し合わせることができ、全体として候補プロジェクトの複合または合計類似度スコアとなり得る。合計類似度スコアに基づき、対象プロジェクトに最も関連する又は最も類似する候補プロジェクトが選択され得る。
【００２８】
これらの又は他の実施形態を、添付した図面を参照して説明する。添付した図面において、特に断らなければ、同様の項目番号を有する特徴および構成要素は、同様の構造および機能を示す。添付した図面は、必ずしもスケール通りには描かれていない。
【００２９】
図を参照して、図１は、本開示で説明する少なくとも１つの実施形態にしたがって構成される第１の例示的なクロスプロジェクト学習環境（第１の実施形態）１００を示す。図示したように、第１の実施形態１００は、サーバ１０２と対象プロジェクト１０５とを含み得る。対象プロジェクト１０５は、ソースコード１１０、リードミーファイル１１５、及び一以上のテストケース１２０を含み得る。追加的に、第１の実施形態１００は、バス１２３を介して通信可能に結合されたコンポーネントを含むサーチモジュール１２２を有する計算デバイス１２１を含む。サーチモジュール１２２は、ターゲットプロジェクト候補データベース（図１の「ターゲットプロジェクト候補」）１２５、フィルタ１３０、類似ターゲットプロジェクト１３５、及びプロセッサ１３７を含み得る。幾つかの実施形態では、第１の環境１００は、パッチ候補１４０、テストモジュール１４５を有する計算デバイス１４１、及びプローザブルパッチ（ｐｌａｕｓｉｂｌｅ  ｐａｔｃｈ）１５０も含み得る。第１の環境１００において、クロスプロジェクト学習及び／又は不具合修復は、下記の実施形態を参照して説明するように自動的または半自動的に行われ得る。
【００３０】
幾つかの実施形態では、対象プロジェクト１０５は、問題があるとして、又はそうでなければコード修復を必要としているとして特定され得る。例えば、対象プロジェクト１０５は、実行されたとき、エラーを起こすソフトウェア問題であってもよい。このように、エラーを生じる不具合を修復するため、対象プロジェクト１０５の情報が、サーバ１０２からサーチモジュール１２２によりアクセスされ得る。サーバ１０２からアクセスされる情報は、類似した特徴を含むターゲットプロジェクト候補を、またはすでに実行された潜在的に類似したコード修復を、特定するために利用されてもよい。
【００３１】
例えば、対象プロジェクト１０５は不具合を含んでいるかも知れず、これはソースコード１１０の一以上の潜在的位置に位置しても良く、この位置はバグ位置と呼ばれ得る。追加的に又は代替的に、ユーザは、サーチモジュール１２２により実行されるコードサーチのために、ソースコード１１０の一以上のバグ位置を選択することができる。コードサーチにより、バグのあるソースコード１１０に対する潜在的な修復やパッチを得ることができる。コードサーチを実行するため、サーチモジュール１２２は、対象プロジェクト１０５と、ターゲットプロジェクト候補データベース１２５中のターゲットプロジェクト候補とに関する情報にアクセスして、アクセスされた情報を比較して、フィルタ１３０により類似度を求める。
【００３２】
例えば、対象プロジェクト１０５のソースコード１１０、リードミーファイル１１５、及びテストケース１２０の一以上のテキスト情報が、サーチモジュール１２２により、サーバ１０２からアクセスされ得る。追加的に又は代替的に、ターゲットプロジェクト候補データベース１２５中の一以上のターゲットプロジェクト候補のテキスト情報にアクセスしてもよい。これには、一以上のターゲットプロジェクト候補のソースコード、リードミーファイル、及びテストケースの一部または全部が含まれる。これらの又は他の実施形態において、対象プロジェクト１０５と、ターゲットプロジェクト候補データベース１２５のターゲットプロジェクト候補のうち一方または両方は、ソフトウェアプログラム（ソフトウェアプログラムの一部又は全部）であってもよい。
【００３３】
幾つかの実施形態では、対象プロジェクト１０５とターゲットプロジェクト候補とのアクセスされるテキスト情報は、フィルタ１３０により比較され、類似度（ｓｉｍｉｌａｒｉｔｙ）が得られる。例えば、対象プロジェクト１０５に関して類似度がある値または量のターゲットプロジェクト候補が、フィルタ１３０を用いてプロセッサ１３７により選択され得る。後で詳細に説明するように、対象プロジェクト１０５とターゲットプロジェクト候補との間の類似の程度は、テキストの類似度に基づいても良いし、様々な式を用いて決定されてもよい。さらに、幾つかの実施形態では、選択されるターゲットプロジェクト候補は、類似したターゲットプロジェクト１３５を含んでいてもよい。
【００３４】
幾つかの実施形態では、類似ターゲットプロジェクト１３５に基づいて、パッチ候補１４０が、対象プロジェクト１０５中の不具合を修復するのに潜在的に有益であるとして、サーチモジュール１２２により決定されてもよい。例えば、コードサーチ手法を用いて、サーチモジュール１２２はパッチ候補１４０を決定してもよい。コードサーチ手法の例にはｓｓＦｉｘ、すなわちプログラム構文を利用してバグを修正するプログラム修復ツールが含まれてもよい。
【００３５】
幾つかの実施形態では、テストモジュール１４５はパッチ候補１４０をテストすることができる。例えば、予め決定された性能標準を用いて、パッチ候補１４０のうちのプローザブルパッチ（ｐｌａｕｓｉｂｌｅ  ｐａｔｃｈ）１５０が特定され得る。所定の性能標準には、産業標準、速度要求、精度要求、計算オーバーヘッド要求、クライアントドリブンまたはエンドユーザドリブン要求などが含まれる。追加的に又は代替的に、所定の性能標準は、未修復の不具合を有する対象プロジェクト１０５の性能に対し、プローザブルパッチ１５０が適用された対象プロジェクト（例えば、修正された対象プロジェクト１０５）の性能に基づいていてもよい。
【００３６】
プローザブルパッチ１５０により、対象プロジェクト１０５の不具合は、例えば、自動的に又は半自動的に修復できる。追加的に又は代替的に、次のうち一部または全部が実行されてもよい：対象プロジェクト１０５中の他の不具合（ｄｅｆｅｃｔｓ）の予測、対象プロジェクト１０５中の一以上の不具合を修復する、類似ターゲットプロジェクト１３５に基づくコードの推奨、修正対象プロジェクト１０５をテストするテストデータの精製、エンドユーザへの修正された対象プロジェクト１０５のダウンロードのプッシュなど。これらの例は、例えば、類似ターゲットプロジェクト１３５中の関連コードの決定、又はパッチ候補１４０の決定に応じて実行されるアクティブステップであってもよい。例えば、本明細書で説明する方法により、プロセッサ１３７は、（例えば、グラフィカルユーザインターフェイス（ＧＵＩ）を介して）ユーザに、対象プロジェクト１０５に適用されるパッチ候補１４０の１つを、確認、選択、延期、無視、又は否定するように促す。同様に、本明細書に説明の方法により、プロセッサ１３７は、追加的に必要な修復を予測し、類似のターゲットプロジェクト１３５を考慮して追加的な修復を行うことを、ユーザに推奨してもよい。
【００３７】
図２は、本開示で説明する少なくとも１つの実施形態にしたがって構成され得る第２の例示的環境２００を示す図である。第２の環境２００は、ソフトウェア開発者２０５、ソフトウェアエンドユーザ２１０、ターゲットプロジェクト候補データベース２１５、開発者入力２２０、ユーザ入力２２５、クローラー２３０、原データ２３５、決定モジュール２４０と類似ターゲットプロジェクトデータベース２４５とを有する計算デバイス２３７、検索モジュール２５０を有する計算デバイス２４７、アプリケーションモジュール２５５を有する計算デバイス２５２、及び人間の開発者２６０を含み得る。これらの又は他の実施形態において、第２の環境２００は第１の環境１００より広いコンテキストを示すことができる。
【００３８】
幾つかの実施形態では、ソフトウェア開発者２０５は開発者入力２２０を生成し得る。開発者入力２２０には、例えば、ドキュメンテーション、メタデータ、リードミーファイル、テストケース、疑似コード、ソースコード、ディスカッション、ノート、コメント、タグ、パッチなどが含まれてもよい。幾つかの実施形態では、ソフトウェア開発者２１０は開発者入力２２５を生成し得る。ユーザ入力２２５には、例えば、バグレポート、ユーザレビュー、分析レポート、エラーメッセージ、バックアップファイル、リカバリーファイル、ビジュアルディスプレイ、チャート、グラフ、スプレッドシート、その他の好適な入力及びこれらの組み合わせが含まれてもよい。これらの又は他の実施形態において、開発者入力２２０とユーザ入力２２５が生成され、ターゲットプロジェクト候補データベース２１５に格納される。
【００３９】
クローラー（ｃｒａｗｌｅｒ）２３０は、ターゲットプロジェクト候補データベースをクロール（ｃｒａｗｌ）して、情報をスクラップし、原データ２３５を生成してもよい。原データ２３５はターゲットプロジェクト候補の１つと関連付けられ続けてもよい。幾つかの実施形態では、決定モジュール２４０は原データ２３５から好適な抽象をする。例えば、決定モジュール２４０は、原データ２３５の様々な部分を抽出して、前処理などの様々な操作を実行することができる。前処理は、本開示において以下にさらに説明するが、識別名称の分離、ストップワードの削除、及び残った言葉のステミング（ｓｔｅｍｍｉｎｇ）を含み得る。幾つかの実施形態では、前処理には、文法及び／又は単語の順序を無視するｂａｇ−ｏｆ−ｗｏｒｄｓアプローチが含まれてもよい。追加的に又は代替的に、類似ターゲットプロジェクトデータベース２４５においてインデックス及びアーカイブするのに、原データ２３５のどの情報が適切であるか、決定モジュール２４０が判定してもよい。例えば、決定モジュール２４０は、類似度を求めるため、（対象プロジェクト１０５などの）対象プロジェクトの情報を、一以上のターゲットプロジェクト候補に関連する原データ２３５と比較してもよい。類似の程度が十分であると判定されると、決定モジュール２４０は、類似ターゲットプロジェクトのセットを生成して、類似ターゲットプロジェクトデータベース２４５に格納してもよい。類似ターゲットプロジェクトセットの生成は、原データ２３５と、対象プロジェクトに対する類似度が十分大きい、関連するターゲットプロジェクト候補と、に基づくものであってもよい。類似ターゲットプロジェクトの情報は、適切にインデックスされて、類似ターゲットプロジェクトデータベース２４５にアーカイブされてもよい。このデータベース２４５では、各類似ターゲットプロジェクトの各特徴が、あるインデックスに関連付けられていてもよい。本開示では、用語「特徴（ｆｅａｔｕｒｅ）」は、ソフトウェアプログラム中の測定可能な特性（ｐｒｏｐｅｒｔｙ  ｏｒ  ｃｈａｒａｃｔｅｒｉｓｔｉｃ）であって、関連するソフトウェアプログラムを識別するために区別するために使用できるものとして解釈できる。
【００４０】
幾つかの実施形態では、検索（ｒｅｔｒｉｅｖａｌ）モジュール２５０は、ソフトウェアプログラム分析、コードサーチ、及び／又は人工知能機能、例えば対象プロジェクトに対して反復的に改善するために（深層学習を含む）機械学習を実行してもよい。追加的に又は代替的に、検索モジュール２５０は、類似ターゲットプロジェクトセットが、サーチされたコーパスであるコードサーチを実行してもよい。
【００４１】
類似ターゲットプロジェクトを用いるコードサーチに基づいて、パッチ候補が決定され、及び／又はアプリケーションモジュール２５５において使用のためテストされる。例えば、人間開発者２６０は、性能テストを行っても良く、そうでなければアプリケーションモジュールにおけるパッチ候補を管理してもよい。幾つかの実施形態では、アプリケーションモジュール２５５は、統合開発環境（ＩＤＥ）を含んでいてもよく、検索モジュール２５０と人間開発者２６０のうち一方または両方から入力を受け取ってもよい。追加的に又は代替的に、アプリケーションモジュール２５５は、検索モジュール２５０及び人間開発者２６０のうち一方または両方への出力を生成してもよい。
【００４２】
他の実施形態では、類似ターゲットプロジェクトを用いるコードサーチに基づき、不具合が予測され得る。かかる不具合予測はアプリケーションモジュール２５５における利用にとって有用であり得る。例えば、不具合が明示的に特定されてもよく、他の場合では、不具合がありそうだと予測されてもよい。例えば、不具合の存在がある確率で予測されてもよい。追加的に又は代替的に、不具合が、対象プロジェクト中のある行、あるセクション、ある関数、及び／又はある場所に存在すると予測されてもよい。これらの又はその他の実施形態では、不具合予測はパッチ候補を含んでもよく、一方、他の実施形態では、不具合予測にはパッチ候補が含まれていなくてもよい。
【００４３】
図１と図２を両方とも参照して、サーチモジュール１２２、テストモジュール１４５、決定モジュール２４０、検索モジュール２５０、及びアプリケーションモジュール２５５を含め、各モジュールは、一以上の動作を実行するように構成された一以上のルーチンを含むソフトウェアとして実施することができる。これらのモジュールは、以下に説明する機能を提供する、プロセッサにより実行可能な命令セットを含んでいてもよい。幾つかの実施例では、モジュールは、計算デバイス１２１、計算デバイス１４１、計算デバイス２３７、計算デバイス２４７、及び計算デバイス２５２の、対応するメモリに、記憶され、又は少なくとも一時的にロードされてもよい。また、モジュールは一以上のプロセッサによりアクセス可能であり、かつ実行可能であってもよい。これらのモジュールのうち一以上は、バス１２３などのバスを介して、計算デバイス１２１、１４１、２３７、２４７、及び２５２の一以上のプロセッサ及びコンポーネントと協働及び通信するように構成されていてもよい。
【００４４】
図３は、図１の第１の環境１００において実施され得る、プロジェクト間の類似度スコア決定の図式３００を示す概略図である。図式３００で表されるプロセスは、対象プロジェクト３１０を改善するように実施され得る。図示した実施形態では、図式３００は、ターゲットプロジェクト候補３０５（図３の「候補プロジェクト」）、対象プロジェクト３１０、ターゲットフィーチャ３１５、対象フィーチャ３２０、前処理３２５、ＢＭ２５ベースのベクトル空間モデル３３０、類似度スコア３３５（図３のＳ１−Ｓ６）、合計類似度スコア３４０、ソートモジュール３４５、閾値３５０、選択モジュール３５５、及び類似ターゲットプロジェクト３６０を含み得る。
【００４５】
幾つかの実施形態では、図式３００は、ターゲットプロジェクト候補３０５と対象プロジェクト３１０において何の情報がアクセスされるかを示す。例えば、ターゲットフィーチャ３１５は、ターゲットプロジェクト候補３０５の１つに属するが、アクセスされ得る。同様に、例えば、対象フィーチャ３２０は、対象プロジェクト３１０に属するが、アクセスされ得る。
【００４６】
追加的に又は代替的に、図式３００は、（前処理３２５などの）類似度比較の前に、アクセスされた情報に何をするか、及び（ＢＭ２５ベースのベクトル空間モデル３３０など）類似度比較をどう行うかを示す。類似度比較が行われると、図式３００は、幾つかの例示的結果に何が含まれるか（類似度スコア３３５、合計類似度スコア３４０、及び類似ターゲットプロジェクト３６０など）及び／又はその例示的結果を用いて何が実現できるかを示す。
【００４７】
幾つかの実施形態では、ターゲットプロジェクト候補３０５と対象プロジェクト３１０は、ソフトウェアプログラムであってもよく、ソフトウェアプログラムを含んでもよく、又はソフトウェアプログラムに結びつけられてもよい。ターゲットプロジェクト候補３０５と対象プロジェクト３１０は、フィーチャ（例えば、ターゲットフィーチャ３１５または対象フィーチャ３２０）のサブセットを含み得る。例えば、ターゲットプロジェクト候補３０５は、ターゲットフィーチャ３１５ａ−３１５ｆなどのフィーチャのサブセットを含み得る。同様に、他のターゲットプロジェクト候補３０５は、異なるフィーチャサブセットを含み得る。また、対象プロジェクト３１０は、対象フィーチャ３２０ａ−３２０ｆなどのフィーチャサブセットを含み得る。
【００４８】
より具体的に、ターゲットフィーチャの例には、プロジェクト説明３１５ａ、クラス名３１５ｂ、メソッド名３１５ｃ、変数名３１５ｄ、コメント３１５ｅ、及び依存ＡＰＩ名３１５ｆを含まれ得る。同様に、対象フィーチャ３２０の例には、プロジェクト説明３２０ａ、クラス名３２０ｂ、メソッド名３２０ｃ、変数名３２０ｄ、コメント３２０ｅ、及び依存ＡＰＩ名３２０ｆを含み得る。これらの又はその他の実施形態では、情報は多かれ少なかれターゲットフィーチャ３１５及び／又は対象フィーチャ３２０を含み得る。例えば、ターゲットフィーチャ３１５と対象フィーチャ３２０のうち一方または両方は、ドキュメンテーション、メタデータ、リードミーファイル、テストケース、疑似コード、ソースコード、ディスカッション、ノート、コメント、タグ、パッチなどに基づくテキスト情報または構造情報を含み得る。
【００４９】
幾つかの実施形態では、ターゲットフィーチャ３１５と対象フィーチャ３２０は、前処理３２５により前処理されてもよい。前処理には、識別子名の分離、ストップワードの削除、残った言葉のステミング（ｓｔｅｍｍｉｎｇ）が含まれ得る。例えば、変数名は「ｔｅｒｍｓＩｎＤｏｃｕｍｅｎｔ」を含み得る。識別名の分離は、「ｔｅｒｍｓ  ｉｎ  ｄｏｃｕｍｅｎｔ」と分離することを含み、単語間にスペースが入れられている。ストップワードの削除は、「ｔｅｒｍｓ  ｉｎ  ｄｏｃｕｍｅｎｔ」のように言葉「ｉｎ」が抹消または削除される。ストップワードは、サーチエンジンが無視するようにプログラムされた、「ｔｈｅ」などの一般的に用いられる単語である。残った言葉のステミングは、単語の原形を求めるために、「ｔｅｒｍｓ  ｄｏｃｕｍｅｎｔ」のように、複数を示す文字「ｓ」を抹消または削除する。残るのは、この例では、「ｔｅｒｍ  ｄｏｃｕｍｅｎｔ」である。
【００５０】
ターゲットフィーチャ３１５のフィーチャ情報と、対象フィーチャ３２０のフィーチャ情報とが前処理３２５された後、クエリとドキュメントと呼ばれるエンティティが、ＢＭ２５ベースのベクトル空間モデル３３０において、ターゲットフィーチャ３１５を対象フィーチャ３２０と比較する準備として構成されポピュレート（ｐｏｐｕｌａｔｅ）される。例えば、クエリは、構成され、対象フィーチャ３２０の前処理されたフィーチャ情報でポピュレート（ｐｏｐｕｌａｔｅ）されてもよく、ドキュメントは、構成され、ターゲットフィーチャ３１５の前処理されたフィーチャ情報でポピュレートされてもよい。追加的に又は代替的に、クエリとドキュメントの両方の前処理されたフィーチャ情報は、インデックスされ、ベクトル表現が生成される。例えば、ドキュメントベクトルは、
（外１）
2019153270.tif 000003
と表せる。クエリベクトルは
（外２）
2019153270.tif 000004
と表せる。クエリベクトルとドキュメントベクトルは、例示のＢＭ２５表現にしたがって、
【数１】
2019153270.tif 000005
と計算できる。上記の式で、パラメータｘ１’は、ターゲットプロジェクト候補３０５の１つのドキュメント中の言葉のＢＭ２５ベース加重を表し得る。パラメータｙ１’は、対象プロジェクト３１０のクエリ中の言葉のＢＭ２５ベース加重を表し得る。パラメータｔｆｄ（ｘｉ）は、ターゲットプロジェクト候補３０５の１つのドキュメント中のｉ番目の言葉の平滑化された語出現頻度を表し、「平滑化された」とは、急激な変化、ランダムな変化、又は外れ値などのノイズを低減するデータ点（例えば、語出現頻度）の修正と解釈してもよい。パラメータｔｆｄ（ｘｉ）は、ターゲットプロジェクト候補３１０の１つのドキュメント中のｉ番目の言葉の平滑化された語出現頻度を表し、「平滑化された」とは、急激な変化、ランダムな変化、又は外れ値などのノイズを低減するデータ点（例えば、語出現頻度）の修正と解釈してもよい。パラメータｉｄｆ（ｔｉ）は、ｉ番目の言葉ｔの逆文書頻度を表し得る。パラメータｘは語出現頻度を表し得る。パラメータｙは語出現頻度を表し得る。パラメータｂはスケーリングファクタを表し得る。パラメータｌｄは文書長を表し得る。パラメータｌｃは平均文書長を表し得る。パラメータｎｔは、言葉ｔを有するターゲットプロジェクト候補中のドキュメント数を表し得る。パラメータＮは、辞書中の単語の総数を表し得る。演算子×はスカラー乗算である。
【００５１】
ポピュレートされたクエリベクトルとドキュメントベクトルを用いて、ＢＭ２５ベースのベクトル空間モデル３３０において、ドキュメントベクトルは、第２の例示的ＢＭ２５式
【数２】
2019153270.tif 000006
を用いて、クエリベクトルに対して比較され、類似度を求めることができる。第２のＢＭ２５式において、ｓ（）はフィーチャレベルで類似度スコアを比較する関数を表し得る。残りのパラメータは上述の通りである。
【００５２】
このように、幾つかの実施形態では、ＢＭ２５ベース・ベクトル空間モデル３３０の出力は、類似度スコア３３５を含み得る。類似度スコア３３５は、クエリベクトルとドキュメントベクトルとの間の類似度を表し、または対象フィーチャ３２０とターゲットフィーチャ３１５との間の類似度を表すことができる。幾つかの実施形態では、類似度スコア３３５は、ターゲットプロジェクト候補３０５と対象プロジェクト３１０とのうち一方または両方から抽出されるフィーチャの数に応じて、幾つの類似度スコア３３５（例えば、Ｓ１−Ｓｎ）を含んでもよい。
【００５３】
幾つかの実施形態では、類似度スコア３３５は１対１関係を有しても良い。例えば、類似度スコア３３５のＳ１は、プロジェクト説明３１５ａとプロジェクト説明３２０ａとの間の類似度に対応し得る。他の実施形態では、類似度スコア３３５間の関係は１対１で無くてもよい。例えば、クラス名３２０ｂは、類似度を求めるために、クラス名３１５ｂと比較されるだけでなく、メソッド名３１５ｃおよび変数名３１５ｄとも比較され得る。このように、この例では、類似度スコア３３５のＳ２は、クラス名３２０ｂと複数のターゲットフィーチャ３１５との間の類似度を表し得る。
【００５４】
これらの又はその他の実施形態において、類似度スコア３３５は、足し合わされ、ターゲットプロジェクト候補３０５の１つに対する合計類似度スコア３４０を生成できる。幾つかの実施形態では、合計類似度スコア３４０は、０または１に等しく、又は０と１との間にあってもよく、他の実施形態では、大きさが１ないし４桁変動する。他の実施形態では、合計類似度スコア３４０は任意の正数であってもよい。
【００５５】
幾つかの実施形態では、一以上のターゲットプロジェクト候補３０５に対する合計類似度スコア３４０の決定は、例示的合計類似性スコアの式
【数３】
2019153270.tif 000007
にしたがって行われ得る。合計類似度スコアの式において、関数ｓ’（）は合計類似度スコアを表す。パラメータｗｆは加重係数を表し得る。パラメータｆｉｅｌｄｓはフィーチャを表す。
【００５６】
幾つかの実施形態では、及び（ターゲットプロジェクト候補データベース１２５などの）プロジェクトデータベース中のターゲットプロジェクト候補３０５の数に応じて、複数のターゲットプロジェクト候補３０５は、前処理３２５において前処理され、ＢＭ２５ベース・ベクトル空間モデル３３０中の対象プロジェクト３１０と比較されてもよい。例えば、分析及び比較するターゲットプロジェクト候補３０５が残っていないとき、ソートモジュール３４５は合計類似度スコア３４０にしたがってターゲットプロジェクト候補３０５をソートしてもよい。
【００５７】
追加的に又は代替的に、ターゲットプロジェクト候補３０５は、閾値３５０にしたがってフィルタされてもよい。例えば、合計類似度スコア３４０が閾値３５０より低いターゲットプロジェクト候補３０５は、選択モジュール３５５により選択されなくてもよい。選択モジュール３５５は、類似ターゲットプロジェクト３６０のセットを生成してもよい。これは、合計類似度スコア３４０が閾値３５０以上である、選択されたターゲットプロジェクト候補３０５であってもよい。幾つかの実施形態では、生成される類似ターゲットプロジェクト３６０セットは、合計類似度スコア３４０が上位のパーセンタイルにランクされているターゲットプロジェクト候補３０５と、合計類似度スコア３４０がすべての合計類似度スコア３４０のうち上位の数にランクされているターゲットプロジェクト候補３０５と、合計類似度スコア３４０が閾値合計類似度スコア以上であるターゲットプロジェクト候補３０５のうち一以上を含み得る。
【００５８】
幾つかの実施形態では、類似ターゲットプロジェクト３６０は、（プローザブルパッチ１５０などの）プローザブルパッチを決定するのに使われてもよい。プローザブルパッチを決定する例示的プロセスの詳細を図４および図５を参照してさらに説明する。
【００５９】
図４は、バグ修復の決定に用いることができる、図３のプロセス３００の例示的アプリケーション４００を示す。図４に示すように、アプリケーション４００は、Ｃｏｍｍｏｎｓ  Ｌａｎｇ（Ｂｕｇ  ＩＤ：ＬＡＮＧ−６７７）の例示的なバグ修復であってもよく、エラー４１０と４１５を含むエラーライン４０５と、修正４２５と４３０を含む置換ライン４２０とを含んでいてもよい。
【００６０】
アプリケーション４００において、修復（ｆｉｘ）は複数の編集を要する。例えば、修復は２つのＡＰＩ中のパラメータの変更を要する。複数の編集を要するような場合には、合成ベース・プログラム修復は、例えば、トライアンドエラーをしなければならないため、コストが高くなり得る。このように、バグ修復に関係するコードが同じプロジェクト中または他の関連プロジェクト中のどこか他のところに見つかった場合、コードサーチベースのアプローチは、エラーライン４０５を修復するのに好適であり得る。図３のプロセスを用いて、修正ライン４２０中に示す適切なパッチは、（図５を参照して以下に説明する）ｓｏｕｒｃｅｆｏｒｇｅ．ｎｅｔにホスティングされたターゲットプロジェクト候補データベースの「ａｄｅｍｐｉｅｒｅ」と呼ばれるプロジェクト中に見つけられる。
【００６１】
図５は、図４のアプリケーションの例示的な予備的結果５００を示す図である。予備的結果５００は、概要結果５０１と詳細結果テーブル５０３とを含み得る。概要結果５０１は、コーパスまたはデータベース中の複数のプロジェクトを特定してもよい。図５において、プロジェクト数は９８０である。他の場合には、プロジェクト数は別のプロジェクト数を含み得る。概要結果５０１は、正しいコードを含むプロジェクトと、正しいコードを含むプロジェクトのランクとを特定することもできる。例えば、図５において、正しいコードを含むプロジェクトは、「Ａｄｅｍｐｉｅｒｅ」と名付けられ、詳細結果５０３テーブル中の２４番目の位置にランキングされている。これは、類似度スコアでランキングしたとき、９８０プロジェクト中トップ３％に入る。
【００６２】
詳細結果テーブル５０３は、コーパスまたはデータベース中の各プロジェクトに対して、ランク５０５、プロジェクト名５１０、及び合計類似度スコア（図５では「スコア」）５１５を含み得る。コーパスやデータベース中のプロジェクトは、提示される実施形態中のどこかで説明されたターゲットプロジェクト候補３０５とほぼ同様であり、対応するものであり得る。また、類似ターゲットプロジェクト３６０は、ランク５０５が３０などのある番号以上である、またはスコア５１５が０．３３０以上であるターゲットプロジェクト候補３０５を含み得る。予備的結果５００を用いて、正しいコードを含むプロジェクト（例えば、「Ａｄｅｍｐｉｅｒｅ」）が迅速に特定でき、それからプローザブルパッチが決定できる。
【００６３】
図６は、本開示において説明された少なくとも１つの実施形態にしたがって構成されたフィーチャ情報を抽出する例示的方法６００を示すフロー図である。離散的ブロックとして示したが、所望の実施形態に応じて、様々なブロックは、複数のブロックに分割されてもよく、より少ないブロックに結合されてもよく、又は削除されてもよい。
【００６４】
方法６００はブロック６０５で始まり、ターゲットプロジェクト候補のフィーチャと対象プロジェクトのフィーチャとがアクセスされる。候補プロジェクトデータベース中のターゲットプロジェクト候補のフィーチャがアクセスされてもよい。また、サーバ中の対象プロジェクトのフィーチャがアクセスされてもよい。フィーチャはフィーチャ情報を含んでいてもよい。
【００６５】
ブロック６１０において、ソースコード、テストケース、及びリードミーファイルのうち一以上が解析（ｐａｒｓｅ）される。例えば、ターゲットプロジェクト候補と対象プロジェクトのソースコード、テストコード、及びリードミーファイルが解析されてもよい。解析には、テキスト解析、構造解析、ビジュアル解析などが含まれていてもよい。解析は、ボット及び／又は解析アルゴリズムにより実行されてもよい。幾つかの例示的な解析アルゴリズムには、Ｅｃｌｉｐｓｅ  ＪＤＴ  ＰａｒｓｅｒやＡＮＴＬＲが含まれていても良い。
【００６６】
ブロック６１５において、テキスト情報と構造情報が抽出されてもよい。テキスト情報と構造情報は解析されたソースコード、テストケース、及びリードミーファイルから抽出されてもよい。ドキュメントとクエリは、抽出されたテキスト情報と構造情報を用いて構成できる。例えば、対象プロジェクトのフィーチャから得られたテキスト情報と構造情報は、インデックスされ、クエリに入れられてもよい。同様に、候補プロジェクトの１つのフィーチャから得られたテキスト情報と構造情報は、インデックスされ、ドキュメントに入れられてもよい。
【００６７】
本技術分野の当業者には言うまでもないが、ここに開示のこれらの及びその他のプロセス及び方法について、その手続及び方法で実行される機能は、異なる順序で実装されてもよい。さらに、概要を述べたステップと動作は、単なる例であり、開示された実施形態を損なうことなく、そのステップと動作のうち幾つかは、任意的であり、結合されてより少ないステップと動作にされてもよく、拡張されてより多くのステップと動作にされてもよい。
【００６８】
図７は、本開示において説明された少なくとも１つの実施形態にしたがって、フィーチャ情報を前処理する例示的方法７００を示すフロー図である。幾つかの実施形態では、方法７００は類似度スコアの決定より前に実行されてもよい。離散的ブロックとして示したが、所望の実施形態に応じて、様々なブロックは、複数のブロックに分割されてもよく、より少ないブロックに結合されてもよく、又は削除されてもよい。
【００６９】
方法７００はブロック７０５で始まり、フィーチャ情報が受け取られる。ブロック７１０において、識別子名が分離される。例えば、複数の単語が１つの名前として形成された識別子名は、分離されて単語間にスペースが入れられてもよい。ブロック７１５において、ストップワードが削除されてもよい。例えば、ストップワードは、サーチエンジンまたはアルゴリズムが破棄する、または双でなくてもクエリに対して重要でないとしてディスカウントされる、一般的に用いられる言葉である。ストップワードの幾つかの例としては、「ｉｎ」と「ｔｈｅ」がある。
【００７０】
ブロック７２０において、残っている一以上の言葉がステミング（ｓｔｅｍｍｅｄ）され得る。例えば、語根でない形式の残りの語は、単語の語根に到達するように変更することができる。非語根形式の例には、複数語（ｄｏｃｕｍｅｎｔｓ  ｖｅｒｓｕｓ  ｄｏｃｕｍｅｎｔ）、動名詞（ｒｕｎ  ｖｅｒｓｕｓ  ｒｕｎｎｉｎｇ）、または分詞（ｇｏｎｅ  ｖｅｒｓｕｓ  ｇｏ）がある。
【００７１】
図８は、本開示において説明された少なくとも１つの実施形態にしたがって構成される、ベクトルを構成及び比較する例示的方法８００を示すフロー図である。離散的ブロックとして示したが、所望の実施形態に応じて、様々なブロックは、複数のブロックに分割されてもよく、より少ないブロックに結合されてもよく、又は削除されてもよい。
【００７２】
方法８００はブロック８０５で始まり、クエリベクトルが構成されてもよい。クエリベクトルは、対象プロジェクトのフィーチャ情報から得られたクエリタームを含んでいてもよい。クエリベクトルは、クエリ中のインデックスされたクエリタームに少なくとも部分的に基づいていてもよい。ブロック８１０において、ドキュメントベクトルが構成され得る。ドキュメントベクトルは、ターゲットプロジェクト候補のフィーチャ情報から得られたドキュメントタームを含んでいてもよい。ドキュメントベクトルは、ドキュメント中のインデックスされたドキュメントタームに少なくとも部分的に基づいていてもよい。
【００７３】
ブロック８１５において、ターゲットプロジェクト候補のフィーチャが選択される。選択されたフィーチャはドキュメントベクトル中のドキュメントタームを含んでいてもよい。ブロック８２０において、クエリベクトルとドキュメントベクトルとの間のコサイン類似度（ｃｏｓｉｎｅ  ｓｉｍｉｌａｒｉｔｙ）が決定される。
【００７４】
ブロック８２５において、ターゲットプロジェクト候補の選択されたフィーチャのコサイン類似度が、合計スコアに加算されてもよい。このように、少なくともブロック８１５と８２０とは、所定数のフィーチャ及びフィーチャタイプに対して、必要に応じて繰り替えされてもよい。例えば、幾つかの実施形態では、所定数のフィーチャは約６フィーチャであってもよく、約１０フィーチャであってもよく、その他の好適な数のフィーチャであってもよい。幾つかの実施形態では、所定数のフィーチャは、様々なタイプのフィーチャ、及び／又はその様々なタイプのフィーチャが区別される程度（例えば、分類、識別、又はナローイング（ｎａｒｒｏｗｉｎｇ）を支援するフィーチャ）に基づき決定されてもよい。ターゲットプロジェクト候補の所望のフィーチャを対象プロジェクトの一以上のフィーチャに対して比較した後、合計スコアをまとめる。
【００７５】
図９は、本開示において説明された少なくとも１つの実施形態にしたがって構成される、関連フィーチャ情報を検索する例示的方法９００を示すフロー図である。離散的ブロックとして示したが、所望の実施形態に応じて、様々なブロックは、複数のブロックに分割されてもよく、より少ないブロックに結合されてもよく、又は削除されてもよい。
【００７６】
方法９００はブロック９０５で始まり、一以上のターゲットプロジェクト候補のターゲットフィーチャがアクセスされる。ターゲットプロジェクト候補データベースのターゲットフィーチャがアクセスされる。ターゲットフィーチャはターゲットフィーチャ情報を含んでいてもよい。ターゲットプロジェクト候補のターゲットフィーチャには、プロジェクト説明、クラス名、メソッド名、変数名、依存ＡＰＩ名、コメント、外部ライブラリ、その他のフィーチャ、またはこれらの組み合わせが含まれ得る。ブロック９１０において、対象プロジェクトの対象フィーチャはサーバからアクセスすることができる。対象プロジェクトの対象フィーチャには、プロジェクト説明、クラス名、メソッド名、変数名、依存ＡＰＩ名、コメント、外部ライブラリ、その他のフィーチャ、またはこれらの組み合わせのうち一以上が含まれ得る。
【００７７】
ブロック９１５において、類似度スコアが決定され得る。類似度スコアは、一以上の又は各ターゲットプロジェクト候補のターゲットフィーチャ情報と、対象プロジェクトの対象フィーチャ情報との間で決定される。幾つかの実施形態では、類似度スコアは、各ターゲットプロジェクト候補の各ターゲットフィーチャに対して決定されてもよい。ブロック９２０において、類似度スコアが合計されてもよい。類似度スコアは、各ターゲットプロジェクト候補の合計類似度スコアを生成するため合計される。例えば、幾つかの実施形態では、ターゲットプロジェクト候補の各ターゲットフィーチャの類似度が合計されてもよい。
【００７８】
ブロック９２５において、ターゲットプロジェクト候補がソートされる。ターゲットプロジェクト候補は合計類似度スコアによりソートされてもよい。例えば、合計類似度スコアが最高（例えば、最大数）であるターゲットプロジェクト候補は、ターゲットプロジェクト候補の多くまたは全部に対してトップ部分に、またはトップランクにソートされてもよい。ブロック９３０において、ターゲットプロジェクト候補がフィルタされてもよい。例えば、合計類似度スコアがある閾値より低いターゲットプロジェクト候補がフィルタされてもよい。
【００７９】
ブロック９３５において、類似ターゲットプロジェクトセットが生成されてもよい。類似ターゲットプロジェクトのセットは、合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含み得る。例えば、閾値は、パーセンテージ（例えば、トップ２５％、トップ１５％、またはその他の好適なパーセンテージ）を含んでもよく、数（例えば、トップ５、トップ７、またはその他の好適な数）を含んでもよく、ターゲットプロジェクト候補が合計類似度スコアによりランキングされる場合には、合計類似度スコア（例えば、０．７、０．５５、またはその他の好適な類似度スコア）を含んでもよい。
【００８０】
ブロック９４０において、対象プロジェクトの不具合（ｄｅｆｅｃｔ）が特定され得る。類似のターゲットプロジェクトに基づいて不具合を特定することができる。例えば、（データベースで要求され得る）一以上の類似ターゲットプロジェクトの文書化された不具合は、対象プロジェクトの一部にテキスト的または構造的に類似していると特定されてもよい。したがって、文書化された不具合は、対象プロジェクト中の不具合として特定されてもよい。ブロック９４５において、コードが推奨され得る。類似のターゲットプロジェクトに基づいてコードが推奨されてもよい。対象プロジェクト中の特定された不具合を修復するコードが推奨されてもよい。例えば、類似ターゲットプロジェクト中の文書化された不具合を修復するのに用いられるコードが、対象プロジェクトへの適用のため推奨されてもよい。ブロック９５０において、対象プロジェクトが修正されてもよい。推奨されるコードを対象プロジェクトに実装することにより、対象プロジェクトが修正され、特定された不具合を修復することができる。
【００８１】
図１０は、本開示において説明された少なくとも１つの実施形態にしたがって構成される、テストデータを生成し、修正された対象プロジェクトを検証する例示的方法１０００を示すフロー図である。離散的ブロックとして示したが、所望の実施形態に応じて、様々なブロックは、複数のブロックに分割されてもよく、より少ないブロックに結合されてもよく、又は削除されてもよい。
【００８２】
方法１０００はブロック１００５で始まり、新しいデータが生成される。新しいデータが生成され、修正された対象プロジェクトがテストされてもよい。例えば、対象プロジェクトは、不具合を修復するプローザブルパッチの実装により修正されていてもよい。生成された新しいデータは、プローザブルパッチ（ｐｌａｕｓｉｂｌｅ  ｐａｔｃｈ）を含む対象プロジェクトをテストするために用いられる新しいテストケースを含んでもよい。
【００８３】
ブロック１０１０において、修正対象プロジェクトが検証されてもよい。修正対象プロジェクトは、所定の性能標準を用いて検証されてもよい。例えば、所定の性能標準は、対象プロジェクトが修正される前の、その対象プロジェクトの性能に基づいても良い。所定の性能標準には、産業標準、速度要求、精度要求、計算オーバーヘッド要求、クライアントドリブンまたはエンドユーザドリブン要求、その他の性能標準、またはこれらの組み合わせが含まれる。
【００８４】
ブロック１０１５において、対象プロジェクトの不具合（ｄｅｆｅｃｔ）を予測することができる。例えば、対象プロジェクト中の不具合が明示的に特定されてもよく、他の場合では、対象プロジェクトに不具合がありそうだと予測されてもよい。例えば、不具合の存在がある確率で予測されてもよい。追加的に又は代替的に、不具合が、対象プロジェクト中のある行、あるセクション、ある関数、及び／又はある場所に存在すると予測されてもよい。これらの又はその他の実施形態では、不具合予測はパッチ候補を含んでもよく、一方、他の実施形態では、不具合予測にはパッチ候補が含まれていなくてもよい。
【００８５】
幾つかの実施形態では、方法６００、７００、８００、９００及び１０００は、環境１００及び２００などのネットワーク環境で全体的に、または部分的に実施されてもよい。追加的に又は代替的に、方法６００、７００、８００、９００及び１０００は、図１を参照して説明したように、プロセッサ１３７などのプロセッサにより実行されてもよい。これらの又は他の実施形態では、方法６００、７００、８００、９００及び１０００のステップの一部または全部は、一以上の非一時的コンピュータ可読メディアに記憶された命令の実行に基づいて実行されてもよい。
【００８６】
一般的に、本開示では、プロセッサは、任意の好適な特定目的又は汎用コンピュータ、計算エンティティ、又は様々なコンピュータハードウェア又はソフトウェアモジュールを含む処理デバイスを含んでも良く、任意の適用し得るコンピュータ読み取り可能ストレージメディアに格納された命令を実行するように構成されていてもよい。例えば、プロセッサは、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又はプログラム命令を解釈及び／又は実行する、及び／又はデータを処理するように構成されたその他のデジタル又はアナログ回路を含んでもよい。
【００８７】
言うまでもなく、プロセッサは、本明細書に説明した任意数の動作を個別に又は集合的に実行するように構成された、任意数のネットワークまたは物理的場所にわたって分散された任意数のプロセッサを含んでいてもよい。幾つかの実施形態では、プロセッサは、メモリに記憶されたプログラム命令を解釈及び／又は実行しても、データを処理してもよい。メモリに記憶されたプログラム命令を解釈及び／又は実行することにより、及び／又はデータを処理することにより、本デバイスは、図１のプロセッサ１３７により実行される動作などの動作を実行してもよい。
【００８８】
さらに、本開示によれば、サーバ、データベースなどに見られるメモリは、コンピュータ可読記憶媒体を含んでもよく、またはコンピュータ実行可能命令またはデータ構造を保持または格納するための１つまたは複数のコンピュータ可読記憶媒体を含むことができる。かかるコンピュータ読み取り可能媒体は、汎用又は特殊用途コンピュータシステムによりアクセスできる、利用できるどんな媒体であってもよい。限定ではなく一例として、かかるコンピュータ読み取り可能媒体は、非一時的コンピュータ読み取り可能記憶媒体を含み、これはランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、電気的消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、又はその他の光ディスクストレージ、磁気ディスクストレージ、その他の磁気ストレージデバイス、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）、又はその他の任意のストレージ媒体であって所望のプログラムコードを、汎用又は特殊用途コンピュータによりアクセスしてもよいコンピュータ実行可能命令又はデータ構造の形式で担う又は格納するのに用いられるものを含む。上記のものの任意の組合せを、コンピュータ読み取り可能ストレージ媒体の範囲内に含んでもよい。これらおよび他の実施形態では、本明細書で使用される「非一時的」という用語は、連邦巡回裁判所決定Ｉｎ  ｒｅ  Ｎｕｉｊｔｅｎ（５００  Ｆ．３ｄ  １３４６（Ｆｅｄ．  Ｃｉｒ．  ２００７））において特許可能な主題の範囲外にあるとされた一時的媒体の種類のみを排除すると解釈されるべきである。幾つかの実施形態では、コンピュータ実行可能命令は、本開示で説明したように、例えば、プロセッサに、ある動作又は動作のグループを実行させるように構成された命令及びデータを含んでも良い。
【００８９】
一般的な実務によれば、図面に示された様々なフィーチャ（ｆｅａｔｕｒｅｓ）はスケール通りに描かれていない可能性がある。本開示に提示される図は、特定の装置（例えば、装置、システムなど）または方法の実際のビューを意味するものではなく、本開示の様々な実施形態を説明するために使用される単なる理想化された表象である。したがって、様々なフィーチャの寸法は、明確にするために任意に拡大または縮小することができる。さらに、図面の一部は、明瞭にするために簡略化されている場合がある。したがって、図面は、所与の装置（例えば、装置）のすべての構成要素または方法のすべての動作を示すものではない。
【００９０】
ここに用い、特に添付した特許請求の範囲で用いる用語は、一般的に「オープン」タームであることが意図されている（例えば、用語「含む」は「含むが限定されない」と解釈すべきであり、用語「有する」は「少なくとも〜を有する」と解釈すべきであり、用語「含む」は「含むが限定されない」と解釈すべきである。「約（ａｂｏｕｔ）」および「およそ（ａｐｐｒｏｘｉｍａｔｅｌｙ）」という用語は、実際の値の１０％（パーセント）または当業者が理解する別のパーセンテージとして解釈されてもよい。
【００９１】
また、請求項において数を特定しようと意図する場合は、請求項中に明示的に記載し、そうでなければ、そのような意図はない。例えば、理解の助けとして、下記に添付した特許請求の範囲は、その記載に「少なくとも１つの」や「一以上の」との導入句を含んでいることがある。しかし、かかるフレーズの使用は、不定冠詞「ａ」または「ａｎ」を付けることが、たとえ同じ請求項が「一以上の」又は「少なくとも１つの」という導入句と「ａ」や「ａｎ」などの不定冠詞を含んでいたとしても、かかる請求項記載を含む請求項を、かかる記載を１つだけ含む実施形態に限定することを示唆していると解してはならない。（例えば、「ａ」及び／又は「ａｎ」は「少なくとも１つの」又は「一以上の」を意味するものと解釈すべきである）；請求項記載を導入する定冠詞の使用についても同様である。
【００９２】
また、導入された請求項記載について特定の数が明示的に記載されていたとしても、当業者には言うまでもなく、かかる記載は少なくとも記載された数という意味と解釈すべきである（例えば、他の修飾語を付けずに「２つの」と言った場合、これは少なくとも２つ、すなわち２以上を意味する）。さらに、「Ａ，Ｂ，及びＣなどのうち少なくとも１つ」又は「Ａ，Ｂ、及びＣなどのうち一以上」などの表現を用いる場合、一般的に、かかる表現は、Ａのみ、Ｂのみ、Ｃのみ、ＡとＢ、ＡとＣ、ＢとＣ、又はＡとＢとＣなどを含むことを意図している。例えば、「及び／又は」との言葉の使用は、このように解釈することを意図している。
【００９３】
さらに、２以上の代替的用語を提示する宣言的単語又は句は、明細書、特許請求の範囲、又は図面にかかわらず、その用語のうち一つ、その用語のどちらか、又は両方の用語を含む可能性を想定していると理解すべきである。例えば、「ＡまたはＢ」は、「Ａ」、または「Ｂ」、又は「Ａ及びＢ」の可能性を含むと理解すべきである。
【００９４】
しかし、かかるフレーズの使用は、不定冠詞「ａ」または「ａｎ」を付けることが、たとえ同じ請求項が「一以上の」又は「少なくとも１つの」という導入句と「ａ」や「ａｎ」などの不定冠詞を含んでいたとしても、かかる請求項記載を含む請求項を、かかる記載を１つだけ含む実施形態に限定することを示唆していると解してはならない。（例えば、「ａ」及び／又は「ａｎ」は「少なくとも１つの」又は「一以上の」を意味するものと解釈すべきである）；請求項記載を導入する定冠詞の使用についても同様である。
【００９５】
また、「第１」、「第２」、「第３」などという用語の使用は、本明細書では必ずしも要素の特定の順序または数を暗示するために使用されるものではない。一般に、「第１」、「第２」、「第３」という用語は、一般的な識別子として異なる要素を区別するために使用される。「第１」、「第２」、「第３」などの用語が特定の順序を意味することを示すことがなければ、これらの用語は特定の順序を暗示するものと理解してはならない。「第１」、「第２」、「第３」などの用語が特定の順序を意味することを示すことがなければ、これらの用語は特定の順序を暗示するものと理解してはならない。例えば、第１のウィジェットは第１面を有するものとして説明され、第２ウィジェットは第２面を有するものとして説明されてもよい。第２のウィジェットに関する用語「第２面」の使用は、第２のウィジェットのその面を第１のウィジェットの「第１面」と区別し、第２のウィジェットが２つの側面を有することを暗示するものではない。
【００９６】
ここに記載したすべての例と条件付きの言葉は、発明者が技術発展に対してなした本発明とコンセプトとを、読者が理解しやすいようにするためのものであり、その解釈は具体的に記載した実施例や制約に限定されるべきではない。  本開示の実施形態を詳細に説明したが、言うまでもなく、本開示の精神と範囲から逸脱することなく、これらの実施形態に変更、置換、代替を施すことができる。
【００９７】
上記の実施形態について、次の通り付記する。
（付記１）  対象プロジェクトを改善するクロスプロジェクト学習の方法であって、
ターゲットプロジェクト候補データベースが、一以上のターゲットプロジェクト候補のフィーチャ情報を含むフィーチャにアクセスすることと、
サーバが、対象プロジェクトのフィーチャ情報を含むフィーチャにアクセスすることであって、前記ターゲットプロジェクト候補と前記対象プロジェクトはソフトウェアプログラムである、ことと、
前記ターゲットプロジェクト候補の各々のフィーチャ情報と、前記対象プロジェクトのフィーチャ情報との間の類似度スコアを決定することであって、類似度スコアは前記ターゲットプロジェクト候補の各々の各フィーチャに対して決定される、ことと、
前記ターゲットプロジェクト候補の各フィーチャの類似度スコアを合計して、前記ターゲットプロジェクト候補の各々の合計類似度スコアを生成することと、
前記合計類似度スコアにより前記ターゲットプロジェクト候補をソートすることと、
前記合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることと、
前記合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む類似ターゲットプロジェクトのセットを生成することと、
前記類似ターゲットプロジェクトに基づいて対象プロジェクト中の不具合を特定することと、
前記類似ターゲットプロジェクトに基づいて、前記対象プロジェクト中の不具合を修復するコードを推奨することと、
推奨されたコードを前記対象プロジェクトに実装して前記不具合を修復することにより前記対象プロジェクトを修正することとを含む、
方法。
（付記２）  修正された対象プロジェクトをテストする新しいデータを生成することと、
前記対象プロジェクト中の他の不具合を予測することと、
のうち一方または両方を含む、付記１に記載の方法。
（付記３）  所定性能標準を用いて、修正された対象プロジェクトを検証することをさらに含み、前記所定性能標準は、前記対象プロジェクトが修正される前の前記対象プロジェクトの性能に基づく、
付記１に記載の方法。
（付記４）  前記ターゲットプロジェクト候補のフィーチャと、前記対象プロジェクトのフィーチャとは、プロジェクト説明、クラス名、メソッド名、変数名、依存ＡＰＩ名、コメント、又は外部ライブラリを含み、
前記フィーチャ情報は、前記フィーチャに対応するテキスト情報と構造情報とを含む、
付記１に記載の方法。
（付記５）  生成された類似ターゲットプロジェクトのセットは、
合計類似度スコアが上位のパーセンテージにランクされたターゲットプロジェクト候補と、
合計類似度スコアがすべての合計類似度スコアの上位にランクされたターゲットプロジェクト候補と、
合計類似度スコアが合計類似度スコア閾値以上のターゲットプロジェクト候補とを含む、
付記１に記載の方法。
（付記６）  前記ターゲットプロジェクト候補のフィーチャにアクセスすることと、前記対象プロジェクトのフィーチャにアクセスすることとは、
前記ターゲットプロジェクト候補のフィーチャのソースコード、テストケース、及びリードミーファイルのうち一以上または組み合わせを解析することと、
それからテキスト情報と構造情報とを抽出して、ドキュメントとクエリとを構成することと、
前記クエリと前記ドキュメントとをインデックスすることとを含み、
前記ドキュメントは前記ターゲットプロジェクト候補のフィーチャに対応し、前記クエリは前記対象プロジェクトのフィーチャに対応する、
付記１に記載の方法。
（付記７）  前記類似度スコアを決定することは、数式
【数１】
2019153270.tif 000008
により実行され、
ｘ１’は前記ターゲットプロジェクト候補の１つのドキュメント中の言葉のＢＭ２５ベースの重みを表し、
ｙ１’は前記対象プロジェクトのクエリ中の言葉のＢＭ２５ベースの重みを表し、
ｓ（）は類似度スコアを計算する関数を表し、
ｔｆｄ（ｘｉ）は前記ターゲットプロジェクト候補の１つのドキュメント中のｉ番目の言葉の平滑化された語出現頻度を表し、
ｔｆｑ（ｙｉ）は前記対象プロジェクトのクエリ中のｉ番目の言葉の平滑化された語出現頻度を表し、
ｉｄｆ（ｔｉ）はｉ番目の言葉ｔの逆文書頻度を表し、
ｘは語出現頻度を表し、
ｙは語出現頻度を表し、
ｄｆベクトルはドキュメントベクトルを表し、
ｑｆベクトルはクエリベクトルを表し、
ｂはスケーリング係数を表し、
ｌｄはドキュメント長を表し、
ｌｃは平均ドキュメント長を表し、
ｎｔは言葉ｔを有するターゲットプロジェクト候補中のドキュメント数を表し、
Ｎはディクショナリ中の単語の総数を表し、
×はスカラー乗算である、
付記１に記載の方法。
（付記８）  各ターゲットプロジェクト候補の合計類似度スコアを決定することは、数式
【数２】
2019153270.tif 000009
により実行され、
ｓ’（）は合計類似度を表し、
ｗｆは加重係数を表し、
ｆｉｅｌｄｓはフィーチャと等価である、
付記７に記載の方法。
（付記９）  前記類似度スコアを決定する前に、前記フィーチャ情報を前処理することをさらに含み、前記前処理することは、
識別子名を分離することと、
ストップワードを削除することと、
一以上の残った言葉をステミングすることとを含む、
付記１に記載の方法。
（付記１０）  前記類似度スコアを決定することは、
前記対象プロジェクトのフィーチャ情報から得られたクエリタームを含むクエリベクトルを構成することと、
前記ターゲットプロジェクト候補のフィーチャ情報から得られたドキュメントタームを含むドキュメントベクトルを構成することと、
ターゲットプロジェクト候補中のフィーチャを選択することであって、選択されるフィーチャは前記ドキュメントベクトル中のドキュメントタームを含む、ことと、
選択されたフィーチャに対して、前記クエリベクトルと前記ドキュメントベクトルとの間のコサイン類似度を決定することと、
選択されたフィーチャのコサイン類似度を合計スコアに加えることとを含む、
付記１に記載の方法。
（付記１１）  動作を実行するように、又は動作の実行を制御するように、一以上のプロセッサにより実行可能なプログラミングコードをエンコードされた非一時的コンピュータ可読媒体であって、前記動作は、
ターゲットプロジェクト候補データベースが、一以上のターゲットプロジェクト候補のフィーチャ情報を含むフィーチャにアクセスすることと、
サーバが、対象プロジェクトのフィーチャ情報を含むフィーチャにアクセスすることであって、前記ターゲットプロジェクト候補と前記対象プロジェクトはソフトウェアプログラムである、ことと、
前記ターゲットプロジェクト候補の各々のフィーチャ情報と、前記対象プロジェクトのフィーチャ情報との間の類似度スコアを決定することであって、類似度スコアは前記ターゲットプロジェクト候補の各々の各フィーチャに対して決定される、ことと、
前記ターゲットプロジェクト候補の各フィーチャの類似度スコアを合計して、前記ターゲットプロジェクト候補の各々の合計類似度スコアを生成することと、
前記合計類似度スコアにより前記ターゲットプロジェクト候補をソートすることと、
前記合計類似度スコアが閾値より低いターゲットプロジェクト候補をフィルタすることと、
前記合計類似度スコアが前記閾値以上のターゲットプロジェクト候補を含む類似ターゲットプロジェクトのセットを生成することと、
前記類似ターゲットプロジェクトに基づいて対象プロジェクト中の不具合を特定することと、
前記類似ターゲットプロジェクトに基づいて、前記対象プロジェクト中の不具合を修復するコードを推奨することと、
推奨されたコードを前記対象プロジェクトに実装して前記不具合を修復することにより前記対象プロジェクトを修正することとを含む、
非一時的コンピュータ可読媒体。
（付記１２）  前記動作は、
修正された対象プロジェクトをテストする新しいデータを生成することと、
前記対象プロジェクト中の他の不具合を予測することと、のうち一方または両方をさらに含む、
付記１１に記載の非一時的コンピュータ可読媒体。
（付記１３）  前記動作は、所定性能標準を用いて、修正された対象プロジェクトを検証することをさらに含み、
前記所定性能標準は、前記対象プロジェクトが修正される前の、前記対象プロジェクトの性能に基づく、
付記１１に記載の非一時的コンピュータ可読媒体。
（付記１４）  前記ターゲットプロジェクト候補のフィーチャと、前記対象プロジェクトのフィーチャとは、プロジェクト説明、クラス名、メソッド名、変数名、依存ＡＰＩ名、コメント、又は外部ライブラリを含み、
前記フィーチャ情報は、前記フィーチャに対応するテキスト情報と構造情報とを含む、
付記１１に記載の非一時的コンピュータ可読媒体。
（付記１５）  生成された類似ターゲットプロジェクトのセットは、
合計類似度スコアが上位パーセンテージにランクされたターゲットプロジェクト候補と、
合計類似度スコアがすべての合計類似度スコアの上位にランクされたターゲットプロジェクト候補と、
合計類似度スコアが合計類似度スコア閾値以上のターゲットプロジェクト候補とを含む、
付記１１に記載の非一時的コンピュータ可読媒体。
（付記１６）  前記ターゲットプロジェクト候補のフィーチャにアクセスすることと、前記対象プロジェクトのフィーチャにアクセスすることとは、
前記ターゲットプロジェクト候補のフィーチャのソースコード、テストケース、及びリードミーファイルのうち一以上または組み合わせを解析することと、
それからテキスト情報と構造情報とを抽出して、ドキュメントとクエリとを構成することと、
前記クエリと前記ドキュメントとをインデックスすることとを含み、
前記ドキュメントは前記ターゲットプロジェクト候補のフィーチャに対応し、前記クエリは前記対象プロジェクトのフィーチャに対応する、
付記１１に記載の非一時的コンピュータ可読媒体。
（付記１７）  前記類似度スコアを決定することは、数式
【数３】
2019153270.tif 000010
により実行され、
ｘ１’は前記ターゲットプロジェクト候補の１つのドキュメント中の言葉の達Ｍ２５ベースの重みを表し、
ｙ１’は前記対象プロジェクトのクエリ中の言葉のＢＭ２５ベースの重みを表し、
ｓ（）は類似度スコアを計算する関数を表し、
ｔｆｄ（ｘｉ）は前記ターゲットプロジェクト候補の１つのドキュメント中のｉ番目の言葉の平滑化された語出現頻度を表し、
ｔｆｑ（ｙｉ）は前記対象プロジェクトのクエリ中のｉ番目の言葉の平滑化された語出現頻度を表し、
ｉｄｆ（ｔｉ）はｉ番目の言葉ｔの逆文書頻度を表し、
ｘは語出現頻度を表し、
ｙは語出現頻度を表し、
ｄｆベクトルはドキュメントベクトルを表し、
ｑｆベクトルはクエリベクトルを表し、
ｂはスケーリング係数を表し、
ｌｄはドキュメント長を表し、
ｌｃは平均ドキュメント長を表し、
ｎｔは言葉ｔを有するターゲットプロジェクト候補中のドキュメント数を表し、
Ｎはディクショナリ中の単語の総数を表し、
×はスカラー乗算である、
付記１１に記載の非一時的コンピュータ可読媒体。
（付記１８）  各ターゲットプロジェクト候補の合計類似度スコアを決定することは、数式
【数４】
2019153270.tif 000011
により実行され、
ｓ’（）は合計類似度を表し、
ｗｆは加重係数を表し、
ｆｉｅｌｄｓはフィーチャと等価である、
付記１７に記載の非一時的コンピュータ可読媒体。
（付記１９）  前記動作は、前記類似度スコアを決定する前に、前記フィーチャ情報を前処理することをさらに含み、
前記前処理することは、
識別子名を分離することと、
ストップワードを削除することと、
一以上の残った言葉をステミングすることとを含む、
付記１１に記載の非一時的コンピュータ可読媒体。
（付記２０）  前記類似度スコアを決定することは、
前記対象プロジェクトのフィーチャ情報から得られたクエリタームを含むクエリベクトルを構成することと、
前記ターゲットプロジェクト候補のフィーチャ情報から得られたドキュメントタームを含むドキュメントベクトルを構成することと、
ターゲットプロジェクト候補中のフィーチャを選択することであって、選択されるフィーチャは前記ドキュメントベクトル中のドキュメントタームを含む、ことと、
選択されたフィーチャに対して、前記クエリベクトルと前記ドキュメントベクトルとの間のコサイン類似度を決定することと、
選択されたフィーチャのコサイン類似度を合計スコアに加えることとを含む、
付記１１に記載の非一時的コンピュータ可読媒体。
【図１】
2019153270.tif 000013
【図２】
2019153270.tif 000014
【図３】
2019153270.tif 000015
【図４】
2019153270.tif 000016
【図５】
2019153270.tif 000017
【図６】
2019153270.tif 000018
【図７】
2019153270.tif 000019
【図８】
2019153270.tif 000020
【図９】
2019153270.tif 000021
【図１０】
2019153270.tif 000022