(57)【要約】【課題】ソフトウェアプログラムを修復する方法等を提供すること。【解決手段】一実施形態の一態様に従うと、方法は、テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定するステップと、前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装するステップと、前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張するステップと、前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行するステップと、前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップと、を含み得る。【選択図】図３
2018055676.tif 000002
【特許請求の範囲】
【請求項１】
テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定するステップと、
前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装するステップと、
前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張するステップと、
前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行するステップと、
前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップと、
を含む方法。
【請求項２】
前記失敗率に基づいて、前記修復候補を優先順位付けすることは、前記失敗率が、前記ソフトウェアプログラム内の誤った実行パスの推定数に基づく閾失敗率を超えているかどうかに基づく、請求項１に記載の方法。
【請求項３】
前記修復候補を実装した後であって、前記テストスイートを拡張する前に、実装された前記修復候補を有する前記ソフトウェアプログラムに対して、前記テストスイートを実行するステップと、
前記ソフトウェアプログラムにおいて実装された前記修復候補に対して、前記テストスイートの全てのテストが合格したことに応じて、前記テストスイートを拡張し、前記の拡張されたテストスイートを実行するステップと、
をさらに含む、請求項１に記載の方法。
【請求項４】
前記修復候補を実装した後であって、前記テストスイートを拡張する前に、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに対してのみ、前記テストスイートを実行するステップをさらに含む、請求項３に記載の方法。
【請求項５】
前記修復候補を実装する前に、前記ソフトウェアプログラムの観測された挙動に基づいて、前記複数のテストオラクルを生成するステップをさらに含む、請求項１に記載の方法。
【請求項６】
前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに基づいて、
前記ソフトウェアプログラムの前記ユニットに対して、前記複数のテストオラクルを生成するステップと、
前記ソフトウェアプログラムの前記ユニットに対してのみ、前記の拡張されたテストスイートを実行するステップと、
のうちの１つ以上をさらに含む、請求項１に記載の方法。
【請求項７】
前記ソフトウェアプログラムの前記ユニットは、前記ソフトウェアプログラムのモジュールと、前記ソフトウェアプログラムのファイルと、前記ソフトウェアプログラムの構造体と、前記ソフトウェアプログラムの関数と、のうちの１つ以上を含む、請求項６に記載の方法。
【請求項８】
前記失敗率に基づいて、前記修復候補の有効度を決定するステップと、
前記の決定された有効度に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップと、
をさらに含む、請求項１に記載の方法。
【請求項９】
前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けすることは、前記失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を受け入れることを含む、請求項１に記載の方法。
【請求項１０】
前記複数のテストオラクルは、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに関する、前記ソフトウェアプログラムの観測された挙動に基づく、請求項１に記載の方法。
【請求項１１】
命令を記憶するよう構成されている非一時的なコンピュータ読み取り可能な記憶媒体であって、前記命令が実行されたときに、前記命令はシステムに複数の動作を実行させ、前記複数の動作は、
テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定する動作と、
前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装する動作と、
前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張する動作と、
前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行する動作と、
前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けする動作と、
を含む、非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項１２】
前記失敗率に基づいて、前記修復候補を優先順位付けすることは、前記失敗率が、前記ソフトウェアプログラム内の誤った実行パスの推定数に基づく閾失敗率を超えているかどうかに基づく、請求項１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項１３】
前記複数の動作は、
前記修復候補を実装した後であって、前記テストスイートを拡張する前に、実装された前記修復候補を有する前記ソフトウェアプログラムに対して、前記テストスイートを実行する動作と、
前記ソフトウェアプログラムにおいて実装された前記修復候補に対して、前記テストスイートの全てのテストが合格したことに応じて、前記テストスイートを拡張し、前記の拡張されたテストスイートを実行する動作と、
をさらに含む、請求項１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項１４】
前記複数の動作は、前記修復候補を実装した後であって、前記テストスイートを拡張する前に、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに対してのみ、前記テストスイートを実行する動作をさらに含む、請求項１３に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項１５】
前記複数の動作は、前記修復候補を実装する前に、前記ソフトウェアプログラムの観測された挙動に基づいて、前記複数のテストオラクルを生成する動作をさらに含む、請求項１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項１６】
前記複数の動作は、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに基づいて、
前記ソフトウェアプログラムの前記ユニットに対して、前記複数のテストオラクルを生成する動作と、
前記ソフトウェアプログラムの前記ユニットに対してのみ、前記の拡張されたテストスイートを実行する動作と、
のうちの１つ以上をさらに含む、請求項１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項１７】
前記ソフトウェアプログラムの前記ユニットは、前記ソフトウェアプログラムのモジュールと、前記ソフトウェアプログラムのファイルと、前記ソフトウェアプログラムの構造体と、前記ソフトウェアプログラムの関数と、のうちの１つ以上を含む、請求項１６に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項１８】
前記複数の動作は、
前記失敗率に基づいて、前記修復候補の有効度を決定する動作と、
前記の決定された有効度に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けする動作と、
をさらに含む、請求項１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項１９】
前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けすることは、前記失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を受け入れることを含む、請求項１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【請求項２０】
前記複数のテストオラクルは、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに関する、前記ソフトウェアプログラムの観測された挙動に基づく、請求項１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示に記載の実施形態は、自動ソフトウェアプログラム修復に関する。
【背景技術】
【０００２】
ソフトウェアプログラムは、ソフトウェアプログラム内にフォールト（一般に「バグ」と呼ばれる）を有することがしばしばあり、それにより、ソフトウェアプログラムは、意図されるように動作しないことがある。ソフトウェアプログラム内のフォールトを特定して修正するように試みる自動修復システムが、しばしば使用される。
【０００３】
本開示において特許請求される主題は、あらゆる欠点を解決する実施形態又は上記のような環境においてのみ動作する実施形態に限定されるものではない。そうではなく、この背景技術の記載は、本開示に記載のいくつかの実施形態が実施され得る１つの例示的な技術領域を示すために提供されているに過ぎない。
【発明の概要】
【０００４】
一実施形態の一態様に従うと、方法は、テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定するステップを含み得る。本方法は、前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装するステップをさらに含み得る。加えて、本方法は、前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張するステップを含み得る。さらに、本方法は、前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行するステップを含み得る。本方法はまた、前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップを含み得る。
【０００５】
実施形態の目的及び利点が、少なくとも請求項において特に示される要素、特徴、及び組合せにより、実現及び達成される。
【０００６】
前述の総括的な説明及び以下の詳細な説明の両方ともが、例として与えられ、説明的なものであり、特許請求される発明を限定するものではない。
【図面の簡単な説明】
【０００７】
例示的な実施形態が、添付の図面を使用して、より具体的且つ詳細に記載及び説明される。
【図１】ソフトウェアプログラムを修復することに関連する例示的な環境を表す図。
【図２】ソフトウェアプログラムを修復するよう構成され得る例示的なコンピューティングシステムを示す図。
【図３】ソフトウェアプログラムを修復する例示的な方法のフローチャート。
【発明を実施するための形態】
【０００８】
本開示に記載のいくつかの実施形態は、ソフトウェアプログラムを修復する方法及びシステムに関する。ソフトウェアプログラムは、ソフトウェアプログラムを意図しない形で挙動させるおそれがあるフォールト（一般に「バグ」とも呼ばれる）をしばしば含む。さらに、自動修復システム及び技術が、フォールトを検出及び修正してソフトウェアプログラムを修復するために、しばしば使用される。しかしながら、自動修復システム及び技術は、ソフトウェアプログラムの全ての側面をテストしないことがしばしばある。したがって、自動修復システム及び技術は、フォールトを修復しようと試みて、ソフトウェアプログラム内のフォールトを適切には修復しない変更であって、テストされているときに誤っているとして出現することもある変更を、ソフトウェアプログラムに対して行ってしまうことがある。
【０００９】
本開示に記載の１つ以上の実施形態に従うと、ソフトウェアプログラムがエラーを含んでいるかどうかを判定するために使用され得る１つ以上のテストスイートが、特定の修復候補が、有効な修復候補であり得るかどうかをより良く判定するように拡張され得る。詳細には、テストスイートは、特定のフォールト位置に対応し得る複数のテストオラクルを含むように拡張され得る。さらに、特定のフォールト位置における特定されたフォールトに対して実装され得る特定の修復候補に関するテストオラクルの失敗率が、修復として当該修復候補を使用して優先順位付けするために、使用され得る。
【００１０】
修復候補の優先順位付けは、修復動作の有効性に関する決定を向上させることにより、自動ソフトウェアプログラム修復の効率性を向上させることができる。さらに、いくつかの実施形態において、拡張及びテストは、ソフトウェア全体に対してではなく、フォールト位置を含む、ソフトウェアプログラムのユニットに対して実行され得、これは、実行される処理の量を低減させることができる。
【００１１】
本開示の実施形態が、添付の図面を参照して説明される。
【００１２】
図１は、本開示に記載の少なくとも１つの実施形態に従って構成される、ソフトウェアプログラムを修復することに関連する例示的な環境１００を表す図である。環境１００は、フォールトについてテスト対象コード１０４を解析するよう構成されている修復モジュール１０６を含み得る。修復モジュール１０６はまた、変更されたテスト対象コード１０８を出力するよう構成され得、変更されたテスト対象コード１０８は、修復モジュール１０６により実行された修復動作によりテスト対象コード１０４に対して行われた１つ以上の変更を含み得る。
【００１３】
テスト対象コード１０４は、例えば、処理デバイスにより実行される、ソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は、他のロジック若しくは命令等の電子データを含み得る。いくつかの実施形態において、テスト対象コード１０４は、ソフトウェアプログラムの完全なインスタンスを含み得る。追加的又は代替的に、テスト対象コード１０４は、ソフトウェアプログラムの一部を含んでもよい。テスト対象コード１０４は、ソフトウェアプログラムのために使用され得る任意の適切なタイプのコンピュータ言語で記述され得る。
【００１４】
修復モジュール１０６は、コンピューティングデバイスが、テスト対象コード１０４の１つ以上の変更を実行して変更されたテスト対象コード１０８を生成することが可能になるよう構成されているコード及びルーチンを含み得る。追加的又は代替的に、修復モジュール１０６は、（例えば、１つ以上の動作を実行する又は１つ以上の動作の実行を制御する）プロセッサ、（例えば、１つ以上の動作を実行する又は１つ以上の動作の実行を制御する）マイクロプロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は特定用途向け集積回路（ＡＳＩＣ）を含むハードウェアを使用して実装されてもよい。いくつかの他の例において、修復モジュール１０６は、ハードウェアとソフトウェアとの組合せを使用して実装されてもよい。本開示において、修復モジュール１０６により実行されるとして説明される動作は、対応するシステムに実行するように修復モジュール１０６が命令し得る動作を含み得る。
【００１５】
修復モジュール１０６は、テスト対象コード１０４内の１つ以上のフォールトを修復（修正とも呼ばれる）するために用いられ得る一連の修復動作を、テスト対象コード１０４に対して実行するよう構成され得る。いくつかの実施形態において、修復モジュール１０６は、修復テンプレート１１２及び１つ以上のテストスイート１１１に基づいて、修復動作のうちの１つ以上を実行するよう構成され得る。
【００１６】
修復テンプレート１１２は、実行されたときに、テスト対象コード１０４内にフォールトが存在することに応じて、テスト対象コード１０４に対して１つ以上の変更を実装するよう構成され得る任意の適切なタイプの命令又はルーチンを含み得る。１つ以上の変更は、フォールトを修復し得る又はフォールトを修復しようと試み得る、テスト対象コード１０４における変更を含み得る。本開示において、実行され得る変更は、「修復候補」又は「修復」と呼ばれることがある。
【００１７】
テストスイート１１１は、テスト対象コード１０４についてのテストケースとして動作し得る１つ以上のルーチンを含み得る。テストスイート１１１は、テスト対象コード１０４が指定されたように挙動するかどうかを判定するよう構成され得る。テストスイート１１１は、任意の適切な技術に従って構成され得る。
【００１８】
修復モジュール１０６は、テスト対象コード１０４に対してテストスイート１１１のうちの１つ以上を適用して、テスト対象コード１０４内の１つ以上のフォールト及び対応するフォールト位置を検出又は判別するよう構成され得る。いくつかの実施形態において、修復モジュール１０６は、テストスイート１１１に含まれる１つ以上のテストを実行するよう構成され得、このようなテストを実行することは、テスト実行を行うと呼ばれることがある。合格したテスト実行は、「合格テスト実行」と呼ばれることがあり、失敗したテスト実行は、「失敗テスト実行」と呼ばれることがある。いくつかの実施形態において、テスト対象コード１０４のフォールト位置及び対応するフォールトは、コードを実行した失敗テスト実行が当該フォールト位置において生じたことに基づいて、特定され得る。
【００１９】
いくつかの実施形態において、修復モジュール１０６は、テスト実行中、テスト対象コード１０４の挙動を観測するよう構成され得る。これらの実施形態又は他の実施形態において、修復モジュール１０６は、観測された挙動に基づいて、１つ以上のテストオラクルを生成するよう構成され得る。いくつかの実施形態において、テストオラクルはそれぞれ、複数のテストオラクルがいくつかのインスタンスにおいて同じフォールト位置に対応し得る、フォールト位置に対応し得る。各テストオラクルは、対応するフォールト位置におけるソフトウェアプログラムのどの状態が、フォールト位置の特定に至らせ得る失敗テスト実行をもたらすかの代わりに、対応するフォールト位置における合格テスト実行をもたらし得るかを予測することができる。いくつかの実施形態において、修復モジュール１０６は、テストオラクルのうちの１つ以上をテストスイート１１１に含めることにより、テストスイート１１１のうちの１つ以上を拡張するよう構成され得る。
【００２０】
追加的又は代替的に、修復モジュール１０６は、失敗テスト実行中に特定され得る特定のフォールト位置に対して、修復テンプレート１１２の修復候補を実装するよう構成されてもよい。いくつかの実施形態において、修復モジュール１０６は、複数のフォールト位置に対して複数の修復候補を実装するよう構成され得る。
【００２１】
いくつかの実施形態において、修復モジュール１０６は、複数のテストオラクルを含む拡張されたテストスイートを使用して、１つ以上の実装された修復候補を含むテスト対象コード１０４のテスト実行を行うよう構成され得る。これらの実施形態又は他の実施形態において、修復モジュール１０６は、テストオラクルの失敗率に基づいて、修復候補を優先順位付けするよう構成され得る。いくつかの実施形態において、修復モジュール１０６は、優先順位付けを決定するために、（以下で詳細に説明される）図３の方法３００に従って１つ以上の動作を実行するよう構成され得る。
【００２２】
修復モジュール１０６はまた、修復候補の優先順位付けに基づいて、テスト対象コード１０４に対して修復を実行するよう構成され得る。追加的又は代替的に、修復モジュール１０６は、変更されたテスト対象コード１０８を出力するよう構成されてもよく、変更されたテスト対象コード１０８は、修復候補の優先順位付けに基づいて実装され得る１つ以上の修復を含み得る。
【００２３】
本開示の範囲から逸脱することなく、図１に対して、変更、追加、又は省略が可能である。例えば、環境１００は、本開示において図示及び説明された要素よりも多い又は少ない要素を含んでもよい。さらに、いくつかの実施形態において、修復モジュール１０６、テストスイート１１１、及び修復テンプレート１１２の１つ以上のルーチン、１つ以上の命令、又はコードの少なくとも一部は、それらが同じ要素とみなされ得るように、又は、それらが、修復モジュール１０６、テストスイート１１１、及び修復テンプレート１１２のうちの２つ以上の一部であるとみなされ得る共通セクションを有し得るように、組み合わされてもよい。
【００２４】
図２は、本開示の少なくとも１つの実施形態に従った例示的なコンピューティングシステム２０２のブロック図を示している。コンピューティングシステム２０２は、修復モジュール（例えば、修復モジュール１０６）に関連付けられている１つ以上の動作を実施又は命令するよう構成され得る。コンピューティングシステム２０２は、プロセッサ２５０、メモリ２５２、及びデータストレージ２５４を含み得る。プロセッサ２５０、メモリ２５２、及びデータストレージ２５４は、通信可能に接続され得る。
【００２５】
概して、プロセッサ２５０は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む任意の適切な専用又は汎用のコンピュータ、コンピューティングエンティティ、又は処理デバイスを含み得、任意の適用可能なコンピュータ読み取り可能な記憶媒体に記憶されている命令を実行するよう構成され得る。例えば、プロセッサ２５０は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は、プログラム命令を解釈及び／又は実行し、且つ／又はデータを処理するよう構成されている任意の他のデジタル回路若しくはアナログ回路を含み得る。プロセッサ２５０は、図２において１つのプロセッサとして示されているが、プロセッサ２５０は、本開示に記載の任意の数の動作を個別的又は集合的に実行する又は本開示に記載の任意の数の動作の実行を個別的又は集合的に命令するよう構成されている任意の数のプロセッサを含んでもよい。さらに、プロセッサのうちの１つ以上は、異なるサーバ等の１つ以上の異なる電子デバイスにおいて存在してもよい。
【００２６】
いくつかの実施形態において、プロセッサ２５０は、メモリ２５２、データストレージ２５４、又はメモリ２５２とデータストレージ２５４との両方に記憶されているプログラム命令を実行及び／又は解釈し、且つ／又は、メモリ２５２、データストレージ２５４、又はメモリ２５２とデータストレージ２５４との両方に記憶されているデータを処理するよう構成され得る。いくつかの実施形態において、プロセッサ２５０は、データストレージ２５４からプログラム命令をフェッチして、プログラム命令をメモリ２５２にロードすることができる。プログラム命令がメモリ２５２にロードされた後、プロセッサ２５０は、プログラム命令を実行することができる。
【００２７】
例えば、いくつかの実施形態において、修復モジュールは、プログラム命令として、データストレージ２５４に含められ得る。プロセッサ２５０は、データストレージ２５４から修復モジュールのプログラム命令をフェッチして、修復モジュールのプログラム命令をメモリ２５２にロードすることができる。修復モジュールのプログラム命令がメモリ２５２にロードされた後、プロセッサ２５０は、コンピューティングシステムが修復モジュールのプログラム命令により命令されるように修復モジュールに関連付けられている動作を実施できるように、修復モジュールのプログラム命令を実行することができる。
【００２８】
メモリ２５２及びデータストレージ２５４は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な記憶媒体を含み得る。そのようなコンピュータ読み取り可能な記憶媒体は、プロセッサ２５０等の汎用又は専用のコンピュータによりアクセスされ得る任意の利用可能な媒体を含み得る。限定ではなく例として、そのようなコンピュータ読み取り可能な記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）、又は、コンピュータ実行可能な命令又はデータ構造の形態の特定のプログラムコードを運ぶ又は記憶するために使用され得る任意の他の記憶媒体であって、汎用又は専用のコンピュータによりアクセスされ得る任意の他の記憶媒体、を含む有形の又は非一時的なコンピュータ読み取り可能な記憶媒体を含み得る。これらの組合せも、コンピュータ読み取り可能な記憶媒体の範囲に含まれ得る。コンピュータ実行可能な命令は、例えば、プロセッサ２５０に所定の動作又は動作群を実行させるよう構成されている命令及びデータを含み得る。
【００２９】
本開示の範囲から逸脱することなく、コンピューティングシステム２０２に対して、変更、追加、又は省略が可能である。例えば、いくつかの実施形態において、コンピューティングシステム２０２は、明示的には図示又は説明されない可能性がある任意の数の他のコンポーネントを含んでもよい。
【００３０】
図３は、本開示に記載の少なくとも１つの実施形態に従った、ソフトウェアプログラムを修復する例示的な方法３００のフローチャートである。方法３００は、テスト対象コードに対して、任意の適切なシステム、装置、又はデバイスにより実行され得る。例えば、図１の修復モジュール１０６又は（例えば、修復モジュール１０６により命令される）図２のコンピューティングシステム２０２が、テスト対象コード１０４に対して、方法３００に関連付けられている動作のうちの１つ以上を実行できる。別個のブロックとして図示されているが、方法３００のブロックのうちの１つ以上のブロックに関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。
【００３１】
方法３００は、ブロック３０２で開始し得、ブロック３０２において、フォールト及び対応するフォールト位置が、テスト対象コード内で特定され得る。フォールト特定は、任意の適切な技術を使用して、テスト対象コードに対して実行され得る。例えば、いくつかの実施形態において、フォールト特定は、テスト対象コードに対して、１つ以上のテストスイートのテスト実行を行うことに基づいて、実行され得る。
【００３２】
ブロック３０４において、修復候補が、特定されたフォールト位置において実装され得る。いくつかの実施形態において、修復候補は、上述したような修復テンプレートに基づいて、実装され得る。
【００３３】
ブロック３０６において、テスト実行が、修復候補が実装されたテスト対象コードに対して１つ以上のテストスイートを実行することにより、行われ得る。いくつかの実施形態において、テスト実行は、実装された修復候補及びフォールト位置を含む、テスト対象コードの特定のユニットに対して行われ得る。例えば、いくつかの実施形態において、ブロック３０６において、テスト対象コードの特定のユニットをカバーするテストスイートのテストのみが、実行され得る。上述したのと同様に、実装された修復候補を「含む」ユニットとの言及は、フォールト位置の実行を命令する任意のユニットを指し得る。
【００３４】
ブロック３０８において、いくつかの実施形態において、複数のテストオラクルが、テスト対象コードに対して生成され得る。テストオラクルは、任意の適切な技術を使用して生成され得る。例えば、いくつかの実施形態において、テスト対象コードの挙動が、上述したように、ブロック３０２においてフォールト位置を特定するために用いられているテスト実行中、観測され得る。さらに、テストオラクルは、観測された挙動に基づいて生成され得る。
【００３５】
いくつかの実施形態において、テストオラクルは、フォールト位置を含む、テスト対象コードの特定のユニットに対して生成され得る。例えば、いくつかの実施形態において、ブロック３０８において、テスト対象コードの特定のユニットに関するテストオラクルのみが生成され得る。いくつかの実施形態において、このユニットは、テスト対象コードのモジュール、テスト対象コードのファイル、テスト対象コードの構造体、テスト対象コードの関数、又はこれらの任意の組合せを含み得る。さらに、フォールト位置を「含む」ユニットとの言及は、フォールト位置の実行を命令する任意のユニットを指し得る。例えば、フォールト位置は、テスト対象コードの第１の関数のコード内にあり得、第２の関数は、第１の関数を呼び出すよう構成され得る。したがって、第２の関数は、フォールト位置を含み得る。
【００３６】
追加的又は代替的に、いくつかの実施形態において、ブロック３０８において、テストオラクルは、ブロック３０６におけるテスト実行が合格テスト実行をもたらしたことに応じて、生成されてもよい。以下でさらに詳細に説明されるように、テスト実行が合格テスト実行をもたらしたことに応じて生成されたテストオラクルは、合格テスト実行が、実装された修復候補がフォールトを修復すること又は新たなフォールトを発生させないことを誤って示すフォルスポジティブであるかどうかを識別するのを助けるために使用され得る。
【００３７】
ブロック３１０において、テストスイートが、ブロック３０８において生成され得るテストオラクルを用いて拡張され得る。いくつかの実施形態において、テストスイートは、ブロック３０６におけるテスト実行が合格テスト実行をもたらしたことに応じて、拡張され得る。
【００３８】
ブロック３１２において、別のテスト実行が、拡張されたテストスイートを実行することにより、行われ得る。いくつかの実施形態において、ブロック３１２において、実装された修復候補及びフォールト位置を含むユニットに対応する、拡張されたテストスイートのテスト及びテストオラクルのみが、実行され得る。
【００３９】
ブロック３１４において、優先順位付けが、ブロック３１２において行われたテスト実行に基づいて、修復候補に対して決定され得る。いくつかの実施形態において、テストオラクルの失敗率が、決定され得、修復候補が、失敗率に基づいて優先順位付けされ得る。例えば、失敗率は、より高い失敗率がより低い失敗率よりも低い有効度を示し得る、修復候補の有効度を示すことができる。そのようなものとして、有効度が、失敗率から決定され得、修復候補が、有効度に応じて優先順位付けされ得る。例えば、失敗テストオラクルの第１の数を示す第１の失敗率である場合、失敗テストオラクルの第１の数よりも少ない、失敗テストオラクルの第２の数を示す第２の失敗率である場合の優先順位よりも低い優先順位が、第２の失敗率よりも低い有効度を示す第１の失敗率に基づいて、修復候補に与えられ得る。
【００４０】
いくつかの実施形態において、フォールト位置及び実装された修復候補に対応する、合格テストオラクルの数及び失敗テストオラクルの数が、決定され得る。これらの実施形態又は他の実施形態において、合格テストオラクルの数と失敗テストオラクルの数とが、失敗率を決定するために比較され得る。例えば、いくつかの実施形態において、失敗率は、テストオラクルの総数に対する失敗テストオラクルのパーセンテージを含み得る。追加的又は代替的に、失敗率は、テストオラクルの総数に対する合格テストオラクルのパーセンテージを含んでもよい。本開示において、ある失敗率が別の失敗率よりも高いとの言及は、その高い方の失敗率の方が、失敗テストオラクルの数がより多いというインジケーションである。例えば、２５％が失敗テストオラクルのパーセンテージを示す、該２５％という第１の失敗率は、４０％が失敗テストオラクルのパーセンテージを示す、該４０％という第２の失敗率よりも低いとみなされ得る。さらに、合格率も、失敗率の示唆を提供し、「失敗率」という用語も、合格率を含み得る。例えば、７５％という合格率は、２５％という失敗率を示し、逆も同様である。
【００４１】
これらの実施形態又は他の実施形態において、修復候補は、同じフォールト位置に対応し得る他の修復候補の失敗率と比較される、該修復候補の失敗率に基づいて、優先順位付けされ得る。例えば、（この例において第１の修復候補として表される）修復候補は、ブロック３０４、３０６、３０８、３１０、及び３１２に従ってフォールト位置について既に処理されて解析されている第２の修復候補の第２の失敗率よりも高い第１の失敗率を有し得る。さらに、第１の失敗率は、ブロック３０４、３０６、３０８、３１０、及び３１２に従ってフォールト位置について既に処理されて解析されている第３の修復候補の第３の失敗率よりも低いものであり得る。これらの失敗率に応じて、第１の修復候補が、第２の修復候補に対して優先順位付けされ得、第３の修復候補が、第１の修復候補に対して優先順位付けされ得る。
【００４２】
追加的又は代替的に、いくつかの実施形態において、優先順位付けは、失敗率が閾失敗率を超えているか否かに基づいてもよい。本開示において、失敗率が閾失敗率を超えているとの言及は、失敗テストオラクルの数が多すぎることを示す。いくつかの実施形態において、閾失敗率は、ソフトウェアプログラム内のエラーの推定数に基づき得る。例えば、いくつかの実施形態において、閾失敗率は、ソフトウェアプログラム内の可能性のある全ての実行パスの数に対する誤った実行パスの推定数の比であり得る。これらの実施形態又は他の実施形態において、エラーの推定数（これは、誤った実行パスの推定数を含み得る）は、ブロック３０６において行われたテスト実行からの結果に基づいて決定され得る。いくつかの実施形態において、失敗率が閾失敗率を超えていないことに応じて、優先順位付けは、修復候補が受け入れ可能であるとみなされるようにされ得る。追加的又は代替的に、失敗率が閾失敗率を超えていることに応じて、優先順位付けは、修復候補が受け入れ可能でないとみなされるようにされ得る。
【００４３】
いくつかの実施形態において、失敗率は、修復候補が、合格テスト結果についてフォルスポジティブをもたらすか否かを示すことができる。例えば、いくつかの実施形態において、修復候補は、テストスイートに基づく合格テスト実行をもたらし得るが、テストオラクルの失敗率は、閾失敗率を超え得る。したがって、合格テスト結果が、修復候補の実装により生じ得るとしても、修復候補は、受け入れ可能でないとみなされ得る。したがって、いくつかの実施形態において、失敗率はまた、合格テスト実行についてフォルスポジティブを判定するために使用され得、優先順位付けは、その相応のものを示し得る。
【００４４】
ブロック３１６において、修復が、ブロック３１４において決定され得る、修復候補の優先順位付けに基づいて、実行され得る。例えば、いくつかの実施形態において、修復候補が、該修復候補の失敗率と閾失敗率との比較に基づいて、受け入れ可能であるとみなされると、優先順位付けが示した場合、修復候補は、受け入れられ、ブロック３１６において、不変に実装され得る。反対に、修復候補が、該修復候補の失敗率と閾失敗率との比較に基づいて、受け入れ可能でないとみなされると、優先順位付けが示した場合、修復候補は、却下され、別の修復候補が選択され得る。
【００４５】
これらの実施形態又は他の実施形態において、フォールト位置に対応し得る複数の修復候補が、ブロック３０４、３０６、３０８、３１０、３１２、及び３１４に基づいて、優先順位付けされ得る。ブロック３１６において、複数の修復候補のうち最も高い優先順位を有する修復候補が、実装され得る。
【００４６】
ブロック３１８において、変更されたテスト対象コードが出力され得る。変更されたテスト対象コードは、変更されたテスト対象コードが、ブロック３０２において受信され得るテスト対象コードの修復されたバージョンを含み得るように、上述した修復候補優先順位付けに基づいて実装され得る１つ以上の修復候補を含み得る変更を含み得る。
【００４７】
方法３００は、ソフトウェアプログラムのテスト及び修復の効率性及び有効性を向上させることができる。例えば、テストオラクル失敗率に基づく修復候補の優先順位付けの決定は、修復候補の有効度に関するより良い決定を行うのを助けることができる。さらに、ソフトウェアプログラムの正しい挙動をテストオラクルが正確に予測するか否かを判定することは、難しい又は不可能である場合がある。なぜならば、テストオラクルは、誤ったコードの挙動観測に基づいて生成され得るからである。しかしながら、テストオラクルの失敗率を調べて、優先順位付けを失敗率全体に基づくようにすることにより、誤ったテストオラクルの影響が低減され得る。さらに、テスト対象コード全体に対してではなく、フォールト位置を含む、テスト対象コードの特定のユニットに対して動作を実行することは、処理効率についても有用であり得る。
【００４８】
本開示の範囲から逸脱することなく、方法３００に対して、変更、追加、又は省略が可能である。例えば、方法３００の動作は、異なる順序で実行されることがある。追加的又は代替的に、２つ以上の動作は、同時に実行されることがある。さらに、説明された動作及びアクションは、例として提供されているに過ぎず、これらの動作及びアクションのうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ない動作及びアクションに組み合わされることもあるし、追加の動作及びアクションに拡張されることもある。
【００４９】
例えば、いくつかの実施形態において、ブロック３０８、３１０、３１２、３１４、及び３１６の、テストオラクルの生成動作、テストスイートの拡張動作、拡張されたテストスイートの実行動作、修復候補優先順位付け動作、及び修復動作は、ブロック３０６におけるテスト実行が合格テスト実行をもたらしたことに応じて、実行され得る。ブロック３０６におけるテスト実行が合格テスト実行をもたらしたことに応じて、ブロック３０８、３１０、３１２、３１４、及び３１６の動作を実行することにより、有効な修復ではないと既にみなされている修復候補に対してはこれらの動作を実行しないので、効率性を向上させることができる。
【００５０】
さらに、いくつかの実施形態において、方法３００は、単一のフォールト位置と該フォールト位置に対応する単一の修復候補とが、一度に解析され得るように、反復的に実行され得る。追加的又は代替的に、１つ以上のブロックに関連付けられている１つ以上の動作は、複数のフォールト位置又は複数の修復候補に対して同時に実行されることがある。
【００５１】
上記で示されたように、本開示に記載の実施形態は、以下でより詳細に説明される様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用のコンピュータ（例えば、図２のプロセッサ２５０）の使用を含み得る。さらに、上記で示されたように、本開示に記載の実施形態は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な媒体（例えば、図２のメモリ２５２）を使用して実装され得る。
【００５２】
本開示において使用される場合、「モジュール」又は「コンポーネント」という用語は、モジュール又はコンポーネントのアクションを実行するよう構成されている特定のハードウェア実装、及び／又は、コンピューティングシステムの汎用ハードウェア（例えば、コンピュータ読み取り可能な媒体等）に記憶され得る且つ／又はコンピューティングシステムの汎用ハードウェア（例えば、処理デバイス等）により実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを指し得る。いくつかの実施形態において、本開示に記載の異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピューティングシステム上で実行されるオブジェクト又はプロセスとして（例えば、別個のスレッドとして）実装され得る。本開示に記載のシステム及び方法のうちの一部は、（汎用ハードウェアに記憶される且つ／又は汎用ハードウェアにより実行される）ソフトウェアにより実装されるとして一般に説明されるが、特定のハードウェア実装又はソフトウェアと特定のハードウェア実装との組合せも可能であり企図されている。本説明において、「コンピューティングエンティティ」は、本開示において前に定義された任意のコンピューティングシステム、又は、コンピューティングシステム上で動作する任意のモジュール又はモジュールの組合せであり得る。
【００５３】
本開示及び特に請求項（例えば、請求項の本体部分）において使用される用語は、一般に、「オープンな」用語であるとして意図される（例えば、「〜を備える」という用語は、「〜を備えるが、〜に限定されるものではない」として解釈されるべきであり、「〜を有する」という用語は、「少なくとも〜を有する」として解釈されるべきであり、「〜を含む」という用語は、「〜を含むが、〜に限定されるものではない」として解釈されるべきである、等）。
【００５４】
さらに、導入される請求項記載事項の特定の数が意図される場合、そのような意図は、当該請求項中に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、請求項中に、請求項記載事項を導入するための「少なくとも１つの」及び「１つ以上の」といった導入句の使用が含まれることがある。しかしながら、このような導入句の使用は、「a」又は「an」といった不定冠詞による請求項記載事項の導入が、同一の請求項中に「１つ以上の」又は「少なくとも１つの」といった導入句と「a」又は「an」といった不定冠詞とが含まれるとしても、当該導入された請求項記載事項を含む特定の請求項が、当該請求項記載事項を１つしか含まない実施形態に限定されることを意味するとして解釈されるべきではない（例えば、「a」及び／又は「an」は、「少なくとも１つの」又は「１つ以上の」を意味するとして解釈されるべきである）。請求項記載事項を導入するために使用される定冠詞の使用についても同じことが当てはまる。
【００５５】
さらに、導入される請求項記載事項の特定の数が明示的に記載されている場合であっても、そのような記載は、少なくとも記載されている数を意味するとして解釈されるべきであることが、当業者には認識されよう（例えば、他の修飾語のない「２つの記載事項」という単なる記載は、少なくとも２つの記載事項又は２つ以上の記載事項を意味する）。さらに、「Ａ、Ｂ、及びＣ等のうちの少なくとも１つ」又は「Ａ、Ｂ、及びＣ等のうちの１つ以上」に類する表記が使用される場合、一般に、そのような構造は、Ａのみ、Ｂのみ、Ｃのみ、Ａ及びＢの両方、Ａ及びＣの両方、Ｂ及びＣの両方、又は、Ａ、Ｂ、及びＣの全て、等を含むことが意図される。
【００５６】
さらに、２つ以上の選択可能な用語を表すいかなる離接語又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの１つ、それらの用語の組合せ、又は、それらの用語の全てを含む可能性を意図するとして理解されるべきである。例えば、「Ａ又はＢ」という句は、「Ａ」若しくは「Ｂ」又は「Ａ及びＢ」の可能性を含むとして理解されるべきである。
【００５７】
本開示において記載された全ての例及び条件付き言語は、当該技術を促進させるために本発明者によって寄与されるコンセプト及び本発明を読者が理解するのを助ける教育上の目的のために意図され、そのような具体的に記載された例及び条件に限定されるものではないとして解釈されるべきである。本開示の実施形態が詳細に説明されたが、それら実施形態に対する様々な変形、置換、及び変更が、本開示の主旨及び範囲から逸脱することなく可能である。
【００５８】
以上の実施形態に関し、さらに以下の付記を開示する。
【００５９】
（付記１）
テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定するステップと、
前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装するステップと、
前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張するステップと、
前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行するステップと、
前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップと、
を含む方法。
【００６０】
（付記２）
前記失敗率に基づいて、前記修復候補を優先順位付けすることは、前記失敗率が、前記ソフトウェアプログラム内の誤った実行パスの推定数に基づく閾失敗率を超えているかどうかに基づく、付記１に記載の方法。
【００６１】
（付記３）
前記修復候補を実装した後であって、前記テストスイートを拡張する前に、実装された前記修復候補を有する前記ソフトウェアプログラムに対して、前記テストスイートを実行するステップと、
前記ソフトウェアプログラムにおいて実装された前記修復候補に対して、前記テストスイートの全てのテストが合格したことに応じて、前記テストスイートを拡張し、前記の拡張されたテストスイートを実行するステップと、
をさらに含む、付記１に記載の方法。
【００６２】
（付記４）
前記修復候補を実装した後であって、前記テストスイートを拡張する前に、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに対してのみ、前記テストスイートを実行するステップをさらに含む、付記３に記載の方法。
【００６３】
（付記５）
前記修復候補を実装する前に、前記ソフトウェアプログラムの観測された挙動に基づいて、前記複数のテストオラクルを生成するステップをさらに含む、付記１に記載の方法。
【００６４】
（付記６）
前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに基づいて、
前記ソフトウェアプログラムの前記ユニットに対して、前記複数のテストオラクルを生成するステップと、
前記ソフトウェアプログラムの前記ユニットに対してのみ、前記の拡張されたテストスイートを実行するステップと、
のうちの１つ以上をさらに含む、付記１に記載の方法。
【００６５】
（付記７）
前記ソフトウェアプログラムの前記ユニットは、前記ソフトウェアプログラムのモジュールと、前記ソフトウェアプログラムのファイルと、前記ソフトウェアプログラムの構造体と、前記ソフトウェアプログラムの関数と、のうちの１つ以上を含む、付記６に記載の方法。
【００６６】
（付記８）
前記失敗率に基づいて、前記修復候補の有効度を決定するステップと、
前記の決定された有効度に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップと、
をさらに含む、付記１に記載の方法。
【００６７】
（付記９）
前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けすることは、前記失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を受け入れることを含む、付記１に記載の方法。
【００６８】
（付記１０）
前記複数のテストオラクルは、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに関する、前記ソフトウェアプログラムの観測された挙動に基づく、付記１に記載の方法。
【００６９】
（付記１１）
命令を記憶するよう構成されている非一時的なコンピュータ読み取り可能な記憶媒体であって、前記命令が実行されたときに、前記命令はシステムに複数の動作を実行させ、前記複数の動作は、
テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定する動作と、
前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装する動作と、
前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張する動作と、
前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行する動作と、
前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けする動作と、
を含む、非一時的なコンピュータ読み取り可能な記憶媒体。
【００７０】
（付記１２）
前記失敗率に基づいて、前記修復候補を優先順位付けすることは、前記失敗率が、前記ソフトウェアプログラム内の誤った実行パスの推定数に基づく閾失敗率を超えているかどうかに基づく、付記１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【００７１】
（付記１３）
前記複数の動作は、
前記修復候補を実装した後であって、前記テストスイートを拡張する前に、実装された前記修復候補を有する前記ソフトウェアプログラムに対して、前記テストスイートを実行する動作と、
前記ソフトウェアプログラムにおいて実装された前記修復候補に対して、前記テストスイートの全てのテストが合格したことに応じて、前記テストスイートを拡張し、前記の拡張されたテストスイートを実行する動作と、
をさらに含む、付記１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【００７２】
（付記１４）
前記複数の動作は、前記修復候補を実装した後であって、前記テストスイートを拡張する前に、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに対してのみ、前記テストスイートを実行する動作をさらに含む、付記１３に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【００７３】
（付記１５）
前記複数の動作は、前記修復候補を実装する前に、前記ソフトウェアプログラムの観測された挙動に基づいて、前記複数のテストオラクルを生成する動作をさらに含む、付記１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【００７４】
（付記１６）
前記複数の動作は、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに基づいて、
前記ソフトウェアプログラムの前記ユニットに対して、前記複数のテストオラクルを生成する動作と、
前記ソフトウェアプログラムの前記ユニットに対してのみ、前記の拡張されたテストスイートを実行する動作と、
のうちの１つ以上をさらに含む、付記１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【００７５】
（付記１７）
前記ソフトウェアプログラムの前記ユニットは、前記ソフトウェアプログラムのモジュールと、前記ソフトウェアプログラムのファイルと、前記ソフトウェアプログラムの構造体と、前記ソフトウェアプログラムの関数と、のうちの１つ以上を含む、付記１６に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【００７６】
（付記１８）
前記複数の動作は、
前記失敗率に基づいて、前記修復候補の有効度を決定する動作と、
前記の決定された有効度に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けする動作と、
をさらに含む、付記１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【００７７】
（付記１９）
前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けすることは、前記失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を受け入れることを含む、付記１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【００７８】
（付記２０）
前記複数のテストオラクルは、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに関する、前記ソフトウェアプログラムの観測された挙動に基づく、付記１１に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
【符号の説明】
【００７９】
１０４  テスト対象コード
１０６  修復モジュール
１０８  変更されたテスト対象コード
１１１  テストスイート
１１２  修復テンプレート
２０２  コンピューティングシステム
２５０  プロセッサ
２５２  メモリ
２５４  データストレージ
【図１】
2018055676.tif 000003
【図２】
2018055676.tif 000004
【図３】
2018055676.tif 000005