JP2019021303A - ソフトウェアプログラムフォールト位置特定 - Google Patents

ソフトウェアプログラムフォールト位置特定 Download PDF

Info

Publication number
JP2019021303A
JP2019021303A JP2018102368A JP2018102368A JP2019021303A JP 2019021303 A JP2019021303 A JP 2019021303A JP 2018102368 A JP2018102368 A JP 2018102368A JP 2018102368 A JP2018102368 A JP 2018102368A JP 2019021303 A JP2019021303 A JP 2019021303A
Authority
JP
Japan
Prior art keywords
statement
score
statements
test
suspicion
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2018102368A
Other languages
English (en)
Other versions
JP7095408B2 (ja
Inventor
ケイ サハ・リポン
K Saha Ripon
ケイ サハ・リポン
アール プラサド・ムクル
R Prasad Mukul
アール プラサド・ムクル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2019021303A publication Critical patent/JP2019021303A/ja
Application granted granted Critical
Publication of JP7095408B2 publication Critical patent/JP7095408B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management

Abstract

【課題】ソフトウェアプログラム内のフォールト位置を特定する方法及びシステムを提供すること。【解決手段】一実施形態の一態様に従うと、方法は、ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うことを含み得る。本方法は、複数のテスト実行のうちの合格テスト及び失敗テストを特定することをさらに含み得る。本方法は、各ステートメントの集約スコアを、合格テスト及び失敗テスト;ステートメントに含まれるステートメントトークンとエラーレポートに含まれるレポートトークンとの間の意味類似度;ステートメントが変更を受けたときから経過した時間;のうちの2つ以上に基づいて決定することをさらに含み得る。本方法は、複数のステートメントの集約スコアに基づいて、複数のステートメントのうちの特定のステートメントを、テスト対象コード内のフォールト位置として特定することをさらに含み得る。【選択図】図7

Description

本開示に記載の実施形態は、ソフトウェアプログラムフォールト位置特定に関する。
ソフトウェアプログラムは、ソフトウェアプログラム内にフォールト(一般に「バグ」と呼ばれる)を有することがしばしばあり、それにより、ソフトウェアプログラムは、意図されるように動作しないことがある。ソフトウェアプログラム内のフォールトを特定して修正するように試みる自動修復システムが、しばしば使用される。
本開示において特許請求される主題は、あらゆる欠点を解決する実施形態又は上記のような環境においてのみ動作する実施形態に限定されるものではない。そうではなく、この背景技術の記載は、本開示に記載のいくつかの実施形態が実施され得る1つの例示的な技術領域を示すために提供されているに過ぎない。
一実施形態の一態様に従うと、方法は、ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うステップを含み得る。本方法は、前記複数のテスト実行のうちの1つ以上の合格テストを特定するステップと、前記複数のテスト実行のうちの1つ以上の失敗テストを特定するステップと、をさらに含み得る。加えて、本方法は、前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの集約スコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用;当該ステートメントに含まれる1つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる1つ以上のレポートトークンと、の間の意味類似度;及び、当該ステートメントが変更を受けたときから経過した時間;のうちの2つ以上に基づいて決定するステップを含み得る。加えて、本方法は、前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定するステップを含み得る。
実施形態の目的及び利点が、少なくとも請求項において特に示される要素、特徴、及び組合せにより、実現及び達成される。
前述の総括的な説明及び以下の詳細な説明の両方ともが、例として与えられ、説明的なものであり、特許請求される発明を限定するものではない。
例示的な実施形態が、添付の図面を使用して、より具体的且つ詳細に記載及び説明される。
ソフトウェアプログラム内のフォールトを位置特定することに関連する例示的な環境を示す図。 ソフトウェアプログラム内のフォールトを位置特定するよう構成され得る例示的なコンピューティングシステムを示す図。 ソフトウェアプログラム内のフォールト位置を特定する例示的な方法のフローチャート。 ソフトウェアプログラム内のフォールト位置を特定するために使用され得る、ソフトウェアプログラムのステートメントの疑いスコアを決定する例示的な方法のフローチャート。 ソフトウェアプログラム内のフォールト位置を特定するために使用され得る、ソフトウェアプログラムのステートメントの意味類似度スコアを決定する例示的な方法のフローチャート。 ソフトウェアプログラム内のフォールト位置を特定するために使用され得る、ソフトウェアプログラムのステートメントの変更スコアを決定する例示的な方法のフローチャート。 ソフトウェアプログラム内のフォールト位置を特定するために使用され得る、ソフトウェアプログラムのステートメントの集約スコアを決定する例示的な方法のフローチャート。
本開示に記載のいくつかの実施形態は、ソフトウェアプログラム内のフォールト位置を特定する方法及びシステムに関する。いくつかの実施形態において、フォールト位置特定を用いて、ソフトウェアプログラムを修復することができる。ソフトウェアプログラムは、ソフトウェアプログラムを意図しない形で挙動させるおそれがあるフォールト(一般に「バグ」とも呼ばれる)をしばしば含む。さらに、自動修復システム及び技術が、フォールトを検出、位置特定、及び修正してソフトウェアプログラムを修復するために、しばしば使用される。本開示において、「フォールト位置」とは、ソフトウェアプログラムを意図しない形で動作させるおそれがある1つ以上のコード行(「ステートメント」とも呼ばれる)を指し得る。さらに、「フォールト位置特定」又は「フォールトを位置特定すること」とは、ソフトウェアプログラム内のそのようなステートメント及びそのようなステートメントのそれぞれの位置を特定することを指し得る。
本開示に記載の1つ以上の実施形態に従うと、ソフトウェアプログラム内の1つ以上のフォールト位置は、フォールト位置特定のために使用される他の技術と比べて、フォールト位置をより正確に特定することができるやり方で特定され得る。詳細には、複数のテストが、ソフトウェアプログラムのテスト対象コードに対して実行され得る。これらのテストの結果に基づいて、疑い(suspicion)スコアが、テスト対象コードの各ステートメントについて決定され得る。以下でさらに説明されるように、特定のステートメントの疑いスコアは、ソフトウェアプログラムの合格テスト実行及び失敗テスト実行における特定のステートメントの使用又は不使用に基づき得る。加えて、意味類似度スコアが、テスト対象コードのステートメントのうちの1つ以上のステートメントについて決定され得る。意味類似度スコアは、それぞれのステートメントに含まれるステートメントトークンとエラーレポートに含まれる1つ以上のレポートトークンとの間の意味類似度に基づいて決定され得る。本開示において、「ステートメントトークン」という言及は、ソフトウェアプログラムのオブジェクト(例えば、変数、メソッド、クラス等)を指定するためにステートメント内で使用され得る任意の一連の文字又は単語を含み得る。さらに、本開示において、「レポートトークン」という言及は、エラーレポートに含まれ得る任意の一連の文字又は単語を含み得る。これらの実施形態又は他の実施形態において、変更スコアがまた、テスト対象コードの1つ以上のステートメントについて決定され得る。変更スコアは、それぞれのステートメントが変更を受けたときから経過した時間に基づき得る。これらの実施形態又は他の実施形態において、集約スコアが、各ステートメントのそれぞれの疑いスコア、意味類似度スコア、及び変更スコアに基づいて、各ステートメントについて決定され得る。
追加的又は代替的に、集約スコアを使用して、フォールト位置を特定することができる。例えば、いくつかの実施形態において、ステートメントは、ステートメントのそれぞれの集約スコアに基づいて、可能性のあるフォールト位置として、優先順位付けされ得る。本開示において、「ステートメントを優先順位付けする」ことという言及は、より高い優先順位(例えば、より高いランク)を有するステートメントが、より低い優先順位(例えば、より低いランク)を有するステートメントよりも優先して、フォールト位置として特定され得るように、ステートメントをランク付けすることを含み得る。追加的又は代替的に、ステートメントを優先順位付けすることは、(例えば、ステートメントのそれぞれの集約スコアにより示されるように)フォールト位置である可能性をほとんど又は全く有しないものであり得るステートメントを破棄又は除去することを含んでもよい。
例えば、いくつかの実施形態において、集約スコアが高いほど、対応するステートメントがフォールトに該当する可能性が高くなり得る。これらの実施形態又は他の実施形態において、最も高い集約スコアを有する特定のステートメントが、これに応じてランク付けされ、フォールト位置として特定され得る。いくつかの例において、この特定のステートメントが、フォールト位置として特定され得、さらなるテストにより、この特定のステートメントが実際にはフォールト位置ではないと示されることがあることに留意されたい。したがって、「ステートメントをフォールト位置として特定する」ことという言及は、そのようなステートメントについて、さらなる検査により正しいか又は正しくないかを示し得る判定を行うことを含み得る。
本開示の実施形態が、添付の図面を参照して説明される。
図1は、本開示に記載の少なくとも1つの実施形態に従って構成される、ソフトウェアプログラム内のフォールトを位置特定することに関連する例示的な環境100を示す図である。追加的又は代替的に、いくつかの実施形態において、環境100は、位置特定されたフォールトに基づいて、修復動作を実行することに関連してもよい。環境100は、フォールトについてテスト対象コード104を解析し、フォールトについての解析に基づいて、フォールト位置112を特定するよう構成されているフォールト位置特定モジュール102を含み得る。いくつかの実施形態において、環境100は、位置特定されたフォールト112を受け取るよう構成されている修復モジュール106を含み得る。いくつかの実施形態において、修復モジュール106は、変更されたテスト対象コード108を出力するよう構成され得、変更されたテスト対象コード108は、フォールト位置112について修復モジュール106により実行された修復動作によりテスト対象コード104に対して行われた1つ以上の変更を含み得る。
テスト対象コード104は、例えば、処理デバイスにより実行される、ソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は、他のロジック若しくは命令等の電子データを含み得る。いくつかの実施形態において、テスト対象コード104は、複数のコード行を含み得、ここで、各コード行は、本開示において、ステートメントと呼ばれることがある。いくつかの実施形態において、テスト対象コード104は、ソフトウェアプログラムの完全なインスタンスを含み得る。追加的又は代替的に、テスト対象コード104は、ソフトウェアプログラムの一部を含んでもよい。テスト対象コード104は、ソフトウェアプログラムのために使用され得る任意の適切なタイプのコンピュータ言語で記述され得る。
フォールト位置特定モジュール102は、テスト対象コード内のフォールトを特定し、フォールト位置112を出力するよう構成されているコード及びルーチンを含み得る。追加的又は代替的に、フォールト位置特定モジュール102は、(例えば、1つ以上の動作を実行する又は1つ以上の動作の実行を制御する)プロセッサ、(例えば、1つ以上の動作を実行する又は1つ以上の動作の実行を制御する)マイクロプロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを使用して実装されてもよい。いくつかの他の例において、フォールト位置特定モジュール102は、ハードウェアとソフトウェアとの組合せを使用して実装されてもよい。本開示において、フォールト位置特定モジュール102により実行されるとして説明される動作は、対応するシステムに実行するようにフォールト位置特定モジュール102が命令し得る動作を含み得る。
フォールト位置特定モジュール102は、テスト対象コード104内の1つ以上のフォールトを特定するために用いられ得る一連のテスト動作をテスト対象コード104に対して実行するよう構成され得る。いくつかの実施形態において、フォールト位置特定モジュール102は、1つ以上のテストスイートに基づいて、テスト動作のうちの1つ以上のテスト動作を実行するよう構成され得る。
例えば、フォールト位置特定モジュール102は、テスト対象コード104に対して1つ以上のテストスイートを適用するよう構成され得る。いくつかの実施形態において、フォールト位置特定モジュール102は、テストスイートに含まれる1つ以上のテストを実行するよう構成され得、このようなテストを実行することは、テスト実行を行うと呼ばれることがある。合格したテスト実行は、「合格テスト実行」と呼ばれることがあり、失敗したテスト実行は、「失敗テスト実行」と呼ばれることがある。
いくつかの実施形態において、フォールト位置特定モジュール102は、合格テスト実行及び失敗テスト実行に基づいて、テストスペクトル(spectrum)を生成するよう構成され得る。テストスペクトルは、テスト対象コード104のどのステートメントが、合格テスト実行及び失敗テスト実行の各テスト実行において関与したか又は合格テスト実行及び失敗テスト実行の各テスト実行中に実行されたかについてのインジケーションを含み得る。いくつかの実施形態において、テスト対象コード104は、テスト実行を行う前にインストルメントされ得る。インストルメントは、テスト実行中に実行されるステートメントが追跡されるように、コードをテスト対象コード104に付加し得る。したがって、テストスペクトルは、どのステートメントが合格テスト実行及び失敗テスト実行に関与するかの特定とそれによる対応する指示とに基づくインストルメントに基づいて、生成され得る。
いくつかの実施形態において、フォールト位置特定モジュール102は、テスト対象コード104に含まれる複数のステートメントの各ステートメントについて疑いスコアを決定するよう構成され得る。いくつかの実施形態において、フォールト位置特定モジュール102は、テスト対象コード104に含まれる各ステートメントについて疑いスコアを決定するよう構成され得る。追加的又は代替的に、上記複数のステートメントは、テスト対象コード104に含まれるステートメントのサブセットであることもある。
これらの実施形態又は他の実施形態において、フォールト位置特定モジュール102は、テストスペクトルに基づいて、疑いスコアを決定するよう構成され得る。例えば、フォールト位置特定モジュール102は、特定のステートメントが実行又は使用されたテスト実行を判別することができる。失敗テスト実行と比較して合格テスト実行において特定のステートメントがどれくらいの回数使用又は実行されるか、又は、特定のステートメントが合格テスト実行又は失敗テスト実行において全く使用されないか、の関係は、特定のステートメントが、フォールトを含み、したがって、フォールト位置である可能性がどれくらいであるか、を示し得る。したがって、いくつかの実施形態において、特定のステートメントの疑いスコアは、疑いスコアが、合格テスト実行及び失敗テスト実行に対する特定のステートメントの使用の関係に基づいて、特定のステートメントがフォールトを含む可能性を示し得るように、合格テスト実行及び失敗テスト実行における特定のステートメントの使用又は不使用に基づき得る。いくつかの実施形態において、疑いスコアは、図4の方法400を参照して以下で説明される1つ以上の動作に従って決定され得る。
いくつかの実施形態において、フォールト位置特定モジュール102は、テスト対象コード104に含まれる1つ以上のステートメントの各ステートメントについて意味類似度スコアを決定するよう構成され得る。いくつかの実施形態において、フォールト位置特定モジュール102は、テスト対象コード104に含まれる各ステートメントについて意味類似度スコアを決定するよう構成され得る。追加的又は代替的に、いくつかの実施形態において、フォールト位置特定モジュール102は、テスト対象コード104に含まれるステートメントのサブセットの各ステートメントについて意味類似度スコアを決定するよう構成されることもある。
いくつかの実施形態において、意味類似度スコアが決定され得るステートメントのサブセットは、ステートメントの疑いスコアに基づいて決定され得る。例えば、いくつかの実施形態において、フォールト位置特定モジュール102は、閾レベル(「疑い閾値」)を満たさない疑いスコアを有するステートメントを特定することができる。疑い閾値は、ステートメントがフォールトを有する可能性があることを示し得る。これらの実施形態又は他の実施形態において、フォールト位置特定モジュール102は、疑い閾値を満たさない疑いスコアを有するステートメントについては意味類似度スコアを決定しないよう構成され得る。いくつかの実施形態において、疑い閾値は、疑いスコアと実際のフォールト位置との間の関係の実証分析に基づいて決定され得る。例えば、いくつかの例において、実証分析は、「0」という疑いスコアを有するステートメントが、フォールトを含む可能性をほとんど又は全く有しないものであり得ることを示し得、その結果、「0」という疑いスコアを有する全てのステートメントが疑い閾値を満たさないとみなされ得、したがって、それらの意味類似度スコアが決定され得ないように、疑い閾値が設定され得る。
いくつかの例において、特定のステートメントに含まれるトークンとエラーレポートに含まれるトークンとの間の意味類似度が、特定のステートメントが、フォールトを含み、したがって、フォールト位置である可能性を示し得る。例えば、特定のステートメントとエラーレポートとの間に共通のトークンが多く存在するほど、特定のステートメントがフォールトを含む可能性が高くなり得る。いくつかの実施形態において、意味類似度スコアは、それぞれのステートメントのステートメントトークンと、テスト対象コード104について生成され得るエラーレポートのレポートトークンと、の間の意味類似度に基づき得る。追加的又は代替的に、意味類似度スコアは、それぞれのステートメントトークンとレポートトークンとの間の類似度に基づいて、それぞれのステートメントがフォールトを含む可能性を示すように決定されることもある。いくつかの実施形態において、フォールト位置特定モジュール102は、図5を参照して以下で説明される方法500の1つ以上の動作に従って、意味類似度スコアを決定するよう構成され得る。
いくつかの実施形態において、フォールト位置特定モジュール102は、テスト対象コード104に含まれる1つ以上のステートメントの各ステートメントについて変更スコアを決定するよう構成され得る。いくつかの実施形態において、フォールト位置特定モジュール102は、テスト対象コード104に含まれる各ステートメントについて変更スコアを決定するよう構成され得る。追加的又は代替的に、いくつかの実施形態において、フォールト位置特定モジュール102は、テスト対象コード104に含まれるステートメントのサブセットの各ステートメントについて変更スコアを決定するよう構成されることもある。
いくつかの実施形態において、変更スコアが決定され得るステートメントのサブセットは、ステートメントの疑いスコアに基づいて決定され得る。例えば、いくつかの実施形態において、変更スコアは、疑い閾値を満たす疑いスコアを有するステートメントについて決定され得る。
いくつかの例において、特定のステートメントが変更を受けたときから経過した時間が、特定のステートメントが、フォールトを含み、したがって、フォールト位置である可能性を示し得る。例えば、特定のステートメントが変更を受けたのが最近であるほど、特定のステートメントがフォールトを含む可能性が高くなり得る。いくつかの実施形態において、変更スコアは、それぞれのステートメントが変更を受けたときから経過した時間に基づき得る。追加的又は代替的に、変更スコアは、経過した時間に基づいて、それぞれのステートメントがフォールトを含む可能性を示すように決定されることもある。いくつかの実施形態において、フォールト位置特定モジュール102は、図6を参照して以下で説明される方法600の1つ以上の動作に従って、変更スコアを決定するよう構成され得る。
いくつかの実施形態において、フォールト位置特定モジュール102は、疑いスコア、意味類似度スコア、及び/又は変更スコアを有するステートメントの各ステートメントについて集約スコアを決定するよう構成され得る。特定のステートメントの集約スコアは、特定のステートメントのそれぞれの疑いスコア、意味類似度スコア、及び/又は変更スコアに基づき得る。例えば、いくつかの実施形態において、集約スコアは、それぞれの疑いスコア及びそれぞれの意味類似度スコアに基づき得る。追加的又は代替的に、集約スコアは、それぞれの疑いスコア及びそれぞれの変更スコアに基づくこともある。これらの実施形態又は他の実施形態において、集約スコアは、それぞれの変更スコア及びそれぞれの意味類似度スコアに基づき得る。追加的又は代替的に、集約スコアは、それぞれの疑いスコア、それぞれの意味類似度スコア、及びそれぞれの変更スコアに基づくこともある。いくつかの実施形態において、フォールト位置特定モジュール102は、図7を参照して以下で説明される方法700の1つ以上の動作に従って、集約スコアを決定するよう構成され得る。
いくつかの実施形態において、フォールト位置特定モジュール102は、ステートメントの集約スコアに基づいて、テスト対象コード104内の1つ以上のフォールト位置を特定するよう構成され得る。例えば、上記で示されたように、いくつかの実施形態において、フォールト位置特定モジュール102は、フォールト位置として特定されるステートメントを、ステートメントの集約スコアに基づいて優先順位付けするよう構成され得る。例えば、いくつかの実施形態において、フォールト位置特定モジュール102は、集約スコアに応じた優先順位付けに基づいて、特定のステートメントを、他のステートメントよりも優先して、フォールト位置として特定するよう構成され得る。
いくつかの実施形態において、フォールト位置特定モジュール102は、特定されたフォールト位置を、フォールト位置112として出力するよう構成され得る。追加的又は代替的に、フォールト位置特定モジュール102は、上述したスコアのうちの1つ以上のスコアに応じて優先順位付けされた全てのステートメントのリストを、フォールト位置112として出力するよう構成されてもよい。
修復モジュール106は、コンピューティングデバイスが、テスト対象コード104の1つ以上の変更を実行して変更されたテスト対象コード108を生成することを可能にするよう構成されているコード及びルーチンを含み得る。追加的又は代替的に、修復モジュール106は、(例えば、1つ以上の動作を実行する又は1つ以上の動作の実行を制御する)プロセッサ、(例えば、1つ以上の動作を実行する又は1つ以上の動作の実行を制御する)マイクロプロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを使用して実装されてもよい。いくつかの他の例において、修復モジュール106は、ハードウェアとソフトウェアとの組合せを使用して実装されてもよい。本開示において、修復モジュール106により実行されるとして説明される動作は、対応するシステムに実行するように修復モジュール106が命令し得る動作を含み得る。
修復モジュール106は、テスト対象コード104内の1つ以上のフォールトを修復(修正とも呼ばれる)するために用いられ得る一連の修復動作を、テスト対象コード104に対して実行するよう構成され得る。いくつかの実施形態において、修復モジュール106は、修復テンプレートに基づいて、修復動作を実行するよう構成され得る。
いくつかの実施形態において、修復モジュール106は、フォールト位置112に含まれる1つ以上のフォールト位置に対して、修復動作のうちの1つ以上の修復動作を実行するよう構成され得る。修復動作は、特定のステートメントに含まれ得るフォールトを修復し得る、特定のステートメントに対する何らかの変更を含み得る。いくつかの実施形態において、変更は、何らかの適用可能な修復テンプレートに従ってなされ得る。フォールト位置として特定されたステートメントに対する変更は、本開示において、パッチと呼ばれることがある。いくつかの実施形態において、修復モジュール106は、フォールト位置112のうちの1つ以上のフォールト位置に対して実装され得る1つ以上のパッチを含み得る変更されたテスト対象コード108を出力するよう構成され得る。
本開示の範囲から逸脱することなく、図1に対して、変更、追加、又は省略が可能である。例えば、環境100は、本開示において図示及び説明された要素よりも多い又は少ない要素を含んでもよい。例えば、いくつかの実施形態において、フォールト位置特定モジュール102、修復モジュール106、テストスイート、及び修復テンプレートの1つ以上のルーチン、1つ以上の命令、又はコードの少なくとも一部は、組み合わされてもよいし、分離されてもよい。いくつかの実施形態において、動作は、上述した順序とは異なる順序で実行されることがある。
さらに、いくつかの実施形態において、フォールト位置112は、環境100の外部で使用されることがある。これらの実施形態又は他の実施形態において、環境100は、修復モジュール106を含まず、フォールト位置特定モジュール102を含み得る。
図2は、本開示の少なくとも1つの実施形態に従った例示的なコンピューティングシステム202のブロック図を示している。コンピューティングシステム202は、フォールト位置特定モジュール及び/又は修復モジュール(例えば、図1のフォールト位置特定モジュール102及び/又は修復モジュール106)に関連付けられている1つ以上の動作を実施又は指示するよう構成され得る。コンピューティングシステム202は、プロセッサ250、メモリ252、及びデータストレージ254を含み得る。プロセッサ250、メモリ252、及びデータストレージ254は、通信可能に接続され得る。
概して、プロセッサ250は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む任意の適切な専用又は汎用のコンピュータ、コンピューティングエンティティ、又は処理デバイスを含み得、任意の適用可能なコンピュータ読み取り可能な記憶媒体に記憶されている命令を実行するよう構成され得る。例えば、プロセッサ250は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又は、プログラム命令を解釈及び/又は実行し、且つ/又はデータを処理するよう構成されている任意の他のデジタル回路若しくはアナログ回路を含み得る。プロセッサ250は、図2において1つのプロセッサとして示されているが、プロセッサ250は、本開示に記載の任意の数の動作を個別的又は集合的に実行する又は本開示に記載の任意の数の動作の実行を個別的又は集合的に指示するよう構成されている任意の数のプロセッサを含んでもよい。さらに、プロセッサのうちの1つ以上のプロセッサは、異なるサーバ等の1つ以上の異なる電子デバイスにおいて存在してもよい。
いくつかの実施形態において、プロセッサ250は、メモリ252、データストレージ254、又はメモリ252とデータストレージ254との両方に記憶されているプログラム命令を解釈及び/又は実行し、且つ/又は、メモリ252、データストレージ254、又はメモリ252とデータストレージ254との両方に記憶されているデータを処理するよう構成され得る。いくつかの実施形態において、プロセッサ250は、データストレージ254からプログラム命令をフェッチして、プログラム命令をメモリ252にロードすることができる。プログラム命令がメモリ252にロードされた後、プロセッサ250は、プログラム命令を実行することができる。
例えば、いくつかの実施形態において、フォールト位置特定モジュール及び/又は修復モジュールは、プログラム命令として、データストレージ254に含められ得る。プロセッサ250は、データストレージ254からフォールト位置特定モジュール及び/又は修復モジュールのプログラム命令をフェッチして、フォールト位置特定モジュール及び/又は修復モジュールのプログラム命令をメモリ252にロードすることができる。フォールト位置特定モジュール及び/又は修復モジュールのプログラム命令がメモリ252にロードされた後、プロセッサ250は、コンピューティングシステムがフォールト位置特定モジュール及び/又は修復モジュールのプログラム命令により指示されるようにフォールト位置特定モジュール及び/又は修復モジュールに関連付けられている動作を実施できるように、フォールト位置特定モジュール及び/又は修復モジュールのプログラム命令を実行することができる。
メモリ252及びデータストレージ254は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な記憶媒体を含み得る。そのようなコンピュータ読み取り可能な記憶媒体は、プロセッサ250等の汎用又は専用のコンピュータによりアクセスされ得る任意の利用可能な媒体を含み得る。限定ではなく例として、そのようなコンピュータ読み取り可能な記憶媒体は、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的に消去可能なプログラム可能な読み取り専用メモリ(EEPROM)、コンパクトディスク読み取り専用メモリ(CD−ROM)若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、又は、コンピュータ実行可能な命令又はデータ構造の形態の特定のプログラムコードを運ぶ又は記憶するために使用され得る任意の他の記憶媒体であって、汎用又は専用のコンピュータによりアクセスされ得る任意の他の記憶媒体、を含む有形の又は非一時的なコンピュータ読み取り可能な記憶媒体を含み得る。上記の組合せも、コンピュータ読み取り可能な記憶媒体の範囲に含まれ得る。コンピュータ実行可能な命令は、例えば、プロセッサ250に所定の動作又は動作群を実行させるよう構成されている命令及びデータを含み得る。
本開示の範囲から逸脱することなく、コンピューティングシステム202に対して、変更、追加、又は省略が可能である。例えば、いくつかの実施形態において、コンピューティングシステム202は、明示的には図示又は説明されないかもしれない任意の数の他のコンポーネントを含んでもよい。
図3は、本開示に記載の少なくとも1つの実施形態に従った、ソフトウェアプログラム内のフォールト位置を特定する例示的な方法300のフローチャートを示している。方法300は、任意の適切なシステム、装置、又はデバイスにより、ソフトウェアプログラムのテスト対象コード(例えば、図1のテスト対象コード104)に対して実行され得る。例えば、図1のフォールト位置特定モジュール102若しくは修復モジュール106又は(例えば、フォールト位置特定モジュール若しくは修復モジュールにより命令される)図2のコンピューティングシステム202が、ソフトウェアプログラムについて、方法300に関連付けられている動作のうちの1つ以上の動作を実行できる又は方法300に関連付けられている動作のうちの1つ以上の動作の実行を命令できる。別個のブロックで図示されているが、方法300のブロックのうちの1つ以上のブロックに関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。
方法300は、ブロック302を含み得、ブロック302において、疑いスコアが、テストされ得るソフトウェアプログラムのテスト対象コードに含まれ得る複数のステートメントについて決定され得る。いくつかの実施形態において、疑いスコアは、図4の方法400を参照して以下で説明される1つ以上の動作に従って決定され得る。
ブロック304において、意味類似度スコアが、ブロック302において疑いスコアが決定され得る複数のステートメントの各ステートメントについて決定され得る。いくつかの実施形態において、ブロック302において、疑いスコアは、意味類似度スコアが決定され得る複数のステートメント以外の1つ以上の他のステートメントの各ステートメントについても決定され得る。したがって、いくつかの例において、ブロック302及び304に関して言及される複数のステートメントは、ブロック302において疑いスコアが決定され得る全てのステートメントのサブセットであることもある。
いくつかの実施形態において、上記の他のステートメントは、上記の他のステートメントが、図1を参照して上述したような疑い閾値を満たさない疑いスコアを有することに応じて、意味類似度スコアを決定することから除外され得る。追加的又は代替的に、複数のステートメントの疑いスコアはそれぞれ、意味類似度スコアが複数のステートメントの各ステートメントについて決定され得るように、疑い閾値を満たすこともある。いくつかの実施形態において、意味類似度スコアは、図5の方法500を参照して以下で説明される1つ以上の動作に従って決定され得る。
ブロック306において、変更スコアが、ブロック302において疑いスコアが決定され得る複数のステートメントの各ステートメントについて決定され得る。意味類似度スコアについて上述したのと同様に、いくつかの実施形態において、ブロック302において、疑いスコアは、変更スコアが決定され得る複数のステートメント以外の1つ以上の他のステートメントの各ステートメントについても決定され得る。したがって、いくつかの例において、ブロック302及び306に関して言及される複数のステートメントは、ブロック302において疑いスコアが決定され得る全てのステートメントのサブセットであることもある。
いくつかの実施形態において、上記の他のステートメントは、上記の他のステートメントが、図1を参照して上述したような疑い閾値を満たさない疑いスコアを有することに応じて、変更スコアを決定することから除外され得る。追加的又は代替的に、複数のステートメントの疑いスコアはそれぞれ、変更スコアが複数のステートメントの各ステートメントについて決定され得るように、疑い閾値を満たすこともある。いくつかの実施形態において、変更スコアは、図6の方法600を参照して以下で説明される1つ以上の動作に従って決定され得る。
ブロック308において、集約スコアが、複数のステートメントの各ステートメントについて決定され得る。いくつかの実施形態において、図1を参照して上記で示されたように、特定のステートメントの集約スコアは、特定のステートメントのそれぞれの疑いスコア、意味類似度スコア、及び/又は変更スコアに基づき得る。いくつかの実施形態において、集約スコアは、図7を参照して以下で説明される方法700の1つ以上の動作に従って決定され得る。
ブロック310において、特定のステートメントが、複数のステートメントから、フォールト位置として特定され得る。いくつかの実施形態において、特定のステートメントは、図1を参照して上述したように、複数のステートメントの集約スコアに基づいて特定され得る。
本開示の範囲から逸脱することなく、方法300に対して、変更、追加、又は省略が可能である。例えば、方法300の動作は、異なる順序で実行されることがある。追加的又は代替的に、2つ以上の動作は、同時に実行されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ないステップ及び動作に組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。
例えば、いくつかの実施形態において、方法300は、集約スコアに基づいて、フォールト位置として特定されるステートメントを優先順位付けし得る1つ以上の動作を含み得る。例えば、ステートメントは、ステートメントのそれぞれの集約スコアに基づいて、ランク付けされ得、ここで、フォールトを有する可能性がより高いことを示す集約スコアを有するステートメントは、より高くランク付けされ、そのようなステートメントには、フォールトを有する可能性がより低いことを示す集約スコアを有するステートメントよりも、特定についての高い優先順位が与えられる。さらに、いくつかの実施形態において、方法300は、ステートメントがフォールト位置として特定されたことに応じて、フォールト位置として特定されたステートメントに対して1つ以上の修復動作を実行することを含み得る。
加えて、いくつかの実施形態において、方法300は、反復的に実行され得、1つ以上の動作が、1つのフォールト位置について一度に実行され得る。追加的又は代替的に、1つ以上のブロックに関連付けられている1つ以上の動作は、複数のフォールト位置について一度に実行されることがある。
図4は、本開示に記載の少なくとも1つの実施形態に従った、ソフトウェアプログラムのステートメントについて疑いスコアを決定する例示的な方法400のフローチャートを示している。上記で示されたように、疑いスコアは、疑いスコアを使用してソフトウェアプログラム内のフォールト位置を特定できるように、ステートメントがフォールトを含む可能性を示し得る。方法400は、任意の適切なシステム、装置、又はデバイスにより、テスト対象コードに対して実行され得る。例えば、図1のフォールト位置特定モジュール102又は(例えば、フォールト位置特定モジュールにより命令される)図2のコンピューティングシステム202が、ソフトウェアプログラムのテスト対象コードについて、方法400に関連付けられている動作のうちの1つ以上の動作を実行できる又は方法400に関連付けられている動作のうちの1つ以上の動作の実行を命令できる。別個のブロックで図示されているが、方法400のブロックのうちの1つ以上の動作に関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。上記で示されたように、いくつかの例において、方法400の動作のうちの1つ以上の動作は、方法300のブロック304及び/又はブロック306について実行され得る。
方法400は、ブロック402で開始し得、ブロック402において、複数のテスト実行が、テスト対象コードに対して行われ得る。いくつかの実施形態において、テスト実行は、合格テスト実行及び失敗テスト実行を含み得る。追加的又は代替的に、いくつかの実施形態において、テスト対象コードは、テスト実行中に使用又は実行され得るステートメントが特定され得るように、テスト実行を行う前にインストルメントされることがある。
ブロック404において、テスト実行のうちの1つ以上の合格テスト実行が特定され得る。これらの実施形態又は他の実施形態において、合格テスト実行の全てが特定され得る。追加的又は代替的に、いくつかの実施形態において、特定された合格テスト実行中に使用又は実行された1つ以上のステートメントが、インストルメントに基づいて特定され得る。これらの実施形態又は他の実施形態において、特定された合格テスト実行中に使用又は実行されたステートメントの全てが特定され得る。
ブロック406において、テスト実行のうちの1つ以上の失敗テスト実行が特定され得る。これらの実施形態又は他の実施形態において、失敗テスト実行の全てが特定され得る。追加的又は代替的に、いくつかの実施形態において、特定された失敗テスト実行中に使用又は実行された1つ以上のステートメントが、インストルメントに基づいて特定され得る。これらの実施形態又は他の実施形態において、特定された失敗テスト実行中に使用又は実行されたステートメントの全てが特定され得る。
ブロック408において、テストスペクトルが、合格テスト実行、失敗テスト実行、及びステートメントに基づいて生成され得る。例えば、いくつかの実施形態において、テストスペクトルは、どのステートメントが、合格テスト実行の各合格テスト実行及び失敗テスト実行の各失敗テスト実行について使用又は実行されたかを示し得る。テストスペクトルはまた、どのステートメントが、合格テスト実行の各合格テスト実行により使用又は生成されなかったかを示すように生成され得る。追加的又は代替的に、テストスペクトルは、どのステートメントが、失敗テスト実行の各失敗テスト実行により使用又は生成されなかったかを示すように生成されることがある。
ブロック410において、1つ以上の使用係数が、テスト対象コード内に存在し得るステートメントの各ステートメントについて決定され得る。使用係数は、どの合格テスト実行及びどの失敗テスト実行が、それぞれのステートメントを使用又は実行したか又はしなかったかに基づき得る。例えば、いくつかの実施形態において、それぞれのステートメントを使用又は実行した合格テスト実行を示し得る使用係数「ep」が、それぞれのステートメントについて決定され得る。これらの実施形態又は他の実施形態において、それぞれのステートメントを使用又は実行しなかった合格テスト実行を示し得る使用係数「np」が、それぞれのステートメントについて決定され得る。これらの実施形態又は他の実施形態において、それぞれのステートメントを使用又は実行した失敗テスト実行を示し得る使用係数「ef」が、それぞれのステートメントについて決定され得る。これらの実施形態又は他の実施形態において、それぞれのステートメントを使用又は実行しなかった失敗テスト実行を示し得る使用係数「nf」が、それぞれのステートメントについて決定され得る。
ブロック412において、疑いスコアが、各ステートメントについて決定され得る。いくつかの実施形態において、疑いスコアは、それぞれのステートメントについて決定された使用係数に基づいて決定され得る。例えば、いくつかの実施形態において、各ステートメントの疑いスコアは、当該ステートメントの「ep」、「np」、「ef」、及び「nf」に基づき得る。疑いスコアを計算するためのいくつかの関数は、以下を含み得る:
Figure 2019021303
いくつかの実施形態において、疑いスコアは、正規化され得る。例えば、いくつかの例において、疑いスコアは、「0」と「1」との間の値を有するように正規化され得、ここで、「1」というスコアは、それぞれのステートメントがフォールトを含む可能性が非常に高いことを示し、「0」というスコアは、それぞれのステートメントがフォールトを含む可能性が非常に低い又は0であることを示す。以下は、特定のステートメントについて、正規化された疑いスコアを決定するための式である:
Figure 2019021303
上記の式において、「ステートメントの疑いスコア」は、特定のステートメントについて決定された疑いスコアを指し得、「いずれかのステートメントの最大疑いスコア」は、全てのステートメントに対して決定され得る最も高い疑いスコアを指し得る。最も高い疑いスコアを有するステートメントについては、分子と分母とが同じであることに留意されたい。いくつかの実施形態において、正規化は、疑いスコアが全てのステートメントについて決定された後に実行され得る。
本開示の範囲から逸脱することなく、方法400に対して、変更、追加、又は省略が可能である。例えば、方法400の動作は、異なる順序で実行されることがある。追加的又は代替的に、2つ以上の動作は、同時に実行されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ないステップ及び動作に組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。
加えて、いくつかの実施形態において、方法400の1つ以上の動作は、反復的に実行され得、1つのステートメントが一度に解析され得る。追加的又は代替的に、1つ以上のブロックに関連付けられている1つ以上の動作は、複数のステートメントについて一度に実行されることがある。
図5は、本開示に記載の少なくとも1つの実施形態に従った、ソフトウェアプログラムのステートメントについて意味類似度スコアを決定する例示的な方法500のフローチャートを示している。上記で示されたように、意味類似度スコアは、意味類似度スコアを使用してソフトウェアプログラム内のフォールト位置を特定できるように、ステートメントがフォールトを含む可能性を示し得る。方法500は、任意の適切なシステム、装置、又はデバイスにより、テスト対象コード(例えば、図1のテスト対象コード104)に対して実行され得る。例えば、図1のフォールト位置特定モジュール102又は(例えば、フォールト位置特定モジュールにより命令される)図2のコンピューティングシステム202が、テスト対象コードのステートメントについて、方法500に関連付けられている動作のうちの1つ以上の動作を実行できる又は方法500に関連付けられている動作のうちの1つ以上の動作の実行を命令できる。別個のブロックで図示されているが、方法500のブロックのうちの1つ以上のブロックに関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。
方法500は、ブロック502で開始し得、ブロック502において、テスト対象コードのステートメントが取得され得る。いくつかの実施形態において、ステートメントは、ステートメントが、図1及び図3を参照して上述したような疑い閾値を満たす疑いスコアを有することに基づいて、取得され得る。
ブロック504において、テスト対象コードに関するエラーレポートが取得され得る。いくつかの実施形態において、エラーレポートは、ソフトウェアプログラムをテストすることに関連する対応するエラー/フォールト追跡システムから取得され得る。いくつかの例において、エラーレポートは、開発者、テスト者、又はエンドユーザにより書かれ得る、任意的なコードスニペットを伴う、フォールトの自然言語記述であり得る。
ブロック506において、1つ以上の記号が、ステートメント及びエラーレポートから除去され得る。いくつかの実施形態において、記号の全てが、ステートメント及びエラーレポートから除去され得る。いくつかの例において、記号は、+、-等といった数学演算子、{,}、(,)等といった括弧等であり得る。
ブロック508において、ステートメントに含まれる連結されたトークン及びエラーレポートに含まれる連結されたトークンが、分割され得る。連結されたトークンは、単独でも使用され得る又は一般に単独で使用され得る1つ以上の単語又はインジケータを含むトークンを含み得る。例えば、「getBehaviorId」というトークンは、連結されたトークンである。なぜならば、このトークンは、「get」及び「Behavior」という単語と「Id」というインジケータとを含み、「get」、「Behavior」、及び「Id」は、いくつかの例において、単独で使用され得るからである。連結されたトークンを分割することは、連結されたトークンを、連結されたトークンに含まれ得る個々の単語又はインジケータに分割することを含み得る。例えば、「getBehaviorId」は、「get」、「Behavior」、及び「Id」に分割され得る。
ブロック510において、意味類似度スコアが、ステートメントについて決定され得る。意味類似度スコアは、エラーレポートのレポートトークンに対するステートメントのステートメントトークンの意味類似度を示し得る。
例えば、いくつかの実施形態において、テキスト類似度解析が、レポートトークンのうちの1つ以上のレポートトークンに対するステートメントトークンのうちの1つ以上のステートメントトークンについて実行され得る。いくつかの実施形態において、テキスト類似度解析は、各ステートメントトークンと各レポートトークンとの間で実行され得る。例えば、いくつかの実施形態において、テキスト類似度は、最長共通部分列(LCS)アルゴリズム又はJaccard係数を用いて決定され得る。テキスト類似度はまた、テキスト非類似度の逆と考えられ得る。したがって、編集距離等、テキスト非類似度決定に関連する任意の適用可能なアルゴリズムが使用されてもよい。
いくつかの実施形態において、テキスト類似度解析を用いて、ステートメントについて意味類似度スコアを生成することができる。例えば、いくつかの実施形態において、ステートメントとエラーレポートとの間の類似する又は共通するトークン(例えば、類似する又は同じテキスト記述を有するトークン)の数が、テキスト類似度解析に基づいて決定され得る。追加的又は代替的に、いくつかの実施形態において、テキスト類似度スコアは、決定された共通するトークンの数であり得る。
これらの実施形態又は他の実施形態において、意味類似度スコアは、「0」と「1」との間の値を有するように正規化され得、ここで、「1」というスコアは、ステートメントが、他のステートメントと比較して、エラーレポートに対して最も多い数の共通するトークンを有することを示し、「0」というスコアは、ステートメントが、エラーレポートに対して共通するトークンを有しないことを示す。例えば、いくつかの実施形態において、意味類似度スコアは、以下の式を使用して決定され得る:
Figure 2019021303
上記の式において、「現ステートメントの共通するトークンの数」は、意味類似度スコアが決定され得るステートメントについて決定された共通するトークンの数を指し得、「ステートメントのうちのいずれかの共通するトークンの最も多い数」は、全てのステートメントに対して見出され得る共通するトークンの最も多い数を指し得る。最も多い数の共通するトークンを有するステートメントについては、分子と分母とが同じであることに留意されたい。いくつかの実施形態において、正規化は、共通するトークンの数が全てのステートメントについて決定された後に実行され得る。
本開示の範囲から逸脱することなく、方法500に対して、変更、追加、又は省略が可能である。例えば、方法500の動作は、異なる順序で実行されることがある。追加的又は代替的に、2つ以上の動作は、同時に実行されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ないステップ及び動作に組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。さらに、与えられたスコアリング技術は、単に例に過ぎず、スコアリングに関する任意の適切な変形例が使用されてもよい。例えば、TF.DIF、ベクトル空間モデル(VSM)、BM25等といった先進的な情報検索技術を使用して、各ステートメントとエラーレポートとの間の意味類似度を決定してもよい。加えて、いくつかの実施形態において、方法500は、各ステートメント個々について反復的に実行されることもあるし、2つ以上のステートメントについて一度に実行されることもある。
図6は、本開示に記載の少なくとも1つの実施形態に従った、ソフトウェアプログラムのステートメントについて変更スコアを決定する例示的な方法600のフローチャートを示している。上記で示されたように、変更スコアは、変更スコアを使用してソフトウェアプログラム内のフォールト位置を特定できるように、ステートメントがフォールトを含む可能性を示し得る。方法600は、任意の適切なシステム、装置、又はデバイスにより、テスト対象コード(例えば、図1のテスト対象コード104)に対して実行され得る。例えば、図1のフォールト位置特定モジュール102又は(例えば、フォールト位置特定モジュールにより命令される)図2のコンピューティングシステム202が、テスト対象コードのステートメントについて、方法600に関連付けられている動作のうちの1つ以上の動作を実行できる又は方法600に関連付けられている動作のうちの1つ以上の動作の実行を命令できる。別個のブロックで図示されているが、方法600のブロックのうちの1つ以上のブロックに関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。
方法600は、ブロック602で開始し得、ブロック602において、テスト対象コードのステートメントが取得され得る。いくつかの実施形態において、ステートメントは、ステートメントが、図1及び図3を参照して上述したような疑い閾値を満たす疑いスコアを有することに基づいて、取得され得る。
ブロック604において、現在の時点が取得され得る。例えば、現在の時点は、現在の日付及び時間であり得る。
ブロック606において、ステートメントが最後に変更されたときである前の時点が取得され得る。例えば、ステートメントが最後に変更されたときの日付及び時間が取得され得る。
ブロック608において、取得された現在の時点と取得された前の時点との間の差が決定され得る。差は、秒、分、時間、日、週、月、年、又は、経過した時間を測る任意の他の形の観点で決定され得る。これに応じた差を用いて、ステートメントが最後に変更されたときからどれくらいの時間が経過したかを決定することができる。
ブロック610において、時間減衰モデルが、変更スコアを決定するために選択され得る。いくつかの実施形態において、時間減衰モデルは、異なる時間差が線形的に変更スコアに影響を及ぼし得る線形モデルであり得る。例えば、線形モデルにおいて、2週という差に対応する第1の変更スコアは、第1の値を有し得、4週という差に対応する第2の変更スコアは、第2の値を有し得、6週という差に対応する第3の変更スコアは、第3の値を有し得る。この例において、第1の値と第2の値との間の関係は、第2の値と第3の値との間の関係と同じ又は実質的に同じであり得る。
いくつかの実施形態において、時間減衰モデルは、異なる時間差が非線形的に変更スコアに影響を及ぼし得る非線形モデルであり得る。例えば、非線形モデルにおいて、2週という差に対応する第1の変更スコアは、第1の値を有し得、4週という差に対応する第2の変更スコアは、第2の値を有し得、6週という差に対応する第3の変更スコアは、第3の値を有し得る。この例において、第1の値と第2の値との間の関係は、第2の値と第3の値との間の関係と同じ又は実質的に同じではあり得ない。
上述したように、いくつかの例において、ステートメントが変更されたときから経過した時間が長いほど、ステートメントがフォールトを含む可能性は低くなり得る。したがって、いくつかの実施形態において、非線形モデルは、より最近ではない変更に対応する差よりも、より最近である変更に対応する差に対して、より重く時間差を非線形的に重み付けし得る。
ブロック612において、変更スコアが、ブロック608において決定された時間差及び時間減衰モデルに基づいて、ステートメントについて決定され得る。追加的又は代替的に、いくつかの実施形態において、変更スコアは、「0」と「1」との間の値に正規化されるように、決定されることがあり、ここで、「1」により近い値は、「0」により近い値よりも最近変更がなされたことを示す。
例えば、線形時間減衰モデルが使用されるいくつかの実施形態において、変更スコアは、以下の式に基づいて、ステートメントについて決定され得る:
Figure 2019021303
上記の式において、「diff」は、それぞれのステートメントについて決定された時間差を指し得、「diffmin」は、テスト対象コードのステートメントのうちのいずれかについて決定された最小の時間差を指し得、「diffmax」は、テスト対象コードのステートメントのうちのいずれかについて決定された最大の時間差を指し得る。いくつかの実施形態において、正規化は、時間差が全てのステートメントについて決定された後に実行され得る。
別の例として、非線形時間減衰モデルが使用されるいくつかの実施形態において、変更スコアは、以下の式に基づいて、ステートメントについて決定され得る:
Figure 2019021303
上記の式において、「β」は、変更スコアを決定する際により長い時間経過が重み付けされ得る程度に基づき得る減衰率を指し得る。さらに、「t」は、ステートメントについて決定された時間差を指し得る。
本開示の範囲から逸脱することなく、方法600に対して、変更、追加、又は省略が可能である。例えば、方法600の動作は、異なる順序で実行されることがある。追加的又は代替的に、2つ以上の動作は、同時に実行されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ないステップ及び動作に組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。さらに、与えられたスコアリング技術は、単に例に過ぎず、スコアリングに関する任意の適切な変形例が使用されてもよい。
図7は、本開示に記載の少なくとも1つの実施形態に従った、ソフトウェアプログラムのステートメントについて集約スコアを決定する例示的な方法700のフローチャートを示している。上記で示されたように、集約スコアは、集約スコアを使用してソフトウェアプログラム内のフォールト位置を特定できるように、ステートメントがフォールトを含む可能性を示し得る。方法700は、任意の適切なシステム、装置、又はデバイスにより、テスト対象コード(例えば、図1のテスト対象コード104)に対して実行され得る。例えば、図1のフォールト位置特定モジュール102又は(例えば、フォールト位置特定モジュールにより命令される)図2のコンピューティングシステム202が、テスト対象コードのステートメントについて、方法700に関連付けられている動作のうちの1つ以上の動作を実行できる又は方法700に関連付けられている動作のうちの1つ以上の動作の実行を命令できる。別個のブロックで図示されているが、方法700のブロックのうちの1つ以上の動作に関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。
方法700は、ブロック702で開始し得、ブロック702において、疑いスコアが、ステートメントについて決定され得る。いくつかの実施形態において、疑いスコアは、図4の方法400の1つ以上の動作に従って決定され得る。追加的又は代替的に、いくつかの実施形態において、疑いスコアは正規化されることもある。
ブロック704において、意味類似度スコアが、ステートメントについて決定され得る。いくつかの実施形態において、意味類似度スコアは、図5の方法500の1つ以上の動作に従って決定され得る。追加的又は代替的に、いくつかの実施形態において、意味類似度スコアは正規化されることもある。
ブロック706において、変更スコアが、ステートメントについて決定され得る。いくつかの実施形態において、変更スコアは、図6の方法600の1つ以上の動作に従って決定され得る。追加的又は代替的に、いくつかの実施形態において、変更スコアは正規化されることもある。
ブロック708において、集約スコアが、ステートメントについて決定され得る。いくつかの実施形態において、集約スコアは、疑いスコア、意味類似度スコア、及び変更スコアのうちの2つ以上に基づいて決定され得る。例えば、いくつかの実施形態において、集約スコアは、疑いスコアと意味類似度スコアとの平均であり得る。追加的又は代替的に、集約スコアは、疑いスコアと変更スコアとの平均であることもある。これらの実施形態又は他の実施形態において、集約スコアは、意味類似度スコアと変更スコアとの平均であることもある。これらの実施形態又は他の実施形態において、集約スコアは、疑いスコアと意味類似度スコアと変更スコアとの平均であることもある。いくつかの実施形態において、集約スコアを生成する際に使用される異なるスコアは、重み付けされ得る。追加的又は代替的に、重み付けは、ステートメントがフォールトを含み得ることを示す際にどのスコアをより重く重み付けし得るかを示し得る経験的データの機械学習解析に基づいて決定され得る。
集約スコアの計算は、平均とは異なってもよい。例えば、集約スコアは、和、積、又は任意の他の適用可能な演算値として決定されてもよい。追加的又は代替的に、いくつかの実施形態において、集約スコアに関連するこれらのスコアのうちの2つ以上のスコアが、線形回帰、ロジスティック回帰、決定木技術、又はランダムフォレスト技術等の様々な機械学習技術を使用して学習された数学モデルを使用して組み合わされてもよい。
本開示の範囲から逸脱することなく、方法700に対して、変更、追加、又は省略が可能である。例えば、方法700の動作は、異なる順序で実行されることがある。追加的又は代替的に、2つ以上の動作は、同時に実行されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ないステップ及び動作に組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。さらに、与えられたスコアリング技術は、単に例に過ぎず、スコアリングに関する任意の適切な変形例が使用されてもよい。
上記で示されたように、本開示に記載の実施形態は、以下でより詳細に説明されるような様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用のコンピュータ(例えば、図2のプロセッサ250)の使用を含み得る。さらに、上記で示されたように、本開示に記載の実施形態は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な媒体(例えば、図2のメモリ252)を使用して実装され得る。
本開示において使用される場合、「モジュール」又は「コンポーネント」という用語は、モジュール又はコンポーネントのアクションを実行するよう構成されている特定のハードウェア実装、及び/又は、コンピューティングシステムの汎用ハードウェア(例えば、コンピュータ読み取り可能な媒体等)に記憶され得る且つ/又はコンピューティングシステムの汎用ハードウェア(例えば、処理デバイス等)により実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを指し得る。いくつかの実施形態において、本開示に記載の異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピューティングシステム上で実行されるオブジェクト又はプロセスとして(例えば、別個のスレッドとして)実装され得る。本開示に記載のシステム及び方法のうちの一部は、(汎用ハードウェアに記憶される且つ/又は汎用ハードウェアにより実行される)ソフトウェアにより実装されるとして一般に説明されるが、特定のハードウェア実装又はソフトウェアと特定のハードウェア実装との組合せも可能であり企図されている。本説明において、「コンピューティングエンティティ」は、本開示において前に定義された任意のコンピューティングシステム、又は、コンピューティングシステム上で動作する任意のモジュール又はモジュールの組合せであり得る。
本開示及び特に請求項(例えば、請求項の本体部分)において使用される用語は、一般に、「オープンな」用語であるとして意図される(例えば、「〜を備える」という用語は、「〜を備えるが、〜に限定されるものではない」として解釈されるべきであり、「〜を有する」という用語は、「少なくとも〜を有する」として解釈されるべきであり、「〜を含む」という用語は、「〜を含むが、〜に限定されるものではない」として解釈されるべきである、等)。
さらに、導入される請求項記載事項の特定の数が意図される場合、そのような意図は、当該請求項中に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、請求項中に、請求項記載事項を導入するための「少なくとも1つの」及び「1つ以上の」といった導入句の使用が含まれることがある。しかしながら、このような導入句の使用は、「a」又は「an」といった不定冠詞による請求項記載事項の導入が、同一の請求項中に「1つ以上の」又は「少なくとも1つの」といった導入句と「a」又は「an」といった不定冠詞とが含まれるとしても、当該導入された請求項記載事項を含む特定の請求項が、当該請求項記載事項を1つしか含まない実施形態に限定されることを意味するとして解釈されるべきではない(例えば、「a」及び/又は「an」は、「少なくとも1つの」又は「1つ以上の」を意味するとして解釈されるべきである)。請求項記載事項を導入するために使用される定冠詞の使用についても同じことが当てはまる。
さらに、導入される請求項記載事項の特定の数が明示的に記載されている場合であっても、そのような記載は、少なくとも記載されている数を意味するとして解釈されるべきである(例えば、他の修飾語のない「2つの記載事項」という単なる記載は、少なくとも2つの記載事項又は2つ以上の記載事項を意味する)ことが、当業者であれば認識されよう。さらに、「A、B、及びC等のうちの少なくとも1つ」又は「A、B、及びC等のうちの1つ以上」に類する表記が使用される場合、一般に、そのような構造は、Aのみ、Bのみ、Cのみ、A及びBの両方、A及びCの両方、B及びCの両方、又は、A、B、及びCの全て、等を含むことが意図される。
さらに、2つ以上の選択可能な用語を表すいかなる離接語又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの1つ、それらの用語の組合せ、又は、それらの用語の全てを含む可能性を意図するとして理解されるべきである。例えば、「A又はB」という句は、「A」若しくは「B」又は「A及びB」の可能性を含むとして理解されるべきである。
本開示において記載された全ての例及び条件付き文言は、当該技術を促進させるために本発明者によって寄与されるコンセプト及び本開示を読者が理解するのを助ける教育上の目的のために意図され、そのような具体的に記載された例及び条件に限定されるものではないとして解釈されるべきである。本開示の実施形態が詳細に説明されたが、それら実施形態に対する様々な変形、置換、及び変更が、本開示の主旨及び範囲から逸脱することなく可能である。
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うステップと、
前記複数のテスト実行のうちの1つ以上の合格テストを特定するステップと、
前記複数のテスト実行のうちの1つ以上の失敗テストを特定するステップと、
前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用に基づいて決定するステップと、
前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる1つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる1つ以上のレポートトークンと、の間の意味類似度に基づいて決定するステップと、
前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した時間に基づいて決定するステップと、
前記複数のステートメントの各ステートメントの集約スコアを、当該ステートメントの前記疑いスコア、前記意味類似度スコア、及び前記変更スコアに基づいて決定するステップと、
前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定するステップと、
を含む方法。
(付記2)
前記複数のステートメントの各ステートメントの前記疑いスコアは、前記複数のステートメントの各ステートメントがフォールトを有する可能性があることを示す疑い閾値を満たし、
前記方法は、
前記テスト対象コードに含まれ、前記複数のステートメントには含まれない1つ以上の他のステートメントの各ステートメントの疑いスコアを決定するステップであって、前記1つ以上の他のステートメントの各ステートメントの前記疑いスコアは、前記疑い閾値を満たさない、ステップと、
前記複数のステートメントの各ステートメントの前記疑いスコアが前記疑い閾値を満たすことと、前記1つ以上の他のステートメントの各ステートメントの前記疑いスコアが前記疑い閾値を満たさないことと、に基づいて、前記1つ以上の他のステートメントではなく、前記複数のステートメントの各ステートメントの前記意味類似度スコア及び前記変更スコアを決定するステップと、
をさらに含む、付記1に記載の方法。
(付記3)
前記の特定されたフォールト位置に基づいて、修復動作を実行するステップをさらに含む、付記1に記載の方法。
(付記4)
前記複数のステートメントを、前記複数のステートメントのそれぞれの前記集約スコアに基づいてランク付けするステップと、
前記特定のステートメントを、前記特定のステートメントのランクに基づいて、前記フォールト位置として特定するステップと、
をさらに含む、付記1に記載の方法。
(付記5)
前記特定のステートメントを、前記複数のステートメントのうちの他のステートメントの他の前記集約スコアと比較した前記特定のステートメントの前記集約スコアに基づいて、前記フォールト位置として特定するステップをさらに含む、付記1に記載の方法。
(付記6)
変更が生じたときから経過した前記時間を線形的に重み付けする時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、付記1に記載の方法。
(付記7)
変更が生じたときから経過した前記時間を非線形的に重み付けする時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、付記1に記載の方法。
(付記8)
前記意味類似度スコアを決定することは、
前記ステートメント及び前記エラーレポートに含まれる1つ以上の連結されたトークンの各連結されたトークンを、複数の連結されていないトークンに分割することと、
前記連結されていないトークンに基づいて、前記意味類似度スコアを決定することと、
を含む、付記1に記載の方法。
(付記9)
前記集約スコアを決定する際に、前記疑いスコア、前記意味類似度スコア、及び前記変更スコアを、以前に決定された集約スコアに基づくフォールト位置選択の機械学習解析に基づいて重み付けするステップをさらに含む、付記1に記載の方法。
(付記10)
少なくとも1つの非一時的なコンピュータ読み取り可能な媒体は、1つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも1つのプロセッサにより実行されたことに応じて、システムに付記1に記載の方法を実行させる、付記1に記載の方法。
(付記11)
ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うステップと、
前記複数のテスト実行のうちの1つ以上の合格テストを特定するステップと、
前記複数のテスト実行のうちの1つ以上の失敗テストを特定するステップと、
前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの集約スコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用;当該ステートメントに含まれる1つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる1つ以上のレポートトークンと、の間の意味類似度;及び、当該ステートメントが変更を受けたときから経過した時間;のうちの2つ以上に基づいて決定するステップと、
前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定するステップと、
を含む方法。
(付記12)
前記ソフトウェアプログラムの前記テスト対象コードの前記複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの前記使用及び前記不使用に基づいて決定するステップと、
前記疑いスコアに基づいて、前記集約スコアを決定するステップと、
をさらに含む、付記11に記載の方法。
(付記13)
前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる前記1つ以上のステートメントトークンと、前記エラーレポートに含まれる前記1つ以上のレポートトークンと、の間の前記意味類似度に基づいて決定するステップと、
前記意味類似度スコアに基づいて、前記集約スコアを決定するステップと、
をさらに含む、付記11に記載の方法。
(付記14)
前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した前記時間に基づいて決定するステップと、
前記変更スコアに基づいて、前記集約スコアを決定するステップと、
をさらに含む、付記11に記載の方法。
(付記15)
変更が生じたときから経過した前記時間を線形的に重み付けする線形時間減衰モデル、又は、変更が生じたときから経過した前記時間を非線形的に重み付けする非線形時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、付記14に記載の方法。
(付記16)
前記の特定されたフォールト位置に基づいて、修復動作を実行するステップをさらに含む、付記11に記載の方法。
(付記17)
前記特定のステートメントを、前記複数のステートメントのうちの他のステートメントの他の前記集約スコアと比較した前記特定のステートメントの前記集約スコアに基づいて、前記フォールト位置として特定するステップをさらに含む、付記11に記載の方法。
(付記18)
少なくとも1つの非一時的なコンピュータ読み取り可能な媒体は、1つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも1つのプロセッサにより実行されたことに応じて、システムに付記11に記載の方法を実行させる、付記11に記載の方法。
(付記19)
システムであって、
命令を記憶している1つ以上のコンピュータ読み取り可能な記憶媒体と、
前記1つ以上のコンピュータ読み取り可能な記憶媒体に通信可能に接続され、前記命令の実行に応じて、前記システムに動作を実行させるよう構成されている1つ以上のプロセッサであって、前記動作は、
ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うことと、
前記複数のテスト実行のうちの1つ以上の合格テストを特定することと、
前記複数のテスト実行のうちの1つ以上の失敗テストを特定することと、
前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの集約スコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用;当該ステートメントに含まれる1つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる1つ以上のレポートトークンと、の間の意味類似度;及び、当該ステートメントが変更を受けたときから経過した時間;のうちの2つ以上に基づいて決定することと、
前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定することと、
を含む、1つ以上のプロセッサと、
を有するシステム。
(付記20)
前記動作は、
前記ソフトウェアプログラムの前記テスト対象コードの前記複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの前記使用及び前記不使用に基づいて決定することと、
前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる前記1つ以上のステートメントトークンと、前記エラーレポートに含まれる前記1つ以上のレポートトークンと、の間の前記意味類似度に基づいて決定することと、
前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した前記時間に基づいて決定することと、
前記複数のステートメントの各ステートメントの前記集約スコアを、当該ステートメントの前記疑いスコア、前記意味類似度スコア、及び前記変更スコアに基づいて決定することと、
をさらに含む、付記19に記載のシステム。
102 フォールト位置特定モジュール
104 テスト対象コード
106 修復モジュール
108 変更されたテスト対象コード
112 フォールト位置
202 コンピューティングシステム
250 プロセッサ
252 メモリ
254 データストレージ

Claims (20)

  1. ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うステップと、
    前記複数のテスト実行のうちの1つ以上の合格テストを特定するステップと、
    前記複数のテスト実行のうちの1つ以上の失敗テストを特定するステップと、
    前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用に基づいて決定するステップと、
    前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる1つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる1つ以上のレポートトークンと、の間の意味類似度に基づいて決定するステップと、
    前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した時間に基づいて決定するステップと、
    前記複数のステートメントの各ステートメントの集約スコアを、当該ステートメントの前記疑いスコア、前記意味類似度スコア、及び前記変更スコアに基づいて決定するステップと、
    前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定するステップと、
    を含む方法。
  2. 前記複数のステートメントの各ステートメントの前記疑いスコアは、前記複数のステートメントの各ステートメントがフォールトを有する可能性があることを示す疑い閾値を満たし、
    前記方法は、
    前記テスト対象コードに含まれ、前記複数のステートメントには含まれない1つ以上の他のステートメントの各ステートメントの疑いスコアを決定するステップであって、前記1つ以上の他のステートメントの各ステートメントの前記疑いスコアは、前記疑い閾値を満たさない、ステップと、
    前記複数のステートメントの各ステートメントの前記疑いスコアが前記疑い閾値を満たすことと、前記1つ以上の他のステートメントの各ステートメントの前記疑いスコアが前記疑い閾値を満たさないことと、に基づいて、前記1つ以上の他のステートメントではなく、前記複数のステートメントの各ステートメントの前記意味類似度スコア及び前記変更スコアを決定するステップと、
    をさらに含む、請求項1に記載の方法。
  3. 前記の特定されたフォールト位置に基づいて、修復動作を実行するステップをさらに含む、請求項1に記載の方法。
  4. 前記複数のステートメントを、前記複数のステートメントのそれぞれの前記集約スコアに基づいてランク付けするステップと、
    前記特定のステートメントを、前記特定のステートメントのランクに基づいて、前記フォールト位置として特定するステップと、
    をさらに含む、請求項1に記載の方法。
  5. 前記特定のステートメントを、前記複数のステートメントのうちの他のステートメントの他の前記集約スコアと比較した前記特定のステートメントの前記集約スコアに基づいて、前記フォールト位置として特定するステップをさらに含む、請求項1に記載の方法。
  6. 変更が生じたときから経過した前記時間を線形的に重み付けする時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、請求項1に記載の方法。
  7. 変更が生じたときから経過した前記時間を非線形的に重み付けする時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、請求項1に記載の方法。
  8. 前記意味類似度スコアを決定することは、
    前記ステートメント及び前記エラーレポートに含まれる1つ以上の連結されたトークンの各連結されたトークンを、複数の連結されていないトークンに分割することと、
    前記連結されていないトークンに基づいて、前記意味類似度スコアを決定することと、
    を含む、請求項1に記載の方法。
  9. 前記集約スコアを決定する際に、前記疑いスコア、前記意味類似度スコア、及び前記変更スコアを、以前に決定された集約スコアに基づくフォールト位置選択の機械学習解析に基づいて重み付けするステップをさらに含む、請求項1に記載の方法。
  10. 少なくとも1つの非一時的なコンピュータ読み取り可能な媒体は、1つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも1つのプロセッサにより実行されたことに応じて、システムに請求項1に記載の方法を実行させる、請求項1に記載の方法。
  11. ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うステップと、
    前記複数のテスト実行のうちの1つ以上の合格テストを特定するステップと、
    前記複数のテスト実行のうちの1つ以上の失敗テストを特定するステップと、
    前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの集約スコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用;当該ステートメントに含まれる1つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる1つ以上のレポートトークンと、の間の意味類似度;及び、当該ステートメントが変更を受けたときから経過した時間;のうちの2つ以上に基づいて決定するステップと、
    前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定するステップと、
    を含む方法。
  12. 前記ソフトウェアプログラムの前記テスト対象コードの前記複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの前記使用及び前記不使用に基づいて決定するステップと、
    前記疑いスコアに基づいて、前記集約スコアを決定するステップと、
    をさらに含む、請求項11に記載の方法。
  13. 前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる前記1つ以上のステートメントトークンと、前記エラーレポートに含まれる前記1つ以上のレポートトークンと、の間の前記意味類似度に基づいて決定するステップと、
    前記意味類似度スコアに基づいて、前記集約スコアを決定するステップと、
    をさらに含む、請求項11に記載の方法。
  14. 前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した前記時間に基づいて決定するステップと、
    前記変更スコアに基づいて、前記集約スコアを決定するステップと、
    をさらに含む、請求項11に記載の方法。
  15. 変更が生じたときから経過した前記時間を線形的に重み付けする線形時間減衰モデル、又は、変更が生じたときから経過した前記時間を非線形的に重み付けする非線形時間減衰モデルに基づいて、前記変更スコアを決定するステップをさらに含む、請求項14に記載の方法。
  16. 前記の特定されたフォールト位置に基づいて、修復動作を実行するステップをさらに含む、請求項11に記載の方法。
  17. 前記特定のステートメントを、前記複数のステートメントのうちの他のステートメントの他の前記集約スコアと比較した前記特定のステートメントの前記集約スコアに基づいて、前記フォールト位置として特定するステップをさらに含む、請求項11に記載の方法。
  18. 少なくとも1つの非一時的なコンピュータ読み取り可能な媒体は、1つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも1つのプロセッサにより実行されたことに応じて、システムに請求項11に記載の方法を実行させる、請求項11に記載の方法。
  19. システムであって、
    命令を記憶している1つ以上のコンピュータ読み取り可能な記憶媒体と、
    前記1つ以上のコンピュータ読み取り可能な記憶媒体に通信可能に接続され、前記命令の実行に応じて、前記システムに動作を実行させるよう構成されている1つ以上のプロセッサであって、前記動作は、
    ソフトウェアプログラムのテスト対象コードに対して複数のテストを実行して、複数のテスト実行を行うことと、
    前記複数のテスト実行のうちの1つ以上の合格テストを特定することと、
    前記複数のテスト実行のうちの1つ以上の失敗テストを特定することと、
    前記ソフトウェアプログラムの前記テスト対象コードの複数のステートメントの各ステートメントの集約スコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの使用及び不使用;当該ステートメントに含まれる1つ以上のステートメントトークンと、前記テスト対象コードについて生成されたエラーレポートに含まれる1つ以上のレポートトークンと、の間の意味類似度;及び、当該ステートメントが変更を受けたときから経過した時間;のうちの2つ以上に基づいて決定することと、
    前記複数のステートメントの前記集約スコアに基づいて、前記複数のステートメントのうちの特定のステートメントを、前記テスト対象コード内のフォールト位置として特定することと、
    を含む、1つ以上のプロセッサと、
    を有するシステム。
  20. 前記動作は、
    前記ソフトウェアプログラムの前記テスト対象コードの前記複数のステートメントの各ステートメントの疑いスコアを、前記合格テスト及び前記失敗テストにおける当該ステートメントの前記使用及び前記不使用に基づいて決定することと、
    前記複数のステートメントの各ステートメントの意味類似度スコアを、当該ステートメントに含まれる前記1つ以上のステートメントトークンと、前記エラーレポートに含まれる前記1つ以上のレポートトークンと、の間の前記意味類似度に基づいて決定することと、
    前記複数のステートメントの各ステートメントの変更スコアを、当該ステートメントが変更を受けたときから経過した前記時間に基づいて決定することと、
    前記複数のステートメントの各ステートメントの前記集約スコアを、当該ステートメントの前記疑いスコア、前記意味類似度スコア、及び前記変更スコアに基づいて決定することと、
    をさらに含む、請求項19に記載のシステム。
JP2018102368A 2017-07-12 2018-05-29 ソフトウェアプログラムフォールト位置特定 Active JP7095408B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/648,441 US10678673B2 (en) 2017-07-12 2017-07-12 Software program fault localization
US15/648441 2017-07-12

Publications (2)

Publication Number Publication Date
JP2019021303A true JP2019021303A (ja) 2019-02-07
JP7095408B2 JP7095408B2 (ja) 2022-07-05

Family

ID=65000283

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018102368A Active JP7095408B2 (ja) 2017-07-12 2018-05-29 ソフトウェアプログラムフォールト位置特定

Country Status (2)

Country Link
US (1) US10678673B2 (ja)
JP (1) JP7095408B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022153412A1 (ja) * 2021-01-13 2022-07-21 日本電信電話株式会社 スコア統合装置、スコア統合方法、および、スコア統合プログラム

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10761961B2 (en) * 2018-12-21 2020-09-01 Fujitsu Limited Identification of software program fault locations
CN110209573B (zh) * 2019-05-08 2023-06-02 三峡大学 一种增强软件故障定位效果的方法
CN110362484B (zh) * 2019-07-03 2022-03-01 北京航空航天大学 软件多故障的定位方法、装置、电子设备以及存储介质
US11176026B2 (en) 2020-02-20 2021-11-16 International Business Machines Corporation Assignment of test case priorities based on combinatorial test design model analysis
US11086768B1 (en) * 2020-02-20 2021-08-10 International Business Machines Corporation Identifying false positives in test case failures using combinatorics
US11307975B2 (en) 2020-02-20 2022-04-19 International Business Machines Corporation Machine code analysis for identifying software defects
US11663113B2 (en) 2020-02-20 2023-05-30 International Business Machines Corporation Real time fault localization using combinatorial test design techniques and test case priority selection
US11163674B1 (en) * 2020-09-28 2021-11-02 Palo Alto Research Center Incorporated System and method for identifying a faulty component in a spectrum ambiguity group
CN112698975B (zh) * 2020-12-14 2022-09-27 北京大学 一种微服务架构信息系统的故障根因定位方法及系统
KR102496332B1 (ko) * 2020-12-15 2023-02-07 한국과학기술원 고차 돌연변이를 이용한 소프트웨어 결함 위치 추정을 위한 컴퓨터 시스템 및 그의 방법
US11520689B2 (en) * 2020-12-28 2022-12-06 Palo Alto Research Center Incorporated System and method for automatic program repair using fast-result test cases
CN112711537B (zh) * 2020-12-31 2022-08-12 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 软件缺陷定位方法及装置、电子设备及存储介质
CN113688061A (zh) * 2021-10-27 2021-11-23 南开大学 一种基于特征选择的程序缺陷定位方法
CN115185814A (zh) * 2022-06-13 2022-10-14 中南大学 一种基于二维程序频谱的多缺陷定位方法、系统及设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017045446A (ja) * 2015-08-25 2017-03-02 富士通株式会社 ソフトウェアプログラムを修復する方法、記憶媒体及びシステム

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5604895A (en) * 1994-02-22 1997-02-18 Motorola Inc. Method and apparatus for inserting computer code into a high level language (HLL) software model of an electrical circuit to monitor test coverage of the software model when exposed to test inputs
US7013457B2 (en) * 2001-07-26 2006-03-14 Springsoft, Inc. Prioritized debugging of an error space in program code
US20050028146A1 (en) * 2003-08-01 2005-02-03 Quick Shawn G. Systems and methods for software and firmware testing using checkpoint signatures
US20070016894A1 (en) * 2005-07-15 2007-01-18 Sreedhar Vugranam C System and method for static analysis using fault paths
US20080196012A1 (en) * 2007-02-12 2008-08-14 Panaya Ltd. System and methods for static analysis of large computer programs and for presenting the results of the analysis to a user of a computer program
US8181163B2 (en) * 2007-05-07 2012-05-15 Microsoft Corporation Program synthesis and debugging using machine learning techniques
US7882495B2 (en) * 2007-06-14 2011-02-01 Microsoft Corporation Bounded program failure analysis and correction
US8117598B2 (en) * 2007-09-27 2012-02-14 Oracle America, Inc. Method and apparatus to automatically identify specific code changes to probabilistically exclude from regression
US8468497B2 (en) * 2007-11-27 2013-06-18 International Business Machines Corporation Automated defect classification
WO2009089294A2 (en) * 2008-01-08 2009-07-16 Teamstudio, Inc. Methods and systems for generating software quality index
US8098585B2 (en) * 2008-05-21 2012-01-17 Nec Laboratories America, Inc. Ranking the importance of alerts for problem determination in large systems
US20090292941A1 (en) * 2008-05-22 2009-11-26 Nec Laboratories America, Inc. Proof-guided error diagnosis (ped) by triangulation of program error causes
US20100299654A1 (en) * 2009-05-21 2010-11-25 Microsoft Corporation Approach for root causing regression bugs
US8943478B2 (en) * 2009-07-14 2015-01-27 International Business Machines Corporation Fault detection and localization in dynamic software applications
US8516449B2 (en) * 2009-07-14 2013-08-20 International Business Machines Corporation Detecting and localizing security vulnerabilities in client-server application
US8392440B1 (en) * 2009-08-15 2013-03-05 Google Inc. Online de-compounding of query terms
US8910120B2 (en) * 2010-03-05 2014-12-09 Microsoft Corporation Software debugging recommendations
US9043761B2 (en) * 2010-09-01 2015-05-26 International Business Machines Corporation Fault localization using condition modeling and return value modeling
EP2641179B1 (en) * 2010-11-21 2019-01-02 Verifyter AB Method and apparatus for automatic diagnosis of software failures
US8621441B2 (en) * 2010-12-27 2013-12-31 Avaya Inc. System and method for software immunization based on static and dynamic analysis
US8645761B2 (en) * 2011-01-13 2014-02-04 International Business Machines Corporation Precise fault localization
US9280442B1 (en) * 2011-01-27 2016-03-08 Trimble Navigation Limited System and method for generating coverage reports for software unit tests
US9400778B2 (en) * 2011-02-01 2016-07-26 Accenture Global Services Limited System for identifying textual relationships
US9396094B2 (en) * 2011-07-21 2016-07-19 International Business Machines Corporation Software test automation systems and methods
US9117025B2 (en) * 2011-08-16 2015-08-25 International Business Machines Corporation Tracking of code base and defect diagnostic coupling with automated triage
US20130179863A1 (en) * 2012-01-11 2013-07-11 Microsoft Corporation Bug variant detection using program analysis and pattern identification
US10108526B2 (en) * 2012-11-27 2018-10-23 Purdue Research Foundation Bug localization using version history
US9690645B2 (en) * 2012-12-04 2017-06-27 Hewlett Packard Enterprise Development Lp Determining suspected root causes of anomalous network behavior
CN104239158A (zh) * 2013-06-07 2014-12-24 Sap欧洲公司 用于自动分析和链接错误日志的分析引擎
JP6217212B2 (ja) * 2013-07-25 2017-10-25 富士通株式会社 テストプログラム、テスト方法及びテスト装置
US9405662B2 (en) * 2013-12-18 2016-08-02 Google Inc. Process for displaying test coverage data during code reviews
CN104881355A (zh) * 2014-02-27 2015-09-02 国际商业机器公司 一种用于检测测试覆盖的方法和系统
US9298584B2 (en) * 2014-03-12 2016-03-29 International Business Machines Corporation Artifact selection using textual reports
US9262157B2 (en) * 2014-04-24 2016-02-16 Semmle Limited Source code violation matching and attribution
US20160004627A1 (en) * 2014-07-06 2016-01-07 International Business Machines Corporation Utilizing semantic clusters to Predict Software defects
US20160019133A1 (en) * 2014-07-15 2016-01-21 4D Soft Kft. Method for tracing a computer software
US10303539B2 (en) * 2015-02-23 2019-05-28 International Business Machines Corporation Automatic troubleshooting from computer system monitoring data based on analyzing sequences of changes
WO2016167760A1 (en) * 2015-04-15 2016-10-20 Hewlett Packard Enterprise Development Lp Code coverage information
US9665467B2 (en) * 2015-06-30 2017-05-30 International Business Machines Corporation Error and solution tracking in a software development environment
US9703658B2 (en) * 2015-08-21 2017-07-11 Synopsys, Inc. Identifying failure mechanisms based on a population of scan diagnostic reports
US9934132B2 (en) * 2015-08-31 2018-04-03 International Business Machines Corporation Determining code coverage of an application by test(S)
US9710371B2 (en) * 2015-10-27 2017-07-18 Microsoft Technology Licensing, Llc Test failure bucketing
US9846637B2 (en) * 2015-12-02 2017-12-19 Fujitsu Limited Machine learning based software program repair
US9811439B1 (en) * 2016-04-18 2017-11-07 Color Genomics, Inc. Functional testing of code modifications for read processing systems
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
US10133657B2 (en) * 2016-02-23 2018-11-20 Fujitsu Limited Textual similarity based software program repair
US10585780B2 (en) * 2017-03-24 2020-03-10 Microsoft Technology Licensing, Llc Enhancing software development using bug data

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017045446A (ja) * 2015-08-25 2017-03-02 富士通株式会社 ソフトウェアプログラムを修復する方法、記憶媒体及びシステム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
下條 清史: "複数言語対応かつ算出式変更可能なバグローカリゼーションフレームワークの提案", 電子情報通信学会技術研究報告 VOL.112 NO.458, vol. 第112巻, JPN6022001186, 27 February 2013 (2013-02-27), JP, pages 45 - 50, ISSN: 0004684017 *
采野 友紀也: "Word2Vecを用いたバグ報告からの不具合ファイル特定", 電子情報通信学会技術研究報告 VOL.115 NO.508, vol. 第115巻, JPN6022001185, 3 March 2016 (2016-03-03), JP, pages 55 - 60, ISSN: 0004684018 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022153412A1 (ja) * 2021-01-13 2022-07-21 日本電信電話株式会社 スコア統合装置、スコア統合方法、および、スコア統合プログラム

Also Published As

Publication number Publication date
US10678673B2 (en) 2020-06-09
US20190018753A1 (en) 2019-01-17
JP7095408B2 (ja) 2022-07-05

Similar Documents

Publication Publication Date Title
JP7095408B2 (ja) ソフトウェアプログラムフォールト位置特定
US20220327220A1 (en) Open source vulnerability prediction with machine learning ensemble
Muske et al. Survey of approaches for handling static analysis alarms
JP6878933B2 (ja) ソフトウエアプログラムの修復のための方法及びプログラム
US10437702B2 (en) Data-augmented software diagnosis method and a diagnoser therefor
US10296447B2 (en) Automated software program repair
US8719789B2 (en) Measuring coupling between coverage tasks and use thereof
US20150370685A1 (en) Defect localization in software integration tests
US20090249298A1 (en) Evaluation of Software based on Change History
JP2019204482A (ja) 並行脆弱性検出
US10902130B2 (en) Guiding automated testing of binary programs
JP7404839B2 (ja) ソフトウェアプログラム不良位置の識別
JP2019114158A (ja) カバレッジテスト支援装置およびカバレッジテスト支援方法
Jiang et al. On the integration of test adequacy, test case prioritization, and statistical fault localization
JP2019096292A (ja) 自動化されたソフトウェアプログラム修復候補の選択
Mahdieh et al. Test case prioritization using test case diversification and fault-proneness estimations
JP2018060525A (ja) イベント駆動型ソフトウェアテストシーケンス決定
JP2018055676A (ja) 自動ソフトウェアプログラム修復
JP7056139B2 (ja) ソフトウェアプログラム修復のためのメソッド呼び出し合成
Chakraborty et al. Entropy guided spectrum based bug localization using statistical language model
US10324829B2 (en) Application testing
Duque-Torres et al. Using source code metrics for predicting metamorphic relations at method level
US10984159B1 (en) Hardware verification based on relations between coverage events
US10330728B2 (en) Method and apparatus for obtaining a maximally compressed verification test set
Eder et al. Selecting manual regression test cases automatically using trace link recovery and change coverage

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210210

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220112

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220118

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220316

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220524

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220606

R150 Certificate of patent or registration of utility model

Ref document number: 7095408

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150