(57)【特許請求の範囲】
【請求項１】
テストスイートを用いてソフトウェアプログラム内の障害位置を特定し、
機械学習を用いて、前記障害位置で可能な修復処理を実行することの潜在的な有効性を指し示す修復有効性インジケーションを決定し、
前記修復有効性インジケーションが閾値を満足することに応答して、機械学習を用いて、前記テストスイートからのテストの１つ以上のテスト実行を合格又は不合格する前記障害位置での前記ソフトウェアプログラムの状態に対応するプログラム状態に基づいて、前記障害位置に関する修復オラクルを生成し、且つ
前記修復オラクルを用いて、前記ソフトウェアプログラムの前記障害位置に対する修復処理を実行する、
ことを有する方法。
【請求項２】
前記修復有効性インジケーションを決定することは、
前記障害位置での不合格プログラム状態を指し示す不合格状態表現を決定し、前記不合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格しない前記障害位置での前記ソフトウェアプログラムの状態に対応し、
前記不合格状態表現に基づいて、前記障害位置での前記可能な修復のコンパクト性を決定し、且つ
前記可能な修復の前記コンパクト性に基づいて、前記修復有効性インジケーションを決定する、
ことを含む、請求項１に記載の方法。
【請求項３】
決定木学習を用いて前記不合格状態表現を決定する、ことを更に有する請求項２に記載の方法。
【請求項４】
前記修復有効性インジケーションを決定することは、
前記障害位置での合格プログラム状態と不合格プログラム状態との間で観測可能な違いが特定されるかを決定し、前記合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格する前記障害位置での前記ソフトウェアプログラムの状態に対応し、前記不合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格しない前記障害位置での前記ソフトウェアプログラムの状態に対応し、且つ
前記観測可能な違いの特定に基づいて前記修復有効性インジケーションを決定する
ことを含む、請求項１に記載の方法。
【請求項５】
前記障害位置での不合格プログラム状態を指し示す不合格状態表現に基づいて、前記観測可能な違いの特定を実行する、ことを更に有する請求項４に記載の方法。
【請求項６】
前記修復有効性インジケーションを決定することは、
前記障害位置における条件文と関連付けられた“ＴＨＥＮ”ブランチをとることにつながる前記テストスイートのテストの合格テスト実行と、前記条件文と関連付けられた“ＥＬＳＥ”ブランチをとることにつながる前記テストスイートのテストの合格テスト実行との間の多様性を決定し、且つ
前記多様性の決定に基づいて前記修復有効性インジケーションを決定する
ことを含む、請求項１に記載の方法。
【請求項７】
前記修復オラクルを生成することは、
前記障害位置での不合格プログラム状態を指し示す不合格状態表現を決定し、前記不合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格しない前記障害位置での前記ソフトウェアプログラムの状態に対応し、且つ
前記不合格状態表現に基づいて前記修復オラクルを生成する
ことを含む、請求項１に記載の方法。
【請求項８】
前記修復オラクルを生成することは、
前記障害位置における条件文に関する超平面を決定し、且つ
前記超平面に基づいて、前記超平面によって指し示される、前記条件文と関連付けられた“ＴＨＥＮ”ブランチをとることにつながる合格プログラム状態と、前記超平面によって指し示される、前記条件文と関連付けられた“ＥＬＳＥ”ブランチをとることにつながる合格プログラム状態と、に基づく前記修復オラクルを生成する
ことを含み、前記合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格する前記障害位置での前記ソフトウェアプログラムの状態に対応するし、請求項１に記載の方法。
【請求項９】
前記修復オラクルに基づいて、前記障害位置における修復を生成する、ことを更に有する請求項１に記載の方法。
【請求項１０】
１つ以上のプロセッサによる実行に応答してシステムに処理を実行させるように構成されたコンピュータ実行可能命令、を格納したコンピュータ読み取り可能記憶媒体であって、前記処理は、
テストスイートを用いてソフトウェアプログラム内の障害位置を特定し、
機械学習を用いて、前記障害位置で可能な修復処理を実行することの潜在的な有効性を指し示す修復有効性インジケーションを決定し、
前記修復有効性インジケーションが閾値を満足することに応答して、機械学習を用いて、前記テストスイートからのテストの１つ以上のテスト実行を合格又は不合格する前記障害位置での前記ソフトウェアプログラムの状態に対応するプログラム状態に基づいて、前記障害位置に関する修復オラクルを生成し、且つ
前記修復オラクルを用いて、前記ソフトウェアプログラムの前記障害位置に対する修復処理を実行する
ことを有する、コンピュータ読み取り可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示に記載される実施形態は、機械学習ベースのソフトウェアプログラム修復に関する。
【背景技術】
【０００２】
ソフトウェアプログラムはしばしば、その中に障害（一般に“バグ”と呼ばれている）を有し、そこで意図したように動作しないことがある。しばしば、ソフトウェアプログラム内の障害を特定して訂正するために、自動化された修復システムが使用されている。
【０００３】
本開示にて特許請求される事項は、上述のような欠点を解決したり上述のような環境においてのみ動作したりする実施形態に限定されるものではない。むしろ、この背景技術は、本開示にて記載される一部の実施形態が実施され得る一例に係る技術分野を例示するために提示されるに過ぎない。
【発明の概要】
【０００４】
一実施形態の一態様によれば、方法は、テストスイートを用いてソフトウェアプログラム内の障害位置を特定することを含み得る。この方法は更に、機械学習を用いて、上記障害位置で可能な修復処理を実行することの潜在的な有効性を指し示す修復有効性インジケーションを決定することを含み得る。さらに、この方法は、修復有効性インジケーションに基づいて、上記障害位置で修復を行うことを優先順位付けることを含み得る。この方法は更に、上記障害位置の優先順位付けに基づいて、ソフトウェアプログラムに対する修復処理を実行することを含み得る。
【０００５】
実施形態の目的及び利点は、少なくとも請求項にて特定的に列挙される要素、機構及び組み合わせによって、実現され達成されることになる。
【０００６】
以上の概要説明及び以下の詳細説明はどちらも、例として与えられる説明的なものであり、特許請求に係る発明を限定するものではない。
【図面の簡単な説明】
【０００７】
以下の図を含む添付図面を使用して、更なる具体性及び詳細性をもって、実施形態例の記述及び説明を行う。
【図１】ソフトウェアプログラムを修復することに関する環境の一例を表す図である。
【図２】ソフトウェアプログラムを修復するように構成され得るコンピューティングシステムの一例を示す図である。
【図３】ソフトウェアプログラムを修復する方法の一例を示すフローチャートである。
【図４】ソフトウェアプログラム修復処理の方法の一例を示すフローチャートである。
【発明を実施するための形態】
【０００８】
本開示にて記載される一部の実施形態は、ソフトウェアプログラムを修復（リペア）する方法及びシステムに関する。ソフトウェアプログラムはしばしば、当該ソフトウェアプログラムを意図しないように動作させ得る障害（一般に“バグ”と呼ばれている）を含んでいる。また、ソフトウェアプログラムを修復すべく障害を発見して訂正するために、しばしば、自動化された修復システム及び技術が使用されている。しかしながら、一般的に使用されている自動修復システム及び技術は、しばしば、障害を修正することを試みて、ソフトウェアプログラム内の障害を適切に修復しない変更を、ソフトウェアプログラムに加えてしまう。さらに、一般的に使用されている自動修復システム及び技術は、しばしば、修復があまり有効でない位置で、ソフトウェアプログラムに変更を加えてしまう。
【０００９】
本開示にて記載される１つ以上の実施形態によれば、ソフトウェアプログラムの１つ以上の障害位置に関して、修復有効性インジケーションが決定され得る。障害位置は、テストスイート（“テスト実行”）のうちの不合格テストによって実行されたソフトウェアプログラムの部分を含み得る。修復有効性インジケーションは、機械学習（マシンラーニング）を用いて決定され得るとともに、複数の異なる障害位置で可能な修復処理を実行することの潜在的な有効性を指し示し得る。また、修復有効性インジケーションに基づいて、複数の障害位置での修復実行の優先順位付けが行われ得る。そして、障害位置の優先順位付けに基づいて、それらの障害位置のうちの１つ以上で、ソフトウェアプログラムに対して修復処理が実行され得る。
【００１０】
これら又はその他の実施形態において、機械学習を用いて、１つ以上の修復オラクル（修復予言）が生成され得る。一部の実施形態において、修復オラクルは、修復有効性インジケーションを決定するのに使用された機械学習の１つ以上の結果に基づいて生成され得る。これらの修復オラクルは各々、１つの障害位置に対応し得る。各修復オラクルが、対応する障害位置のソフトウェアプログラムのどの状態が、その障害位置の特定をもたらした不合格テスト実行をもたらす代わりに、この対応する障害位置で合格テスト実行をもたらし得るかを予言し得る。一部の実施形態において、修復オラクルは、その対応する障害位置の修復有効性インジケーションが閾値を満足することに応答して生成され得る。これら又はその他の実施形態において、対応する修復オラクルを用いて、閾値を満足する修復有効性インジケーションを持つ障害位置で修復が為され得る。
【００１１】
修復有効性の決定及び対応する障害位置の優先順位付けと、それに対応した、優先順位付けに従った障害位置での修復処理の実行は、修復が比較的効果がないかもしれない位置で修復処理が行われ得る場合を減らすことによって、自動化されたソフトウェアプログラム修復の効率を向上させ得る。また、修復オラクル生成は、特定の障害位置で修復が為されることの改善となり得る。
【００１２】
本開示の実施形態を、添付の図面を参照して説明する。
【００１３】
図１は、本開示にて記載される少なくとも１つの実施形態に従って構成された、ソフトウェアプログラムを修復することに関する環境１００の一例を表す図である。環境１００は、テスト対象コード１０４を障害に関して分析するように構成された修復モジュール１０６を含み得る。修復モジュール１０６はまた、修復モジュール１０６によって実行された修復処理によってテスト対象コード１０４に為された１つ以上の修正を含み得るものである修正済みテスト対象コード１０８を出力するように構成され得る。
【００１４】
テスト対象コード１０４は、例えば、ソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は処理装置による実行のためのその他のロジック若しくは命令などの、電子データを含み得る。一部の実施形態において、テスト対象コード１０４は、ソフトウェアプログラムの完全なインスタンスを含み得る。加えて、あるいは代えて、テスト対象コード１０４は、ソフトウェアプログラムの一部を含み得る。テスト対象コード１０４は、ソフトウェアプログラムのために使用され得る如何なる好適種類のコンピュータ言語で記述されていてもよい。
【００１５】
修復モジュール１０６は、コンピューティング装置がテスト対象コード１０４の１つ以上の修正を行って修正済みテスト対象コード１０８を生成することを可能にするように構成されたコード及びルーチンを含み得る。加えて、あるいは代えて、修復モジュール１０６は、プロセッサ、（例えば、１つ以上の処理の実行を行う又は制御するための）マイクロプロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は特定用途向け集積回路（ＡＳＩＣ）を含むハードウェアを用いて実装されてもよい。一部の他の例において、修復モジュール１０６は、ハードウェアとソフトウェアとの組み合わせを用いて実装され得る。本開示において、修復モジュール１０６によって実行されるとして記述される処理は、修復モジュール１０６が対応するシステムに指示して実行させ得る処理を含み得る。
【００１６】
修復モジュール１０６は、テスト対象コード１０４に対して、テスト対象コード１０４内の１つ以上の障害を修復（訂正とも称する）するのに使用され得る一連の修復処理を実行するように構成され得る。一部の実施形態において、修復モジュール１０６は、修復テンプレート１１２及び１つ以上のテストスイート１１１に基づいて修復処理のうちの１つ以上を実行するように構成され得る。
【００１７】
修復テンプレート１１２は、実行されるときにテスト対象コード１０４内の障害の存在に応答してテスト対象コード１０４に対して１つ以上の修正を行うように構成され得る何らかの好適種類の命令又はルーチンを含み得る。これらの修正は、障害を修復し得る又は障害を修復しようとし得るような、テスト対象コード１０４における変更を含み得る。
【００１８】
テストスイート１１１は、テスト対象コード１０４に関するテストケースとして機能し得る１つ以上のルーチンを含み得る。テストスイート１１１は、テスト対象コード１０４が指定通りに動くかを決定するように構成され得る。テストスイート１１１は、如何なる好適技術に従って構成されてもよい。
【００１９】
修復モジュール１０６は、テスト対象コード１０４に対してテストスイート１１１のうちの１つ以上を適用して、テスト対象コード１０４内の１つ以上の障害及び対応する障害位置を検出又は決定するように構成され得る。一部の実施形態において、修復モジュール１０６は、テストスイート１１１に含まれる１つ以上のテストを実行する（このことを、テスト実行を行うとして参照することもある）ように構成され得る。合格したテスト実行を“合格テスト実行”と称し、不合格であったテスト実行を“不合格テスト実行”と称することがある。一部の実施形態において、テスト対象コード１０４の障害位置及び対応する障害は、障害位置に出現するコードを実行した不合格テスト実行に基づいて特定され得る。
【００２０】
修復モジュール１０６は、特定された障害位置のうちの１つ以上に関して、機械学習を用いて修復有効性インジケーションを決定するように構成され得る。修復モジュール１０６はまた、複数の異なる障害位置での修復の実行を、対応する修復有効性インジケーションに基づいて優先順位付けするように構成され得る。一部の実施形態において、この優先順位付けは、それらの障害位置で修復処理を実行すべきか否かを決定することを含み得る。これら又はその他の実施形態において、修復処理を実行すべきとの決定は、修復有効性インジケーションが閾値を満足することに基づき得る。一部の実施形態において、修復モジュール１０６は、図３及び４の方法３００及び４００に関して後述する１つ以上の処理に従って修復有効性インジケーションを決定するように構成され得る。
【００２１】
これら又はその他の実施形態において、修復モジュール１０６は、修復モジュール１０６によって生成され得る特定の修復オラクルに基づいて、特定の障害位置で修復処理を実行するように構成され得る。修復モジュール１０６は、１つ以上の合格又は不合格テスト実行をもたらし得るこの特定の障害位置でのソフトウェアプログラムのプログラム状態に基づき得る特定の修復オラクルを、機械学習を用いて生成するように構成され得る。本開示においては、合格テスト実行をもたらすプログラム状態を“合格プログラム状態”と称し、不合格テスト実行をもたらすプログラム状態を“不合格プログラム状態”と称することがある。これら又はその他の実施形態において、この特定の修復オラクルは、その特定の障害位置の修復有効性インジケーションを決定するのに使用され得る機械学習の結果に基づき得る。一部の実施形態において、修復モジュール１０６は、図３及び４の方法３００及び４００に関して後述する１つ以上の処理に従って修復オラクルを生成するように構成され得る。
【００２２】
図１には、本開示の範囲を逸脱することなく、変更、付加又は省略が為され得る。例えば、環境１００は、本開示にて図示されて説明されるものよりも多い又は少ない要素を含み得る。また、一部の実施形態において、修復モジュール１０６、テストスイート１１１、及び修復テンプレート１１２の、１つ以上のルーチン、１つ以上の命令、又はコードの少なくとも一部は、それらが同じものと見なされ得るように組み合わされることができ、あるいは、それらが修復モジュール１０６、テストスイート１１１、及び修復テンプレート１１２のうちの２つ以上の部分と見なされ得る共通セクションを有し得るように組み合わされ得る。
【００２３】
図２は、本開示の少なくとも１つの実施形態に従ったコンピューティングシステム２０２の一例のブロック図を示している。コンピューティングシステム２０２は、修復モジュール（例えば、修復モジュール１０６）に関連する１つ以上の処理を実行又は指示するように構成され得る。コンピューティングシステム２０２は、プロセッサ２５０、メモリ２５２、及びデータストレージ２５４を含み得る。プロセッサ２５０、メモリ２５２、及びデータストレージ２５４は、通信可能に結合され得る。
【００２４】
一般に、プロセッサ２５０は、様々なコンピュータハードウェア若しくはソフトウェアモジュールを含んだ、如何なる好適な専用又は汎用のコンピュータ、コンピューティングエンティティ又は処理装置を含んでいてもよく、何らかの適用可能なコンピュータ読み取り可能媒体に格納された命令を実行するように構成され得る。例えば、プロセッサ２５０は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又はプログラム命令を解釈及び／又は実行し且つ／或いはデータを処理するように構成されたその他のデジタル回路若しくはアナログ回路を含み得る。図２では単一のプロセッサとして示されているが、プロセッサ２５０は、本開示に記載される任意数の処理を個々あるいは集合的に実行する又はそれらの実行を指示するように構成された任意数のプロセッサを含んでいてもよい。さらに、それらのプロセッサのうちの１つ以上が、例えば異なるサーバなどの、１つ以上の異なるエレクトロニクス装置上に存在してもよい。
【００２５】
一部の実施形態において、プロセッサ２５０は、メモリ２５２、データストレージ２５４、又はメモリ２５２とデータストレージ２５４、に格納されたプログラム命令及び／又はデータについて、プログラム命令を解釈及び／又は実行し且つ／或いはデータを処理するように構成され得る。一部の実施形態において、プロセッサ２５０は、データストレージ２５４からプログラム命令をフェッチして該プログラム命令をメモリ２５２にロードし得る。プログラム命令がメモリ２５２にロードされた後、プロセッサ２５０が該プログラム命令を実行し得る。
【００２６】
例えば、一部の実施形態において、データストレージ２５４内にプログラム命令として修復モジュールが含められ得る。プロセッサ２５０は、データストレージ２５４から修復モジュールのプログラム命令をフェッチして、修復モジュールのプログラム命令をメモリ２５２にロードし得る。修復モジュールのプログラム命令がメモリ２５２にロードされた後、プロセッサ２５０が該プログラム命令を実行することで、コンピューティングシステムが、該命令によって指示されるように、修復モジュールと関連付けられた処理を実行するようにし得る。
【００２７】
メモリ２５２及びデータストレージ２５４は、コンピュータ実行可能命令又はデータ構造を担持する、あるいは格納した、コンピュータ読み取り可能記憶媒体を含み得る。そのようなコンピュータ読み取り可能記憶媒体は、プロセッサ２５０などの汎用又は専用のコンピュータによってアクセスされ得る如何なる入手可能な媒体をも含み得る。限定ではなく例として、そのようなコンピュータ読み取り可能記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ若しくはその他の光ディスクストレージ、磁気ディスクストレージ若しくはその他の磁気記憶装置、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）、又は、コンピュータ実行可能命令の形態の特定のプログラムコード若しくはデータ構造を担持あるいは格納するために使用されることができ且つ汎用若しくは専用のコンピュータによってアクセスされることが可能なその他の記憶媒体を含む、有形又は非一時的なコンピュータ読み取り可能記憶媒体を含み得る。以上のものの組合せもコンピュータ読み取り可能記憶媒体の範囲に含まれ得る。コンピュータ実行可能命令は、例えば、特定の処理又は処理群をプロセッサ２５０に実行させるように構成された命令及びデータを含み得る。
【００２８】
コンピューティングシステム２０２には、本開示の範囲を逸脱することなく、変更、付加又は省略が為され得る。例えば、一部の実施形態において、コンピューティングシステム２０２は、明示的には図示あるいは記載されていない任意数のその他のコンポーネントを含んでいてもよい。
【００２９】
図３は、本開示にて記載される少なくとも１つの実施形態に従った、ソフトウェアプログラムを修復する方法３００の一例のフローチャートである。方法３００は、テスト対象コードに関する如何なる好適なシステム、機器、又は装置によって実行されてもよい。例えば、図１の修復モジュール１０６又は図２のコンピューティングシステム２０２（修復モジュールによって指示される）が、テスト対象コード１０４に対して、方法３００と関連付けられた処理のうちの１つ以上を実行し得る。別個のブロックとして図示されるが、具体的な実装に応じて、方法３００のブロックのうちの１つ以上と関連付けられるステップ及び処理が、更なるブロックへと分割され、より少ないブロックへと結合され、あるいは排除され得る。
【００３０】
方法３００は、ブロック３０２で開始することができ、そこで、テスト対象コード内で１つ以上の障害が位置特定され得る。障害位置特定は、如何なる好適な技術を用いてテスト対象コードに対して実行されてもよい。一部の実施形態において、障害位置特定は、テスト対象コード内で１つ以上の障害を位置特定することができ、１つ以上のテストスイートのテスト対象コードへの適用に基づいて実行され得る。障害位置特定は、一部の実施形態において、１つ以上の障害位置を特定し得る。加えて、あるいは代えて、障害位置は、テスト対象コード内でのそれらの位置に基づいて初めに順序付けられ得る。
【００３１】
ブロック３０４にて、特定された障害位置のうちの或る障害位置が選択され得る。一部の実施形態において、その障害位置は、１つ以上の他の障害位置に対するその障害位置の優先順位付けに従って選択され得る。一部の実施形態において、優先順位付けは当初、ブロック３０２で行われ得る順序付けに基づき得る。これら又はその他の実施形態において、１つ以上の障害位置の優先順位付けは、修復有効性インジケーションに基づいて変化してもよく、それにおいて、それらの位置での修復が比較的効果がないかもしれないことを指し示す修復有効性インジケーションを持つ障害位置は、他の障害位置よりも低い優先順位を有し得る。
【００３２】
ブロック３０６にて、この障害位置に関して修復テンプレートが選択され得る。修復テンプレートは、障害位置に対して行われ得る特定のタイプの修復を含み得る。一部の実施形態において、修復テンプレートは、障害位置のテスト対象コードにおける状態を変化させることを伴う修復を含み得る。
【００３３】
ブロック３０８にて、この障害位置に関して修復有効性インジケーションが決定され得る。上述のように、修復有効性インジケーションは、その障害位置で可能な修復処理を実行することの潜在的な有効性を指し示し得る。一部の実施形態において、修復有効性インジケーションを決定することは、その障害位置での合格プログラム状態と不合格プログラム状態との間に違いが存在するかを決定することを含み得る。これら又はその他の実施形態において、修復有効性インジケーションを決定することは、可能な修復のコンパクト性を決定することを含んでいてもよい。これら又はその他の実施形態において、これらコンパクト性及び違いの決定は、例えば決定木学習、事例ベース学習、帰納論理プログラミング、データハンドリングのグループメソッド、学習オートマトン、統計的関係学習、又はその他の好適な機械学習などの機械学習を用いて決定され得る。これらの違い及びコンパクト性並びにこれらに対応する決定についての更なる説明は、図４の方法４００に関して与えることとする。
【００３４】
これら又はその他の実施形態において、修復有効性インジケーションを決定することは、その障害位置に関する合格テスト実行間の多様性を決定することを含み得る。一部の実施形態において、この多様性は、その障害位置での条件と関連付けられた“ＴＨＥＮ”ブランチをとることにつながる合格テスト実行と、そのテスト条件と関連付けられた“ＥＬＳＥ”ブランチをとることにつながる合格テスト実行との間の多様性を含み得る。この多様性及びこれに対応する決定についての更なる説明は、図４の方法４００に関して与えることとする。
【００３５】
ブロック３１０にて、その障害位置で修復を実行することが有効であり得るかが決定され得る。一部の実施形態において、この決定は、ブロック３０８で決定された修復有効性インジケーションに基づいて為され得る。加えて、あるいは代えて、これは、修復有効性インジケーションと関連付けられた閾値が満足されるかに基づいて決定されてもよい。一部の実施形態において、閾値が満足されないことに応答して、その障害位置で修復を行うことの優先順位が低くされ得る。これら又はその他の実施形態において、この優先順位は、その障害位置での修復が実行され得ないように低下されてもよい。これら又はその他の実施形態において、閾値が満足されることに応答して、その障害位置で可能な修復を行うことの優先順位が、その障害位置での修復が実行され得るようにされ得る。
【００３６】
その障害位置での可能な修復が効果的であり得ることが決定されたことに応答して、方法３００はブロック３１２へと進むことができ、そこで、１つ以上の修復処理がその障害位置で実行され得る。その障害位置での可能な修復が効果的でないかもしれないと決定されたことに応答して、方法３００はブロック３０４へと戻り得る。一部の実施形態において、可能な修復が効果的であり得るかの決定は、上述の閾値の満足に基づいて決定され得る優先順位に基づき得る。修復有効性インジケーションを決定すること、並びに、可能な修復が効果的であり得るかを閾値及び修復有効性インジケーションに基づいて決定することに関する更なる詳細は、図４の方法４００に関して後述することとする。さらに、優先順位付けに関する更なる詳細も、図４の方法４００に関して与えることとする。
【００３７】
ブロック３１２にて、修復オラクル生成処理が実行され得る。上述のように、修復オラクルは、合格又は不合格のテスト実行に対応した、その障害位置でのテスト対象コードのプログラム状態に基づいて生成され得る。また、上述のように、修復オラクルは、その障害位置のソフトウェアプログラムのどの状態が、その障害位置の特定をもたらした不合格テスト実行をもたらす代わりに、その障害位置で合格テスト実行をもたらし得るかを予言し得る。修復オラクル生成処理は、機械学習を用いて実行され得る。これら又はその他の実施形態において、修復オラクルは、修復有効性インジケーションを決定するために実行され得る機械学習の結果に基づいて生成され得る。
【００３８】
例えば、一部の実施形態において、機械学習を用いて不合格状態表現が決定され得る。不合格状態表現は、その障害位置での不合格プログラム状態を指し示し得る。後で詳述するように、不合格状態表現は、上述の違い及びコンパクト性を決定するために使用され得る。一部の実施形態において、不合格状態表現は、決定木学習、事例ベース学習、帰納論理プログラミング、データハンドリングのグループメソッド、学習オートマトン、統計的関係学習、又はその他の好適な機械学習を用いて決定され得る。図４の方法４００に関して詳細に後述するように、不合格状態表現はまた、修復オラクルを生成するために使用され得る。
【００３９】
加えて、あるいは代えて、機械学習に基づいて、その障害位置における条件文に関して超平面（ハイパープレーン）が決定され得る。さらに、修復オラクルは、その条件文と関連付けられた“ＴＨＥＮ”ブランチをとることにつながる合格プログラム状態と、その条件文と関連付けられた“ＥＬＳＥ”ブランチをとることにつながる合格プログラム状態とに基づいて生成され得る。一部の実施形態において、超平面は、サポートベクター機械学習、セルフトレーニング学習、発生モデル、グラフベースアルゴリズム、マルチビュー学習アルゴリズム、又はその他の好適な機械学習を用いて決定され得る。超平面の決定及び超平面に基づく修復オラクルの生成については、図４の方法４００に関して詳細に後述することとする。
【００４０】
ブロック３１４にて、修復オラクル生成処理が、修復を生成するのに使用され得る修復オラクルを発見したかが決定され得る。例えば、一部の実施形態において、修復オラクル生成処理は、不合格テスト実行とは対照的に合格テスト実行を得るためにはテスト対象コードがどのような状態であるべきであったかを予言するために、生成された修復オラクルが１つ以上の不合格テスト実行に適用され得る処理を含み得る。修復オラクルは、以前に不合格であったテスト実行が当該修復オラクルの予言に基づいて合格テスト実行になることに応答して、発見されたと見なされ得る。対照的に、修復オラクルは、以前に不合格であったテスト実行が当該修復オラクルの予言に基づいて合格テスト実行にならないことに応答して、発見されたとは見なされない。
【００４１】
ブロック３１４で修復オラクルが発見されたと決定されたことに応答して、方法３００はブロック３１６へと進み得る。ブロック３１４で修復オラクルが発見されなかったと決定されたことに応答して、方法３００はブロック３０４へと戻って別の障害位置を選択し得る。
【００４２】
ブロック３１６にて、学習ベースの修復合成が実行され得る。学習ベースの修復合成は、ブロック３１２で生成され得る修復オラクルを用いて実行され得る。一部の実施形態において、修復は、修復オラクルに適用され得る機械学習技術又は発見的技法を含め、如何なる好適な技術を用いて合成されてもよい。
【００４３】
ブロック３１８にて、修復が合成された後にテストスイートの全てのテストが合格し得るかが決定され得る。一部の実施形態において、以前に不合格であったテスト実行が修復の結果として合格実行へと転換されているかが決定され得る。例えば、修復にて為された修正が、その障害位置がもはや障害位置とは見なされなくなるようなものであったか否かが決定され得る。これら又はその他の実施形態において、それらの修正が、以前には存在しなかったその他の障害を導入したかを決定するために、肯定（ポジティブ）テストが実行され得る。
【００４４】
テストが合格であったと決定されたことに応答して、方法３００はブロック３１８からブロック３２０へと進み得る。テストが不合格であったと決定されたことに応答して、方法３００はブロック３１８からブロック３０４へと戻り、そこで別の障害位置が選択され得る。
【００４５】
ブロック３２０にて、修正済みテスト対象コードが出力され得る。修正済みテスト対象コードは、テストスイートのテストを合格し得る修正を含み、それ故に、修正済みテスト対象コードは、ブロック３０２で受け取られ得るテスト対象コードの修復版を含み得る。
【００４６】
方法３００は、ソフトウェアプログラムのテスト及び修復の効率を向上させ得る。例えば、修復有効性インジケーションの決定及びそれに関連する優先順位付けは、実行され得る処理の量を削減し得る。また、機械学習に基づく修復オラクルの生成及びそれに続く修復オラクルに基づく修復の合成は、その他の場合よりも良好で効率的な修復が為されることをもたらし得る。
【００４７】
方法３００には、本開示の範囲を逸脱することなく、変更、付加又は省略が為され得る。例えば、方法３００の処理は、異なる順序で実行されてもよい。加えて、あるいは代えて、２つ以上の処理が同時に実行されてもよい。また、概説した処理及びアクションは、単に例として提示したものであり、開示した実施形態の本質を逸脱することなく、これらの処理及びアクションの一部は、オプション必要に応じてのものにされ、より少ない処理やアクションへと結合され、あるいは更なる処理やアクションへと展開され得る。
【００４８】
さらに、一部の実施形態において、方法３００は、一度に１つの障害位置が分析されて、繰り返し実行され得る。加えて、あるいは代えて、一度に複数の障害位置に対して、１つ以上のブロックと関連付けられた１つ以上の処理が実行されてもよい。
【００４９】
図４は、本開示にて記載される少なくとも１つの実施形態に従った、ソフトウェアプログラム修復処理の方法４００の一例のフローチャートである。方法４００は、テスト対象コードに関する如何なる好適なシステム、機器、又は装置によって実行されてもよい。例えば、図１の修復モジュール１０６又は図２のコンピューティングシステム２０２（修復モジュールによって指示される）が、テスト対象コード１０４に対して、方法４００と関連付けられた処理のうちの１つ以上を実行し得る。また、一部の実施形態において、方法４００の１つ以上の処理は、一部の実施形態における方法３００のブロック３０４、３０８、３１０、及び３１２に関して実行され得る。別個のブロックとして図示されるが、具体的な実装に応じて、方法４００のブロックのうちの１つ以上と関連付けられるステップ及び処理が、更なるブロックへと分割され、より少ないブロックへと結合され、あるいは排除され得る。
【００５０】
方法４００は、ブロック４０２で開始することができ、そこで、特定の障害位置におけるテスト対象コードの合格テスト実行、不合格テスト実行、合格プログラム状態、及び不合格プログラム状態を示すテーブル（表）が取得され得る。一部の実施形態において、特定の障害位置は、図３に関して記載した方法３００のブロック３０４で選択され得る障害位置と一致し得る。これら又はその他の実施形態において、このテーブルは、この特定の障害位置を特定したテスト実行に基づいて取得され得る。加えて、あるいは代えて、このテーブルを取得するために、１つ以上のテスト実行が実行され得る。本開示において、テーブルを取得することへの参照は、障害位置におけるソフトウェアプログラムの状態（例えば、変数の値）と得られる合格又は不合格テスト実行とを示すようにリンク付けられ得るデータを取得して編成することを含み得る。例として、以下の“表１”は、ブロック４０２で取得され得るテーブルの一例を示している。
【表１】
0006787046.tif 000002
【００５１】
テーブル１において、“テスト”と記された列のフィールドは、テスト実行が合格であったか不合格であったかを指し示し得る。“Ｓ１”乃至“ＳＮ”と記された列のフィールドは、テスト対象コードの変数の値を指し示すことができ、これらは、障害位置におけるテスト対象コードの状態を示し得る。
【００５２】
例えば、“Ｓ１”というラベルが付された列は、テスト対象コードの複数の異なる状態に関する第１の状態変数“Ｓ１”の値を指し示し得る。具体的に、“Ｓ１”の下のフィールドは、第１の変数“Ｓ１”の第１の値（“Ｖ１１”によって指し示されている）、第１の変数“Ｓ１”の第２の値（“Ｖ２１”によって指し示されている）、第１の変数“Ｓ１”の第３の値（“Ｖ３１”によって指し示されている）、第１の変数“Ｓ１”の第４の値（“Ｖ４１”によって指し示されている）を含み得る。“Ｓ２”というラベルが付された列は、同様に、第２の状態変数“Ｓ２”の値（それぞれ、“Ｖ１２”、“Ｖ２２”、“Ｖ３２”、及び“Ｖ４２”）を指し示し得る。表１は、一部の実施形態において、全ての異なる状態変数及びそれらに関する変数値を指し示すように、“ＳＮ”まで“Ｎ”個の列を含み得る。表１の行は、従って、異なる変数値に対応し得るテスト対象コードの異なる状態を指し示し得る。
【００５３】
ブロック４０４にて、機械学習が実行されて、障害位置に関する修復有効性インジケーションが決定され得る。一部の実施形態において、この機械学習は、ブロック４０２で取得され得るテーブル内で提供される情報を用いて実行され得る。一部の実施形態において、この機械学習は、決定木学習、事例ベース学習、帰納論理プログラミング、データハンドリングのグループメソッド、学習オートマトン、統計的関係学習、又はその他の好適な機械学習を含み得る。
【００５４】
例として、一部の実施形態において、決定木学習を用いて、ブロック４０２で取得されたテーブルに含まれ得る合格プログラム状態と不合格プログラム状態との分析及び比較が行われ得る。この比較に基づき、決定木学習は、その障害位置における合格プログラム状態と不合格プログラム状態との間の観測可能な違いを特定することを試み得る。
【００５５】
これら及びその他の実施形態において、決定木学習は、その障害位置における合格プログラム状態と不合格プログラム状態との間の観測可能な違いを説明する表現を生成するように構成され得る。一部の実施形態において、この表現は、不合格状態表現を含むことができ、不合格状態表現は、ブロック４０２で取得されたテーブルに含まれる不合格プログラム状態を特徴付け得るとともに、ブロック４０２で取得されたテーブルに含まれる合格プログラム状態を排除し得る。例として、上の表１に含まれる情報に基づいて、“（（Ｓ１＝Ｖ３１）＆＆（Ｓ２＝Ｖ３２））｜｜（Ｓ１＝Ｖ４１）”という不合格状態表現が生成され得る。
【００５６】
ブロック４０６にて、合格プログラム状態と不合格プログラム状態との間の観測可能な違いがブロック４０４で特定されたかが決定され得る。例えば、観測可能な違いが特定されない場合、不合格プログラム状態を特徴付けるとともに合格プログラム状態を排除する表現を、機械学習が生成できないことがある。そのような場合、不合格状態表現は、“ＮＵＬＬ”として返され得る。“ＮＵＬＬ”不合格状態表現は、故に、合格プログラム状態と不合格プログラム状態との間の観測可能な違いが特定されなかったことを指し示し得る。対照的に、“ＮＵＬＬ”ではない不合格状態表現は、観測可能な違いが特定されたことを指し示し得る。
【００５７】
観測可能な違いが特定されなかったという決定に応答して、方法４００は、ブロック４０６からブロック４０８へと進み得る。特定の障害位置に関して合格プログラム状態と不合格プログラム状態との間に観測可能な違いを特定しないことは、その特定の障害位置で修復処理を実行することがあまり効果的でないかもしれないことを指し示し得る。従って、一部の実施形態において、ブロック４０８にて、現在分析されている障害位置は、より低い優先度が与えられてスキップされ得る。ブロック４０８に続いて、方法４００はブロック４０９へと進むことができ、そこで、別の障害位置が選択され得る。ブロック４０９は、一部の実施形態において、方法３００のブロック３０４に類似であり得る。
【００５８】
ブロック４０６に戻って、観測可能な違いが特定されたという決定に応答して、方法４００は、ブロック４０６からブロック４１０へと進み得る。ブロック４１０にて、修復有効性インジケーションとしてコンパクト性が決定され得る。コンパクト性は、可能な修復の複雑さ又は単純さを指し示すことができ、それによりその有効性を指し示し得る。
【００５９】
一部の実施形態において、障害位置での可能な修復のコンパクト性は、ブロック４０４で導出され得る表現に基づき得る（例えば、ブロック４０４で導出された不合格状態表現に基づく）。従って、より高い度合いのコンパクト性の決定に対応する障害位置での修復処理は、その障害位置での可能な修復処理が、より低い度合いのコンパクト性の決定に対応する別の障害位置においてよりも効果的であり得ることを指し示し得る。
【００６０】
一部の実施形態において、可能な修復のコンパクト性は、上記表現それ自体によって指し示され得る。例えば、不合格状態表現内の、より少ない変数、演算子、又は節（クローズ）は、より多くの変数、演算子、又は節を持ち得る別の不合格状態表現と比較して、高い度合いのコンパクト性を指し示し得る。従って、一部の実施形態において、決定されるコンパクト性は、不合格状態表現内の変数、演算子、又は節のうちの１つ以上について決定された個数を含み得る。
【００６１】
一部の実施形態において、決定されたコンパクト性が閾値と比較されることで修復有効性インジケーションが決定され得る。例えば、不合格状態表現内の変数、演算子、又は節の個数が決定されて、対応する閾値と比較され得る。個数が閾値よりも大きいことに応答して、仮に個数が閾値以下だった場合と比較して修復処理がそれほど効果的でないかもしれないことが決定され得る。一部の実施形態において、不合格状態表現内の変数値又は節の閾値数は、実証的分析に基づき得る。一部の実施形態において、決定されたコンパクト性が閾値を満足しない（例えば、閾値よりも多い数の変数値又は節を持つ）ことに応答して、方法４００は、ブロック４１０からブロック４１２へと進み得る。
【００６２】
ブロック４１２にて、一部の実施形態において、修復有効性インジケーションとして多様性が決定され得る。一部の実施形態において、多様性は、障害位置での条件文と関連付けられた“ＴＨＥＮ”ブランチをとることにつながり得るような、ブロック４０２で取得されたテーブルの合格テスト実行と、その条件文と関連付けられた“ＥＬＳＥ”ブランチをとることにつながり得る上記テーブルの合格テスト実行との分布に基づき得る。機械学習が修復オラクルを決定することを可能にし得るような、“ＴＨＥＮ”合格テスト実行と“ＥＬＳＥ”合格テスト実行との間の分布は、“ＴＨＥＮ”合格テスト実行と“ＥＬＳＥ”合格テスト実行との間に十分な多様性が存在し得ることを指し示し得る。十分な多様性を指し示し得る分布であるための“ＴＨＥＮ”合格テスト実行の数及び“ＥＬＳＥ”合格テスト実行の数は、一部の実施形態において、経験的に決定され得る。
【００６３】
不十分な多様性の決定に応答して、方法４００は、ブロック４１２からブロック４１４へと進み得る。不十分な多様性の決定は、その特定の障害位置で修復処理を実行することがあまり効果的でないかもしれないことを指し示し得る。従って、一部の実施形態において、ブロック４１４にて、現在分析されている障害位置に、より低い優先度が与えられ得る。ブロック４１４に続いて、方法４００はブロック４０９へと進むことができ、そこで、別の障害位置が選択され得る。
【００６４】
また、一部の実施形態において、非常に多様なステートメント型に関してコンパクト性の決定が為されているのに、障害位置が条件文（ステートメント）を含んでいることに応答して多様性が決定されて得しまうことがあり得る。従って、障害位置が条件文を含んでおらず且つコンパクト性が十分に高くない（例えば、閾値を満足しない）一部の場合には、方法４００は、ブロック４１０からブロック４１４へと進み得る。
【００６５】
ブロック４１２に戻って、十分な多様性の決定に応答して、方法４００は、ブロック４１２からブロック４１６へと進み得る。ブロック４１６にて、“ＴＨＥＮ”合格テスト実行及び“ＥＬＳＥ”合格テスト実行に関して機械学習が実行され得る。特に、サポートベクター機械学習が、“ＴＨＥＮ”合格テスト実行と関連付けられた合格プログラム状態、及び“ＥＬＳＥ”合格テスト実行と関連付けられた合格プログラム状態に関して、合格プログラム状態に対応する変数値に基づいて決定し得る。決定された値が、変数に基づく超空間（ハイパースペース）内にプロットされ得る。超空間内での“ＴＨＥＮ”合格プログラム状態プロット及び“ＥＬＳＥ”合格プログラム状態プロットの分布に基づき、これら異なる種類のプロットを分離する超平面（ハイパープレーン）が決定され得る。ブロック４１８に関して後述して示すように、これらの超平面及び超空間は、一部の実施形態において、修復オラクルを生成するために使用され得る。これら又はその他の実施形態において、ブロック４１６で実行され得る機械学習はまた、セルフトレーニング機械学習、発生モデル機械学習、グラフベースアルゴリズム、マルチビュー学習アルゴリズム、又はその他の好適な機械学習を含み得る。
【００６６】
ブロック４１６に続いて、方法４００はブロック４１８へと進み得る。また、一部の実施形態において、ブロック４１０で決定されたコンパクト性が閾値を満足する（例えば、閾値よりも少ない数の変数値又は節を持つ）ことに応答して、方法４００は、ブロック４１０からブロック４１８へと進み得る。
【００６７】
ブロック４１８にて、ブロック４０４又はブロック４１６で実行され得る機械学習に基づいて、修復オラクルが生成され得る。例えば、一部の実施形態において、修復オラクルは、ブロック４０４で生成され得る不合格状態表現に基づいて生成され得る。特に、上述のように、特定の不合格状態表現が、どの条件が特定の障害位置で不合格テスト実行を生じさせ得るかを指し示し得る。従って、特定の障害位置での不合格プログラム状態に関して、対応する不合格状態表現に基づいて、この特定の不合格状態表現で以前にとられた方向とは逆の方向がテスト対象コードでとられ得るようにして修復オラクルが生成され得る。例えば、特定の不合格状態表現が“ｆ”によって表現され、特定の不合格プログラム状態が、特定の障害位置と関連する“ＩＦ”条件文の条件“ｃ”を生じさせることがある。対応する修復オラクルは、特定の不合格プログラム状態に基づいて取られるものとは逆の経路がとられ得るように、条件“ｃ”を“ｆ  ＸＯＲ  ｃ”で置き換えて条件文をひっくり返し得る。
【００６８】
これら又はその他の実施形態において、修復オラクルは、ブロック４１６で決定され得るプロットされた超空間及び超平面に基づいて生成されてもよい。例えば、超平面は、障害位置での状態に基づいて障害位置で“ＥＬＳＥ”ブランチ又は“ＴＨＥＮ”ブランチのどちらがとられるべきかを指し示し得る。特に、特定の状態に関して状態評価が決定され、それが超空間内にプロットされ得る。プロットされた評価が超平面の“ＥＬＳＥ”側にあることに応答して、“ＥＬＳＥ”ブランチがとられるべきことが予測され得る。同様に、プロットされた評価が超平面の“ＴＨＥＮ”側にあることに応答して、“ＴＨＥＮ”ブランチがとられるべきことが予測され得る。このような予測が、一部の実施形態において修復オラクルとして使用され得る。
【００６９】
ブロック４２０にて、ブロック４１８で生成され得る修復オラクルに関して、１つ以上のテスト実行が行われ得る。一部の実施形態において、このテスト実行において、修復オラクルに基づいて、プログラム状態予測が為されて行われ得る。一部の実施形態において、実行されるテスト実行のうちの１つ以上は、不合格テスト実行であった以前のテスト実行とし得る。
【００７０】
ブロック４２２にて、修復オラクルによって為された上記予測に応じて、以前に不合格であったテスト実行が今度は合格するかが決定され得る。以前に不合格であったテスト実行が今度は合格することは、修復オラクルが良いものであることを指し示し得るものであり、以前に不合格であったテスト実行が今度は合格することに応答して、方法４００は、ブロック４２２からブロック４２６へと進み得る。ブロック４２６にて、１つ以上の更なる修復処理が実行され得る。例えば、一部の実施形態において、ブロック４２６での処理は、図３の方法３００に関して記載したブロック３１４、３１６、３１８、及び３２０のうちの１つ以上に関して記載した１つ以上の処理を含み得る。
【００７１】
ブロック４２２に戻って、１つ以上の以前に不合格であったテスト実行が、修復オラクル予測を用いても合格しないことに応答して、方法４００は、ブロック４２２からブロック４２４へと進み得る。ブロック４２４にて、修復オラクルが変更され得る。一部の実施形態において、修復オラクルは、その他の好適なオラクル生成技術を用いて変更され得る。例えば、修復オラクル内の１つ以上の節（クローズ）が、発見的に、ランダムに、あるいは総当たり的に変更され得る。ブロック４２４に続いて、方法４００はブロック４２２へと戻り得る。
【００７２】
方法４００には、本開示の範囲を逸脱することなく、変更、付加又は省略が為され得る。例えば、方法４００の処理は、異なる順序で実行されてもよい。加えて、あるいは代えて、２つ以上の処理が同時に実行されてもよい。また、概説した処理及びアクションは、単に例として提示したものであり、開示した実施形態の本質を逸脱することなく、これらの処理及びアクションの一部は、オプション必要に応じてのものにされ、より少ない処理やアクションへと結合され、あるいは更なる処理やアクションへと展開され得る。
【００７３】
さらに、一部の実施形態において、方法４００は、一度に１つの障害位置が分析されて、繰り返し実行され得る。加えて、あるいは代えて、一度に複数の障害位置に対して、１つ以上のブロックと関連付けられた１つ以上の処理が実行されてもよい。
【００７４】
上述のように、本開示にて記載された実施形態は、更に詳細に後述するような、様々なコンピュータハードウェア若しくはソフトウェアモジュールを含んだ、専用又は汎用のコンピュータ（例えば、図２のプロセッサ２５０）の使用を含み得る。また、上述のように、本開示にて記載される実施形態は、コンピュータ実行可能命令又はデータ構造を担持あるいは格納したコンピュータ読み取り可能媒体（例えば、図２のメモリ２５２）を用いて実装され得る。
【００７５】
ここで使用されるとき、用語“モジュール”又は“コンポーネント”は、モジュール若しくはコンポーネントの動作を実行するように構成された特定のハードウェア実装、及び／又は、コンピュータシステムの汎用ハードウェア（例えば、コンピュータ読み取り可能媒体、処理装置など）に格納され且つ／或いはそれによって実行され得るソフトウェアオブジェクト若しくはソフトウェアルーチンを意味し得る。一部の実施形態において、本開示にて記載された様々なコンポーネント、モジュール、エンジン及びサービスは、コンピュータシステム上で（例えば、別々のスレッドとして）実行される複数のオブジェクト又はプロセスとして実装され得る。本開示にて記載されたシステム及び方法の一部は概して、（汎用ハードウェアに格納され且つ／或いはそれによって実行される）ソフトウェアにて実装されるとして記述されているが、特有のハードウェア実装、又はソフトウェアと特有のハードウェアとの組み合わせ実装も可能であり且つ企図される。この記載において、“コンピューティングエンティティ”は、本開示にて先に規定されるような何らかのコンピューティングシステム、又はコンピューティングシステム上で実行される何らかのモジュール若しくは複数のモジュールの組み合わせとし得る。
【００７６】
本開示及び特に添付の請求項（例えば、添付の請求項の本体）で使用される用語は概して、“オープン”用語として意図している（例えば、用語“・・・を含んでいる”は、“・・・を含んでいるが、それに限定されない”として解釈されるべきであり、用語“・・・を有している”は、“少なくとも・・・を有している”として解釈されるべきであり、用語“・・・を含む”は、“・・・を含むが、それに限定されない”と解釈されるべきであり、等々）。
【００７７】
また、導入されるクレーム記載の具体数が意図される場合、そのような意図は、請求項中に明示的に記載されることになり、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、以下に添付される請求項は、クレーム記載を導入するために“少なくとも１つの”及び“１つ以上の”という前置きフレーズの使用を含むことがある。しかしながら、このようなフレーズの使用は、例え同じクレームが“少なくとも１つの”及び“１つ以上の”という前置きフレーズと“ａ”又は“ａｎ”などの不定冠詞とを含んでいるときであっても、不定冠詞“ａ”又は“ａｎ”によるクレーム記載の導入が、そのように導入されたクレーム記載を含む何れか特定の請求項を、唯一のそのような記載を含む実施形態に限定することを意味するようには、解釈されるべきでない（例えば、“ａ”及び／又は“ａｎ”は、“少なくとも１つの”又は“１つ以上の”を意味するように解釈されるべきである）。同じことが、クレーム記載を導入するために使用される定冠詞の使用にもあてはまる。
【００７８】
さらに、導入されるクレーム記載の具体数が明示的に記載されている場合であっても、当業者が認識するように、そのような記載は、少なくとも記載の数を意味するように解釈されるべきである（例えば、他の修飾語句のない、そのまま“２つのもの”なる記載は、少なくとも２つのもの、又は２つ以上のものを意味する）。また、“Ａ、Ｂ、及びＣなどのうちの少なくとも１つ”又は“Ａ、Ｂ、及びＣなどのうちの１つ以上”に似た伝統的表現が使用されるものにおいては、一般に、そのような構文は、Ａのみ、Ｂのみ、Ｃのみ、ＡとＢを共に、ＡとＣを共に、ＢとＣを共に、又は、ＡとＢとＣを共に、などを含むことを意図している。
【００７９】
また、２つ以上の別の用語を提示する離接的な用語又はフレーズは、実施形態の説明、特許請求の範囲、又は図面の中の何れであろうと、それらの用語のうちの１つ、それらの用語のうちの何れか、又は双方の用語を含む可能性を意図しているように理解されるべきである。例えば、フレーズ“Ａ又はＢ”は、“Ａ”若しくは“Ｂ”又は“Ａ及びＢ”の可能性を含むように理解されるべきである。
【００８０】
本開示にて記載された全ての例及び条件付きの言葉は、本開示と技術を前進させるために本願の発明者によって与えられる概念とを読者が理解することを支援するための教育的な目的を意図したものであり、そのように具体的に記載した例及び条件への限定ではないと解釈されるべきである。本開示の実施形態を詳細に説明したが、これらの実施形態には、本開示の精神及び範囲を逸脱することなく、様々な変形、代用及び改変が為され得る。
【００８１】
以上の説明に関し、更に以下の付記を開示する。
（付記１）  テストスイートを用いてソフトウェアプログラム内の障害位置を特定し、
機械学習を用いて、前記障害位置で可能な修復処理を実行することの潜在的な有効性を指し示す修復有効性インジケーションを決定し、
前記修復有効性インジケーションに基づいて、前記障害位置で修復を行うことを優先順位付け、且つ
前記障害位置の前記優先順位付けに基づいて、前記ソフトウェアプログラムに対する修復処理を実行する、
ことを有する方法。
（付記２）  前記修復有効性インジケーションを決定することは、
前記障害位置での不合格プログラム状態を指し示す不合格状態表現を決定し、前記不合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格しない前記障害位置での前記ソフトウェアプログラムの状態に対応し、且つ
前記不合格状態表現に基づいて、前記障害位置での前記可能な修復のコンパクト性を決定する
ことを含む、付記１に記載の方法。
（付記３）  決定木学習を用いて前記不合格状態表現を決定する、ことを更に有する付記２に記載の方法。
（付記４）  前記修復有効性インジケーションを決定することは、
前記障害位置での合格プログラム状態と不合格プログラム状態との間で観測可能な違いが特定されるかを決定し、前記合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格する前記障害位置での前記ソフトウェアプログラムの状態に対応し、前記不合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格しない前記障害位置での前記ソフトウェアプログラムの状態に対応し、且つ
前記違いの特定に基づいて前記修復有効性インジケーションを決定する
ことを含む、付記１に記載の方法。
（付記５）  前記障害位置での不合格プログラム状態を指し示す不合格状態表現に基づいて、前記違いの特定を実行する、ことを更に有する付記４に記載の方法。
（付記６）  前記修復有効性インジケーションを決定することは、
前記障害位置における条件文と関連付けられた“ＴＨＥＮ”ブランチをとることにつながる前記テストスイートのテストの合格テスト実行と、前記条件文と関連付けられた“ＥＬＳＥ”ブランチをとることにつながる前記テストスイートのテストの合格テスト実行との間の多様性を決定し、且つ
前記多様性の決定に基づいて前記修復有効性インジケーションを決定する
ことを含む、付記１に記載の方法。
（付記７）  前記修復有効性インジケーションが閾値を満足することに応答して、機械学習を用いて、前記テストスイートからのテストの１つ以上のテスト実行を合格又は不合格する前記障害位置での前記ソフトウェアプログラムの状態に対応するプログラム状態に基づいて、前記障害位置に関する修復オラクルを生成する、ことを更に有する付記１に記載の方法。
（付記８）  前記修復オラクルを生成することは、
前記障害位置での不合格プログラム状態を指し示す不合格状態表現を決定し、前記不合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格しない前記障害位置での前記ソフトウェアプログラムの状態に対応し、且つ
前記不合格状態表現に基づいて前記修復オラクルを生成する
ことを含む、付記７に記載の方法。
（付記９）  前記修復オラクルを生成することは、
前記障害位置における条件文に関する超平面を決定し、且つ
前記超平面に基づいて、前記超平面によって指し示される、前記条件文と関連付けられた“ＴＨＥＮ”ブランチをとることにつながる合格プログラム状態と、前記超平面によって指し示される、前記条件文と関連付けられた“ＥＬＳＥ”ブランチをとることにつながる合格プログラム状態と、に基づく前記修復オラクルを生成する
ことを含み、前記合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格する前記障害位置での前記ソフトウェアプログラムの状態に対応するし、付記７に記載の方法。
（付記１０）  前記修復オラクルに基づいて、前記障害位置における修復を生成する、ことを更に有する付記７に記載の方法。
（付記１１）  １つ以上のプロセッサによる実行に応答してシステムに処理を実行させるように構成されたコンピュータ実行可能命令、を格納したコンピュータ読み取り可能記憶媒体であって、前記処理は、
テストスイートを用いてソフトウェアプログラム内の障害位置を特定し、
機械学習を用いて、前記障害位置で可能な修復処理を実行することの潜在的な有効性を指し示す修復有効性インジケーションを決定し、
前記修復有効性インジケーションに基づいて、前記障害位置で修復を行うことを優先順位付け、且つ
前記障害位置の前記優先順位付けに基づいて、前記ソフトウェアプログラムに対する修復処理を実行する
ことを有する、コンピュータ読み取り可能記憶媒体。
（付記１２）  前記修復有効性インジケーションを決定することは、
前記障害位置での不合格プログラム状態を指し示す不合格状態表現を決定し、前記不合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格しない前記障害位置での前記ソフトウェアプログラムの状態に対応し、且つ
前記不合格状態表現に基づいて、前記障害位置での前記可能な修復のコンパクト性を決定する
ことを含む、付記１１に記載のコンピュータ読み取り可能記憶媒体。
（付記１３）  前記処理は更に、決定木学習を用いて前記不合格状態表現を決定することを有する、付記１２に記載のコンピュータ読み取り可能記憶媒体。
（付記１４）  前記修復有効性インジケーションを決定することは、
前記障害位置での合格プログラム状態と不合格プログラム状態との間で観測可能な違いが特定されるかを決定し、前記合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格する前記障害位置での前記ソフトウェアプログラムの状態に対応し、前記不合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格しない前記障害位置での前記ソフトウェアプログラムの状態に対応し、且つ
前記違いの特定に基づいて前記修復有効性インジケーションを決定する
ことを含む、付記１１に記載のコンピュータ読み取り可能記憶媒体。
（付記１５）  前記処理は更に、前記障害位置での不合格プログラム状態を指し示す不合格状態表現に基づいて、前記違いの特定を実行することを有する、付記１４に記載のコンピュータ読み取り可能記憶媒体。
（付記１６）  前記修復有効性インジケーションを決定することは、
前記障害位置における条件文と関連付けられた“ＴＨＥＮ”ブランチをとることにつながる前記テストスイートのテストの合格テスト実行と、前記条件文と関連付けられた“ＥＬＳＥ”ブランチをとることにつながる前記テストスイートのテストの合格テスト実行との間の多様性を決定し、且つ
前記多様性の決定に基づいて前記修復有効性インジケーションを決定する
ことを含む、付記１１に記載のコンピュータ読み取り可能記憶媒体。
（付記１７）  前記処理は更に、前記修復有効性インジケーションが閾値を満足することに応答して、機械学習を用いて、前記テストスイートからのテストの１つ以上のテスト実行を合格又は不合格する前記障害位置での前記ソフトウェアプログラムの状態に対応するプログラム状態に基づいて、前記障害位置に関する修復オラクルを生成することを有する、付記１１に記載のコンピュータ読み取り可能記憶媒体。
（付記１８）  前記修復オラクルを生成することは、
前記障害位置での不合格プログラム状態を指し示す不合格状態表現を決定し、前記不合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格しない前記障害位置での前記ソフトウェアプログラムの状態に対応し、且つ
前記不合格状態表現に基づいて前記修復オラクルを生成する
ことを含む、付記１７に記載のコンピュータ読み取り可能記憶媒体。
（付記１９）  前記修復オラクルを生成することは、
前記障害位置における条件文に関する超平面を決定し、且つ
前記超平面に基づいて、前記超平面によって指し示される、前記条件文と関連付けられた“ＴＨＥＮ”ブランチをとることにつながる合格プログラム状態と、前記超平面によって指し示される、前記条件文と関連付けられた“ＥＬＳＥ”ブランチをとることにつながる合格プログラム状態と、に基づく前記修復オラクルを生成する
ことを含み、前記合格プログラム状態は、前記テストスイートからのテストの１つ以上のテスト実行を合格する前記障害位置での前記ソフトウェアプログラムの状態に対応するし、付記１７に記載のコンピュータ読み取り可能記憶媒体。
（付記２０）  前記処理は更に、前記修復オラクルに基づいて、前記障害位置における修復を生成することを有する、付記１７に記載のコンピュータ読み取り可能記憶媒体。
【図１】
0006787046.tif 000003
【図２】
0006787046.tif 000004
【図３】
0006787046.tif 000005
【図４】
0006787046.tif 000006