(57)【要約】      （修正有）【課題】ソフトウェアプログラム修復のためのメソッド呼び出し合成技術を提供する。【解決手段】メソッド呼び出し合成技術のフローチャート３００は、ソフトウェアプログラムに対してテストスーツのテスト実行を実行し、ソフトウェアプログラムの中の障害及び対応する障害位置を識別する３０２。識別された障害位置に対する修復候補として、複数の合成メソッド呼び出しを取得する３０４。複数の合成メソッド呼び出しの各々の特性と障害位置との間の関係、特性と障害位置に対応するエラーレポートとの間の関係に基づき、複数の合成メソッド呼び出しを優先順位付けする３０６。優先順位に基づき、障害位置に対する修復操作のために、複数の合成メソッド呼び出しから合成メソッド呼び出しを選択する３０８。障害位置に対する修復操作及び前記選択した合成メソッド呼び出しを実行する３１０。【選択図】図３
2018133081.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプログラムの複数のオブジェクト及び複数のメソッドを用いて複数の合成メソッド呼び出しを取得するステップと、
前記複数の合成メソッド呼び出しの各々の１又は複数の特性と障害位置との間の関係、前記１又は複数の特性と前記障害位置に対応するエラーレポートとの間の関係、のうちの１又は複数に基づき、前記複数の合成メソッド呼び出しの優先順位を決定するステップと、
選択される合成メソッド呼び出しの対応する優先順位に基づき、前記障害位置に関する修復操作のために前記複数の合成メソッド呼び出しから合成メソッド呼び出しを選択するステップと、
前記障害位置に関する修復操作及び前記選択された合成メソッド呼び出しを実行するステップと、
を有する方法。
【請求項２】
前記選択された合成メソッド呼び出しの前記１又は複数の特性は、前記選択された合成メソッド呼び出しにより使用されるオブジェクト、前記選択された合成メソッド呼び出しの戻り型、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の位置、前記選択された合成メソッド呼び出しのメソッド名、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の名称、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の種類、前記選択された合成メソッド呼び出しの中のオブジェクトのうちの１又は複数の各々の使用の種類、及び前記選択された合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の発生回数、のうちの１又は複数を含む、請求項１に記載の方法。
【請求項３】
前記選択された合成メソッド呼び出しの前記特性のうちの前記１又は複数と前記障害位置との間の前記関係は、前記選択された合成メソッド呼び出しの前記戻り型と前記障害位置との間の戻り型関係、前記障害位置に関して前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の位置、前記障害位置の特定行数の範囲内で前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の発生回数、前記障害位置に対応する現在実施されているメソッド呼び出しのメソッド名との前記選択された合成メソッド呼び出しのメソッド名のセマンティック類似性、のうちの１又は複数を含む、請求項２に記載の方法。
【請求項４】
前記選択された合成メソッド呼び出しの前記特性のうちの前記１又は複数と前記エラーレポートとの間の前記関係は、前記選択された合成メソッド呼び出しの前記メソッド名と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、前記オブジェクトのうちの１又は複数の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の種類の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、のうちの１又は複数を含む、請求項２に記載の方法。
【請求項５】
前記複数の合成メソッド呼び出しを取得するステップは、
前記ソフトウェアプログラムの中の前記障害位置を識別するステップと、
前記ソフトウェアプログラムに含まれ且つ前記障害位置に対応する前記ソフトウェアプログラムの範囲内にあるオブジェクトを、前記複数のオブジェクトとして識別するステップと、
前記複数のオブジェクトを用いて前記複数の合成メソッド呼び出しを生成することにより、前記複数の合成メソッド呼び出しを取得するステップと、
を含む、請求項１に記載の方法。
【請求項６】
前記複数のオブジェクトからメソッドを識別するステップと、
前記識別したメソッドのメソッド署名を決定するステップと、
前記メソッド署名と互換性のある１又は複数の互換オブジェクトを識別するステップと、
前記識別したメソッド及び前記１又は複数の互換オブジェクトに基づき、１又は複数のメソッド呼び出しを生成するステップと、
を更に有する請求項５に記載の方法。
【請求項７】
前記複数の合成メソッド呼び出しの各々の１又は複数の特性と前記障害位置との間の関係、前記特性のうちの１又は複数と前記障害位置に対応するエラーレポートとの間の関係、のうちの１又は複数に基づき、前記複数の合成メソッド呼び出しの各々のスコアを生成するステップと、
前記メソッド呼び出しの前記スコアに基づき、前記複数の合成メソッド呼び出しの前記優先順位を決定するステップと、
を更に有する請求項１に記載の方法。
【請求項８】
前記メソッド呼び出しの前記スコアに基づき、前記複数の合成メソッド呼び出しの前記優先順位を決定するステップは、前記スコアが閾レベルを満たさないことに基づき、可能性のある修復候補から前記複数の合成メソッド呼び出しのうちの１又は複数を除去するステップを含む、請求項７に記載の方法。
【請求項９】
前記閾レベルは、エラー修正操作のために利用可能な時間及び利用可能な計算リソースに基づく、請求項８に記載の方法。
【請求項１０】
少なくとも１つの非一時的コンピュータ可読媒体が、少なくとも１つのプロセッサにより実行されることに応答してシステムに請求項１に記載の方法を実行させる１又は複数の命令を格納するよう構成される、請求項１に記載の方法。
【請求項１１】
ソフトウェアプログラムの中の障害位置を識別するステップと、
第１合成メソッド呼び出しの１又は複数の第１特性と前記障害位置との間の１又は複数の関係、前記第１特性のうちの１又は複数と前記障害位置に対応するエラーレポートとの間の１又は複数の関係、のうちの１又は複数に基づき、前記第１合成メソッド呼び出しの第１スコアを生成するステップと、
第２合成メソッド呼び出しの１又は複数の第２特性と前記障害位置との間の１又は複数の関係、前記第２特性のうちの１又は複数と前記障害位置に対応するエラーレポートとの間の１又は複数の関係、のうちの１又は複数に基づき、前記第２合成メソッド呼び出しの第２スコアを生成するステップと、
前記第１スコア及び前記第２スコアに基づき、前記第１合成メソッド呼び出しの前記第２合成メソッド呼び出しに対する優先順位を決定するステップと、
前記第１合成メソッド呼び出しの前記第２合成メソッド呼び出しに対する前記優先順位に基づき、前記障害位置に関する修復操作のために前記第１合成メソッド呼び出しを選択するステップと、
前記障害位置に関する修復操作及び前記第１合成メソッド呼び出しを実行するステップと、
を有する方法。
【請求項１２】
前記第１合成メソッド呼び出しの前記１又は複数の第１特性は、前記第１合成メソッド呼び出しにより使用されるオブジェクト、前記第１合成メソッド呼び出しの戻り型、前記第１合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の位置、前記第１合成メソッド呼び出しのメソッド名、前記第１合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の名称、前記第１合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の種類、前記第１合成メソッド呼び出しの中のオブジェクトのうちの１又は複数の各々の使用の種類、及び前記第１合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の発生回数、のうちの１又は複数を含む、請求項１１に記載の方法。
【請求項１３】
前記第１スコアを決定するステップは、
前記第１合成メソッド呼び出しの前記戻り型と前記障害位置との間の戻り型関係スコアを決定するステップと、
前記障害位置に対する前記第１合成メソッド呼び出しの前記オブジェクトのうちの１又は複数の各々の位置に基づく距離スコアを決定するステップと、
前記障害位置の特定行数の範囲内における、前記第１合成メソッド呼び出しの前記オブジェクトのうちの１又は複数の発生回数を決定するステップと、
前記第１合成メソッド呼び出しのメソッド名と前記障害位置に対応する現在実施されているメソッド呼び出しのメソッド名との間のセマンティック類似性を決定するステップと、
前記対応するメソッド呼び出しの前記メソッド名と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性を決定するステップと、
前記第１合成メソッド呼び出しの前記オブジェクトのうちの１又は複数の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性を決定するステップと、
前記第１合成メソッド呼び出しの前記オブジェクトのうちの１又は複数の種類の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性を決定するステップと、
のうちの１又は複数を実行するステップを含む、請求項１２に記載の方法。
【請求項１４】
前記ソフトウェアプログラムに含まれ且つ前記障害位置に対応する前記ソフトウェアプログラムの範囲内にある、複数のオブジェクトを識別するステップと、
前記障害位置に対応する前記ソフトウェアプログラムの範囲内にある、前記ソフトウェアプログラムの複数のメソッドを識別するステップと、
前記複数のオブジェクト及び前記複数のメソッドを用いて複数の合成メソッド呼び出しを生成するステップであって、前記複数の合成メソッド呼び出しは、前記第１合成メソッド呼び出し及び前記第２合成メソッド呼び出しを含む、ステップと、
を更に有する請求項１１に記載の方法。
【請求項１５】
少なくとも１つの非一時的コンピュータ可読媒体が、少なくとも１つのプロセッサにより実行されることに応答してシステムに請求項１１に記載の方法を実行させる１又は複数の命令を格納するよう構成される、請求項１１に記載の方法。
【請求項１６】
ソフトウェアプログラムの中の障害位置を識別するステップと、
複数の合成メソッド呼び出しの各々の１又は複数の特性と前記障害位置との間の１又は複数の関係に基づき、前記複数の合成メソッド呼び出しの各々のコンテキストスコアを生成するステップと、
前記特性のうちの１又は複数と前記障害位置に対応するエラーレポートとの間の１又は複数の関係に基づき、前記複数の合成メソッド呼び出しの各々のエラーレポートスコアを決定するステップと、
前記複数の合成メソッド呼び出しの各々の前記コンテキストスコア及び前記エラーレポートスコアに基づき、前記複数の合成メソッド呼び出しの優先順位を決定するステップと、
選択される合成メソッド呼び出しの対応する優先順位に基づき、前記障害位置に対する修復操作のために、前記複数の合成メソッド呼び出しから合成メソッド呼び出しを選択するステップと、
前記障害位置に対する修復操作及び前記選択された合成メソッド呼び出しを実行するステップと、
を有する方法。
【請求項１７】
前記選択された合成メソッド呼び出しの前記１又は複数の特性は、前記選択された合成メソッド呼び出しにより使用されるオブジェクト、前記選択された合成メソッド呼び出しの戻り型、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の位置、前記選択された合成メソッド呼び出しのメソッド名、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の名称、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の種類、前記選択された合成メソッド呼び出しの中のオブジェクトのうちの１又は複数の各々の使用の種類、及び前記選択された合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の発生回数、のうちの１又は複数を含む、請求項１６に記載の方法。
【請求項１８】
前記選択された合成メソッド呼び出しの前記特性のうちの前記１又は複数と前記障害位置との間の前記関係は、前記選択された合成メソッド呼び出しの前記戻り型と前記障害位置との間の戻り型関係、前記障害位置に関して前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の位置、前記障害位置の特定数の行の範囲内で前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の発生回数、前記障害位置に対応する現在実施されているメソッド呼び出しのメソッド名との前記選択された合成メソッド呼び出しのメソッド名のセマンティック類似性、のうちの１又は複数を含む、請求項１７に記載の方法。
【請求項１９】
前記選択された合成メソッド呼び出しの前記特性のうちの前記１又は複数と前記エラーレポートとの間の前記関係は、前記選択された合成メソッド呼び出しの前記メソッド名と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、前記オブジェクトのうちの１又は複数の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の種類の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、のうちの１又は複数を含む、請求項１７に記載の方法。
【請求項２０】
少なくとも１つの非一時的コンピュータ可読媒体が、少なくとも１つのプロセッサにより実行されることに応答してシステムに請求項１６に記載の方法を実行させる１又は複数の命令を格納するよう構成される、請求項１６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示で議論される実施形態は、ソフトウェアプログラム修復のためのメソッド呼び出し合成に関する。
【背景技術】
【０００２】
ソフトウェアプログラムは、意図したように動作できない障害（通常、「バグ」と呼ばれる）をそれらの中に含むことが多い。多くの場合、ソフトウェアプログラムの中の障害を識別し及び修正しようとして、自動修復システムが使用される。
【０００３】
本開示で請求される主題は、上述のような欠点を解決する実施形態や上述のような環境でのみ機能する実施形態に限定されない。むしろ、この背景技術は、単に、本開示に記載される複数の実施形態が実施される技術分野の一例を説明するために提供される。
【発明の概要】
【０００４】
一実施形態の一態様によると、方法は、ソフトウェアプログラムの複数のオブジェクト及び複数のメソッドを用いて、複数の合成メソッド呼び出しを取得するステップを含み得る。方法は、前記複数の合成メソッド呼び出しの各々の１又は複数の特性と前記障害位置との間の関係、前記１又は複数の特性と前記障害位置に対応するエラーレポートとの間の関係、のうちの１又は複数に基づき、前記複数の合成メソッド呼び出しの優先順位を決定するステップ、を更に有して良い。方法は、選択される合成メソッド呼び出しの対応する優先順位に基づき、前記障害位置に対する修復操作のために、前記複数の合成メソッド呼び出しから合成メソッド呼び出しを選択するステップを更に有して良い。さらに、方法は、前記障害位置に対する修復操作及び前記選択した合成メソッド呼び出しを実行するステップを有して良い。
【０００５】
実施形態の目的及び利点が理解され、少なくとも特に特許請求の範囲で指摘された要素、特徴及び組合せを用いて達成されるだろう。
【０００６】
上述の全体的説明及び以下の詳細な説明の両方は、例示及び説明のためであり、本発明の範囲を限定しない。
【図面の簡単な説明】
【０００７】
例示的な実施形態は、添付の図面を用いて、更なる特異性及び詳細事項と共に記載され説明される。
【図１】ソフトウェアプログラムの修復に関連する例示的な環境を表す図である。
【図２】ソフトウェアプログラムを修復するために構成され得る例示的なコンピューティングシステムを示す。
【図３】ソフトウェアプログラムを修復する例示的な方法のフローチャートを示す。
【図４】修復候補として使用され得る合成メソッド呼び出しを生成し及び優先順位付けする例示的な方法のフローチャートを示す。
【図５】障害位置の修正候補であり得るメソッド呼び出しのコンテキストスコアを決定する例示的な方法のフローチャートを示す。
【図６】障害位置の修正候補であり得るメソッド呼び出しのエラーレポートスコアを決定する例示的な方法のフローチャートを示す。
【図７】複合スコアを決定する例示的な方法のフローチャートを示す。
【発明を実施するための形態】
【０００８】
本開示に記載の幾つかの実施形態は、ソフトウェアプログラムを修復する方法及びシステムに関する。ソフトウェアプログラムは、多くの場合、ソフトウェアプログラムを意図しない方法で動作させ得る障害（通常、「バグ」として参照される）を含む。さらに、多くの場合、ソフトウェアプログラムを修復するよう障害を検出し及び修正するために、自動修復システム及び技術が使用される。幾つかの例では、障害を修正するために修復としてメソッド呼び出しが使用され得る。
【０００９】
本開示に記載の１又は複数の実施形態によると、１又は複数の障害位置がソフトウェアプログラムの中で識別されて良い。さらに、複数のメソッド呼び出しが、特定の障害位置のための可能性のある修復候補として合成されて良い。幾つかの実施形態では、メソッド呼び出しは、それぞれ、対応するメソッド呼び出しの１又は複数の特性と特定の障害位置との間の１又は複数の関係に基づきスコアを付けられて良い。幾つかの例では、このようなスコアは、本開示において「コンテキストスコア」として参照され得る。追加又は代替で、メソッド呼び出しは、それぞれ、対応するメソッド呼び出しの１又は複数の特性と特定の障害位置に対応するエラーレポートとの間の１又は複数の関係に基づきスコアを付けられて良い。幾つかの例では、このようなスコアは、本開示において「エラーレポートスコア」として参照され得る。
【００１０】
幾つかの例では、メソッド呼び出しは、スコア付けに基づき、特定の障害位置に対する可能性のある修復候補として優先順位を付けられて良い。本開示では、メソッド呼び出しを優先順位付けすることへの参照は、より低い優先度を有するメソッド呼び出しよりも、より高い優先度を有するメソッド呼び出しが修復操作の実行中に選択されるように、メソッド呼び出しをランク付けすることを含み得る。追加又は代替で、メソッド呼び出しを優先順位付けすることは、メソッド呼び出しを廃棄する又は枝刈り（pruning）することを含み得る。廃棄され又は枝刈りされたメソッド呼び出しは、幾つかの例では、修復操作の実行中に選択されなくて良い。
【００１１】
例えば、幾つかの実施形態では、修復操作のために（例えば、修復として実施されるために）、特定の合成メソッド呼び出しが他の合成メソッド呼び出しよりも高い優先度を有することに基づき、特定の合成メソッド呼び出しが他の合成メソッド呼び出しより優先して選択されて良い。上述又は他の実施形態では、修復操作は、選択された特定の合成メソッド呼び出しを修復として使用して実行されて良い。
【００１２】
障害位置に対する可能性のある修復候補としてのメソッド呼び出しの合成及び優先順位付けは、どのメソッド呼び出しが修復として使用されるソフトウェアプログラムに追加され得るかを識別することにより、及び更にどのメソッド呼び出しが実際にソフトウェアプログラムを修復する可能性がより高いかを識別することにより、自動ソフトウェアプログラム修復の効率を向上し得る。
【００１３】
本開示の実施形態を、添付の図面を参照して以下に説明する。
【００１４】
図１は、本開示に記載の少なくとも１つの実施形態により構成される、ソフトウェアプログラムの修復に関連する例示的な環境１００を示す図である。環境１００は、障害に対する被検査コード１０４を分析するよう構成される修復モジュール１０６を含んで良い。修復モジュール１０６は、変更被検査コード１０８を出力するよう更に構成されて良い。変更被検査コード１０８は、修復モジュール１０６により実行された修復操作により被検査コード１０４に対して行われた１又は複数の変更を含んで良い。
【００１５】
被検査コード１０４は、例えばソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は処理装置による実行のための他のロジック若しくは命令のような、電子データを有して良い。幾つかの実施形態では、被検査コード１０４は、ソフトウェアプログラムの完全なインスタンスを有して良い。追加又は代替で、被検査コード１０４は、ソフトウェアプログラムの一部を有して良い。被検査コード１０４は、ソフトウェアプログラムのために使用され得る任意の適切な種類のコンピュータ言語で書かれて良い。
【００１６】
修復モジュール１０６は、コンピューティング装置に、被検査コード１０４の１又は複数の変更を実行させて変更被検査コード１０８を生成させるよう構成されるコード及びルーチンを有して良い。追加又は代替で、修復モジュール１０６は、（例えば、１又は複数の工程を実行する又はその実行を制御する）プロセッサ、マイクロプロセッサ、ＦＰＧＡ（field−programmable  gate  array）又はＡＳＩＣ（application−specific  integrated  circuit）を含むハードウェアを用いて実装されて良い。幾つかの他の例では、修復モジュール１０６は、ハードウェア及びソフトウェアの組み合わせを用いて実装されて良い。本開示では、修復モジュール１０６により実行されるとして記載される操作は、修復モジュール１０６が対応するシステムに実行するよう指示し得る操作を有して良い。
【００１７】
修復モジュール１０６は、被検査コード１０４の中の１又は複数の障害を修復する（修正するとしても参照される）ために使用され得る被検査コード１０４に対する一連の修復操作を実行するよう構成されて良い。
【００１８】
幾つかの実施形態では、修復モジュール１０６は、修復テンプレート１１２及び１又は複数のテストスーツ１１１に基づき修復操作のうちの１又は複数を実行するよう構成されて良い。
【００１９】
例えば、修復モジュール１０６は、被検査コード１０４の中の１又は複数の障害及び対応する障害位置を検出し又は決定するために、被検査コード１０４に対して１又は複数のテストスーツを適用するよう構成されて良い。幾つかの実施形態では、修復モジュール１０６は、テスト実行の実行として参照され得る、テストスーツに含まれる１又は複数のテストを実行するよう構成されて良い。合格するテスト実行は、「合格テスト実行」として参照され得る。失敗するテスト実行は、「失敗テスト実行」として参照され得る。幾つかの実施形態では、被検査コード１０４の障害位置及び対応する障害は、障害位置に現れるコードを実行する失敗テスト実行に基づき識別されて良い。
【００２０】
幾つかの実施形態では、修復モジュール１０６は、テストスーツの１又は複数のテストの実行に基づき被検査コード１０４の中の１又は複数の障害位置を識別するよう構成されて良い。上述又は他の実施形態では、修復モジュール１０６は、障害位置のうちの１又は複数の各々に関して複数のメソッド呼び出し（「合成メソッド呼び出し」として参照される）を生成するよう構成されて良い。特定の障害位置に関する合成メソッド呼び出しは、可能性のある修復候補であって良く、被検査コード１０４を変更するために及び場合によっては特定の障害位置にある障害を修復するために、被検査コード１０４に実装されて良い。追加又は代替で、幾つかの実施形態では、合成メソッド呼び出しは、特定の障害位置に基づき生成されて良い。
【００２１】
例えば、メソッド呼び出しは、以下の基本構造を有して良い：「（ｏｂｊｅｃｔ．）ＭＩ＿ｎａｍｅ（ａｒｇ１，ａｒｇ２，．．．，ａｒｇＮ）」。このような構造では、「ｏｂｊｅｃｔ」としてラベル付けされた部分は、オブジェクト又はオブジェクトクラス、又はメソッド呼び出しにより変更され若しくは定められ得るオブジェクト（本開示では「定義オブジェクト（defined  object）」として参照される）を返す別のメソッド呼び出しを表して良い。「ＭＩ＿ｎａｍｅ」は、メソッド呼び出しの対象（subject）であり得るメソッド名を表して良い。「ａｒｇ１，ａｒｇ２，．．．，ａｒｇＮ」は、オブジェクト、原始変数、又はメソッド呼び出しのメソッドのための入力パラメータ（「引数」としても参照される）として使用されるオブジェクト若しくは原始変数を返す他のメソッド呼び出しを表して良い。メソッドは、メソッド呼び出しの中の引数又は定義オブジェクトとして使用されて良いが、本開示では、メソッド呼び出しのメソッドへの言及は、概して、「ＭＩ＿ｎａｍｅ」に対応するメソッドを表して良く、「対象メソッド（subject  method）」として参照されて良い。さらに、メソッド呼び出しの定義オブジェクト又は引数として使用され得るオブジェクトは、「メソッド呼び出しのオブジェクト」又は「メソッド呼び出しにより使用されるオブジェクト」として参照されて良い。
【００２２】
さらに、幾つかの実施形態では、修復モジュール１０６は、特定の障害位置に対応する被検査コード１０４の範囲内にあり得る１又は複数のオブジェクトを識別するよう構成されて良い。幾つかの実施形態では、修復モジュール１０６は、特定の障害位置に対応する被検査コード１０４の範囲内にあり得る全部のオブジェクトを識別するよう構成されて良い。オブジェクトは、原始変数、データ構造若しくはクラスのインスタンス、関数により返されるクラスのインスタンス、メソッド、等を含んで良い。本開示では、特定の障害位置に対応する被検査コード１０４の「範囲内のオブジェクト」への言及は、被検査コード１０４を破壊することなくオブジェクトが使用できる障害位置で有効な該オブジェクトを表して良い。
【００２３】
修復モジュール１０６は、識別したオブジェクトに基づき、１又は複数の合成メソッド呼び出しを生成するよう構成されて良い。例えば、修復モジュール１０６は、合成メソッド呼び出しの対象メソッドであり得るメソッドを、識別されたオブジェクトから取得するよう構成されて良い。上述又は他の実施形態では、修復モジュール１０６は、対象メソッドの各々のメソッド署名を識別するよう構成されて良い。特定の対象メソッドのメソッド署名は、特定の対象メソッドにより定義され得る定義オブジェクトのオブジェクト種類、特定対象メソッドの引数の数、及び／又は特定の対象メソッドの引数のオブジェクト種類、を含んで良い。したがって、幾つかの実施形態では、特定の対象メソッドのメソッド署名識別は、特定の対象メソッドの定義オブジェクトのオブジェクト種類及び引数を識別することを含んで良い。追加又は代替で、特定の対象メソッドのメソッド署名検出は、特定の対象メソッドの引数の数を識別することを含んで良い。
【００２４】
修復モジュール１０６は、対象メソッド、対象メソッドの署名、並びに他の識別されたオブジェクト及びそれらの対応する種類、に基づき、合成メソッド呼び出しを生成するよう構成されて良い。例えば、特定の対象メソッドの特定のメソッド署名は、対象メソッドの定義オブジェクトが整数であること、及び対象メソッドが２つの引数を含むこと、ここで引数のうちの一方は特定種類のメソッドであり他の引数は文字列であること、を示して良い。このような例では、修復モジュール１０６は、整数であるオブジェクトを定義オブジェクトとして、特定種類のメソッドであるオブジェクトを第１引数として、及び文字列であるオブジェクトを第２引数として使用することにより、特定の対象メソッドについて複数の合成メソッド呼び出しを生成するよう構成されて良い。幾つかの実施形態では、修復モジュール１０６は、整数型である各識別されたオブジェクトを定義として使用し、特定種類である各識別されたメソッドを第１引数として使用し、及び文字列型である各識別されたオブジェクトを第２引数として使用することに関し、特定の対象メソッドについて、合成メソッド呼び出しの全ての可能な順列を生成して良い。
【００２５】
さらに、特定の対象メソッドについて合成メソッド呼び出しを生成する際に、修復モジュール１０６は、定義オブジェクトについて、整数型ではない全ての識別されたオブジェクトを無視し、第１引数について、特定種類のメソッドではない全てのオブジェクトを無視し、及び第２引数について、文字列型ではない全てのオブジェクトを無視するよう構成されて良い。幾つかの例では、メソッド署名と互換性がある識別されたオブジェクトの識別及びメソッド署名と互換性のない識別されたオブジェクトの無視は、メソッド署名に関してオブジェクトを解決することとして参照されて良い。本開示では、メソッド署名と互換性のあるオブジェクトへの言及は、オブジェクトがメソッド署名に対応するメソッド呼び出しの定義オブジェクト又は引数として使用されるために互換性がある種類であることを示して良い。
【００２６】
上述のように、幾つかの実施形態では、合成メソッド呼び出しは、特定の障害位置に対する可能性のある修復候補であって良い。幾つかの実施形態では、修復モジュール１０６は、特定の障害位置のための修復として実施するために、合成メソッド呼び出しに優先順位付けするよう構成されて良い。幾つかの実施形態では、優先順位付けは、特定の障害位置のための修復として合成メソッド呼び出しの有効性を示し得る合成メソッド呼び出しの特性に基づいて良い。例えば、幾つかの例では、合成メソッド呼び出しの１又は複数の特性と特定の障害位置との間の関係は、修復としての合成メソッド呼び出しの有効性を示して良い。別の例として、合成メソッド呼び出しの１又は複数の特性と特定の障害位置に対応するエラーレポートとの間の関係は、合成メソッド呼び出しの有効性を示して良い。
【００２７】
幾つかの実施形態では、コンテキストスコア及び／又はエラーレポートスコアを決定するために使用され得る合成メソッド呼び出しの特性は、対応する合成メソッド呼び出しの戻り型、対応する合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の位置、対応する合成メソッド呼び出しのメソッド名、対応する合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の名称、対応する合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の種類、対応する合成メソッド呼び出しの中のオブジェクトのうちの１又は複数の各々の使用の種類、対応する合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の発生回数、又はそれらの組合せ、を含んで良い。幾つかの実施形態では、特性のうちの１又は複数は、対応するメソッド署名に基づき決定されて良い。したがって、対応するメソッド署名も、上述の特性のうちの１つより多くを含む自身の対応するメソッド呼び出しの特性である。
【００２８】
追加又は代替で、特性のうちの１又は複数と障害位置との間の関係は、対応する合成メソッド呼び出しの戻り型と障害位置との間の戻り型関係、障害位置に関して対応する合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の位置、障害位置の特定行数の範囲内で対応する合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の発生回数、障害位置に対応する現在実施されているメソッド呼び出しのメソッド名との対応する合成メソッド呼び出しのメソッド名のセマンティック類似性、又はそれらの任意の組合せ、を含んで良い。さらに幾つかの実施形態では、特性のうちの１又は複数とエラーレポートとの間の関係は、対応するメソッド呼び出しのメソッド名とエラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、オブジェクトのうちの１又は複数の名称とエラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、対応するメソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の種類の名称とエラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、又はそれらの任意の組合せ、を含んで良い。
【００２９】
追加又は代替で、優先順位付けは、合成メソッド呼び出しの各々について生成され得るスコアに基づいて良い。幾つかの実施形態では、スコアは、上述の関係のうちの１又は複数の指示を提供して良い。例えば、幾つかの実施形態では、スコアは、コンテキストスコア及び／又はエラーレポートスコアを含んで良い。幾つかの例では、コンテキストスコアは、合成メソッド呼び出しの各々の１又は複数の特性と特定の障害位置との間の関係に基づいて良い。幾つかの実施形態では、修復モジュール１０６は、図５の方法５００に関して後述する１又は複数の操作に基づき、コンテキストスコアを生成するよう構成されて良い。幾つかの例では、エラーレポートスコアは、合成メソッド呼び出しの各々の１又は複数の特性と特定の障害位置に対応するエラーレポートとの間の関係に基づいて良い。幾つかの実施形態では、修復モジュール１０６は、図６の方法６００に関して後述する１又は複数の操作に基づき、エラーレポートスコアを生成するよう構成されて良い。
【００３０】
上述又は他の実施形態では、スコアは、コンテキストスコア及びエラーレポートスコアに基づき得る複合スコアを含んで良い。幾つかの実施形態では、複合スコアは、図７の方法７００に関して後述する１又は複数の操作に基づき生成されて良い。
【００３１】
上述のように、幾つかの実施形態では、修復モジュール１０６は、合成メソッド呼び出しのコンテキストスコア、エラーレポートスコア、及び／又は複合スコアに基づき、修復操作のための合成メソッド呼び出しを優先順位付けするよう構成されて良い。幾つかの実施形態では、優先順位付けは、図３の方法３００及び図４の方法４００に関して後述する１又は複数の操作に基づき実行されて良い。
【００３２】
幾つかの実施形態では、修復モジュール１０６は、特定のメソッド呼び出しの優先度に基づき、特定の障害位置のための修復として実施すべき特定の合成メソッド呼び出しを選択するよう構成されて良い。例えば、優先順位付けは、修復操作の実行中に合成メソッド呼び出しの選択の順序を決定するために使用されて良い。例えば、より低い優先度を有する合成メソッド呼び出しの選択の前に、より高い優先度を有する合成メソッド呼び出しが修復として選択されて良い。例えば、修復モジュール１０６は、異なる合成メソッド呼び出しの各々の優先度を比較して良い。該優先度の比較に基づき、修復モジュール１０６は、より低い優先度を有する合成メソッド呼び出しを選択する代わりに、より高い優先度を有する特定の合成メソッド呼び出しを選択して良い。
【００３３】
修復モジュール１０６は、特定の障害位置に関して、被検査コード１０４に関する修復操作及び選択した合成メソッド呼び出しを実行するよう更に構成されて良い。例えば、修復操作は、特定のパッチとして特定の障害位置に選択した合成メソッド呼び出しを実装し、特定のパッチに対してテストを実行することを含んで良い。修復モジュール１０６は、テストの合格に応答して、特定のパッチを保持するよう構成されて良い。追加又は代替で、１又は複数のテストが合格しないことに応答して、修復モジュール１０６は、パッチとして実装されるべき異なる合成メソッド呼び出しを選択するよう構成されて良い。上述又は他の実施形態では、修復モジュール１０６は、優先順位付けに基づき、他の合成メソッド呼び出しを選択して良い。
【００３４】
追加又は代替で、テストの合格に応答して、修復モジュール１０６は、変更被検査コード１０８を出力するよう構成されて良い。この変更被検査コード１０８は、合成メソッド呼び出しの１又は複数の実装を含み得る１又は複数のパッチを含んで良い。上述又は他の実施形態では、修復モジュール１０６は、被検査コード１０４の中に合成メソッド呼び出しの実装を保持することに応答して、変更被検査コード１０８を出力するよう構成されて良い。
【００３５】
本開示の範囲から逸脱することなく図１に対し変更、追加又は省略が行われて良い。例えば、環境１００は、本開示で示され説明されたものより多くの又は少ない要素を有しても良い。さらに、幾つかの実施形態では、１又は複数のルーチン、１又は複数の命令、又は修復モジュール１０６の少なくとも一部のコード、テストスーツ、及び修復テンプレートは、結合され又は分離されて良い。幾つかの実施形態では、操作は、上述のものと異なる順序で実行されて良い。
【００３６】
図２は、本開示の特定の少なくとも一実施形態による例示的なコンピューティングシステム２０２のブロック図を示す。コンピューティングシステム２０２は、修復モジュール（例えば、図１の修復モジュール１０６）と関連する１又は複数の操作を実施し又は指示するよう構成されて良い。コンピューティングシステム２０２は、プロセッサ２５０、メモリ２５２、及びデータ記憶２５４を有して良い。プロセッサ２５０、メモリ２５２、及びデータ記憶装置２５４は、通信可能に結合されて良い。
【００３７】
概して、プロセッサ２５０は、任意の適切な特定用途向け又は汎用コンピュータ、コンピューティングエンティティ、又は種々のコンピュータハードウェア若しくはソフトウェアモジュールを有して良く、任意の適切なコンピュータ可読媒体に格納された命令を実行するよう構成され得る処理装置を用いて実施されて良い。例えば、プロセッサ２５０は、マイクロプロセッサ、マイクロコントローラ、デジタシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（FPGA）又はプログラム命令を解釈し及び／若しくは実行し並びに／又はデータを処理するよう構成された任意の他のデジタル若しくはアナログ回路を有して良い。図２には単一のプロセッサを示したが、プロセッサ２５０は、本開示で説明される任意の数の操作を個々に又は共同で実行する又は実行を指示するよう構成される任意の数のプロセッサを有して良い。さらに、プロセッサのうちの１又は複数は、異なるサーバのような１又は複数の異なる電子装置に存在して良い。
【００３８】
幾つかの実施形態では、プロセッサ２５０は、プログラム命令を解釈し及び／又は実行し、及び／又はメモリ２５２、データ記憶２５４又はメモリ２５２及びデータ記憶装置２５４に格納されたデータを処理して良い。幾つかの実施形態では、プロセッサ２５０は、データ記憶装置２５４からプログラム命令をフェッチし、該プログラム命令をメモリ２５２にロードして良い。プログラム命令がメモリ２５２にロードされた後、プロセッサ２５０は該プログラム命令を実行して良い。
【００３９】
例えば、幾つかの実施形態では、修復モジュールは、プログラム命令としてデータ記憶装置２５４に含まれて良い。プロセッサ２５０は、データ記憶装置２５４から修復モジュールのプログラム命令をフェッチして良く、修復モジュールのプログラム命令をメモリ２５２にロードして良い。修復モジュールのプログラム命令がメモリ２５２にロードされた後、プロセッサ２５０は、コンピューティングシステムが命令により指示されるように修復モジュールと関連する操作を実施できるように、プログラム命令を実行して良い。
【００４０】
メモリ２５２及びデータ記憶装置２５４は、コンピュータ実行可能命令又はデータ構造を伝える又は格納しているコンピュータ可読記憶媒体を含み得る。このようなコンピュータ可読媒体は、プロセッサ２５０のような汎用又は特定目的コンピュータによりアクセスできる任意の利用可能な媒体を含み得る。例として且つ限定ではなく、このようなコンピュータ可読媒体は、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read−Only  Memory）、ＥＥＰＲＯＭ（Electrically  Erasable  Programmable  Read−Only  Memory）、ＣＤ−ＲＯＭ（Compact  Disc  Read−Only  Memory）又は他の光ディスク記憶装置、磁気ディスク記憶装置又は他の磁気記憶装置、フラッシュメモリ装置（例えば、固体メモリ素子）を含む有形又は非一時的コンピュータ可読記憶媒体、又はコンピュータにより実行可能な命令若しくはデータ構造の形式で特定のプログラムコード手段を伝える若しくは格納するために用いられ汎用若しくは特定目的コンピュータによりアクセス可能な他の記憶媒体を有し得る。上述の組合せも、コンピュータ可読記憶媒体の範囲に包含され得る。コンピュータ実行可能命令は、例えば、プロセッサ２５０に特定の工程又は工程のグループを実行させるよう構成される命令及びデータを含み得る。
【００４１】
本開示の範囲から逸脱することなくコンピューティングシステム２０２に対し変更、追加又は省略が行われて良い。例えば、幾つかの実施形態では、コンピューティングシステム２０２は、明示的に示され又は記載されてない任意の数の他のコンポーネントを有して良い。
【００４２】
図３は、本開示で説明される少なくとも一実施形態による、ソフトウェアプログラムを修復する例示的な方法３００のフローチャートである。方法３００は、ソフトウェアプログラムの被検査コード（例えば、図１の被検査コード１０４）に対して、任意の適切なシステム、機器、又は装置により実行されて良い。例えば、図１の修復モジュール１０６又は（例えば修復モジュールにより指示されるとき）図２のコンピューティングシステム２０２は、ソフトウェアプログラムに対して方法３００に関連する工程のうちの１又は複数を実行し又は実行を指示して良い。別個のブロックとして示したが、特定の実装に依存して、方法３００のブロックのうちの１又は複数に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されて良い。
【００４３】
方法３００は、ブロック３０２を含んで良い。ブロック３０２で、障害及び対応する障害位置が、ソフトウェアプログラム内で識別されて良い。障害識別は、任意の適切な技術を用いてソフトウェアプログラムに対して実行されて良い。例えば、幾つかの実施形態では、障害識別は、ソフトウェアプログラムに対して１又は複数のテストスーツのテスト実行を実行することに基づき実行されて良い。
【００４４】
ブロック３０４で、複数の合成メソッド呼び出しが、ブロック３０２で識別された障害位置に対する修復候補として取得されて良い。幾つかの実施形態では、合成メソッド呼び出しは、合成メソッド呼び出しを既に生成した別のシステムから取得されて良い。追加又は代替で、幾つかの実施形態では、合成メソッド呼び出しは、以下に詳述する図４の方法４００の１又は複数の工程に基づき生成されることにより、取得されて良い。
【００４５】
ブロック３０６で、合成メソッド呼び出しは優先順位付けされて良い。優先順位付けは、ブロック３０２で識別された障害位置のためのパッチとしての、合成メソッド呼び出しの実装の優先度を示して良い。幾つかの実施形態では、合成メソッド呼び出しの優先順位付けは、合成メソッド呼び出しの各々の、コンテキストスコア、エラーレポートスコア、及び／又はコンテキストスコア及びエラーレポートスコアに基づく複合スコア、に基づいて良い。スコアの生成及び対応する優先順位付けは、幾つかの実施形態において方法４００、５００、及び／又は６００の１又は複数の工程に基づき実行されて良い。
【００４６】
ブロック３０８で、特定の合成メソッド呼び出しは、特定の合成メソッド呼び出しの優先度に基づき選択されて良い。例えば、修復モジュールは、異なる合成メソッド呼び出しの各々の優先度を比較して良い。第１合成メソッド呼び出しは、他の合成メソッド呼び出しの各々より高い優先度を有する第１優先度を有して良い。優先度の比較に基づき、修復モジュールは、より低い優先度を有する第２合成メソッド呼び出しを選択する代わりに、より高い優先度を有する第１合成メソッド呼び出しを選択して良い。ブロック３１０で、特定の障害位置及び選択された合成メソッド呼び出しに関して、ソフトウェアプログラムに対して修復操作が実行されて良い。
【００４７】
本開示の範囲から逸脱することなく方法３００に対し変更、追加又は省略が行われて良い。例えば、方法３００の工程は、異なる順序で実施されて良い。追加又は代替で、２以上の工程が同時に実行されて良い。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されて良い。
【００４８】
さらに、幾つかの実施形態では、方法３００は反復的に実行されて良く、ここで、１又は複数の工程が単一の障害位置に対して同時に実行されて良い。追加又は代替で、１又は複数のブロックに関連する１又は複数の工程は、複数の障害位置に関して一度に実行されて良い。
【００４９】
図４は、本開示に記載の少なくとも一実施形態による、修復候補として使用され得る合成メソッド呼び出しを生成し及び優先順位付けする例示的な方法のフローチャートを示す。方法４００は、被検査コードに対して、任意の適切なシステム、機器、又は装置により実行されて良い。例えば、図１の修復モジュール１０６又は（例えば修復モジュールにより指示されるとき）図２のコンピューティングシステム２０２は、ソフトウェアプログラムの被検査コードに対して方法４００に関連する工程のうちの１又は複数を実行し又は実行を指示して良い。別個のブロックとして示したが、特定の実装に依存して、方法４００のブロックのうちの１又は複数に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されて良い。上述のように、幾つかの例では、方法４００の工程のうちの１又は複数は、方法３００のブロック３０４及び／又はブロック３０６に関して実行されて良い。
【００５０】
方法４００は、ブロック４０２で開始して良い。ブロック４０２で、識別された障害位置に対応するソフトウェアプログラムの特定の範囲内にある１又は複数のオブジェクトが識別されて良い。幾つかの実施形態では、特定の範囲内にあるオブジェクトの全部が識別されて良い。幾つかの実施形態では、オブジェクトの識別は、オブジェクト種類、コード内のオブジェクトの位置、オブジェクトに含まれる識別されたメソッドの署名、等のようなオブジェクト特性の識別を含んで良い。
【００５１】
ブロック４０４で、識別されたオブジェクトは、メソッド呼び出しの生成のために解決されて（resolved）良い。例えば、識別されたメソッドは、合成メソッド呼び出しの可能性のある対象メソッドであって良く、識別されたメソッドのメソッド署名が識別されて良い。メソッド署名に基づき、どの種類のオブジェクトが、対応する識別されたメソッドの定義オブジェクト及び／又は引数であり得るかが決定されて良い。上述又は他の実施形態では、識別されたメソッドの定義オブジェクトと互換性のある種類を有する識別されたオブジェクトは、各対応する識別されたメソッドの可能性のある定義オブジェクトとして指定されて良い。追加又は代替で、さらに、識別されたメソッドの定義オブジェクトと互換性のない識別されたオブジェクトは、各対応する識別されたメソッドの可能性のある定義オブジェクトではないとして指定されて良い。上述又は他の実施形態では、識別されたメソッドの引数種類と互換性のある種類を有する識別されたオブジェクトは、各対応する識別されたメソッドの可能性のある引数であるとして識別され指定されて良い。さらに、識別されたメソッドの引数種類と互換性のない種類を有する識別されたオブジェクトは、各対応する識別されたメソッドの可能性のある引数ではないとして識別され指定されて良い。
【００５２】
例えば、特定のメソッドの定義オブジェクトは、整数型であって良い。したがって、整数型である全ての識別されたオブジェクトは、特定のメソッドの可能性のある定義オブジェクトとして指定されて良い。上述及び他の実施形態では、整数型ではない全ての定義オブジェクトは、特定のメソッドの可能性のある定義オブジェクトではないとして指定されて良い。同様の工程が、特定のメソッドのメソッド署名により示される引数種類に基づき特定のメソッドの引数として使用され得るオブジェクトを識別することに関して、実行されて良い。
【００５３】
ブロック４０６で、対象メソッドとして使用され得る識別されたメソッド及び他の識別されたオブジェクトのうちの１又は複数に基づき、複数のメソッド呼び出しが生成されて良い。幾つかの実施形態では、複数のメソッド呼び出しが、特定の対象メソッドについて生成されて良い。例えば、特定の対象メソッドの各メソッド呼び出しは、定義オブジェクトとして互換性のあるオブジェクトを実装し及び解決により示されるとき引数として互換性のあるオブジェクトを実装することにより、生成されて良い。幾つかの実施形態では、メソッド呼び出しの全ての可能性のある順列が、特定の対象メソッドについて生成されて良い。追加又は代替で、メソッド呼び出しの全ての可能な順列が、識別され得る全ての対象メソッドについて生成されて良い。
【００５４】
ブロック４０８で、複数の合成メソッド呼び出しのうちの特定の合成メソッド呼び出しが選択されて良い。ブロック４１０で、幾つかの実施形態では、特定の合成メソッド呼び出しについてコンテキストスコアが決定されて良い。上述のように、コンテキストスコアは、特定の合成メソッド呼び出しの１又は複数の特性と障害位置との間の関係に基づいて良い。幾つかの実施形態では、コンテキストスコアは、図５の方法５００に関して後述する１又は複数の工程に基づき生成されて良い。
【００５５】
ブロック４１２で、幾つかの実施形態では、特定の合成メソッド呼び出しについてエラーレポートスコアが決定されて良い。幾つかの例では、エラーレポートスコアは、特定の合成メソッド呼び出しの１又は複数の特性と特定の障害位置に対応するエラーレポートとの間の関係に基づいて良い。幾つかの実施形態では、エラーレポートスコアは、図６の方法６００に関して後述する１又は複数の工程に基づき生成されて良い。
【００５６】
ブロック４１４で、幾つかの実施形態では、特定の合成メソッド呼び出しについて複合スコアが決定されて良い。幾つかの実施形態では、複合スコアは、特定の合成メソッド呼び出しのコンテキストスコア及び特定の合成メソッド呼び出しのエラーレポートスコアに基づいて良い。幾つかの実施形態では、複合スコアは、図７の方法７００に関して後述する１又は複数の工程に基づき生成されて良い。
【００５７】
ブロック４１６で、スコア付けされていない（例えば、コンテキストスコア、エラーレポートスコア、及び／又は複合スコアを受けていない）合成メソッド呼び出しが存在するか否かが決定されて良い。スコア付けされていない合成メソッド呼び出しが存在すると決定することに応答して、方法４００はブロック４０８に戻って良い。幾つかの実施形態では、方法４００は、全部の合成メソッド呼び出しがスコア付けされるまで、ブロック４０８、４１０、４１２、４１４、及び４１６の工程を繰り返して良い。
【００５８】
ブロック４１８で、合成メソッド呼び出しは、スコア付けに基づき優先順位付けされて良い。例えば、幾つかの実施形態では、合成メソッド呼び出しの複合スコアは、「０」乃至「１」の範囲を有して良い。ここで、「１」のスコアは、対応する合成メソッド呼び出しが障害位置に対して有効な修復である可能性が高いことを示し、「０」のスコアは、対応する合成メソッド呼び出しが障害に対して有効な修復である可能性が低いことを示す。このように、幾つかの実施形態では、合成メソッド呼び出しの優先順位付けは、より高いスコアを有する合成メソッド呼び出しがより低いスコアを有する合成メソッド呼び出しより優先されるようにされて良い。例えば、合成メソッド呼び出しは、それら個々のスコアに従いリスト内に並べられて良い。ここで、最高スコアはリストの最上位にあり、最低スコアはリストの最下位にある。このような例では、優先順位付けは、最高優先度を有するリストの順序がリストの最上位に関連することに基づいて良い。
【００５９】
追加又は代替で、優先順位付けは、修復候補として合成メソッド呼び出しのうちの１又は複数を検討から廃棄する又は枝刈りすることを含んで良い。例えば、幾つかの実施形態では、閾値より低いスコア（例えば、特徴スコア、エラーレポートスコア、又は複合スコア）を有する合成メソッド呼び出しは、可能性のある修復候補としての検討から切り捨てられて良い。幾つかの実施形態では、閾値は、エラー修正操作のために利用可能であり得る時間及び計算リソースに基づき設定されて良い。例えば、無限の時間又は有限のリソースが利用可能である場合、閾はゼロであって良い。しかしながら、実際には、時間及びリソースの両方が限られている可能性が高い。したがって、閾値は、以前の実験に基づく知識、又は機械学習技術を用いるトレーニングデータセットからの学習に基づき設定されて良い。
【００６０】
本開示の範囲から逸脱することなく方法４００に対し変更、追加又は省略が行われて良い。例えば、方法４００の工程は、異なる順序で実施されて良い。追加又は代替で、２以上の工程が同時に実行されて良い。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されて良い。
【００６１】
例えば、幾つかの実施形態では、複合スコアの決定は、全てのコンテキストスコア及びエラーレポートスコアの生成の後に実行されて良い。追加又は代替で、幾つかの実施形態では、コンテキストスコアの決定又はエラーレポートスコアの決定は、省略されて良い。上述又は他の実施形態では、複合スコアの決定も省略されて良い。
【００６２】
さらに、幾つかの実施形態では、方法４００は反復的に実行されて良く、ここで、一度に、単一の障害位置が分析されて良い。追加又は代替で、１又は複数のブロックに関連する１又は複数の工程は、複数の障害位置に関して一度に実行されて良い。さらに、幾つかの実施形態では、ブロック４０８、４１０、４１２、及び４１４に関連する工程は、一度に、単一の合成メソッド呼び出しに関して反復的に実行されて良い。追加又は代替で、ブロック４０８、４１０、４１２に関連する１又は複数の工程は、複数の合成メソッド呼び出しに関して一度に実行されて良い。さらに、幾つかの実施形態では、合成メソッド呼び出しは、既に生成されて良い。したがって、ブロック４０２、４０４、及び４０６に関する１又は複数の工程は、幾つかの例では省略されて良い。
【００６３】
図５は、本開示で説明される少なくとも一実施形態による、コンテキストスコアを決定する例示的な方法５００のフローチャートである。方法５００は、被検査コード（例えば、図１の被検査コード１０４）に対して、任意の適切なシステム、機器、又は装置により実行されて良い。例えば、図１の修復モジュール１０６又は（例えば修復モジュールにより指示されるとき）図２のコンピューティングシステム２０２は、ソフトウェアプログラムの被検査コードの障害位置のための可能性のある修復候補（「候補メソッド呼び出し」として参照される）であり得るメソッド呼び出し（例えば、上述のような合成メソッド呼び出し）に対して方法５００に関連する工程のうちの１又は複数を実行し又は実行を指示して良い。別個のブロックとして示したが、特定の実装に依存して、方法５００のブロックのうちの１又は複数に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されて良い。
【００６４】
方法５００は、ブロック５０２で開始して良い。ブロック５０２で、候補メソッド呼び出しについて、戻り型関係スコアが決定されて良い。戻り型関係スコアは、候補メソッド呼び出しの戻り型と障害位置との間の関係を示して良い。第１の例として、障害位置は、整数である変数を定めるコードの行に対応して良く、候補メソッド呼び出しは整数を返して良い。第１の例における戻り型関係スコアは、戻り型関係が障害位置と互換性があることに基づき、候補メソッド呼び出しがより高い優先度を与えられていることを反映して良い。第２の例として、障害位置は、整数である変数を定めるコードの行に対応して良いが、候補メソッド呼び出しは文字列を返して良い。第２の例における戻り型関係は、戻り型関係が互換性がないことに基づき、候補メソッド呼び出しがより低い優先度を与えられていることを反映して良い。本開示では、戻り型関係が障害位置と互換性があることへの言及は、候補メソッド呼び出しの戻り型が、障害位置にあるコードと互換性のある方法で障害位置において使用され得ることを示す。
【００６５】
幾つかの実施形態では、戻り型関係スコアは、「０」又は「１」の値を有して良い。ここで、「１」のスコアは、候補メソッド呼び出しの戻り型が障害位置と互換性があることを示し、「０」のスコアは、対応する合成メソッド呼び出しが障害に対して有効な修復である可能性が低いことを示す。例えば、上述の第１の例における候補メソッド呼び出しは、戻り型が障害位置と互換性があることに基づき、「１」の戻り型関係スコアを与えられて良い。これに対し、上述の第２の例における候補メソッド呼び出しは、戻り型が障害位置と互換性がないことに基づき、「０」の戻り型関係スコアを与えられて良い。
【００６６】
ブロック５０４で、障害位置に対する候補メソッド呼び出しのオブジェクトの相対位置に基づき、候補メソッド呼び出しについて１又は複数の距離スコアが決定されて良い。幾つかの実施形態では、距離スコアは、候補メソッド呼び出しにより使用され得る各オブジェクトについて決定されて良い。例えば、距離スコアは、候補メソッド呼び出しの定義オブジェクトについて、及び候補メソッド呼び出しの中で引数として使用されるオブジェクトの各々について、決定されて良い。
【００６７】
幾つかの例では、コード内でオブジェクトがコードの障害位置のより近くに置かれるほど、オブジェクトが障害位置にある障害を修復するのに有用である可能性が高い。このように、幾つかの実施形態では、障害位置の近くに置かれるオブジェクトを使用する候補メソッド呼び出しは、障害位置からより遠くに置かれるオブジェクトを使用する候補メソッド呼び出しよりも優先されて良い。幾つかの実施形態では、距離スコアは、この優先順位付けを反映して良い。本開示では、オブジェクトの位置への言及は、オブジェクト名が使用されるソフトウェアプログラムのコード内の位置を表して良い。さらに、障害位置に対するオブジェクトの位置の言及は、オブジェクトから障害位置まで何行のコードかに関する指示を表して良い。これは、オブジェクトと障害位置との間の距離としても参照され得る。
【００６８】
例として、幾つかの実施形態では、距離スコアは、単に障害位置とオブジェクトの各々の位置との間に存在し得るコードの行数を決定することにより、及び決定された行数を結果として生じる距離スコアとして使用することにより、決定されて良い。例えば、障害位置から２行の範囲内にあるオブジェクトは、「２」の距離スコアを与えられて良い。このような例では、より低い距離スコアは、より高い距離スコアよりも高い優先度を与えられて良い。
【００６９】
上述又は他の実施形態では、距離スコアは、「０」乃至「１」の間の値を有するよう正規化されて良い。ここで、「１」のスコアは、オブジェクトが障害位置に配置されることを示し、「０」のスコアは、オブジェクトが障害位置から可能な限り離れて配置されることを示す。例えば、幾つかの実施形態では、各オブジェクトの距離スコアは、次式を用いて決定されて良い。
（コードの合計行数−決定された距離）／（コードの合計行数）
上式では、「コードの合計行数」は、障害位置に対応するソフトウェアプログラムのメソッドの中のコードの行数を表し、「決定された距離」は、障害位置と最後に使用されたオブジェクトとの間の行数を表す。例えば、候補メソッド呼び出しは、第１オブジェクト、第２オブジェクト、及び第３オブジェクトを含んで良い。「コードの合計行数」は２０であって良く、第１オブジェクトは障害位置から３行離れた位置を有して良く、第２オブジェクトは、障害位置から１行離れた位置を有して良く、第３オブジェクトは、障害位置から６行離れた位置を有して良い。第１オブジェクトの第１距離スコアは「０．８５（「（２０−３）／２０」）」であって良く、第２オブジェクトの第２距離スコアは「０．９５（「（２０−１）／２０」）」であって良く、第３オブジェクトの第３距離スコアは「０．７０（「（２０−６）／２０」）」であって良い。
【００７０】
幾つかの例では、オブジェクトの１回より多くの発生がコードに含まれて良い。したがって、オブジェクトは、障害位置に対して１より多くの距離を有して良い。幾つかの実施形態では、オブジェクトの距離スコアは、障害位置に最も近いオブジェクトの発生、障害位置から最も遠いオブジェクトの発生、障害位置からの平均距離、又は任意の他の適切な距離若しくは距離の組合せに基づいて良い。
【００７１】
ブロック５０６で、候補メソッド呼び出しのオブジェクトの発生数に基づき、候補メソッド呼び出しについて１又は複数の発生スコアが決定されて良い。幾つかの実施形態では、発生スコアは、候補メソッド呼び出しにより使用され得る各オブジェクトについて決定されて良い。例えば、発生スコアは、候補メソッド呼び出しの定義オブジェクトについて、及び候補メソッド呼び出しの中で引数として使用されるオブジェクトの各々について、決定されて良い。
【００７２】
幾つかの例では、コード内でオブジェクトがコードの障害位置の近傍の範囲内に置かれる回数が多いほど、オブジェクトが障害位置にある障害を修復するのに有用である可能性が高い。このように、幾つかの実施形態では、障害位置の近傍の範囲内で複数回生じるオブジェクトを使用する候補メソッド呼び出しは、障害位置の近傍の範囲内でより少ない回数生じるオブジェクトを使用する候補メソッド呼び出しよりも優先されて良い。幾つかの実施形態では、発生スコアは、この優先順位付けを反映して良い。本開示では、障害位置の近傍の範囲内にあることの言及は、障害位置の特定行数のコードの範囲内にあることを表して良い。例えば、障害位置から特定行数を加算した又は減算した行における発生が、近傍の範囲内であると考えられて良い。このような決定のために使用され得る行数は、特定のソフトウェアプログラムに依存して変化して良く、以前の経験による知識に基づいて良く、及び／又は機械学習技術を用いてトレーニングデータセットから学習されて良い。
【００７３】
例として、幾つかの実施形態では、発生スコアは、単に、障害位置の近傍の範囲内にあり得る特定のオブジェクトの発生回数を決定することにより決定されて良い。例えば、近傍の範囲内で３回生じるオブジェクトは、「３」の発生スコアを与えられて良い。このような例では、より高い発生スコアは、より低い発生スコアよりも高い優先度を与えられて良い。
【００７４】
上述又は他の実施形態では、発生スコアは、「０」と「１」の間の値を有するよう正規化されて良い。ここで、発生スコアが「１」に近いほど、対応するオブジェクトが他のオブジェクトと比べて近傍でより多く発生して良い。「０」のスコアは、オブジェクトが近傍の範囲内で発生しないことを示す。例えば、幾つかの実施形態では、各オブジェクトの発生スコアは、次式を用いて決定されて良い。
（対象オブジェクトの発生回数）／（任意のオブジェクトの最大発生回数）
上式では、「対象オブジェクトの発生回数」は、障害位置の近傍の範囲内にあるとスコア付けされているオブジェクトの発生回数を表し、「任意のオブジェクトの最大発生回数」は、近傍の範囲内で生じる候補メソッド呼び出しの任意のオブジェクトの発生回数を表す。例えば、候補メソッド呼び出しは、第１オブジェクト、第２オブジェクト、及び第３オブジェクトを含んで良い。第１オブジェクトは近傍の範囲内で３回の発生を有して良く、第２オブジェクトは近傍の範囲内で５回の発生を有して良く、第３オブジェクトは近傍の範囲内で発生を有しなくて良い。第１オブジェクトの第１発生スコアは「０．６（「３／５」）」であって良く、第２オブジェクトの第２発生スコアは「１．０（「５／５」）」であって良く、第３オブジェクトの第３発生スコアは「０（「０／５＋」）」であって良い。
【００７５】
ブロック５０８で、候補メソッド呼び出しについてセマンティック類似性スコアが決定されて良い。セマンティック類似性スコアは、候補メソッド呼び出しの対象メソッド名の障害があるメソッド（「障害位置メソッド」として参照される）の名称とのセマンティック類似性を示して良い。
【００７６】
幾つかの例では、ソフトウェアプログラムの中のオブジェクトは、それらの種類、機能、等を示す名称を与えられる場合が多い。したがって、類似する名称を有するオブジェクトは、異なる名称を有するオブジェクトよりも、互いにより関連し得る。したがって、修復として使用され得る候補メソッド呼び出しのメソッド名が、障害位置メソッドのメソッド名に近いほど、候補メソッド呼び出しが障害位置メソッドに関連する、したがって障害位置にある障害を修復するのにより有用であり得る可能性が高い。したがって、幾つかの実施形態では、障害位置メソッドのメソッド名にテキスト的に類似する（意味論的（semantically）に類似しているとしても参照される）メソッド名を有する候補メソッド呼び出しは、テキスト的にあまり類似しないメソッド名を有する候補メソッド呼び出しよりも優先されて良い。幾つかの実施形態では、候補メソッド呼び出しのセマンティック類似性スコアは、この優先順位を反映して良い。
【００７７】
例として、幾つかの実施形態では、テキスト類似性分析は、候補メソッド呼び出しのメソッド名及び障害位置メソッドのメソッド名に対して実行されて良い。例えば、幾つかの実施形態では、テキスト類似性は、最長共通部分列（Longest  Common  Subsequence：ＬＣＳ）アルゴリズム又はジャカード係数（Jaccard  Similarity  Coeffiecient）により決定されて良い。テキスト類似性は、テキスト非類似性の反対としても考えられる。したがって、編集距離のようなテキスト非類似性決定に関連する任意の適切なアルゴリズムも使用されて良い。追加又は代替で、幾つかの実施形態では、テキスト類似性分析は、候補メソッド呼び出しのメソッド名と障害位置メソッドのメソッド名との間のセマンティック類似性を生成するために使用されて良い。セマンティック類似性スコアがより近い程度の類似性を示すほど、セマンティック類似性スコアに割り当てられ得る優先度はより高い。例えば、相対的に高い程度の類似性を示すセマンティック類似性スコアは、相対的に低い程度の類似性を示すスコアに優る優先度を与えられて良い。
【００７８】
上述又は他の実施形態では、セマンティック類似性スコアは、「０」乃至「１」の間の値を有するよう正規化されて良い。ここで、「１」のスコアは、候補メソッド呼び出しのメソッド名が障害位置メソッドのメソッド名と一致することを示し、「０」のスコアは、候補メソッド呼び出しのメソッド名が障害位置メソッドのメソッド名に少ししか乃至全く類似しないことを示す。例えば、幾つかの実施形態では、セマンティック類似性スコアは、次式を用いて決定されて良い。（対象オブジェクトのテキスト類似性）／（任意のオブジェクトの最大テキスト類似性）
上式では、「対象オブジェクトのテキスト類似性」は、対象オブジェクトと障害位置メソッドとの間の類似性スコアを表し、「任意のオブジェクトの最大テキスト類似性」は、障害位置メソッドに最も類似するオブジェクトの類似性スコアを表す。例えば、障害位置メソッドは、第１オブジェクト、第２オブジェクト、及び第３オブジェクトを含んで良い。第１オブジェクト、第２オブジェクト、及び第３オブジェクトの類似性スコアは、それぞれ０．３、０．０、０．５であって良い。したがって、第１オブジェクトの正規化類似性スコアは「０．６（「０.３／０.５」）」であって良く、第２オブジェクトの正規化類似性スコアは「０．０（「０．０／０．５」）」であって良く、第３オブジェクトの正規化類似性スコアは「１．０（「０．５／０．５」）」であって良い。
【００７９】
ブロック５１０で、幾つかの実施形態では、候補メソッド呼び出しについてコンテキストスコアが決定されて良い。幾つかの実施形態では、コンテキストスコアは、戻り型関係スコア、１又は複数の距離スコア、１又は複数の発生スコア、セマンティック類似性スコア、又はそれらの任意の適切な組み合わせに基づき又は含んで良い。幾つかの実施形態では、コンテキストスコアは、上述のスコア種類の全部の組合せを含んで良い。追加又は代替で、コンテキストスコアが述のスコア種類の組合せを含む例では、上述のスコア種類は正規化されて良い。
【００８０】
例えば、幾つかの実施形態では、候補メソッド呼び出しの戻り型関係スコアは、上述のように「０」又は「１」の値を有して良く、候補メソッド呼び出しの各オブジェクトの距離スコアは、上述のように「０」と「１」の間の値を有するよう正規化されて良く、候補メソッド呼び出しの各オブジェクトの発生スコアは、上述のように「０」と「１」の間の値を有するよう正規化されて良く、セマンティック類似性スコアは、上述のように「０」と「１」の間の値を有するよう正規化されて良い。幾つかの実施形態では、コンテキストスコアは、候補メソッド呼び出しの、戻り型関係スコア、距離スコア、発生スコア、及びセマンティック類似性スコアの平均を有して良い。
【００８１】
追加又は代替で、コンテキストスコアは加重平均を有して良い。ここで、上述のスコア種類のうちの１又は複数は、候補メソッド呼び出しを優先順位付けすることに関して対応する因子の決定された重要度に基づき、異なる重みを与えられる。例えば、幾つかの例では、候補メソッド呼び出しの戻り型が障害位置と互換性があるか否かは、メソッド名同士のセマンティック類似性よりも、候補メソッド呼び出しの有効性のより高い指示子であって良い。このような例では、戻り型関係スコアは、セマンティック類似性スコアよりも高い重みを与えられて良い。幾つかの実施形態では、特定の属性の重みは、該属性が前のパッチにどれだけ多く関連するかに依存して良い。追加又は代替で、幾つかの実施形態では、重みは、前のパッチに関連するデータに基づき決定されて良い。上述又は他の実施形態では、重みは、機械学習アルゴリズムを用いて決定されて良い。
【００８２】
追加又は代替で、幾つかの実施形態では、コンテキストスコアに関連するスコアのうちの２以上が、一次回帰、ロジスティック回帰、決定木技術、又はランダム予報技術のような種々の機械学習技術を用いて学習された数学的モデルを用いて結合されて良い。
【００８３】
本開示の範囲から逸脱することなく方法５００に対し変更、追加又は省略が行われて良い。例えば、方法５００の工程は、異なる順序で実施されて良い。追加又は代替で、２以上の工程が同時に実行されて良い。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されて良い。さらに、与えられるスコア付け技術は単なる例であり、スコア付けの任意の適切な変形が用いられて良い。
【００８４】
図６は、本開示で説明される少なくとも一実施形態による、エラーレポートスコアを決定する例示的な方法６００のフローチャートである。方法６００は、被検査コード（例えば、図１の被検査コード１０４）に対して、任意の適切なシステム、機器、又は装置により実行されて良い。例えば、図１の修復モジュール１０６又は（例えば修復モジュールにより指示されるとき）図２のコンピューティングシステム２０２は、ソフトウェアプログラムの被検査コードの障害位置のための可能性のある修復候補（「候補メソッド呼び出し」として参照される）であり得るメソッド呼び出し（例えば、上述のような合成メソッド呼び出し）に対して方法６００に関連する工程のうちの１又は複数を実行し又は実行を指示して良い。別個のブロックとして示したが、特定の実装に依存して、方法６００のブロックのうちの１又は複数に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されて良い。
【００８５】
方法６００は、ブロック６０２で開始して良い。ブロック６０２で、１又は複数のメソッド名セマンティック類似性スコアが、障害位置に対応し得るエラーレポートに対する候補メソッド呼び出しのメソッド名に関して決定されて良い。幾つかの例では、エラーレポートは、障害位置にある障害に起因する問題を経験し得るソフトウェアプログラムからの項目（例えば、オブジェクト名）を含んで良い。さらに、上述のように、ソフトウェアプログラムの中のオブジェクトは、それらの種類、機能、等を示す名称を与えられる場合が多い。したがって、類似する名称を有するオブジェクトは、異なる名称を有するオブジェクトよりも、互いにより関連し得る。したがって、修復として使用され得る候補メソッド呼び出しのメソッド名が、エラーレポートに含まれるワード（例えば、障害位置により影響されるオブジェクト）に近いほど、候補メソッド呼び出しがエラーレポートに対応する障害位置にある障害を修復するのにより有用であり得る可能性が高い。したがって、幾つかの実施形態では、エラーレポートに含まれる１又は複数のワードにテキスト的に類似する（意味論的に（semantically）類似しているとしても参照される）メソッド名を有する候補メソッド呼び出しは、エラーレポートのワードにテキスト的にあまり類似しないメソッド名を有する候補メソッド呼び出しよりも優先されて良い。
【００８６】
幾つかの実施形態では、メソッド名セマンティック類似性スコアは、候補メソッド呼び出しのメソッド名及びエラーレポートに含まれる全てのワードに対して決定されて良い。追加又は代替で、メソッド名セマンティック類似性スコアは、候補メソッド呼び出しのメソッド名及びエラーレポートに含まれるワードに対して決定されて良い。
【００８７】
幾つかの実施形態では、メソッド名セマンティック類似性スコアは、方法５００のブロック５０８のセマンティック類似性スコアを決定するステップに関して上述したものと類似して、同様に、又は同じ方法で生成されて良い。追加又は代替で、メソッド名セマンティック類似性スコアは、ブロック５０８に関して上述したものと類似して、同様に、又は同じ方法で正規化されて良い。
【００８８】
追加又は代替で、幾つかの実施形態では、エラーレポートに対する候補メソッド呼び出しの複数のメソッド名セマンティック類似性スコアに関して、最高メソッド名セマンティック類似性スコアが、候補メソッド呼び出しのメソッド名セマンティック類似性スコアとして使用されて良い。上述又は他の実施形態では、全てのメソッド名セマンティック類似性スコアが平均化されて良く、平均が、候補メソッド呼び出しのメソッド名セマンティック類似性スコアとして使用されて良い。
【００８９】
ブロック６０４で、オブジェクト名セマンティック類似性スコアは、障害位置に対応するエラーレポートに関して、候補メソッド呼び出しにより使用されるオブジェクトの名称のうちの１又は複数に関して決定されて良い。
【００９０】
幾つかの例では、修復として使用され得る候補メソッド呼び出しのオブジェクト名が、エラーレポートに含まれるワード（例えば、障害位置により影響されるオブジェクト）に近いほど、候補メソッド呼び出しがエラーレポートに対応する障害位置にある障害を修復するのにより有用であり得る可能性が高い。したがって、幾つかの実施形態では、エラーレポートに含まれる１又は複数のワードにテキスト的に類似するオブジェクト名を有するオブジェクトを使用する候補メソッド呼び出しは、エラーレポートのワードにテキスト的にあまり類似しないオブジェクトを有するオブジェクトを使用する候補メソッド呼び出しよりも優先されて良い。
【００９１】
幾つかの実施形態では、１又は複数のオブジェクト名類似性スコアは、候補メソッド呼び出しにより使用され得る各オブジェクトについて決定されて良い。追加又は代替で、オブジェクト名セマンティック類似性スコアは、オブジェクト及びエラーレポートに含まれる全てのワードに関して決定されて良い。追加又は代替で、オブジェクト名セマンティック類似性スコアは、オブジェクト及びエラーレポートに含まれるワードの部分集合に関して決定されて良い。
【００９２】
幾つかの実施形態では、オブジェクト名セマンティック類似性スコアは、方法５００のブロック５０８のセマンティック類似性スコアを決定するステップに関して上述したものと類似して、同様に、又は同じ方法で生成されて良い。追加又は代替で、オブジェクト名セマンティック類似性スコアは、ブロック５０８に関して上述したものと類似して、同様に、又は同じ方法で正規化されて良い。
【００９３】
追加又は代替で、幾つかの実施形態では、特定のオブジェクトの複数のオブジェクト名セマンティック類似性スコアに関して、最高オブジェクト名セマンティック類似性スコアが、特定のオブジェクトのオブジェクト名セマンティック類似性スコアとして使用されて良い。上述又は他の実施形態では、全てのオブジェクト名セマンティック類似性スコアが平均化されて良く、平均が、特定のオブジェクトのオブジェクト名セマンティック類似性スコアとして使用されて良い。
【００９４】
ブロック６０６で、オブジェクト種類セマンティック類似性スコアは、障害位置に対応し得るエラーレポートに関して、候補メソッド呼び出しにより使用されるオブジェクトに対応するオブジェクト種類の種類名のうちの１又は複数に関して決定されて良い。幾つかの例では、修復として使用され得る候補メソッド呼び出しのオブジェクトの種類名が、エラーレポートに含まれるワード（例えば、障害位置により影響されるオブジェクト）に近いほど、候補メソッド呼び出しがエラーレポートに対応する障害位置にある障害を修復するのにより有用であり得る可能性が高い。したがって、幾つかの実施形態では、エラーレポートに含まれる１又は複数のワードにテキスト的に類似する種類名を有する種類のオブジェクトを使用する候補メソッド呼び出しは、エラーレポートのワードにテキスト的にあまり類似しない種類名を有する種類のオブジェクトを使用する候補メソッド呼び出しよりも優先されて良い。
【００９５】
幾つかの実施形態では、１又は複数のオブジェクト種類名類似性スコアは、候補メソッド呼び出しにより使用され得る各オブジェクトについて決定されて良い。追加又は代替で、オブジェクト種類名セマンティック類似性スコアは、オブジェクト及びエラーレポートに含まれる全てのワードに関して決定されて良い。追加又は代替で、オブジェクト種類名セマンティック類似性スコアは、オブジェクト及びエラーレポートに含まれるワードの部分集合に関して決定されて良い。
【００９６】
幾つかの実施形態では、オブジェクト種類名セマンティック類似性スコアは、方法５００のブロック５０８のセマンティック類似性スコアを決定するステップに関して上述したものと類似して、同様に、又は同じ方法で生成されて良い。追加又は代替で、オブジェクト種類名セマンティック類似性スコアは、ブロック５０８に関して上述したものと類似して、同様に、又は同じ方法で正規化されて良い。
【００９７】
追加又は代替で、幾つかの実施形態では、特定のオブジェクトの複数のオブジェクト種類名セマンティック類似性スコアに関して、最高オブジェクト種類名セマンティック類似性スコアが、特定のオブジェクトのオブジェクト種類名セマンティック類似性スコアとして使用されて良い。上述又は他の実施形態では、全てのオブジェクト種類名セマンティック類似性スコアが平均化されて良く、平均が、特定のオブジェクトのオブジェクト種類名セマンティック類似性スコアとして使用されて良い。
【００９８】
ブロック６０８で、幾つかの実施形態では、候補メソッド呼び出しについてエラーレポートスコアが生成されて良い。幾つかの実施形態では、エラーレポートスコアは、候補メソッド呼び出しに関連する１又は複数のメソッド名セマンティック類似性スコア、候補メソッド呼び出しに関連する１又は複数のオブジェクト名セマンティック類似性スコア、候補メソッド呼び出しに関連する１又は複数のオブジェクト名セマンティック類似性スコア、又はそれらの任意の適切な組合せに基づき又は含んで良い。幾つかの実施形態では、エラーレポートスコアは、上述のスコア種類の全部の組合せを含んで良い。追加又は代替で、エラーレポートスコアが述のスコア種類の組合せを含む例では、上述のスコア種類は正規化されて良い。追加又は代替で、幾つかの実施形態では、エラーレポートスコアは、使用される正規化されたスコアの平均を含んで良い。
【００９９】
追加又は代替で、エラーレポートスコアは加重平均を有して良い。ここで、上述のスコア種類のうちの１又は複数は、候補メソッド呼び出しを優先順位付けすることに関して対応する因子の決定された重要度に基づき、異なる重みを与えられる。例えば、幾つかの例では、エラーレポートに対するメソッド名セマンティック類似性は、エラーレポートに対するオブジェクト名セマンティック類似性よりも、候補メソッド呼び出しの有効性のより高い指示子であり得る。このような例では、メソッド名セマンティック類似性スコアは、オブジェクト種類セマンティック類似性スコアよりも高い重みを与えられて良い。幾つかの実施形態では、特定の属性の重みは、該属性が前のパッチにどれだけ多く関連するかに依存して良い。追加又は代替で、幾つかの実施形態では、重みは、前のパッチに関連するデータに基づき決定されて良い。上述又は他の実施形態では、重みは、機械学習アルゴリズムを用いて決定されて良い。
【０１００】
追加又は代替で、幾つかの実施形態では、コンテキストスコアに関連するスコアのうちの２以上が、一次回帰、ロジスティック回帰、決定木技術、又はランダム予報技術のような種々の機械学習技術を用いて学習された数学的モデルを用いて結合されて良い。
【０１０１】
本開示の範囲から逸脱することなく方法６００に対し変更、追加又は省略が行われて良い。例えば、方法６００の工程は、異なる順序で実施されて良い。追加又は代替で、２以上の工程が同時に実行されて良い。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されて良い。さらに、与えられるスコア付け技術は単なる例であり、スコア付けの任意の適切な変形が用いられて良い。
【０１０２】
図７は、本開示で説明される少なくとも一実施形態による、複合スコアを決定する例示的な方法７００のフローチャートである。方法７００は、被検査コード（例えば、図１の被検査コード１０４）に対して、任意の適切なシステム、機器、又は装置により実行されて良い。例えば、図１の修復モジュール１０６又は（例えば修復モジュールにより指示されるとき）図２のコンピューティングシステム２０２は、ソフトウェアプログラムの被検査コードの障害位置のための可能性のある修復候補（「候補メソッド呼び出し」として参照される）であり得るメソッド呼び出し（例えば、上述のような合成メソッド呼び出し）に対して方法７００に関連する工程のうちの１又は複数を実行し又は実行を指示して良い。別個のブロックとして示したが、特定の実装に依存して、方法７００のブロックのうちの１又は複数に関連するステップ及び工程は、更なるブロックに分割され、少ないブロックに結合され、又は除去されて良い。
【０１０３】
方法７００は、ブロック７０２で開始して良い。ブロック７０２で、候補メソッド呼び出しについて、戻り型関係スコアが取得されて良い。幾つかの実施形態で、戻り型関係スコアは、図５の方法５００のブロック５０２に関して上述したものと同様であって良い。追加又は代替で、戻り型関係スコアは、図５の方法５００のブロック５０２に関して上述したものと類似して、同様に、又は同じ方法で取得されて良い。上述又は他の実施形態では、戻り型関係スコアは正規化されて良い。例として、戻り型関係スコアは、図５の方法５００のブロック５０２に関して上述したものと類似して、同様に、又は同じ方法で正規化されて良い。
【０１０４】
ブロック７０４で、候補メソッド呼び出しについて平均距離スコアが取得されて良い。幾つかの実施形態では、候補メソッド呼び出しの１又は複数のオブジェクトについての距離スコアが取得されて良い。上述又は他の実施形態では、距離スコアは、候補メソッド呼び出しの全てのオブジェクトについて取得されて良く、距離スコアは、図５の方法５００のブロック５０４に関して上述したものと同様であって良い。追加又は代替で、距離スコアは、図５の方法５００のブロック５０４に関して上述したものと類似して、同様に、又は同じ方法で取得されて良い。上述又は他の実施形態では、距離スコアは正規化されて良い。例として、距離スコアは、図５の方法５００のブロック５０４に関して上述したものと類似して、同様に、又は同じ方法で正規化されて良い。
【０１０５】
追加又は代替で、幾つかの実施形態では、候補メソッド呼び出しのオブジェクトの距離スコアを平均することにより、平均距離スコアが取得されて良い。幾つかの実施形態では、平均は、加重平均であって良い。
【０１０６】
ブロック７０６で、候補メソッド呼び出しについて平均発生スコアが取得されて良い。幾つかの実施形態では、候補メソッド呼び出しの１又は複数のオブジェクトについての発生スコアが取得されて良い。上述又は他の実施形態では、発生スコアは、候補メソッド呼び出しの全てのオブジェクトについて取得されて良く、発生スコアは、図５の方法５００のブロック５０６に関して上述したものと同様であって良い。追加又は代替で、発生スコアは、図５の方法５００のブロック５０６に関して上述したものと類似して、同様に、又は同じ方法で取得されて良い。上述又は他の実施形態では、発生スコアは正規化されて良い。例として、発生スコアは、図５の方法５００のブロック５０６に関して上述したものと類似して、同様に、又は同じ方法で正規化されて良い。
【０１０７】
追加又は代替で、幾つかの実施形態では、候補メソッド呼び出しのオブジェクトの発生スコアを平均することにより、平均発生スコアが取得されて良い。幾つかの実施形態では、平均は、加重平均であって良い。
【０１０８】
ブロック７０８で、候補メソッド呼び出しについて平均コンテキストスコアが取得されて良い。幾つかの実施形態では、コンテキストスコアは、図５の方法５００の１又は複数のブロックに関して上述したものと類似して、同様に、又は同じ方法で取得されて良い。
【０１０９】
ブロック７１０で、候補メソッド呼び出しについてエラーレポートスコアが取得されて良い。幾つかの実施形態では、エラーレポートスコアは、図５の方法５００の１又は複数のブロックに関して上述したものと類似して、同様に、又は同じ方法で取得されて良い。
【０１１０】
ブロック７１２で、幾つかの実施形態では、候補メソッド呼び出しについて複合スコアが決定されて良い。幾つかの実施形態では、複合スコアは、戻り型関係スコア、平均距離スコア、平均発生スコア、コンテキストスコア、エラーレポートスコア、又はそれらの任意の適切な組み合わせに基づき又は含んで良い。幾つかの実施形態では、複合スコアは、上述のスコア種類の全部の組合せを含んで良い。追加又は代替で、複合スコアが述のスコア種類の組合せを含む例では、上述のスコア種類は正規化されて良い。追加又は代替で、幾つかの実施形態では、複合スコアは、使用される正規化されたスコアの平均を含んで良い。
【０１１１】
上述又は他の実施形態では、複合スコアは加重平均を有して良い。ここで、上述のスコア種類のうちの１又は複数は、候補メソッド呼び出しを優先順位付けすることに関して対応する因子の決定された重要度に基づき、異なる重みを与えられる。幾つかの実施形態では、特定の属性の重みは、該属性が前のパッチにどれだけ多く関連するかに依存して良い。追加又は代替で、幾つかの実施形態では、重みは、前のパッチに関連するデータに基づき決定されて良い。上述又は他の実施形態では、重みは、機械学習アルゴリズムを用いて決定されて良い。
【０１１２】
追加又は代替で、幾つかの実施形態では、コンテキストスコアに関連するスコアのうちの２以上が、一次回帰、ロジスティック回帰、決定木技術、又はランダム予報技術のような種々の機械学習技術を用いて学習された数学的モデルを用いて結合されて良い。
【０１１３】
本開示の範囲から逸脱することなく方法７００に対し変更、追加又は省略が行われて良い。例えば、方法７００の工程は、異なる順序で実施されて良い。追加又は代替で、２以上の工程が同時に実行されて良い。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されて良い。さらに、与えられるスコア付け技術は単なる例であり、スコア付けの任意の適切な変形が用いられて良い。
【０１１４】
上述のように、本開示で記載した実施形態は、以下に更に詳細に議論するように、種々のコンピュータハードウェア又はソフトウェアモジュールを備えた特定用途又は汎用コンピュータ（例えば、図２のプロセッサ２５０）の使用を含み得る。さらに、上述のように、本開示に記載の実施形態は、コンピュータ実行可能命令又はデータ構造を伝える又はそれを格納されたコンピュータ可読媒体（例えば、図２のメモリ２５２）を用いて実施されても良い。
【０１１５】
本開示で用いられるように、用語「モジュール」又は「コンポーネント」は、モジュール若しくはコンポーネントのアクションを実行するよう構成される特定ハードウェア実装、及び／又はコンピューティングシステムの汎用ハードウェア（例えばコンピュータ可読媒体、処理装置、等）に格納され及び／又はそれらにより実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを表して良い。幾つかの実施形態では、本開示に記載されたのと異なるコンポーネント、モジュール、エンジン及びサービスは、（例えば、別個のスレッドとして）コンピューティングシステムで実行されるオブジェクト又は処理として実施されて良い。本開示に記載のシステム及び方法の幾つかは概して（汎用ハードウェアに格納される及び／又はそれにより実行される）ソフトウェアで実装されるように記載されたが、専用ハードウェアの実装又はソフトウェアと専用ハードウェアの組み合わせの実装も可能であり考えられる。この説明では、「コンピュータエンティティ」は、本開示で先に定められたようにコンピューティングシステム、又はコンピューティングシステムで実行されるモジュール若しくはモジュールの組合せであって良い。
【０１１６】
本開示で及び特に添付の特許請求の範囲（例えば、添付の特許請求の範囲の本体）で使用される用語は、概して、広義の（open）用語と考えられる（例えば、用語「含む（including）」は「含むが、限定されない」と解釈されるべきであり、用語「有する（having）」は「少なくとも有する」と解釈されるべきであり、用語「含む（includes）」は「含むが、限定されない」と解釈されるべきである）。
【０１１７】
さらに、特定数の導入された請求項の引用が意図される場合、このような意図は、請求項の中に明示的に示され、このような引用が存在しない場合はこのような意図が存在しない。例えば、理解の助けとして、以下の添付の特許請求の範囲は、請求項の引用を導入するために、「少なくとも１つの」及び「１又は複数の」をいう前置語句の使用を含み得る。しかしながら、このような語句の使用は、同じ請求項が前置語句「１又は複数」又は「少なくとも１つの」及び「ａ又はａｎ」のような不定冠詞を含むときでも、不定冠詞「ａ、ａｎ」による請求項引用の導入がこのような導入された請求項引用を含む任意の特定の請求項をこのような引用を１つだけ含む実施形態に限定することを示すと考えられてはならない（例えば、「ａ」及び／又は「ａｎ」は「少なくとも１つの」又は「１又は複数の」を意味すると解釈されるべきである）。同様のことは、請求項引用を導入するために使用される定冠詞の使用についても該当する。
【０１１８】
さらに、特定数の導入された請求項引用が明示的に引用される場合、当業者は、このような引用が少なくとも引用された番号を意味することと解釈されるべきであることを認識するだろう（例えば、「２つの引用」はそのままで、他の変更が無ければ、少なくとも２つの引用、又は２以上の引用を意味する）。さらに、「Ａ、Ｂ、Ｃ、等のうちの少なくとも１つ」又は「Ａ、Ｂ、Ｃ、等のうちの１又は複数」に類似する慣例が用いられる例では、通常、このような構成は、Ａのみ、Ｂのみ、Ｃのみ、Ａ及びＢを一緒に、Ａ及びＣを一緒に、Ｂ及びＣを一緒に、又はＡ、Ｂ、Ｃを一緒に、等を含むと意図される。
【０１１９】
さらに、２以上の代替用語を表す任意の離接語又は語句は、説明、請求項、又は図面の中であるかに係わらず、用語のうちの１つ、用語のうちのいずれか、又は両方の用語を含む可能性を包含すると理解されるべきである。例えば、語句「Ａ又はＢ」は、「Ａ」又は「Ｂ」又は「Ａ及びＢ」の可能性を含むと理解されるべきである。
【０１２０】
本開示に記載された全ての例及び条件文は、教育上の目的で、読者が本開示の原理及び発明者により考案された概念を理解するのを助け、技術を促進させるためであり、これらの特に記載された例及び条件に限定されないものと考えられるべきである。本開示の実施形態が詳細に記載されたが、種々の変更、置換及び修正が本開示の精神及び範囲から逸脱することなく行われ得る。
【０１２１】
以上の実施形態に関し、さらに以下の付記を開示する。
（付記１）  ソフトウェアプログラムの複数のオブジェクト及び複数のメソッドを用いて複数の合成メソッド呼び出しを取得するステップと、
前記複数の合成メソッド呼び出しの各々の１又は複数の特性と障害位置との間の関係、前記１又は複数の特性と前記障害位置に対応するエラーレポートとの間の関係、のうちの１又は複数に基づき、前記複数の合成メソッド呼び出しの優先順位を決定するステップと、
選択される合成メソッド呼び出しの対応する優先順位に基づき、前記障害位置に関する修復操作のために前記複数の合成メソッド呼び出しから合成メソッド呼び出しを選択するステップと、
前記障害位置に関する修復操作及び前記選択された合成メソッド呼び出しを実行するステップと、
を有する方法。
（付記２）  前記選択された合成メソッド呼び出しの前記１又は複数の特性は、前記選択された合成メソッド呼び出しにより使用されるオブジェクト、前記選択された合成メソッド呼び出しの戻り型、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の位置、前記選択された合成メソッド呼び出しのメソッド名、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の名称、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の種類、前記選択された合成メソッド呼び出しの中のオブジェクトのうちの１又は複数の各々の使用の種類、及び前記選択された合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の発生回数、のうちの１又は複数を含む、付記１に記載の方法。
（付記３）  前記選択された合成メソッド呼び出しの前記特性のうちの前記１又は複数と前記障害位置との間の前記関係は、前記選択された合成メソッド呼び出しの前記戻り型と前記障害位置との間の戻り型関係、前記障害位置に関して前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の位置、前記障害位置の特定行数の範囲内で前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の発生回数、前記障害位置に対応する現在実施されているメソッド呼び出しのメソッド名との前記選択された合成メソッド呼び出しのメソッド名のセマンティック類似性、のうちの１又は複数を含む、付記２に記載の方法。
（付記４）  前記選択された合成メソッド呼び出しの前記特性のうちの前記１又は複数と前記エラーレポートとの間の前記関係は、前記選択された合成メソッド呼び出しの前記メソッド名と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、前記オブジェクトのうちの１又は複数の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の種類の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、のうちの１又は複数を含む、付記２に記載の方法。
（付記５）  前記複数の合成メソッド呼び出しを取得するステップは、
前記ソフトウェアプログラムの中の前記障害位置を識別するステップと、
前記ソフトウェアプログラムに含まれ且つ前記障害位置に対応する前記ソフトウェアプログラムの範囲内にあるオブジェクトを、前記複数のオブジェクトとして識別するステップと、
前記複数のオブジェクトを用いて前記複数の合成メソッド呼び出しを生成することにより、前記複数の合成メソッド呼び出しを取得するステップと、
を含む、付記１に記載の方法。
（付記６）  前記複数のオブジェクトからメソッドを識別するステップと、
前記識別したメソッドのメソッド署名を決定するステップと、
前記メソッド署名と互換性のある１又は複数の互換オブジェクトを識別するステップと、
前記識別したメソッド及び前記１又は複数の互換オブジェクトに基づき、１又は複数のメソッド呼び出しを生成するステップと、
を更に有する付記５に記載の方法。
（付記７）  前記複数の合成メソッド呼び出しの各々の１又は複数の特性と前記障害位置との間の関係、前記特性のうちの１又は複数と前記障害位置に対応するエラーレポートとの間の関係、のうちの１又は複数に基づき、前記複数の合成メソッド呼び出しの各々のスコアを生成するステップと、
前記メソッド呼び出しの前記スコアに基づき、前記複数の合成メソッド呼び出しの前記優先順位を決定するステップと、
を更に有する付記１に記載の方法。
（付記８）  前記メソッド呼び出しの前記スコアに基づき、前記複数の合成メソッド呼び出しの前記優先順位を決定するステップは、前記スコアが閾レベルを満たさないことに基づき、可能性のある修復候補から前記複数の合成メソッド呼び出しのうちの１又は複数を除去するステップを含む、付記７に記載の方法。
（付記９）  前記閾レベルは、エラー修正操作のために利用可能な時間及び利用可能な計算リソースに基づく、付記８に記載の方法。
（付記１０）  少なくとも１つの非一時的コンピュータ可読媒体が、少なくとも１つのプロセッサにより実行されることに応答してシステムに付記１に記載の方法を実行させる１又は複数の命令を格納するよう構成される、付記１に記載の方法。
（付記１１）  ソフトウェアプログラムの中の障害位置を識別するステップと、
第１合成メソッド呼び出しの１又は複数の第１特性と前記障害位置との間の１又は複数の関係、前記第１特性のうちの１又は複数と前記障害位置に対応するエラーレポートとの間の１又は複数の関係、のうちの１又は複数に基づき、前記第１合成メソッド呼び出しの第１スコアを生成するステップと、
第２合成メソッド呼び出しの１又は複数の第２特性と前記障害位置との間の１又は複数の関係、前記第２特性のうちの１又は複数と前記障害位置に対応するエラーレポートとの間の１又は複数の関係、のうちの１又は複数に基づき、前記第２合成メソッド呼び出しの第２スコアを生成するステップと、
前記第１スコア及び前記第２スコアに基づき、前記第１合成メソッド呼び出しの前記第２合成メソッド呼び出しに対する優先順位を決定するステップと、
前記第１合成メソッド呼び出しの前記第２合成メソッド呼び出しに対する前記優先順位に基づき、前記障害位置に関する修復操作のために前記第１合成メソッド呼び出しを選択するステップと、
前記障害位置に関する修復操作及び前記第１合成メソッド呼び出しを実行するステップと、
を有する方法。
（付記１２）  前記第１合成メソッド呼び出しの前記１又は複数の第１特性は、前記第１合成メソッド呼び出しにより使用されるオブジェクト、前記第１合成メソッド呼び出しの戻り型、前記第１合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の位置、前記第１合成メソッド呼び出しのメソッド名、前記第１合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の名称、前記第１合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の種類、前記第１合成メソッド呼び出しの中のオブジェクトのうちの１又は複数の各々の使用の種類、及び前記第１合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の発生回数、のうちの１又は複数を含む、付記１１に記載の方法。
（付記１３）  前記第１スコアを決定するステップは、
前記第１合成メソッド呼び出しの前記戻り型と前記障害位置との間の戻り型関係スコアを決定するステップと、
前記障害位置に対する前記第１合成メソッド呼び出しの前記オブジェクトのうちの１又は複数の各々の位置に基づく距離スコアを決定するステップと、
前記障害位置の特定行数の範囲内における、前記第１合成メソッド呼び出しの前記オブジェクトのうちの１又は複数の発生回数を決定するステップと、
前記第１合成メソッド呼び出しのメソッド名と前記障害位置に対応する現在実施されているメソッド呼び出しのメソッド名との間のセマンティック類似性を決定するステップと、
前記対応するメソッド呼び出しの前記メソッド名と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性を決定するステップと、
前記第１合成メソッド呼び出しの前記オブジェクトのうちの１又は複数の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性を決定するステップと、
前記第１合成メソッド呼び出しの前記オブジェクトのうちの１又は複数の種類の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性を決定するステップと、
のうちの１又は複数を実行するステップを含む、付記１２に記載の方法。
（付記１４）  前記ソフトウェアプログラムに含まれ且つ前記障害位置に対応する前記ソフトウェアプログラムの範囲内にある、複数のオブジェクトを識別するステップと、
前記障害位置に対応する前記ソフトウェアプログラムの範囲内にある、前記ソフトウェアプログラムの複数のメソッドを識別するステップと、
前記複数のオブジェクト及び前記複数のメソッドを用いて複数の合成メソッド呼び出しを生成するステップであって、前記複数の合成メソッド呼び出しは、前記第１合成メソッド呼び出し及び前記第２合成メソッド呼び出しを含む、ステップと、
を更に有する付記１１に記載の方法。
（付記１５）  少なくとも１つの非一時的コンピュータ可読媒体が、少なくとも１つのプロセッサにより実行されることに応答してシステムに付記１１に記載の方法を実行させる１又は複数の命令を格納するよう構成される、付記１１に記載の方法。
（付記１６）  ソフトウェアプログラムの中の障害位置を識別するステップと、
複数の合成メソッド呼び出しの各々の１又は複数の特性と前記障害位置との間の１又は複数の関係に基づき、前記複数の合成メソッド呼び出しの各々のコンテキストスコアを生成するステップと、
前記特性のうちの１又は複数と前記障害位置に対応するエラーレポートとの間の１又は複数の関係に基づき、前記複数の合成メソッド呼び出しの各々のエラーレポートスコアを決定するステップと、
前記複数の合成メソッド呼び出しの各々の前記コンテキストスコア及び前記エラーレポートスコアに基づき、前記複数の合成メソッド呼び出しの優先順位を決定するステップと、
選択される合成メソッド呼び出しの対応する優先順位に基づき、前記障害位置に対する修復操作のために、前記複数の合成メソッド呼び出しから合成メソッド呼び出しを選択するステップと、
前記障害位置に対する修復操作及び前記選択された合成メソッド呼び出しを実行するステップと、
を有する方法。
（付記１７）  前記選択された合成メソッド呼び出しの前記１又は複数の特性は、前記選択された合成メソッド呼び出しにより使用されるオブジェクト、前記選択された合成メソッド呼び出しの戻り型、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の位置、前記選択された合成メソッド呼び出しのメソッド名、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の名称、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の種類、前記選択された合成メソッド呼び出しの中のオブジェクトのうちの１又は複数の各々の使用の種類、及び前記選択された合成メソッド呼び出しにより使用されるオブジェクトのうちの１又は複数の各々の発生回数、のうちの１又は複数を含む、付記１６に記載の方法。
（付記１８）  前記選択された合成メソッド呼び出しの前記特性のうちの前記１又は複数と前記障害位置との間の前記関係は、前記選択された合成メソッド呼び出しの前記戻り型と前記障害位置との間の戻り型関係、前記障害位置に関して前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の各々の位置、前記障害位置の特定数の行の範囲内で前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の発生回数、前記障害位置に対応する現在実施されているメソッド呼び出しのメソッド名との前記選択された合成メソッド呼び出しのメソッド名のセマンティック類似性、のうちの１又は複数を含む、付記１７に記載の方法。
（付記１９）  前記選択された合成メソッド呼び出しの前記特性のうちの前記１又は複数と前記エラーレポートとの間の前記関係は、前記選択された合成メソッド呼び出しの前記メソッド名と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、前記オブジェクトのうちの１又は複数の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、前記選択された合成メソッド呼び出しにより使用される前記オブジェクトのうちの１又は複数の種類の名称と前記エラーレポートに含まれる１又は複数のワードとの間のセマンティック類似性、のうちの１又は複数を含む、付記１７に記載の方法。
（付記２０）  少なくとも１つの非一時的コンピュータ可読媒体が、少なくとも１つのプロセッサにより実行されることに応答してシステムに付記１６に記載の方法を実行させる１又は複数の命令を格納するよう構成される、付記１６に記載の方法。
【符号の説明】
【０１２２】
１００  環境
１０４  被検査コード
１０６  修復モジュール
１０８  変更被検査コード
２０２  コンピューティングシステム
２５０  プロセッサ
２５２  メモリ
２５４  データ記憶装置
【図１】
2018133081.tif 000003
【図２】
2018133081.tif 000004
【図３】
2018133081.tif 000005
【図４】
2018133081.tif 000006
【図５】
2018133081.tif 000007
【図６】
2018133081.tif 000008
【図７】
2018133081.tif 000009