(57)【要約】【課題】ソフトウェアプログラム内のフォールト位置を特定する方法及びシステムを提供すること。【解決手段】一実施形態の一態様に従うと、方法は、ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うことを含み得る。本方法は、複数のテスト実行のうちの合格テスト及び失敗テストを特定することをさらに含み得る。本方法は、各ステートメントの集約スコアを、合格テスト及び失敗テスト；ステートメントに含まれるステートメントトークンとエラーレポートに含まれるレポートトークンとの間の意味類似度；ステートメントが変更を受けたときから経過した時間；のうちの２つ以上に基づいて決定することをさらに含み得る。本方法は、複数のステートメントの集約スコアに基づいて、複数のステートメントのうちの特定のステートメントを、テスト対象コード内のフォールト位置として特定することをさらに含み得る。【選択図】図７
2019021303.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うステップと、
前記複数のテスト実行のうちの１つ以上の合格テストを特定するステップと、
前記複数のテスト実行のうちの１つ以上の失敗テストを特定するステップと、
前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用に基づいて決定するステップと、
前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる１つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる１つ以上のレポートトークンと、の間の意味類似度に基づいて決定するステップと、
前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した時間に基づいて決定するステップと、
前記複数のステートメントの各ステートメントの集約スコアを、当該ステートメントの前記疑いスコア、前記意味類似度スコア、及び前記変更スコアに基づいて決定するステップと、
前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定するステップと、
を含む方法。
【請求項２】
前記複数のステートメントの各ステートメントの前記疑いスコアは、前記複数のステートメントの各ステートメントがフォールトを有する可能性があることを示す疑い閾値を満たし、
前記方法は、
前記テスト対象コードに含まれ、前記複数のステートメントには含まれない１つ以上の他のステートメントの各ステートメントの疑いスコアを決定するステップであって、前記１つ以上の他のステートメントの各ステートメントの前記疑いスコアは、前記疑い閾値を満たさない、ステップと、
前記複数のステートメントの各ステートメントの前記疑いスコアが前記疑い閾値を満たすことと、前記１つ以上の他のステートメントの各ステートメントの前記疑いスコアが前記疑い閾値を満たさないことと、に基づいて、前記１つ以上の他のステートメントではなく、前記複数のステートメントの各ステートメントの前記意味類似度スコア及び前記変更スコアを決定するステップと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記の特定されたフォールト位置に基づいて、修復動作を実行するステップをさらに含む、請求項１に記載の方法。
【請求項４】
前記複数のステートメントを、前記複数のステートメントのそれぞれの前記集約スコアに基づいてランク付けするステップと、
前記特定のステートメントを、前記特定のステートメントのランクに基づいて、前記フォールト位置として特定するステップと、
をさらに含む、請求項１に記載の方法。
【請求項５】
前記特定のステートメントを、前記複数のステートメントのうちの他のステートメントの他の前記集約スコアと比較した前記特定のステートメントの前記集約スコアに基づいて、前記フォールト位置として特定するステップをさらに含む、請求項１に記載の方法。
【請求項６】
変更が生じたときから経過した前記時間を線形的に重み付けする時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、請求項１に記載の方法。
【請求項７】
変更が生じたときから経過した前記時間を非線形的に重み付けする時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、請求項１に記載の方法。
【請求項８】
前記意味類似度スコアを決定することは、
前記ステートメント及び前記エラーレポートに含まれる１つ以上の連結されたトークンの各連結されたトークンを、複数の連結されていないトークンに分割することと、
前記連結されていないトークンに基づいて、前記意味類似度スコアを決定することと、
を含む、請求項１に記載の方法。
【請求項９】
前記集約スコアを決定する際に、前記疑いスコア、前記意味類似度スコア、及び前記変更スコアを、以前に決定された集約スコアに基づくフォールト位置選択の機械学習解析に基づいて重み付けするステップをさらに含む、請求項１に記載の方法。
【請求項１０】
少なくとも１つの非一時的なコンピュータ読み取り可能な媒体は、１つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも１つのプロセッサにより実行されたことに応じて、システムに請求項１に記載の方法を実行させる、請求項１に記載の方法。
【請求項１１】
ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うステップと、
前記複数のテスト実行のうちの１つ以上の合格テストを特定するステップと、
前記複数のテスト実行のうちの１つ以上の失敗テストを特定するステップと、
前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの集約スコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用；当該ステートメントに含まれる１つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる１つ以上のレポートトークンと、の間の意味類似度；及び、当該ステートメントが変更を受けたときから経過した時間；のうちの２つ以上に基づいて決定するステップと、
前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定するステップと、
を含む方法。
【請求項１２】
前記ソフトウェアプログラムの前記テスト対象コードの前記複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの前記使用及び前記不使用に基づいて決定するステップと、
前記疑いスコアに基づいて、前記集約スコアを決定するステップと、
をさらに含む、請求項１１に記載の方法。
【請求項１３】
前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる前記１つ以上のステートメントトークンと、前記エラーレポートに含まれる前記１つ以上のレポートトークンと、の間の前記意味類似度に基づいて決定するステップと、
前記意味類似度スコアに基づいて、前記集約スコアを決定するステップと、
をさらに含む、請求項１１に記載の方法。
【請求項１４】
前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した前記時間に基づいて決定するステップと、
前記変更スコアに基づいて、前記集約スコアを決定するステップと、
をさらに含む、請求項１１に記載の方法。
【請求項１５】
変更が生じたときから経過した前記時間を線形的に重み付けする線形時間減衰モデル、又は、変更が生じたときから経過した前記時間を非線形的に重み付けする非線形時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、請求項１４に記載の方法。
【請求項１６】
前記の特定されたフォールト位置に基づいて、修復動作を実行するステップをさらに含む、請求項１１に記載の方法。
【請求項１７】
前記特定のステートメントを、前記複数のステートメントのうちの他のステートメントの他の前記集約スコアと比較した前記特定のステートメントの前記集約スコアに基づいて、前記フォールト位置として特定するステップをさらに含む、請求項１１に記載の方法。
【請求項１８】
少なくとも１つの非一時的なコンピュータ読み取り可能な媒体は、１つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも１つのプロセッサにより実行されたことに応じて、システムに請求項１１に記載の方法を実行させる、請求項１１に記載の方法。
【請求項１９】
システムであって、
命令を記憶している１つ以上のコンピュータ読み取り可能な記憶媒体と、
前記１つ以上のコンピュータ読み取り可能な記憶媒体に通信可能に接続され、前記命令の実行に応じて、前記システムに動作を実行させるよう構成されている１つ以上のプロセッサであって、前記動作は、
ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うことと、
前記複数のテスト実行のうちの１つ以上の合格テストを特定することと、
前記複数のテスト実行のうちの１つ以上の失敗テストを特定することと、
前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの集約スコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用；当該ステートメントに含まれる１つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる１つ以上のレポートトークンと、の間の意味類似度；及び、当該ステートメントが変更を受けたときから経過した時間；のうちの２つ以上に基づいて決定することと、
前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定することと、
を含む、１つ以上のプロセッサと、
を有するシステム。
【請求項２０】
前記動作は、
前記ソフトウェアプログラムの前記テスト対象コードの前記複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの前記使用及び前記不使用に基づいて決定することと、
前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる前記１つ以上のステートメントトークンと、前記エラーレポートに含まれる前記１つ以上のレポートトークンと、の間の前記意味類似度に基づいて決定することと、
前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した前記時間に基づいて決定することと、
前記複数のステートメントの各ステートメントの前記集約スコアを、当該ステートメントの前記疑いスコア、前記意味類似度スコア、及び前記変更スコアに基づいて決定することと、
をさらに含む、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示に記載の実施形態は、ソフトウェアプログラムフォールト位置特定に関する。
【背景技術】
【０００２】
ソフトウェアプログラムは、ソフトウェアプログラム内にフォールト（一般に「バグ」と呼ばれる）を有することがしばしばあり、それにより、ソフトウェアプログラムは、意図されるように動作しないことがある。ソフトウェアプログラム内のフォールトを特定して修正するように試みる自動修復システムが、しばしば使用される。
【０００３】
本開示において特許請求される主題は、あらゆる欠点を解決する実施形態又は上記のような環境においてのみ動作する実施形態に限定されるものではない。そうではなく、この背景技術の記載は、本開示に記載のいくつかの実施形態が実施され得る１つの例示的な技術領域を示すために提供されているに過ぎない。
【発明の概要】
【０００４】
一実施形態の一態様に従うと、方法は、ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うステップを含み得る。本方法は、前記複数のテスト実行のうちの１つ以上の合格テストを特定するステップと、前記複数のテスト実行のうちの１つ以上の失敗テストを特定するステップと、をさらに含み得る。加えて、本方法は、前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの集約スコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用；当該ステートメントに含まれる１つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる１つ以上のレポートトークンと、の間の意味類似度；及び、当該ステートメントが変更を受けたときから経過した時間；のうちの２つ以上に基づいて決定するステップを含み得る。加えて、本方法は、前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定するステップを含み得る。
【０００５】
実施形態の目的及び利点が、少なくとも請求項において特に示される要素、特徴、及び組合せにより、実現及び達成される。
【０００６】
前述の総括的な説明及び以下の詳細な説明の両方ともが、例として与えられ、説明的なものであり、特許請求される発明を限定するものではない。
【図面の簡単な説明】
【０００７】
例示的な実施形態が、添付の図面を使用して、より具体的且つ詳細に記載及び説明される。
【図１】ソフトウェアプログラム内のフォールトを位置特定することに関連する例示的な環境を示す図。
【図２】ソフトウェアプログラム内のフォールトを位置特定するよう構成され得る例示的なコンピューティングシステムを示す図。
【図３】ソフトウェアプログラム内のフォールト位置を特定する例示的な方法のフローチャート。
【図４】ソフトウェアプログラム内のフォールト位置を特定するために使用され得る、ソフトウェアプログラムのステートメントの疑いスコアを決定する例示的な方法のフローチャート。
【図５】ソフトウェアプログラム内のフォールト位置を特定するために使用され得る、ソフトウェアプログラムのステートメントの意味類似度スコアを決定する例示的な方法のフローチャート。
【図６】ソフトウェアプログラム内のフォールト位置を特定するために使用され得る、ソフトウェアプログラムのステートメントの変更スコアを決定する例示的な方法のフローチャート。
【図７】ソフトウェアプログラム内のフォールト位置を特定するために使用され得る、ソフトウェアプログラムのステートメントの集約スコアを決定する例示的な方法のフローチャート。
【発明を実施するための形態】
【０００８】
本開示に記載のいくつかの実施形態は、ソフトウェアプログラム内のフォールト位置を特定する方法及びシステムに関する。いくつかの実施形態において、フォールト位置特定を用いて、ソフトウェアプログラムを修復することができる。ソフトウェアプログラムは、ソフトウェアプログラムを意図しない形で挙動させるおそれがあるフォールト（一般に「バグ」とも呼ばれる）をしばしば含む。さらに、自動修復システム及び技術が、フォールトを検出、位置特定、及び修正してソフトウェアプログラムを修復するために、しばしば使用される。本開示において、「フォールト位置」とは、ソフトウェアプログラムを意図しない形で動作させるおそれがある１つ以上のコード行（「ステートメント」とも呼ばれる）を指し得る。さらに、「フォールト位置特定」又は「フォールトを位置特定すること」とは、ソフトウェアプログラム内のそのようなステートメント及びそのようなステートメントのそれぞれの位置を特定することを指し得る。
【０００９】
本開示に記載の１つ以上の実施形態に従うと、ソフトウェアプログラム内の１つ以上のフォールト位置は、フォールト位置特定のために使用される他の技術と比べて、フォールト位置をより正確に特定することができるやり方で特定され得る。詳細には、複数のテストが、ソフトウェアプログラムのテスト対象コードに対して実行され得る。これらのテストの結果に基づいて、疑い（suspicion）スコアが、テスト対象コードの各ステートメントについて決定され得る。以下でさらに説明されるように、特定のステートメントの疑いスコアは、ソフトウェアプログラムの合格テスト実行及び失敗テスト実行における特定のステートメントの使用又は不使用に基づき得る。加えて、意味類似度スコアが、テスト対象コードのステートメントのうちの１つ以上のステートメントについて決定され得る。意味類似度スコアは、それぞれのステートメントに含まれるステートメントトークンとエラーレポートに含まれる１つ以上のレポートトークンとの間の意味類似度に基づいて決定され得る。本開示において、「ステートメントトークン」という言及は、ソフトウェアプログラムのオブジェクト（例えば、変数、メソッド、クラス等）を指定するためにステートメント内で使用され得る任意の一連の文字又は単語を含み得る。さらに、本開示において、「レポートトークン」という言及は、エラーレポートに含まれ得る任意の一連の文字又は単語を含み得る。これらの実施形態又は他の実施形態において、変更スコアがまた、テスト対象コードの１つ以上のステートメントについて決定され得る。変更スコアは、それぞれのステートメントが変更を受けたときから経過した時間に基づき得る。これらの実施形態又は他の実施形態において、集約スコアが、各ステートメントのそれぞれの疑いスコア、意味類似度スコア、及び変更スコアに基づいて、各ステートメントについて決定され得る。
【００１０】
追加的又は代替的に、集約スコアを使用して、フォールト位置を特定することができる。例えば、いくつかの実施形態において、ステートメントは、ステートメントのそれぞれの集約スコアに基づいて、可能性のあるフォールト位置として、優先順位付けされ得る。本開示において、「ステートメントを優先順位付けする」ことという言及は、より高い優先順位（例えば、より高いランク）を有するステートメントが、より低い優先順位（例えば、より低いランク）を有するステートメントよりも優先して、フォールト位置として特定され得るように、ステートメントをランク付けすることを含み得る。追加的又は代替的に、ステートメントを優先順位付けすることは、（例えば、ステートメントのそれぞれの集約スコアにより示されるように）フォールト位置である可能性をほとんど又は全く有しないものであり得るステートメントを破棄又は除去することを含んでもよい。
【００１１】
例えば、いくつかの実施形態において、集約スコアが高いほど、対応するステートメントがフォールトに該当する可能性が高くなり得る。これらの実施形態又は他の実施形態において、最も高い集約スコアを有する特定のステートメントが、これに応じてランク付けされ、フォールト位置として特定され得る。いくつかの例において、この特定のステートメントが、フォールト位置として特定され得、さらなるテストにより、この特定のステートメントが実際にはフォールト位置ではないと示されることがあることに留意されたい。したがって、「ステートメントをフォールト位置として特定する」ことという言及は、そのようなステートメントについて、さらなる検査により正しいか又は正しくないかを示し得る判定を行うことを含み得る。
【００１２】
本開示の実施形態が、添付の図面を参照して説明される。
【００１３】
図１は、本開示に記載の少なくとも１つの実施形態に従って構成される、ソフトウェアプログラム内のフォールトを位置特定することに関連する例示的な環境１００を示す図である。追加的又は代替的に、いくつかの実施形態において、環境１００は、位置特定されたフォールトに基づいて、修復動作を実行することに関連してもよい。環境１００は、フォールトについてテスト対象コード１０４を解析し、フォールトについての解析に基づいて、フォールト位置１１２を特定するよう構成されているフォールト位置特定モジュール１０２を含み得る。いくつかの実施形態において、環境１００は、位置特定されたフォールト１１２を受け取るよう構成されている修復モジュール１０６を含み得る。いくつかの実施形態において、修復モジュール１０６は、変更されたテスト対象コード１０８を出力するよう構成され得、変更されたテスト対象コード１０８は、フォールト位置１１２について修復モジュール１０６により実行された修復動作によりテスト対象コード１０４に対して行われた１つ以上の変更を含み得る。
【００１４】
テスト対象コード１０４は、例えば、処理デバイスにより実行される、ソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は、他のロジック若しくは命令等の電子データを含み得る。いくつかの実施形態において、テスト対象コード１０４は、複数のコード行を含み得、ここで、各コード行は、本開示において、ステートメントと呼ばれることがある。いくつかの実施形態において、テスト対象コード１０４は、ソフトウェアプログラムの完全なインスタンスを含み得る。追加的又は代替的に、テスト対象コード１０４は、ソフトウェアプログラムの一部を含んでもよい。テスト対象コード１０４は、ソフトウェアプログラムのために使用され得る任意の適切なタイプのコンピュータ言語で記述され得る。
【００１５】
フォールト位置特定モジュール１０２は、テスト対象コード内のフォールトを特定し、フォールト位置１１２を出力するよう構成されているコード及びルーチンを含み得る。追加的又は代替的に、フォールト位置特定モジュール１０２は、（例えば、１つ以上の動作を実行する又は１つ以上の動作の実行を制御する）プロセッサ、（例えば、１つ以上の動作を実行する又は１つ以上の動作の実行を制御する）マイクロプロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は特定用途向け集積回路（ＡＳＩＣ）を含むハードウェアを使用して実装されてもよい。いくつかの他の例において、フォールト位置特定モジュール１０２は、ハードウェアとソフトウェアとの組合せを使用して実装されてもよい。本開示において、フォールト位置特定モジュール１０２により実行されるとして説明される動作は、対応するシステムに実行するようにフォールト位置特定モジュール１０２が命令し得る動作を含み得る。
【００１６】
フォールト位置特定モジュール１０２は、テスト対象コード１０４内の１つ以上のフォールトを特定するために用いられ得る一連のテスト動作をテスト対象コード１０４に対して実行するよう構成され得る。いくつかの実施形態において、フォールト位置特定モジュール１０２は、１つ以上のテストスイートに基づいて、テスト動作のうちの１つ以上のテスト動作を実行するよう構成され得る。
【００１７】
例えば、フォールト位置特定モジュール１０２は、テスト対象コード１０４に対して１つ以上のテストスイートを適用するよう構成され得る。いくつかの実施形態において、フォールト位置特定モジュール１０２は、テストスイートに含まれる１つ以上のテストを実行するよう構成され得、このようなテストを実行することは、テスト実行を行うと呼ばれることがある。合格したテスト実行は、「合格テスト実行」と呼ばれることがあり、失敗したテスト実行は、「失敗テスト実行」と呼ばれることがある。
【００１８】
いくつかの実施形態において、フォールト位置特定モジュール１０２は、合格テスト実行及び失敗テスト実行に基づいて、テストスペクトル（spectrum）を生成するよう構成され得る。テストスペクトルは、テスト対象コード１０４のどのステートメントが、合格テスト実行及び失敗テスト実行の各テスト実行において関与したか又は合格テスト実行及び失敗テスト実行の各テスト実行中に実行されたかについてのインジケーションを含み得る。いくつかの実施形態において、テスト対象コード１０４は、テスト実行を行う前にインストルメントされ得る。インストルメントは、テスト実行中に実行されるステートメントが追跡されるように、コードをテスト対象コード１０４に付加し得る。したがって、テストスペクトルは、どのステートメントが合格テスト実行及び失敗テスト実行に関与するかの特定とそれによる対応する指示とに基づくインストルメントに基づいて、生成され得る。
【００１９】
いくつかの実施形態において、フォールト位置特定モジュール１０２は、テスト対象コード１０４に含まれる複数のステートメントの各ステートメントについて疑いスコアを決定するよう構成され得る。いくつかの実施形態において、フォールト位置特定モジュール１０２は、テスト対象コード１０４に含まれる各ステートメントについて疑いスコアを決定するよう構成され得る。追加的又は代替的に、上記複数のステートメントは、テスト対象コード１０４に含まれるステートメントのサブセットであることもある。
【００２０】
これらの実施形態又は他の実施形態において、フォールト位置特定モジュール１０２は、テストスペクトルに基づいて、疑いスコアを決定するよう構成され得る。例えば、フォールト位置特定モジュール１０２は、特定のステートメントが実行又は使用されたテスト実行を判別することができる。失敗テスト実行と比較して合格テスト実行において特定のステートメントがどれくらいの回数使用又は実行されるか、又は、特定のステートメントが合格テスト実行又は失敗テスト実行において全く使用されないか、の関係は、特定のステートメントが、フォールトを含み、したがって、フォールト位置である可能性がどれくらいであるか、を示し得る。したがって、いくつかの実施形態において、特定のステートメントの疑いスコアは、疑いスコアが、合格テスト実行及び失敗テスト実行に対する特定のステートメントの使用の関係に基づいて、特定のステートメントがフォールトを含む可能性を示し得るように、合格テスト実行及び失敗テスト実行における特定のステートメントの使用又は不使用に基づき得る。いくつかの実施形態において、疑いスコアは、図４の方法４００を参照して以下で説明される１つ以上の動作に従って決定され得る。
【００２１】
いくつかの実施形態において、フォールト位置特定モジュール１０２は、テスト対象コード１０４に含まれる１つ以上のステートメントの各ステートメントについて意味類似度スコアを決定するよう構成され得る。いくつかの実施形態において、フォールト位置特定モジュール１０２は、テスト対象コード１０４に含まれる各ステートメントについて意味類似度スコアを決定するよう構成され得る。追加的又は代替的に、いくつかの実施形態において、フォールト位置特定モジュール１０２は、テスト対象コード１０４に含まれるステートメントのサブセットの各ステートメントについて意味類似度スコアを決定するよう構成されることもある。
【００２２】
いくつかの実施形態において、意味類似度スコアが決定され得るステートメントのサブセットは、ステートメントの疑いスコアに基づいて決定され得る。例えば、いくつかの実施形態において、フォールト位置特定モジュール１０２は、閾レベル（「疑い閾値」）を満たさない疑いスコアを有するステートメントを特定することができる。疑い閾値は、ステートメントがフォールトを有する可能性があることを示し得る。これらの実施形態又は他の実施形態において、フォールト位置特定モジュール１０２は、疑い閾値を満たさない疑いスコアを有するステートメントについては意味類似度スコアを決定しないよう構成され得る。いくつかの実施形態において、疑い閾値は、疑いスコアと実際のフォールト位置との間の関係の実証分析に基づいて決定され得る。例えば、いくつかの例において、実証分析は、「０」という疑いスコアを有するステートメントが、フォールトを含む可能性をほとんど又は全く有しないものであり得ることを示し得、その結果、「０」という疑いスコアを有する全てのステートメントが疑い閾値を満たさないとみなされ得、したがって、それらの意味類似度スコアが決定され得ないように、疑い閾値が設定され得る。
【００２３】
いくつかの例において、特定のステートメントに含まれるトークンとエラーレポートに含まれるトークンとの間の意味類似度が、特定のステートメントが、フォールトを含み、したがって、フォールト位置である可能性を示し得る。例えば、特定のステートメントとエラーレポートとの間に共通のトークンが多く存在するほど、特定のステートメントがフォールトを含む可能性が高くなり得る。いくつかの実施形態において、意味類似度スコアは、それぞれのステートメントのステートメントトークンと、テスト対象コード１０４について生成され得るエラーレポートのレポートトークンと、の間の意味類似度に基づき得る。追加的又は代替的に、意味類似度スコアは、それぞれのステートメントトークンとレポートトークンとの間の類似度に基づいて、それぞれのステートメントがフォールトを含む可能性を示すように決定されることもある。いくつかの実施形態において、フォールト位置特定モジュール１０２は、図５を参照して以下で説明される方法５００の１つ以上の動作に従って、意味類似度スコアを決定するよう構成され得る。
【００２４】
いくつかの実施形態において、フォールト位置特定モジュール１０２は、テスト対象コード１０４に含まれる１つ以上のステートメントの各ステートメントについて変更スコアを決定するよう構成され得る。いくつかの実施形態において、フォールト位置特定モジュール１０２は、テスト対象コード１０４に含まれる各ステートメントについて変更スコアを決定するよう構成され得る。追加的又は代替的に、いくつかの実施形態において、フォールト位置特定モジュール１０２は、テスト対象コード１０４に含まれるステートメントのサブセットの各ステートメントについて変更スコアを決定するよう構成されることもある。
【００２５】
いくつかの実施形態において、変更スコアが決定され得るステートメントのサブセットは、ステートメントの疑いスコアに基づいて決定され得る。例えば、いくつかの実施形態において、変更スコアは、疑い閾値を満たす疑いスコアを有するステートメントについて決定され得る。
【００２６】
いくつかの例において、特定のステートメントが変更を受けたときから経過した時間が、特定のステートメントが、フォールトを含み、したがって、フォールト位置である可能性を示し得る。例えば、特定のステートメントが変更を受けたのが最近であるほど、特定のステートメントがフォールトを含む可能性が高くなり得る。いくつかの実施形態において、変更スコアは、それぞれのステートメントが変更を受けたときから経過した時間に基づき得る。追加的又は代替的に、変更スコアは、経過した時間に基づいて、それぞれのステートメントがフォールトを含む可能性を示すように決定されることもある。いくつかの実施形態において、フォールト位置特定モジュール１０２は、図６を参照して以下で説明される方法６００の１つ以上の動作に従って、変更スコアを決定するよう構成され得る。
【００２７】
いくつかの実施形態において、フォールト位置特定モジュール１０２は、疑いスコア、意味類似度スコア、及び／又は変更スコアを有するステートメントの各ステートメントについて集約スコアを決定するよう構成され得る。特定のステートメントの集約スコアは、特定のステートメントのそれぞれの疑いスコア、意味類似度スコア、及び／又は変更スコアに基づき得る。例えば、いくつかの実施形態において、集約スコアは、それぞれの疑いスコア及びそれぞれの意味類似度スコアに基づき得る。追加的又は代替的に、集約スコアは、それぞれの疑いスコア及びそれぞれの変更スコアに基づくこともある。これらの実施形態又は他の実施形態において、集約スコアは、それぞれの変更スコア及びそれぞれの意味類似度スコアに基づき得る。追加的又は代替的に、集約スコアは、それぞれの疑いスコア、それぞれの意味類似度スコア、及びそれぞれの変更スコアに基づくこともある。いくつかの実施形態において、フォールト位置特定モジュール１０２は、図７を参照して以下で説明される方法７００の１つ以上の動作に従って、集約スコアを決定するよう構成され得る。
【００２８】
いくつかの実施形態において、フォールト位置特定モジュール１０２は、ステートメントの集約スコアに基づいて、テスト対象コード１０４内の１つ以上のフォールト位置を特定するよう構成され得る。例えば、上記で示されたように、いくつかの実施形態において、フォールト位置特定モジュール１０２は、フォールト位置として特定されるステートメントを、ステートメントの集約スコアに基づいて優先順位付けするよう構成され得る。例えば、いくつかの実施形態において、フォールト位置特定モジュール１０２は、集約スコアに応じた優先順位付けに基づいて、特定のステートメントを、他のステートメントよりも優先して、フォールト位置として特定するよう構成され得る。
【００２９】
いくつかの実施形態において、フォールト位置特定モジュール１０２は、特定されたフォールト位置を、フォールト位置１１２として出力するよう構成され得る。追加的又は代替的に、フォールト位置特定モジュール１０２は、上述したスコアのうちの１つ以上のスコアに応じて優先順位付けされた全てのステートメントのリストを、フォールト位置１１２として出力するよう構成されてもよい。
【００３０】
修復モジュール１０６は、コンピューティングデバイスが、テスト対象コード１０４の１つ以上の変更を実行して変更されたテスト対象コード１０８を生成することを可能にするよう構成されているコード及びルーチンを含み得る。追加的又は代替的に、修復モジュール１０６は、（例えば、１つ以上の動作を実行する又は１つ以上の動作の実行を制御する）プロセッサ、（例えば、１つ以上の動作を実行する又は１つ以上の動作の実行を制御する）マイクロプロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は特定用途向け集積回路（ＡＳＩＣ）を含むハードウェアを使用して実装されてもよい。いくつかの他の例において、修復モジュール１０６は、ハードウェアとソフトウェアとの組合せを使用して実装されてもよい。本開示において、修復モジュール１０６により実行されるとして説明される動作は、対応するシステムに実行するように修復モジュール１０６が命令し得る動作を含み得る。
【００３１】
修復モジュール１０６は、テスト対象コード１０４内の１つ以上のフォールトを修復（修正とも呼ばれる）するために用いられ得る一連の修復動作を、テスト対象コード１０４に対して実行するよう構成され得る。いくつかの実施形態において、修復モジュール１０６は、修復テンプレートに基づいて、修復動作を実行するよう構成され得る。
【００３２】
いくつかの実施形態において、修復モジュール１０６は、フォールト位置１１２に含まれる１つ以上のフォールト位置に対して、修復動作のうちの１つ以上の修復動作を実行するよう構成され得る。修復動作は、特定のステートメントに含まれ得るフォールトを修復し得る、特定のステートメントに対する何らかの変更を含み得る。いくつかの実施形態において、変更は、何らかの適用可能な修復テンプレートに従ってなされ得る。フォールト位置として特定されたステートメントに対する変更は、本開示において、パッチと呼ばれることがある。いくつかの実施形態において、修復モジュール１０６は、フォールト位置１１２のうちの１つ以上のフォールト位置に対して実装され得る１つ以上のパッチを含み得る変更されたテスト対象コード１０８を出力するよう構成され得る。
【００３３】
本開示の範囲から逸脱することなく、図１に対して、変更、追加、又は省略が可能である。例えば、環境１００は、本開示において図示及び説明された要素よりも多い又は少ない要素を含んでもよい。例えば、いくつかの実施形態において、フォールト位置特定モジュール１０２、修復モジュール１０６、テストスイート、及び修復テンプレートの１つ以上のルーチン、１つ以上の命令、又はコードの少なくとも一部は、組み合わされてもよいし、分離されてもよい。いくつかの実施形態において、動作は、上述した順序とは異なる順序で実行されることがある。
【００３４】
さらに、いくつかの実施形態において、フォールト位置１１２は、環境１００の外部で使用されることがある。これらの実施形態又は他の実施形態において、環境１００は、修復モジュール１０６を含まず、フォールト位置特定モジュール１０２を含み得る。
【００３５】
図２は、本開示の少なくとも１つの実施形態に従った例示的なコンピューティングシステム２０２のブロック図を示している。コンピューティングシステム２０２は、フォールト位置特定モジュール及び／又は修復モジュール（例えば、図１のフォールト位置特定モジュール１０２及び／又は修復モジュール１０６）に関連付けられている１つ以上の動作を実施又は指示するよう構成され得る。コンピューティングシステム２０２は、プロセッサ２５０、メモリ２５２、及びデータストレージ２５４を含み得る。プロセッサ２５０、メモリ２５２、及びデータストレージ２５４は、通信可能に接続され得る。
【００３６】
概して、プロセッサ２５０は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む任意の適切な専用又は汎用のコンピュータ、コンピューティングエンティティ、又は処理デバイスを含み得、任意の適用可能なコンピュータ読み取り可能な記憶媒体に記憶されている命令を実行するよう構成され得る。例えば、プロセッサ２５０は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は、プログラム命令を解釈及び／又は実行し、且つ／又はデータを処理するよう構成されている任意の他のデジタル回路若しくはアナログ回路を含み得る。プロセッサ２５０は、図２において１つのプロセッサとして示されているが、プロセッサ２５０は、本開示に記載の任意の数の動作を個別的又は集合的に実行する又は本開示に記載の任意の数の動作の実行を個別的又は集合的に指示するよう構成されている任意の数のプロセッサを含んでもよい。さらに、プロセッサのうちの１つ以上のプロセッサは、異なるサーバ等の１つ以上の異なる電子デバイスにおいて存在してもよい。
【００３７】
いくつかの実施形態において、プロセッサ２５０は、メモリ２５２、データストレージ２５４、又はメモリ２５２とデータストレージ２５４との両方に記憶されているプログラム命令を解釈及び／又は実行し、且つ／又は、メモリ２５２、データストレージ２５４、又はメモリ２５２とデータストレージ２５４との両方に記憶されているデータを処理するよう構成され得る。いくつかの実施形態において、プロセッサ２５０は、データストレージ２５４からプログラム命令をフェッチして、プログラム命令をメモリ２５２にロードすることができる。プログラム命令がメモリ２５２にロードされた後、プロセッサ２５０は、プログラム命令を実行することができる。
【００３８】
例えば、いくつかの実施形態において、フォールト位置特定モジュール及び／又は修復モジュールは、プログラム命令として、データストレージ２５４に含められ得る。プロセッサ２５０は、データストレージ２５４からフォールト位置特定モジュール及び／又は修復モジュールのプログラム命令をフェッチして、フォールト位置特定モジュール及び／又は修復モジュールのプログラム命令をメモリ２５２にロードすることができる。フォールト位置特定モジュール及び／又は修復モジュールのプログラム命令がメモリ２５２にロードされた後、プロセッサ２５０は、コンピューティングシステムがフォールト位置特定モジュール及び／又は修復モジュールのプログラム命令により指示されるようにフォールト位置特定モジュール及び／又は修復モジュールに関連付けられている動作を実施できるように、フォールト位置特定モジュール及び／又は修復モジュールのプログラム命令を実行することができる。
【００３９】
メモリ２５２及びデータストレージ２５４は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な記憶媒体を含み得る。そのようなコンピュータ読み取り可能な記憶媒体は、プロセッサ２５０等の汎用又は専用のコンピュータによりアクセスされ得る任意の利用可能な媒体を含み得る。限定ではなく例として、そのようなコンピュータ読み取り可能な記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電気的に消去可能なプログラム可能な読み取り専用メモリ（ＥＥＰＲＯＭ）、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）、又は、コンピュータ実行可能な命令又はデータ構造の形態の特定のプログラムコードを運ぶ又は記憶するために使用され得る任意の他の記憶媒体であって、汎用又は専用のコンピュータによりアクセスされ得る任意の他の記憶媒体、を含む有形の又は非一時的なコンピュータ読み取り可能な記憶媒体を含み得る。上記の組合せも、コンピュータ読み取り可能な記憶媒体の範囲に含まれ得る。コンピュータ実行可能な命令は、例えば、プロセッサ２５０に所定の動作又は動作群を実行させるよう構成されている命令及びデータを含み得る。
【００４０】
本開示の範囲から逸脱することなく、コンピューティングシステム２０２に対して、変更、追加、又は省略が可能である。例えば、いくつかの実施形態において、コンピューティングシステム２０２は、明示的には図示又は説明されないかもしれない任意の数の他のコンポーネントを含んでもよい。
【００４１】
図３は、本開示に記載の少なくとも１つの実施形態に従った、ソフトウェアプログラム内のフォールト位置を特定する例示的な方法３００のフローチャートを示している。方法３００は、任意の適切なシステム、装置、又はデバイスにより、ソフトウェアプログラムのテスト対象コード（例えば、図１のテスト対象コード１０４）に対して実行され得る。例えば、図１のフォールト位置特定モジュール１０２若しくは修復モジュール１０６又は（例えば、フォールト位置特定モジュール若しくは修復モジュールにより命令される）図２のコンピューティングシステム２０２が、ソフトウェアプログラムについて、方法３００に関連付けられている動作のうちの１つ以上の動作を実行できる又は方法３００に関連付けられている動作のうちの１つ以上の動作の実行を命令できる。別個のブロックで図示されているが、方法３００のブロックのうちの１つ以上のブロックに関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。
【００４２】
方法３００は、ブロック３０２を含み得、ブロック３０２において、疑いスコアが、テストされ得るソフトウェアプログラムのテスト対象コードに含まれ得る複数のステートメントについて決定され得る。いくつかの実施形態において、疑いスコアは、図４の方法４００を参照して以下で説明される１つ以上の動作に従って決定され得る。
【００４３】
ブロック３０４において、意味類似度スコアが、ブロック３０２において疑いスコアが決定され得る複数のステートメントの各ステートメントについて決定され得る。いくつかの実施形態において、ブロック３０２において、疑いスコアは、意味類似度スコアが決定され得る複数のステートメント以外の１つ以上の他のステートメントの各ステートメントについても決定され得る。したがって、いくつかの例において、ブロック３０２及び３０４に関して言及される複数のステートメントは、ブロック３０２において疑いスコアが決定され得る全てのステートメントのサブセットであることもある。
【００４４】
いくつかの実施形態において、上記の他のステートメントは、上記の他のステートメントが、図１を参照して上述したような疑い閾値を満たさない疑いスコアを有することに応じて、意味類似度スコアを決定することから除外され得る。追加的又は代替的に、複数のステートメントの疑いスコアはそれぞれ、意味類似度スコアが複数のステートメントの各ステートメントについて決定され得るように、疑い閾値を満たすこともある。いくつかの実施形態において、意味類似度スコアは、図５の方法５００を参照して以下で説明される１つ以上の動作に従って決定され得る。
【００４５】
ブロック３０６において、変更スコアが、ブロック３０２において疑いスコアが決定され得る複数のステートメントの各ステートメントについて決定され得る。意味類似度スコアについて上述したのと同様に、いくつかの実施形態において、ブロック３０２において、疑いスコアは、変更スコアが決定され得る複数のステートメント以外の１つ以上の他のステートメントの各ステートメントについても決定され得る。したがって、いくつかの例において、ブロック３０２及び３０６に関して言及される複数のステートメントは、ブロック３０２において疑いスコアが決定され得る全てのステートメントのサブセットであることもある。
【００４６】
いくつかの実施形態において、上記の他のステートメントは、上記の他のステートメントが、図１を参照して上述したような疑い閾値を満たさない疑いスコアを有することに応じて、変更スコアを決定することから除外され得る。追加的又は代替的に、複数のステートメントの疑いスコアはそれぞれ、変更スコアが複数のステートメントの各ステートメントについて決定され得るように、疑い閾値を満たすこともある。いくつかの実施形態において、変更スコアは、図６の方法６００を参照して以下で説明される１つ以上の動作に従って決定され得る。
【００４７】
ブロック３０８において、集約スコアが、複数のステートメントの各ステートメントについて決定され得る。いくつかの実施形態において、図１を参照して上記で示されたように、特定のステートメントの集約スコアは、特定のステートメントのそれぞれの疑いスコア、意味類似度スコア、及び／又は変更スコアに基づき得る。いくつかの実施形態において、集約スコアは、図７を参照して以下で説明される方法７００の１つ以上の動作に従って決定され得る。
【００４８】
ブロック３１０において、特定のステートメントが、複数のステートメントから、フォールト位置として特定され得る。いくつかの実施形態において、特定のステートメントは、図１を参照して上述したように、複数のステートメントの集約スコアに基づいて特定され得る。
【００４９】
本開示の範囲から逸脱することなく、方法３００に対して、変更、追加、又は省略が可能である。例えば、方法３００の動作は、異なる順序で実行されることがある。追加的又は代替的に、２つ以上の動作は、同時に実行されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ないステップ及び動作に組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。
【００５０】
例えば、いくつかの実施形態において、方法３００は、集約スコアに基づいて、フォールト位置として特定されるステートメントを優先順位付けし得る１つ以上の動作を含み得る。例えば、ステートメントは、ステートメントのそれぞれの集約スコアに基づいて、ランク付けされ得、ここで、フォールトを有する可能性がより高いことを示す集約スコアを有するステートメントは、より高くランク付けされ、そのようなステートメントには、フォールトを有する可能性がより低いことを示す集約スコアを有するステートメントよりも、特定についての高い優先順位が与えられる。さらに、いくつかの実施形態において、方法３００は、ステートメントがフォールト位置として特定されたことに応じて、フォールト位置として特定されたステートメントに対して１つ以上の修復動作を実行することを含み得る。
【００５１】
加えて、いくつかの実施形態において、方法３００は、反復的に実行され得、１つ以上の動作が、１つのフォールト位置について一度に実行され得る。追加的又は代替的に、１つ以上のブロックに関連付けられている１つ以上の動作は、複数のフォールト位置について一度に実行されることがある。
【００５２】
図４は、本開示に記載の少なくとも１つの実施形態に従った、ソフトウェアプログラムのステートメントについて疑いスコアを決定する例示的な方法４００のフローチャートを示している。上記で示されたように、疑いスコアは、疑いスコアを使用してソフトウェアプログラム内のフォールト位置を特定できるように、ステートメントがフォールトを含む可能性を示し得る。方法４００は、任意の適切なシステム、装置、又はデバイスにより、テスト対象コードに対して実行され得る。例えば、図１のフォールト位置特定モジュール１０２又は（例えば、フォールト位置特定モジュールにより命令される）図２のコンピューティングシステム２０２が、ソフトウェアプログラムのテスト対象コードについて、方法４００に関連付けられている動作のうちの１つ以上の動作を実行できる又は方法４００に関連付けられている動作のうちの１つ以上の動作の実行を命令できる。別個のブロックで図示されているが、方法４００のブロックのうちの１つ以上の動作に関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。上記で示されたように、いくつかの例において、方法４００の動作のうちの１つ以上の動作は、方法３００のブロック３０４及び／又はブロック３０６について実行され得る。
【００５３】
方法４００は、ブロック４０２で開始し得、ブロック４０２において、複数のテスト実行が、テスト対象コードに対して行われ得る。いくつかの実施形態において、テスト実行は、合格テスト実行及び失敗テスト実行を含み得る。追加的又は代替的に、いくつかの実施形態において、テスト対象コードは、テスト実行中に使用又は実行され得るステートメントが特定され得るように、テスト実行を行う前にインストルメントされることがある。
【００５４】
ブロック４０４において、テスト実行のうちの１つ以上の合格テスト実行が特定され得る。これらの実施形態又は他の実施形態において、合格テスト実行の全てが特定され得る。追加的又は代替的に、いくつかの実施形態において、特定された合格テスト実行中に使用又は実行された１つ以上のステートメントが、インストルメントに基づいて特定され得る。これらの実施形態又は他の実施形態において、特定された合格テスト実行中に使用又は実行されたステートメントの全てが特定され得る。
【００５５】
ブロック４０６において、テスト実行のうちの１つ以上の失敗テスト実行が特定され得る。これらの実施形態又は他の実施形態において、失敗テスト実行の全てが特定され得る。追加的又は代替的に、いくつかの実施形態において、特定された失敗テスト実行中に使用又は実行された１つ以上のステートメントが、インストルメントに基づいて特定され得る。これらの実施形態又は他の実施形態において、特定された失敗テスト実行中に使用又は実行されたステートメントの全てが特定され得る。
【００５６】
ブロック４０８において、テストスペクトルが、合格テスト実行、失敗テスト実行、及びステートメントに基づいて生成され得る。例えば、いくつかの実施形態において、テストスペクトルは、どのステートメントが、合格テスト実行の各合格テスト実行及び失敗テスト実行の各失敗テスト実行について使用又は実行されたかを示し得る。テストスペクトルはまた、どのステートメントが、合格テスト実行の各合格テスト実行により使用又は生成されなかったかを示すように生成され得る。追加的又は代替的に、テストスペクトルは、どのステートメントが、失敗テスト実行の各失敗テスト実行により使用又は生成されなかったかを示すように生成されることがある。
【００５７】
ブロック４１０において、１つ以上の使用係数が、テスト対象コード内に存在し得るステートメントの各ステートメントについて決定され得る。使用係数は、どの合格テスト実行及びどの失敗テスト実行が、それぞれのステートメントを使用又は実行したか又はしなかったかに基づき得る。例えば、いくつかの実施形態において、それぞれのステートメントを使用又は実行した合格テスト実行を示し得る使用係数「ep」が、それぞれのステートメントについて決定され得る。これらの実施形態又は他の実施形態において、それぞれのステートメントを使用又は実行しなかった合格テスト実行を示し得る使用係数「np」が、それぞれのステートメントについて決定され得る。これらの実施形態又は他の実施形態において、それぞれのステートメントを使用又は実行した失敗テスト実行を示し得る使用係数「ef」が、それぞれのステートメントについて決定され得る。これらの実施形態又は他の実施形態において、それぞれのステートメントを使用又は実行しなかった失敗テスト実行を示し得る使用係数「nf」が、それぞれのステートメントについて決定され得る。
【００５８】
ブロック４１２において、疑いスコアが、各ステートメントについて決定され得る。いくつかの実施形態において、疑いスコアは、それぞれのステートメントについて決定された使用係数に基づいて決定され得る。例えば、いくつかの実施形態において、各ステートメントの疑いスコアは、当該ステートメントの「ep」、「np」、「ef」、及び「nf」に基づき得る。疑いスコアを計算するためのいくつかの関数は、以下を含み得る：
【数１】
2019021303.tif 000003
【００５９】
いくつかの実施形態において、疑いスコアは、正規化され得る。例えば、いくつかの例において、疑いスコアは、「０」と「１」との間の値を有するように正規化され得、ここで、「１」というスコアは、それぞれのステートメントがフォールトを含む可能性が非常に高いことを示し、「０」というスコアは、それぞれのステートメントがフォールトを含む可能性が非常に低い又は０であることを示す。以下は、特定のステートメントについて、正規化された疑いスコアを決定するための式である：
【数２】
2019021303.tif 000004
【００６０】
上記の式において、「ステートメントの疑いスコア」は、特定のステートメントについて決定された疑いスコアを指し得、「いずれかのステートメントの最大疑いスコア」は、全てのステートメントに対して決定され得る最も高い疑いスコアを指し得る。最も高い疑いスコアを有するステートメントについては、分子と分母とが同じであることに留意されたい。いくつかの実施形態において、正規化は、疑いスコアが全てのステートメントについて決定された後に実行され得る。
【００６１】
本開示の範囲から逸脱することなく、方法４００に対して、変更、追加、又は省略が可能である。例えば、方法４００の動作は、異なる順序で実行されることがある。追加的又は代替的に、２つ以上の動作は、同時に実行されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ないステップ及び動作に組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。
【００６２】
加えて、いくつかの実施形態において、方法４００の１つ以上の動作は、反復的に実行され得、１つのステートメントが一度に解析され得る。追加的又は代替的に、１つ以上のブロックに関連付けられている１つ以上の動作は、複数のステートメントについて一度に実行されることがある。
【００６３】
図５は、本開示に記載の少なくとも１つの実施形態に従った、ソフトウェアプログラムのステートメントについて意味類似度スコアを決定する例示的な方法５００のフローチャートを示している。上記で示されたように、意味類似度スコアは、意味類似度スコアを使用してソフトウェアプログラム内のフォールト位置を特定できるように、ステートメントがフォールトを含む可能性を示し得る。方法５００は、任意の適切なシステム、装置、又はデバイスにより、テスト対象コード（例えば、図１のテスト対象コード１０４）に対して実行され得る。例えば、図１のフォールト位置特定モジュール１０２又は（例えば、フォールト位置特定モジュールにより命令される）図２のコンピューティングシステム２０２が、テスト対象コードのステートメントについて、方法５００に関連付けられている動作のうちの１つ以上の動作を実行できる又は方法５００に関連付けられている動作のうちの１つ以上の動作の実行を命令できる。別個のブロックで図示されているが、方法５００のブロックのうちの１つ以上のブロックに関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。
【００６４】
方法５００は、ブロック５０２で開始し得、ブロック５０２において、テスト対象コードのステートメントが取得され得る。いくつかの実施形態において、ステートメントは、ステートメントが、図１及び図３を参照して上述したような疑い閾値を満たす疑いスコアを有することに基づいて、取得され得る。
【００６５】
ブロック５０４において、テスト対象コードに関するエラーレポートが取得され得る。いくつかの実施形態において、エラーレポートは、ソフトウェアプログラムをテストすることに関連する対応するエラー／フォールト追跡システムから取得され得る。いくつかの例において、エラーレポートは、開発者、テスト者、又はエンドユーザにより書かれ得る、任意的なコードスニペットを伴う、フォールトの自然言語記述であり得る。
【００６６】
ブロック５０６において、１つ以上の記号が、ステートメント及びエラーレポートから除去され得る。いくつかの実施形態において、記号の全てが、ステートメント及びエラーレポートから除去され得る。いくつかの例において、記号は、+、-等といった数学演算子、{,}、(,)等といった括弧等であり得る。
【００６７】
ブロック５０８において、ステートメントに含まれる連結されたトークン及びエラーレポートに含まれる連結されたトークンが、分割され得る。連結されたトークンは、単独でも使用され得る又は一般に単独で使用され得る１つ以上の単語又はインジケータを含むトークンを含み得る。例えば、「getBehaviorId」というトークンは、連結されたトークンである。なぜならば、このトークンは、「get」及び「Behavior」という単語と「Id」というインジケータとを含み、「get」、「Behavior」、及び「Id」は、いくつかの例において、単独で使用され得るからである。連結されたトークンを分割することは、連結されたトークンを、連結されたトークンに含まれ得る個々の単語又はインジケータに分割することを含み得る。例えば、「getBehaviorId」は、「get」、「Behavior」、及び「Id」に分割され得る。
【００６８】
ブロック５１０において、意味類似度スコアが、ステートメントについて決定され得る。意味類似度スコアは、エラーレポートのレポートトークンに対するステートメントのステートメントトークンの意味類似度を示し得る。
【００６９】
例えば、いくつかの実施形態において、テキスト類似度解析が、レポートトークンのうちの１つ以上のレポートトークンに対するステートメントトークンのうちの１つ以上のステートメントトークンについて実行され得る。いくつかの実施形態において、テキスト類似度解析は、各ステートメントトークンと各レポートトークンとの間で実行され得る。例えば、いくつかの実施形態において、テキスト類似度は、最長共通部分列（ＬＣＳ）アルゴリズム又はＪａｃｃａｒｄ係数を用いて決定され得る。テキスト類似度はまた、テキスト非類似度の逆と考えられ得る。したがって、編集距離等、テキスト非類似度決定に関連する任意の適用可能なアルゴリズムが使用されてもよい。
【００７０】
いくつかの実施形態において、テキスト類似度解析を用いて、ステートメントについて意味類似度スコアを生成することができる。例えば、いくつかの実施形態において、ステートメントとエラーレポートとの間の類似する又は共通するトークン（例えば、類似する又は同じテキスト記述を有するトークン）の数が、テキスト類似度解析に基づいて決定され得る。追加的又は代替的に、いくつかの実施形態において、テキスト類似度スコアは、決定された共通するトークンの数であり得る。
【００７１】
これらの実施形態又は他の実施形態において、意味類似度スコアは、「０」と「１」との間の値を有するように正規化され得、ここで、「１」というスコアは、ステートメントが、他のステートメントと比較して、エラーレポートに対して最も多い数の共通するトークンを有することを示し、「０」というスコアは、ステートメントが、エラーレポートに対して共通するトークンを有しないことを示す。例えば、いくつかの実施形態において、意味類似度スコアは、以下の式を使用して決定され得る：
【数３】
2019021303.tif 000005
【００７２】
上記の式において、「現ステートメントの共通するトークンの数」は、意味類似度スコアが決定され得るステートメントについて決定された共通するトークンの数を指し得、「ステートメントのうちのいずれかの共通するトークンの最も多い数」は、全てのステートメントに対して見出され得る共通するトークンの最も多い数を指し得る。最も多い数の共通するトークンを有するステートメントについては、分子と分母とが同じであることに留意されたい。いくつかの実施形態において、正規化は、共通するトークンの数が全てのステートメントについて決定された後に実行され得る。
【００７３】
本開示の範囲から逸脱することなく、方法５００に対して、変更、追加、又は省略が可能である。例えば、方法５００の動作は、異なる順序で実行されることがある。追加的又は代替的に、２つ以上の動作は、同時に実行されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ないステップ及び動作に組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。さらに、与えられたスコアリング技術は、単に例に過ぎず、スコアリングに関する任意の適切な変形例が使用されてもよい。例えば、ＴＦ．ＤＩＦ、ベクトル空間モデル（ＶＳＭ）、ＢＭ２５等といった先進的な情報検索技術を使用して、各ステートメントとエラーレポートとの間の意味類似度を決定してもよい。加えて、いくつかの実施形態において、方法５００は、各ステートメント個々について反復的に実行されることもあるし、２つ以上のステートメントについて一度に実行されることもある。
【００７４】
図６は、本開示に記載の少なくとも１つの実施形態に従った、ソフトウェアプログラムのステートメントについて変更スコアを決定する例示的な方法６００のフローチャートを示している。上記で示されたように、変更スコアは、変更スコアを使用してソフトウェアプログラム内のフォールト位置を特定できるように、ステートメントがフォールトを含む可能性を示し得る。方法６００は、任意の適切なシステム、装置、又はデバイスにより、テスト対象コード（例えば、図１のテスト対象コード１０４）に対して実行され得る。例えば、図１のフォールト位置特定モジュール１０２又は（例えば、フォールト位置特定モジュールにより命令される）図２のコンピューティングシステム２０２が、テスト対象コードのステートメントについて、方法６００に関連付けられている動作のうちの１つ以上の動作を実行できる又は方法６００に関連付けられている動作のうちの１つ以上の動作の実行を命令できる。別個のブロックで図示されているが、方法６００のブロックのうちの１つ以上のブロックに関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。
【００７５】
方法６００は、ブロック６０２で開始し得、ブロック６０２において、テスト対象コードのステートメントが取得され得る。いくつかの実施形態において、ステートメントは、ステートメントが、図１及び図３を参照して上述したような疑い閾値を満たす疑いスコアを有することに基づいて、取得され得る。
【００７６】
ブロック６０４において、現在の時点が取得され得る。例えば、現在の時点は、現在の日付及び時間であり得る。
【００７７】
ブロック６０６において、ステートメントが最後に変更されたときである前の時点が取得され得る。例えば、ステートメントが最後に変更されたときの日付及び時間が取得され得る。
【００７８】
ブロック６０８において、取得された現在の時点と取得された前の時点との間の差が決定され得る。差は、秒、分、時間、日、週、月、年、又は、経過した時間を測る任意の他の形の観点で決定され得る。これに応じた差を用いて、ステートメントが最後に変更されたときからどれくらいの時間が経過したかを決定することができる。
【００７９】
ブロック６１０において、時間減衰モデルが、変更スコアを決定するために選択され得る。いくつかの実施形態において、時間減衰モデルは、異なる時間差が線形的に変更スコアに影響を及ぼし得る線形モデルであり得る。例えば、線形モデルにおいて、２週という差に対応する第１の変更スコアは、第１の値を有し得、４週という差に対応する第２の変更スコアは、第２の値を有し得、６週という差に対応する第３の変更スコアは、第３の値を有し得る。この例において、第１の値と第２の値との間の関係は、第２の値と第３の値との間の関係と同じ又は実質的に同じであり得る。
【００８０】
いくつかの実施形態において、時間減衰モデルは、異なる時間差が非線形的に変更スコアに影響を及ぼし得る非線形モデルであり得る。例えば、非線形モデルにおいて、２週という差に対応する第１の変更スコアは、第１の値を有し得、４週という差に対応する第２の変更スコアは、第２の値を有し得、６週という差に対応する第３の変更スコアは、第３の値を有し得る。この例において、第１の値と第２の値との間の関係は、第２の値と第３の値との間の関係と同じ又は実質的に同じではあり得ない。
【００８１】
上述したように、いくつかの例において、ステートメントが変更されたときから経過した時間が長いほど、ステートメントがフォールトを含む可能性は低くなり得る。したがって、いくつかの実施形態において、非線形モデルは、より最近ではない変更に対応する差よりも、より最近である変更に対応する差に対して、より重く時間差を非線形的に重み付けし得る。
【００８２】
ブロック６１２において、変更スコアが、ブロック６０８において決定された時間差及び時間減衰モデルに基づいて、ステートメントについて決定され得る。追加的又は代替的に、いくつかの実施形態において、変更スコアは、「０」と「１」との間の値に正規化されるように、決定されることがあり、ここで、「１」により近い値は、「０」により近い値よりも最近変更がなされたことを示す。
【００８３】
例えば、線形時間減衰モデルが使用されるいくつかの実施形態において、変更スコアは、以下の式に基づいて、ステートメントについて決定され得る：
【数４】
2019021303.tif 000006
【００８４】
上記の式において、「diff」は、それぞれのステートメントについて決定された時間差を指し得、「diffmin」は、テスト対象コードのステートメントのうちのいずれかについて決定された最小の時間差を指し得、「diffmax」は、テスト対象コードのステートメントのうちのいずれかについて決定された最大の時間差を指し得る。いくつかの実施形態において、正規化は、時間差が全てのステートメントについて決定された後に実行され得る。
【００８５】
別の例として、非線形時間減衰モデルが使用されるいくつかの実施形態において、変更スコアは、以下の式に基づいて、ステートメントについて決定され得る：
【数５】
2019021303.tif 000007
【００８６】
上記の式において、「β」は、変更スコアを決定する際により長い時間経過が重み付けされ得る程度に基づき得る減衰率を指し得る。さらに、「t」は、ステートメントについて決定された時間差を指し得る。
【００８７】
本開示の範囲から逸脱することなく、方法６００に対して、変更、追加、又は省略が可能である。例えば、方法６００の動作は、異なる順序で実行されることがある。追加的又は代替的に、２つ以上の動作は、同時に実行されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ないステップ及び動作に組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。さらに、与えられたスコアリング技術は、単に例に過ぎず、スコアリングに関する任意の適切な変形例が使用されてもよい。
【００８８】
図７は、本開示に記載の少なくとも１つの実施形態に従った、ソフトウェアプログラムのステートメントについて集約スコアを決定する例示的な方法７００のフローチャートを示している。上記で示されたように、集約スコアは、集約スコアを使用してソフトウェアプログラム内のフォールト位置を特定できるように、ステートメントがフォールトを含む可能性を示し得る。方法７００は、任意の適切なシステム、装置、又はデバイスにより、テスト対象コード（例えば、図１のテスト対象コード１０４）に対して実行され得る。例えば、図１のフォールト位置特定モジュール１０２又は（例えば、フォールト位置特定モジュールにより命令される）図２のコンピューティングシステム２０２が、テスト対象コードのステートメントについて、方法７００に関連付けられている動作のうちの１つ以上の動作を実行できる又は方法７００に関連付けられている動作のうちの１つ以上の動作の実行を命令できる。別個のブロックで図示されているが、方法７００のブロックのうちの１つ以上の動作に関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。
【００８９】
方法７００は、ブロック７０２で開始し得、ブロック７０２において、疑いスコアが、ステートメントについて決定され得る。いくつかの実施形態において、疑いスコアは、図４の方法４００の１つ以上の動作に従って決定され得る。追加的又は代替的に、いくつかの実施形態において、疑いスコアは正規化されることもある。
【００９０】
ブロック７０４において、意味類似度スコアが、ステートメントについて決定され得る。いくつかの実施形態において、意味類似度スコアは、図５の方法５００の１つ以上の動作に従って決定され得る。追加的又は代替的に、いくつかの実施形態において、意味類似度スコアは正規化されることもある。
【００９１】
ブロック７０６において、変更スコアが、ステートメントについて決定され得る。いくつかの実施形態において、変更スコアは、図６の方法６００の１つ以上の動作に従って決定され得る。追加的又は代替的に、いくつかの実施形態において、変更スコアは正規化されることもある。
【００９２】
ブロック７０８において、集約スコアが、ステートメントについて決定され得る。いくつかの実施形態において、集約スコアは、疑いスコア、意味類似度スコア、及び変更スコアのうちの２つ以上に基づいて決定され得る。例えば、いくつかの実施形態において、集約スコアは、疑いスコアと意味類似度スコアとの平均であり得る。追加的又は代替的に、集約スコアは、疑いスコアと変更スコアとの平均であることもある。これらの実施形態又は他の実施形態において、集約スコアは、意味類似度スコアと変更スコアとの平均であることもある。これらの実施形態又は他の実施形態において、集約スコアは、疑いスコアと意味類似度スコアと変更スコアとの平均であることもある。いくつかの実施形態において、集約スコアを生成する際に使用される異なるスコアは、重み付けされ得る。追加的又は代替的に、重み付けは、ステートメントがフォールトを含み得ることを示す際にどのスコアをより重く重み付けし得るかを示し得る経験的データの機械学習解析に基づいて決定され得る。
【００９３】
集約スコアの計算は、平均とは異なってもよい。例えば、集約スコアは、和、積、又は任意の他の適用可能な演算値として決定されてもよい。追加的又は代替的に、いくつかの実施形態において、集約スコアに関連するこれらのスコアのうちの２つ以上のスコアが、線形回帰、ロジスティック回帰、決定木技術、又はランダムフォレスト技術等の様々な機械学習技術を使用して学習された数学モデルを使用して組み合わされてもよい。
【００９４】
本開示の範囲から逸脱することなく、方法７００に対して、変更、追加、又は省略が可能である。例えば、方法７００の動作は、異なる順序で実行されることがある。追加的又は代替的に、２つ以上の動作は、同時に実行されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ないステップ及び動作に組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。さらに、与えられたスコアリング技術は、単に例に過ぎず、スコアリングに関する任意の適切な変形例が使用されてもよい。
【００９５】
上記で示されたように、本開示に記載の実施形態は、以下でより詳細に説明されるような様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用のコンピュータ（例えば、図２のプロセッサ２５０）の使用を含み得る。さらに、上記で示されたように、本開示に記載の実施形態は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な媒体（例えば、図２のメモリ２５２）を使用して実装され得る。
【００９６】
本開示において使用される場合、「モジュール」又は「コンポーネント」という用語は、モジュール又はコンポーネントのアクションを実行するよう構成されている特定のハードウェア実装、及び／又は、コンピューティングシステムの汎用ハードウェア（例えば、コンピュータ読み取り可能な媒体等）に記憶され得る且つ／又はコンピューティングシステムの汎用ハードウェア（例えば、処理デバイス等）により実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを指し得る。いくつかの実施形態において、本開示に記載の異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピューティングシステム上で実行されるオブジェクト又はプロセスとして（例えば、別個のスレッドとして）実装され得る。本開示に記載のシステム及び方法のうちの一部は、（汎用ハードウェアに記憶される且つ／又は汎用ハードウェアにより実行される）ソフトウェアにより実装されるとして一般に説明されるが、特定のハードウェア実装又はソフトウェアと特定のハードウェア実装との組合せも可能であり企図されている。本説明において、「コンピューティングエンティティ」は、本開示において前に定義された任意のコンピューティングシステム、又は、コンピューティングシステム上で動作する任意のモジュール又はモジュールの組合せであり得る。
【００９７】
本開示及び特に請求項（例えば、請求項の本体部分）において使用される用語は、一般に、「オープンな」用語であるとして意図される（例えば、「〜を備える」という用語は、「〜を備えるが、〜に限定されるものではない」として解釈されるべきであり、「〜を有する」という用語は、「少なくとも〜を有する」として解釈されるべきであり、「〜を含む」という用語は、「〜を含むが、〜に限定されるものではない」として解釈されるべきである、等）。
【００９８】
さらに、導入される請求項記載事項の特定の数が意図される場合、そのような意図は、当該請求項中に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、請求項中に、請求項記載事項を導入するための「少なくとも１つの」及び「１つ以上の」といった導入句の使用が含まれることがある。しかしながら、このような導入句の使用は、「a」又は「an」といった不定冠詞による請求項記載事項の導入が、同一の請求項中に「１つ以上の」又は「少なくとも１つの」といった導入句と「a」又は「an」といった不定冠詞とが含まれるとしても、当該導入された請求項記載事項を含む特定の請求項が、当該請求項記載事項を１つしか含まない実施形態に限定されることを意味するとして解釈されるべきではない（例えば、「a」及び／又は「an」は、「少なくとも１つの」又は「１つ以上の」を意味するとして解釈されるべきである）。請求項記載事項を導入するために使用される定冠詞の使用についても同じことが当てはまる。
【００９９】
さらに、導入される請求項記載事項の特定の数が明示的に記載されている場合であっても、そのような記載は、少なくとも記載されている数を意味するとして解釈されるべきである（例えば、他の修飾語のない「２つの記載事項」という単なる記載は、少なくとも２つの記載事項又は２つ以上の記載事項を意味する）ことが、当業者であれば認識されよう。さらに、「Ａ、Ｂ、及びＣ等のうちの少なくとも１つ」又は「Ａ、Ｂ、及びＣ等のうちの１つ以上」に類する表記が使用される場合、一般に、そのような構造は、Ａのみ、Ｂのみ、Ｃのみ、Ａ及びＢの両方、Ａ及びＣの両方、Ｂ及びＣの両方、又は、Ａ、Ｂ、及びＣの全て、等を含むことが意図される。
【０１００】
さらに、２つ以上の選択可能な用語を表すいかなる離接語又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの１つ、それらの用語の組合せ、又は、それらの用語の全てを含む可能性を意図するとして理解されるべきである。例えば、「Ａ又はＢ」という句は、「Ａ」若しくは「Ｂ」又は「Ａ及びＢ」の可能性を含むとして理解されるべきである。
【０１０１】
本開示において記載された全ての例及び条件付き文言は、当該技術を促進させるために本発明者によって寄与されるコンセプト及び本開示を読者が理解するのを助ける教育上の目的のために意図され、そのような具体的に記載された例及び条件に限定されるものではないとして解釈されるべきである。本開示の実施形態が詳細に説明されたが、それら実施形態に対する様々な変形、置換、及び変更が、本開示の主旨及び範囲から逸脱することなく可能である。
【０１０２】
以上の実施形態に関し、さらに以下の付記を開示する。
【０１０３】
（付記１）
ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うステップと、
前記複数のテスト実行のうちの１つ以上の合格テストを特定するステップと、
前記複数のテスト実行のうちの１つ以上の失敗テストを特定するステップと、
前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用に基づいて決定するステップと、
前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる１つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる１つ以上のレポートトークンと、の間の意味類似度に基づいて決定するステップと、
前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した時間に基づいて決定するステップと、
前記複数のステートメントの各ステートメントの集約スコアを、当該ステートメントの前記疑いスコア、前記意味類似度スコア、及び前記変更スコアに基づいて決定するステップと、
前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定するステップと、
を含む方法。
【０１０４】
（付記２）
前記複数のステートメントの各ステートメントの前記疑いスコアは、前記複数のステートメントの各ステートメントがフォールトを有する可能性があることを示す疑い閾値を満たし、
前記方法は、
前記テスト対象コードに含まれ、前記複数のステートメントには含まれない１つ以上の他のステートメントの各ステートメントの疑いスコアを決定するステップであって、前記１つ以上の他のステートメントの各ステートメントの前記疑いスコアは、前記疑い閾値を満たさない、ステップと、
前記複数のステートメントの各ステートメントの前記疑いスコアが前記疑い閾値を満たすことと、前記１つ以上の他のステートメントの各ステートメントの前記疑いスコアが前記疑い閾値を満たさないことと、に基づいて、前記１つ以上の他のステートメントではなく、前記複数のステートメントの各ステートメントの前記意味類似度スコア及び前記変更スコアを決定するステップと、
をさらに含む、付記１に記載の方法。
【０１０５】
（付記３）
前記の特定されたフォールト位置に基づいて、修復動作を実行するステップをさらに含む、付記１に記載の方法。
【０１０６】
（付記４）
前記複数のステートメントを、前記複数のステートメントのそれぞれの前記集約スコアに基づいてランク付けするステップと、
前記特定のステートメントを、前記特定のステートメントのランクに基づいて、前記フォールト位置として特定するステップと、
をさらに含む、付記１に記載の方法。
【０１０７】
（付記５）
前記特定のステートメントを、前記複数のステートメントのうちの他のステートメントの他の前記集約スコアと比較した前記特定のステートメントの前記集約スコアに基づいて、前記フォールト位置として特定するステップをさらに含む、付記１に記載の方法。
【０１０８】
（付記６）
変更が生じたときから経過した前記時間を線形的に重み付けする時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、付記１に記載の方法。
【０１０９】
（付記７）
変更が生じたときから経過した前記時間を非線形的に重み付けする時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、付記１に記載の方法。
【０１１０】
（付記８）
前記意味類似度スコアを決定することは、
前記ステートメント及び前記エラーレポートに含まれる１つ以上の連結されたトークンの各連結されたトークンを、複数の連結されていないトークンに分割することと、
前記連結されていないトークンに基づいて、前記意味類似度スコアを決定することと、
を含む、付記１に記載の方法。
【０１１１】
（付記９）
前記集約スコアを決定する際に、前記疑いスコア、前記意味類似度スコア、及び前記変更スコアを、以前に決定された集約スコアに基づくフォールト位置選択の機械学習解析に基づいて重み付けするステップをさらに含む、付記１に記載の方法。
【０１１２】
（付記１０）
少なくとも１つの非一時的なコンピュータ読み取り可能な媒体は、１つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも１つのプロセッサにより実行されたことに応じて、システムに付記１に記載の方法を実行させる、付記１に記載の方法。
【０１１３】
（付記１１）
ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うステップと、
前記複数のテスト実行のうちの１つ以上の合格テストを特定するステップと、
前記複数のテスト実行のうちの１つ以上の失敗テストを特定するステップと、
前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの集約スコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用；当該ステートメントに含まれる１つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる１つ以上のレポートトークンと、の間の意味類似度；及び、当該ステートメントが変更を受けたときから経過した時間；のうちの２つ以上に基づいて決定するステップと、
前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定するステップと、
を含む方法。
【０１１４】
（付記１２）
前記ソフトウェアプログラムの前記テスト対象コードの前記複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの前記使用及び前記不使用に基づいて決定するステップと、
前記疑いスコアに基づいて、前記集約スコアを決定するステップと、
をさらに含む、付記１１に記載の方法。
【０１１５】
（付記１３）
前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる前記１つ以上のステートメントトークンと、前記エラーレポートに含まれる前記１つ以上のレポートトークンと、の間の前記意味類似度に基づいて決定するステップと、
前記意味類似度スコアに基づいて、前記集約スコアを決定するステップと、
をさらに含む、付記１１に記載の方法。
【０１１６】
（付記１４）
前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した前記時間に基づいて決定するステップと、
前記変更スコアに基づいて、前記集約スコアを決定するステップと、
をさらに含む、付記１１に記載の方法。
【０１１７】
（付記１５）
変更が生じたときから経過した前記時間を線形的に重み付けする線形時間減衰モデル、又は、変更が生じたときから経過した前記時間を非線形的に重み付けする非線形時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、付記１４に記載の方法。
【０１１８】
（付記１６）
前記の特定されたフォールト位置に基づいて、修復動作を実行するステップをさらに含む、付記１１に記載の方法。
【０１１９】
（付記１７）
前記特定のステートメントを、前記複数のステートメントのうちの他のステートメントの他の前記集約スコアと比較した前記特定のステートメントの前記集約スコアに基づいて、前記フォールト位置として特定するステップをさらに含む、付記１１に記載の方法。
【０１２０】
（付記１８）
少なくとも１つの非一時的なコンピュータ読み取り可能な媒体は、１つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも１つのプロセッサにより実行されたことに応じて、システムに付記１１に記載の方法を実行させる、付記１１に記載の方法。
【０１２１】
（付記１９）
システムであって、
命令を記憶している１つ以上のコンピュータ読み取り可能な記憶媒体と、
前記１つ以上のコンピュータ読み取り可能な記憶媒体に通信可能に接続され、前記命令の実行に応じて、前記システムに動作を実行させるよう構成されている１つ以上のプロセッサであって、前記動作は、
ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うことと、
前記複数のテスト実行のうちの１つ以上の合格テストを特定することと、
前記複数のテスト実行のうちの１つ以上の失敗テストを特定することと、
前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの集約スコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用；当該ステートメントに含まれる１つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる１つ以上のレポートトークンと、の間の意味類似度；及び、当該ステートメントが変更を受けたときから経過した時間；のうちの２つ以上に基づいて決定することと、
前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定することと、
を含む、１つ以上のプロセッサと、
を有するシステム。
【０１２２】
（付記２０）
前記動作は、
前記ソフトウェアプログラムの前記テスト対象コードの前記複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの前記使用及び前記不使用に基づいて決定することと、
前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる前記１つ以上のステートメントトークンと、前記エラーレポートに含まれる前記１つ以上のレポートトークンと、の間の前記意味類似度に基づいて決定することと、
前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した前記時間に基づいて決定することと、
前記複数のステートメントの各ステートメントの前記集約スコアを、当該ステートメントの前記疑いスコア、前記意味類似度スコア、及び前記変更スコアに基づいて決定することと、
をさらに含む、付記１９に記載のシステム。
【符号の説明】
【０１２３】
１０２  フォールト位置特定モジュール
１０４  テスト対象コード
１０６  修復モジュール
１０８  変更されたテスト対象コード
１１２  フォールト位置
２０２  コンピューティングシステム
２５０  プロセッサ
２５２  メモリ
２５４  データストレージ
【図１】
2019021303.tif 000008
【図２】
2019021303.tif 000009
【図３】
2019021303.tif 000010
【図４】
2019021303.tif 000011
【図５】
2019021303.tif 000012
【図６】
2019021303.tif 000013
【図７】
2019021303.tif 000014