JP2018055676A - 自動ソフトウェアプログラム修復 - Google Patents

自動ソフトウェアプログラム修復 Download PDF

Info

Publication number
JP2018055676A
JP2018055676A JP2017145312A JP2017145312A JP2018055676A JP 2018055676 A JP2018055676 A JP 2018055676A JP 2017145312 A JP2017145312 A JP 2017145312A JP 2017145312 A JP2017145312 A JP 2017145312A JP 2018055676 A JP2018055676 A JP 2018055676A
Authority
JP
Japan
Prior art keywords
software program
test
repair
test suite
failure rate
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
JP2017145312A
Other languages
English (en)
Other versions
JP6891703B2 (ja
Inventor
吉田 浩章
Hiroaki Yoshida
浩章 吉田
アール プラサド・ムクル
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 JP2018055676A publication Critical patent/JP2018055676A/ja
Application granted granted Critical
Publication of JP6891703B2 publication Critical patent/JP6891703B2/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/3664Environments for 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/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • 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
    • G06F11/3692Test management for test results analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】ソフトウェアプログラムを修復する方法等を提供すること。【解決手段】一実施形態の一態様に従うと、方法は、テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定するステップと、前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装するステップと、前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張するステップと、前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行するステップと、前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップと、を含み得る。【選択図】図3

Description

本開示に記載の実施形態は、自動ソフトウェアプログラム修復に関する。
ソフトウェアプログラムは、ソフトウェアプログラム内にフォールト(一般に「バグ」と呼ばれる)を有することがしばしばあり、それにより、ソフトウェアプログラムは、意図されるように動作しないことがある。ソフトウェアプログラム内のフォールトを特定して修正するように試みる自動修復システムが、しばしば使用される。
本開示において特許請求される主題は、あらゆる欠点を解決する実施形態又は上記のような環境においてのみ動作する実施形態に限定されるものではない。そうではなく、この背景技術の記載は、本開示に記載のいくつかの実施形態が実施され得る1つの例示的な技術領域を示すために提供されているに過ぎない。
一実施形態の一態様に従うと、方法は、テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定するステップを含み得る。本方法は、前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装するステップをさらに含み得る。加えて、本方法は、前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張するステップを含み得る。さらに、本方法は、前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行するステップを含み得る。本方法はまた、前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップを含み得る。
実施形態の目的及び利点が、少なくとも請求項において特に示される要素、特徴、及び組合せにより、実現及び達成される。
前述の総括的な説明及び以下の詳細な説明の両方ともが、例として与えられ、説明的なものであり、特許請求される発明を限定するものではない。
例示的な実施形態が、添付の図面を使用して、より具体的且つ詳細に記載及び説明される。
ソフトウェアプログラムを修復することに関連する例示的な環境を表す図。 ソフトウェアプログラムを修復するよう構成され得る例示的なコンピューティングシステムを示す図。 ソフトウェアプログラムを修復する例示的な方法のフローチャート。
本開示に記載のいくつかの実施形態は、ソフトウェアプログラムを修復する方法及びシステムに関する。ソフトウェアプログラムは、ソフトウェアプログラムを意図しない形で挙動させるおそれがあるフォールト(一般に「バグ」とも呼ばれる)をしばしば含む。さらに、自動修復システム及び技術が、フォールトを検出及び修正してソフトウェアプログラムを修復するために、しばしば使用される。しかしながら、自動修復システム及び技術は、ソフトウェアプログラムの全ての側面をテストしないことがしばしばある。したがって、自動修復システム及び技術は、フォールトを修復しようと試みて、ソフトウェアプログラム内のフォールトを適切には修復しない変更であって、テストされているときに誤っているとして出現することもある変更を、ソフトウェアプログラムに対して行ってしまうことがある。
本開示に記載の1つ以上の実施形態に従うと、ソフトウェアプログラムがエラーを含んでいるかどうかを判定するために使用され得る1つ以上のテストスイートが、特定の修復候補が、有効な修復候補であり得るかどうかをより良く判定するように拡張され得る。詳細には、テストスイートは、特定のフォールト位置に対応し得る複数のテストオラクルを含むように拡張され得る。さらに、特定のフォールト位置における特定されたフォールトに対して実装され得る特定の修復候補に関するテストオラクルの失敗率が、修復として当該修復候補を使用して優先順位付けするために、使用され得る。
修復候補の優先順位付けは、修復動作の有効性に関する決定を向上させることにより、自動ソフトウェアプログラム修復の効率性を向上させることができる。さらに、いくつかの実施形態において、拡張及びテストは、ソフトウェア全体に対してではなく、フォールト位置を含む、ソフトウェアプログラムのユニットに対して実行され得、これは、実行される処理の量を低減させることができる。
本開示の実施形態が、添付の図面を参照して説明される。
図1は、本開示に記載の少なくとも1つの実施形態に従って構成される、ソフトウェアプログラムを修復することに関連する例示的な環境100を表す図である。環境100は、フォールトについてテスト対象コード104を解析するよう構成されている修復モジュール106を含み得る。修復モジュール106はまた、変更されたテスト対象コード108を出力するよう構成され得、変更されたテスト対象コード108は、修復モジュール106により実行された修復動作によりテスト対象コード104に対して行われた1つ以上の変更を含み得る。
テスト対象コード104は、例えば、処理デバイスにより実行される、ソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は、他のロジック若しくは命令等の電子データを含み得る。いくつかの実施形態において、テスト対象コード104は、ソフトウェアプログラムの完全なインスタンスを含み得る。追加的又は代替的に、テスト対象コード104は、ソフトウェアプログラムの一部を含んでもよい。テスト対象コード104は、ソフトウェアプログラムのために使用され得る任意の適切なタイプのコンピュータ言語で記述され得る。
修復モジュール106は、コンピューティングデバイスが、テスト対象コード104の1つ以上の変更を実行して変更されたテスト対象コード108を生成することが可能になるよう構成されているコード及びルーチンを含み得る。追加的又は代替的に、修復モジュール106は、(例えば、1つ以上の動作を実行する又は1つ以上の動作の実行を制御する)プロセッサ、(例えば、1つ以上の動作を実行する又は1つ以上の動作の実行を制御する)マイクロプロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを使用して実装されてもよい。いくつかの他の例において、修復モジュール106は、ハードウェアとソフトウェアとの組合せを使用して実装されてもよい。本開示において、修復モジュール106により実行されるとして説明される動作は、対応するシステムに実行するように修復モジュール106が命令し得る動作を含み得る。
修復モジュール106は、テスト対象コード104内の1つ以上のフォールトを修復(修正とも呼ばれる)するために用いられ得る一連の修復動作を、テスト対象コード104に対して実行するよう構成され得る。いくつかの実施形態において、修復モジュール106は、修復テンプレート112及び1つ以上のテストスイート111に基づいて、修復動作のうちの1つ以上を実行するよう構成され得る。
修復テンプレート112は、実行されたときに、テスト対象コード104内にフォールトが存在することに応じて、テスト対象コード104に対して1つ以上の変更を実装するよう構成され得る任意の適切なタイプの命令又はルーチンを含み得る。1つ以上の変更は、フォールトを修復し得る又はフォールトを修復しようと試み得る、テスト対象コード104における変更を含み得る。本開示において、実行され得る変更は、「修復候補」又は「修復」と呼ばれることがある。
テストスイート111は、テスト対象コード104についてのテストケースとして動作し得る1つ以上のルーチンを含み得る。テストスイート111は、テスト対象コード104が指定されたように挙動するかどうかを判定するよう構成され得る。テストスイート111は、任意の適切な技術に従って構成され得る。
修復モジュール106は、テスト対象コード104に対してテストスイート111のうちの1つ以上を適用して、テスト対象コード104内の1つ以上のフォールト及び対応するフォールト位置を検出又は判別するよう構成され得る。いくつかの実施形態において、修復モジュール106は、テストスイート111に含まれる1つ以上のテストを実行するよう構成され得、このようなテストを実行することは、テスト実行を行うと呼ばれることがある。合格したテスト実行は、「合格テスト実行」と呼ばれることがあり、失敗したテスト実行は、「失敗テスト実行」と呼ばれることがある。いくつかの実施形態において、テスト対象コード104のフォールト位置及び対応するフォールトは、コードを実行した失敗テスト実行が当該フォールト位置において生じたことに基づいて、特定され得る。
いくつかの実施形態において、修復モジュール106は、テスト実行中、テスト対象コード104の挙動を観測するよう構成され得る。これらの実施形態又は他の実施形態において、修復モジュール106は、観測された挙動に基づいて、1つ以上のテストオラクルを生成するよう構成され得る。いくつかの実施形態において、テストオラクルはそれぞれ、複数のテストオラクルがいくつかのインスタンスにおいて同じフォールト位置に対応し得る、フォールト位置に対応し得る。各テストオラクルは、対応するフォールト位置におけるソフトウェアプログラムのどの状態が、フォールト位置の特定に至らせ得る失敗テスト実行をもたらすかの代わりに、対応するフォールト位置における合格テスト実行をもたらし得るかを予測することができる。いくつかの実施形態において、修復モジュール106は、テストオラクルのうちの1つ以上をテストスイート111に含めることにより、テストスイート111のうちの1つ以上を拡張するよう構成され得る。
追加的又は代替的に、修復モジュール106は、失敗テスト実行中に特定され得る特定のフォールト位置に対して、修復テンプレート112の修復候補を実装するよう構成されてもよい。いくつかの実施形態において、修復モジュール106は、複数のフォールト位置に対して複数の修復候補を実装するよう構成され得る。
いくつかの実施形態において、修復モジュール106は、複数のテストオラクルを含む拡張されたテストスイートを使用して、1つ以上の実装された修復候補を含むテスト対象コード104のテスト実行を行うよう構成され得る。これらの実施形態又は他の実施形態において、修復モジュール106は、テストオラクルの失敗率に基づいて、修復候補を優先順位付けするよう構成され得る。いくつかの実施形態において、修復モジュール106は、優先順位付けを決定するために、(以下で詳細に説明される)図3の方法300に従って1つ以上の動作を実行するよう構成され得る。
修復モジュール106はまた、修復候補の優先順位付けに基づいて、テスト対象コード104に対して修復を実行するよう構成され得る。追加的又は代替的に、修復モジュール106は、変更されたテスト対象コード108を出力するよう構成されてもよく、変更されたテスト対象コード108は、修復候補の優先順位付けに基づいて実装され得る1つ以上の修復を含み得る。
本開示の範囲から逸脱することなく、図1に対して、変更、追加、又は省略が可能である。例えば、環境100は、本開示において図示及び説明された要素よりも多い又は少ない要素を含んでもよい。さらに、いくつかの実施形態において、修復モジュール106、テストスイート111、及び修復テンプレート112の1つ以上のルーチン、1つ以上の命令、又はコードの少なくとも一部は、それらが同じ要素とみなされ得るように、又は、それらが、修復モジュール106、テストスイート111、及び修復テンプレート112のうちの2つ以上の一部であるとみなされ得る共通セクションを有し得るように、組み合わされてもよい。
図2は、本開示の少なくとも1つの実施形態に従った例示的なコンピューティングシステム202のブロック図を示している。コンピューティングシステム202は、修復モジュール(例えば、修復モジュール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の修復モジュール106又は(例えば、修復モジュール106により命令される)図2のコンピューティングシステム202が、テスト対象コード104に対して、方法300に関連付けられている動作のうちの1つ以上を実行できる。別個のブロックとして図示されているが、方法300のブロックのうちの1つ以上のブロックに関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。
方法300は、ブロック302で開始し得、ブロック302において、フォールト及び対応するフォールト位置が、テスト対象コード内で特定され得る。フォールト特定は、任意の適切な技術を使用して、テスト対象コードに対して実行され得る。例えば、いくつかの実施形態において、フォールト特定は、テスト対象コードに対して、1つ以上のテストスイートのテスト実行を行うことに基づいて、実行され得る。
ブロック304において、修復候補が、特定されたフォールト位置において実装され得る。いくつかの実施形態において、修復候補は、上述したような修復テンプレートに基づいて、実装され得る。
ブロック306において、テスト実行が、修復候補が実装されたテスト対象コードに対して1つ以上のテストスイートを実行することにより、行われ得る。いくつかの実施形態において、テスト実行は、実装された修復候補及びフォールト位置を含む、テスト対象コードの特定のユニットに対して行われ得る。例えば、いくつかの実施形態において、ブロック306において、テスト対象コードの特定のユニットをカバーするテストスイートのテストのみが、実行され得る。上述したのと同様に、実装された修復候補を「含む」ユニットとの言及は、フォールト位置の実行を命令する任意のユニットを指し得る。
ブロック308において、いくつかの実施形態において、複数のテストオラクルが、テスト対象コードに対して生成され得る。テストオラクルは、任意の適切な技術を使用して生成され得る。例えば、いくつかの実施形態において、テスト対象コードの挙動が、上述したように、ブロック302においてフォールト位置を特定するために用いられているテスト実行中、観測され得る。さらに、テストオラクルは、観測された挙動に基づいて生成され得る。
いくつかの実施形態において、テストオラクルは、フォールト位置を含む、テスト対象コードの特定のユニットに対して生成され得る。例えば、いくつかの実施形態において、ブロック308において、テスト対象コードの特定のユニットに関するテストオラクルのみが生成され得る。いくつかの実施形態において、このユニットは、テスト対象コードのモジュール、テスト対象コードのファイル、テスト対象コードの構造体、テスト対象コードの関数、又はこれらの任意の組合せを含み得る。さらに、フォールト位置を「含む」ユニットとの言及は、フォールト位置の実行を命令する任意のユニットを指し得る。例えば、フォールト位置は、テスト対象コードの第1の関数のコード内にあり得、第2の関数は、第1の関数を呼び出すよう構成され得る。したがって、第2の関数は、フォールト位置を含み得る。
追加的又は代替的に、いくつかの実施形態において、ブロック308において、テストオラクルは、ブロック306におけるテスト実行が合格テスト実行をもたらしたことに応じて、生成されてもよい。以下でさらに詳細に説明されるように、テスト実行が合格テスト実行をもたらしたことに応じて生成されたテストオラクルは、合格テスト実行が、実装された修復候補がフォールトを修復すること又は新たなフォールトを発生させないことを誤って示すフォルスポジティブであるかどうかを識別するのを助けるために使用され得る。
ブロック310において、テストスイートが、ブロック308において生成され得るテストオラクルを用いて拡張され得る。いくつかの実施形態において、テストスイートは、ブロック306におけるテスト実行が合格テスト実行をもたらしたことに応じて、拡張され得る。
ブロック312において、別のテスト実行が、拡張されたテストスイートを実行することにより、行われ得る。いくつかの実施形態において、ブロック312において、実装された修復候補及びフォールト位置を含むユニットに対応する、拡張されたテストスイートのテスト及びテストオラクルのみが、実行され得る。
ブロック314において、優先順位付けが、ブロック312において行われたテスト実行に基づいて、修復候補に対して決定され得る。いくつかの実施形態において、テストオラクルの失敗率が、決定され得、修復候補が、失敗率に基づいて優先順位付けされ得る。例えば、失敗率は、より高い失敗率がより低い失敗率よりも低い有効度を示し得る、修復候補の有効度を示すことができる。そのようなものとして、有効度が、失敗率から決定され得、修復候補が、有効度に応じて優先順位付けされ得る。例えば、失敗テストオラクルの第1の数を示す第1の失敗率である場合、失敗テストオラクルの第1の数よりも少ない、失敗テストオラクルの第2の数を示す第2の失敗率である場合の優先順位よりも低い優先順位が、第2の失敗率よりも低い有効度を示す第1の失敗率に基づいて、修復候補に与えられ得る。
いくつかの実施形態において、フォールト位置及び実装された修復候補に対応する、合格テストオラクルの数及び失敗テストオラクルの数が、決定され得る。これらの実施形態又は他の実施形態において、合格テストオラクルの数と失敗テストオラクルの数とが、失敗率を決定するために比較され得る。例えば、いくつかの実施形態において、失敗率は、テストオラクルの総数に対する失敗テストオラクルのパーセンテージを含み得る。追加的又は代替的に、失敗率は、テストオラクルの総数に対する合格テストオラクルのパーセンテージを含んでもよい。本開示において、ある失敗率が別の失敗率よりも高いとの言及は、その高い方の失敗率の方が、失敗テストオラクルの数がより多いというインジケーションである。例えば、25%が失敗テストオラクルのパーセンテージを示す、該25%という第1の失敗率は、40%が失敗テストオラクルのパーセンテージを示す、該40%という第2の失敗率よりも低いとみなされ得る。さらに、合格率も、失敗率の示唆を提供し、「失敗率」という用語も、合格率を含み得る。例えば、75%という合格率は、25%という失敗率を示し、逆も同様である。
これらの実施形態又は他の実施形態において、修復候補は、同じフォールト位置に対応し得る他の修復候補の失敗率と比較される、該修復候補の失敗率に基づいて、優先順位付けされ得る。例えば、(この例において第1の修復候補として表される)修復候補は、ブロック304、306、308、310、及び312に従ってフォールト位置について既に処理されて解析されている第2の修復候補の第2の失敗率よりも高い第1の失敗率を有し得る。さらに、第1の失敗率は、ブロック304、306、308、310、及び312に従ってフォールト位置について既に処理されて解析されている第3の修復候補の第3の失敗率よりも低いものであり得る。これらの失敗率に応じて、第1の修復候補が、第2の修復候補に対して優先順位付けされ得、第3の修復候補が、第1の修復候補に対して優先順位付けされ得る。
追加的又は代替的に、いくつかの実施形態において、優先順位付けは、失敗率が閾失敗率を超えているか否かに基づいてもよい。本開示において、失敗率が閾失敗率を超えているとの言及は、失敗テストオラクルの数が多すぎることを示す。いくつかの実施形態において、閾失敗率は、ソフトウェアプログラム内のエラーの推定数に基づき得る。例えば、いくつかの実施形態において、閾失敗率は、ソフトウェアプログラム内の可能性のある全ての実行パスの数に対する誤った実行パスの推定数の比であり得る。これらの実施形態又は他の実施形態において、エラーの推定数(これは、誤った実行パスの推定数を含み得る)は、ブロック306において行われたテスト実行からの結果に基づいて決定され得る。いくつかの実施形態において、失敗率が閾失敗率を超えていないことに応じて、優先順位付けは、修復候補が受け入れ可能であるとみなされるようにされ得る。追加的又は代替的に、失敗率が閾失敗率を超えていることに応じて、優先順位付けは、修復候補が受け入れ可能でないとみなされるようにされ得る。
いくつかの実施形態において、失敗率は、修復候補が、合格テスト結果についてフォルスポジティブをもたらすか否かを示すことができる。例えば、いくつかの実施形態において、修復候補は、テストスイートに基づく合格テスト実行をもたらし得るが、テストオラクルの失敗率は、閾失敗率を超え得る。したがって、合格テスト結果が、修復候補の実装により生じ得るとしても、修復候補は、受け入れ可能でないとみなされ得る。したがって、いくつかの実施形態において、失敗率はまた、合格テスト実行についてフォルスポジティブを判定するために使用され得、優先順位付けは、その相応のものを示し得る。
ブロック316において、修復が、ブロック314において決定され得る、修復候補の優先順位付けに基づいて、実行され得る。例えば、いくつかの実施形態において、修復候補が、該修復候補の失敗率と閾失敗率との比較に基づいて、受け入れ可能であるとみなされると、優先順位付けが示した場合、修復候補は、受け入れられ、ブロック316において、不変に実装され得る。反対に、修復候補が、該修復候補の失敗率と閾失敗率との比較に基づいて、受け入れ可能でないとみなされると、優先順位付けが示した場合、修復候補は、却下され、別の修復候補が選択され得る。
これらの実施形態又は他の実施形態において、フォールト位置に対応し得る複数の修復候補が、ブロック304、306、308、310、312、及び314に基づいて、優先順位付けされ得る。ブロック316において、複数の修復候補のうち最も高い優先順位を有する修復候補が、実装され得る。
ブロック318において、変更されたテスト対象コードが出力され得る。変更されたテスト対象コードは、変更されたテスト対象コードが、ブロック302において受信され得るテスト対象コードの修復されたバージョンを含み得るように、上述した修復候補優先順位付けに基づいて実装され得る1つ以上の修復候補を含み得る変更を含み得る。
方法300は、ソフトウェアプログラムのテスト及び修復の効率性及び有効性を向上させることができる。例えば、テストオラクル失敗率に基づく修復候補の優先順位付けの決定は、修復候補の有効度に関するより良い決定を行うのを助けることができる。さらに、ソフトウェアプログラムの正しい挙動をテストオラクルが正確に予測するか否かを判定することは、難しい又は不可能である場合がある。なぜならば、テストオラクルは、誤ったコードの挙動観測に基づいて生成され得るからである。しかしながら、テストオラクルの失敗率を調べて、優先順位付けを失敗率全体に基づくようにすることにより、誤ったテストオラクルの影響が低減され得る。さらに、テスト対象コード全体に対してではなく、フォールト位置を含む、テスト対象コードの特定のユニットに対して動作を実行することは、処理効率についても有用であり得る。
本開示の範囲から逸脱することなく、方法300に対して、変更、追加、又は省略が可能である。例えば、方法300の動作は、異なる順序で実行されることがある。追加的又は代替的に、2つ以上の動作は、同時に実行されることがある。さらに、説明された動作及びアクションは、例として提供されているに過ぎず、これらの動作及びアクションのうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ない動作及びアクションに組み合わされることもあるし、追加の動作及びアクションに拡張されることもある。
例えば、いくつかの実施形態において、ブロック308、310、312、314、及び316の、テストオラクルの生成動作、テストスイートの拡張動作、拡張されたテストスイートの実行動作、修復候補優先順位付け動作、及び修復動作は、ブロック306におけるテスト実行が合格テスト実行をもたらしたことに応じて、実行され得る。ブロック306におけるテスト実行が合格テスト実行をもたらしたことに応じて、ブロック308、310、312、314、及び316の動作を実行することにより、有効な修復ではないと既にみなされている修復候補に対してはこれらの動作を実行しないので、効率性を向上させることができる。
さらに、いくつかの実施形態において、方法300は、単一のフォールト位置と該フォールト位置に対応する単一の修復候補とが、一度に解析され得るように、反復的に実行され得る。追加的又は代替的に、1つ以上のブロックに関連付けられている1つ以上の動作は、複数のフォールト位置又は複数の修復候補に対して同時に実行されることがある。
上記で示されたように、本開示に記載の実施形態は、以下でより詳細に説明される様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用のコンピュータ(例えば、図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)
テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定するステップと、
前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装するステップと、
前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張するステップと、
前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行するステップと、
前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップと、
を含む方法。
(付記2)
前記失敗率に基づいて、前記修復候補を優先順位付けすることは、前記失敗率が、前記ソフトウェアプログラム内の誤った実行パスの推定数に基づく閾失敗率を超えているかどうかに基づく、付記1に記載の方法。
(付記3)
前記修復候補を実装した後であって、前記テストスイートを拡張する前に、実装された前記修復候補を有する前記ソフトウェアプログラムに対して、前記テストスイートを実行するステップと、
前記ソフトウェアプログラムにおいて実装された前記修復候補に対して、前記テストスイートの全てのテストが合格したことに応じて、前記テストスイートを拡張し、前記の拡張されたテストスイートを実行するステップと、
をさらに含む、付記1に記載の方法。
(付記4)
前記修復候補を実装した後であって、前記テストスイートを拡張する前に、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに対してのみ、前記テストスイートを実行するステップをさらに含む、付記3に記載の方法。
(付記5)
前記修復候補を実装する前に、前記ソフトウェアプログラムの観測された挙動に基づいて、前記複数のテストオラクルを生成するステップをさらに含む、付記1に記載の方法。
(付記6)
前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに基づいて、
前記ソフトウェアプログラムの前記ユニットに対して、前記複数のテストオラクルを生成するステップと、
前記ソフトウェアプログラムの前記ユニットに対してのみ、前記の拡張されたテストスイートを実行するステップと、
のうちの1つ以上をさらに含む、付記1に記載の方法。
(付記7)
前記ソフトウェアプログラムの前記ユニットは、前記ソフトウェアプログラムのモジュールと、前記ソフトウェアプログラムのファイルと、前記ソフトウェアプログラムの構造体と、前記ソフトウェアプログラムの関数と、のうちの1つ以上を含む、付記6に記載の方法。
(付記8)
前記失敗率に基づいて、前記修復候補の有効度を決定するステップと、
前記の決定された有効度に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップと、
をさらに含む、付記1に記載の方法。
(付記9)
前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けすることは、前記失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を受け入れることを含む、付記1に記載の方法。
(付記10)
前記複数のテストオラクルは、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに関する、前記ソフトウェアプログラムの観測された挙動に基づく、付記1に記載の方法。
(付記11)
命令を記憶するよう構成されている非一時的なコンピュータ読み取り可能な記憶媒体であって、前記命令が実行されたときに、前記命令はシステムに複数の動作を実行させ、前記複数の動作は、
テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定する動作と、
前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装する動作と、
前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張する動作と、
前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行する動作と、
前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けする動作と、
を含む、非一時的なコンピュータ読み取り可能な記憶媒体。
(付記12)
前記失敗率に基づいて、前記修復候補を優先順位付けすることは、前記失敗率が、前記ソフトウェアプログラム内の誤った実行パスの推定数に基づく閾失敗率を超えているかどうかに基づく、付記11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
(付記13)
前記複数の動作は、
前記修復候補を実装した後であって、前記テストスイートを拡張する前に、実装された前記修復候補を有する前記ソフトウェアプログラムに対して、前記テストスイートを実行する動作と、
前記ソフトウェアプログラムにおいて実装された前記修復候補に対して、前記テストスイートの全てのテストが合格したことに応じて、前記テストスイートを拡張し、前記の拡張されたテストスイートを実行する動作と、
をさらに含む、付記11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
(付記14)
前記複数の動作は、前記修復候補を実装した後であって、前記テストスイートを拡張する前に、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに対してのみ、前記テストスイートを実行する動作をさらに含む、付記13に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
(付記15)
前記複数の動作は、前記修復候補を実装する前に、前記ソフトウェアプログラムの観測された挙動に基づいて、前記複数のテストオラクルを生成する動作をさらに含む、付記11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
(付記16)
前記複数の動作は、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに基づいて、
前記ソフトウェアプログラムの前記ユニットに対して、前記複数のテストオラクルを生成する動作と、
前記ソフトウェアプログラムの前記ユニットに対してのみ、前記の拡張されたテストスイートを実行する動作と、
のうちの1つ以上をさらに含む、付記11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
(付記17)
前記ソフトウェアプログラムの前記ユニットは、前記ソフトウェアプログラムのモジュールと、前記ソフトウェアプログラムのファイルと、前記ソフトウェアプログラムの構造体と、前記ソフトウェアプログラムの関数と、のうちの1つ以上を含む、付記16に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
(付記18)
前記複数の動作は、
前記失敗率に基づいて、前記修復候補の有効度を決定する動作と、
前記の決定された有効度に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けする動作と、
をさらに含む、付記11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
(付記19)
前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けすることは、前記失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を受け入れることを含む、付記11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
(付記20)
前記複数のテストオラクルは、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに関する、前記ソフトウェアプログラムの観測された挙動に基づく、付記11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
104 テスト対象コード
106 修復モジュール
108 変更されたテスト対象コード
111 テストスイート
112 修復テンプレート
202 コンピューティングシステム
250 プロセッサ
252 メモリ
254 データストレージ

Claims (20)

  1. テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定するステップと、
    前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装するステップと、
    前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張するステップと、
    前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行するステップと、
    前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップと、
    を含む方法。
  2. 前記失敗率に基づいて、前記修復候補を優先順位付けすることは、前記失敗率が、前記ソフトウェアプログラム内の誤った実行パスの推定数に基づく閾失敗率を超えているかどうかに基づく、請求項1に記載の方法。
  3. 前記修復候補を実装した後であって、前記テストスイートを拡張する前に、実装された前記修復候補を有する前記ソフトウェアプログラムに対して、前記テストスイートを実行するステップと、
    前記ソフトウェアプログラムにおいて実装された前記修復候補に対して、前記テストスイートの全てのテストが合格したことに応じて、前記テストスイートを拡張し、前記の拡張されたテストスイートを実行するステップと、
    をさらに含む、請求項1に記載の方法。
  4. 前記修復候補を実装した後であって、前記テストスイートを拡張する前に、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに対してのみ、前記テストスイートを実行するステップをさらに含む、請求項3に記載の方法。
  5. 前記修復候補を実装する前に、前記ソフトウェアプログラムの観測された挙動に基づいて、前記複数のテストオラクルを生成するステップをさらに含む、請求項1に記載の方法。
  6. 前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに基づいて、
    前記ソフトウェアプログラムの前記ユニットに対して、前記複数のテストオラクルを生成するステップと、
    前記ソフトウェアプログラムの前記ユニットに対してのみ、前記の拡張されたテストスイートを実行するステップと、
    のうちの1つ以上をさらに含む、請求項1に記載の方法。
  7. 前記ソフトウェアプログラムの前記ユニットは、前記ソフトウェアプログラムのモジュールと、前記ソフトウェアプログラムのファイルと、前記ソフトウェアプログラムの構造体と、前記ソフトウェアプログラムの関数と、のうちの1つ以上を含む、請求項6に記載の方法。
  8. 前記失敗率に基づいて、前記修復候補の有効度を決定するステップと、
    前記の決定された有効度に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けするステップと、
    をさらに含む、請求項1に記載の方法。
  9. 前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けすることは、前記失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を受け入れることを含む、請求項1に記載の方法。
  10. 前記複数のテストオラクルは、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに関する、前記ソフトウェアプログラムの観測された挙動に基づく、請求項1に記載の方法。
  11. 命令を記憶するよう構成されている非一時的なコンピュータ読み取り可能な記憶媒体であって、前記命令が実行されたときに、前記命令はシステムに複数の動作を実行させ、前記複数の動作は、
    テストスイートを使用して、ソフトウェアプログラム内のフォールトのフォールト位置を特定する動作と、
    前記ソフトウェアプログラムにおいて、前記フォールトに対して修復候補を実装する動作と、
    前記ソフトウェアプログラムの観測された挙動に基づく複数のテストオラクルであって、前記フォールト位置に対応する複数のテストオラクルを用いて、前記テストスイートを拡張する動作と、
    前記の実装された修復候補を有する前記ソフトウェアプログラムに対して、前記の拡張されたテストスイートを実行する動作と、
    前記の拡張されたテストスイートを実行したことに対する前記複数のテストオラクルの失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けする動作と、
    を含む、非一時的なコンピュータ読み取り可能な記憶媒体。
  12. 前記失敗率に基づいて、前記修復候補を優先順位付けすることは、前記失敗率が、前記ソフトウェアプログラム内の誤った実行パスの推定数に基づく閾失敗率を超えているかどうかに基づく、請求項11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
  13. 前記複数の動作は、
    前記修復候補を実装した後であって、前記テストスイートを拡張する前に、実装された前記修復候補を有する前記ソフトウェアプログラムに対して、前記テストスイートを実行する動作と、
    前記ソフトウェアプログラムにおいて実装された前記修復候補に対して、前記テストスイートの全てのテストが合格したことに応じて、前記テストスイートを拡張し、前記の拡張されたテストスイートを実行する動作と、
    をさらに含む、請求項11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
  14. 前記複数の動作は、前記修復候補を実装した後であって、前記テストスイートを拡張する前に、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに対してのみ、前記テストスイートを実行する動作をさらに含む、請求項13に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
  15. 前記複数の動作は、前記修復候補を実装する前に、前記ソフトウェアプログラムの観測された挙動に基づいて、前記複数のテストオラクルを生成する動作をさらに含む、請求項11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
  16. 前記複数の動作は、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに基づいて、
    前記ソフトウェアプログラムの前記ユニットに対して、前記複数のテストオラクルを生成する動作と、
    前記ソフトウェアプログラムの前記ユニットに対してのみ、前記の拡張されたテストスイートを実行する動作と、
    のうちの1つ以上をさらに含む、請求項11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
  17. 前記ソフトウェアプログラムの前記ユニットは、前記ソフトウェアプログラムのモジュールと、前記ソフトウェアプログラムのファイルと、前記ソフトウェアプログラムの構造体と、前記ソフトウェアプログラムの関数と、のうちの1つ以上を含む、請求項16に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
  18. 前記複数の動作は、
    前記失敗率に基づいて、前記修復候補の有効度を決定する動作と、
    前記の決定された有効度に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けする動作と、
    をさらに含む、請求項11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
  19. 前記ソフトウェアプログラムの修復として、前記修復候補を優先順位付けすることは、前記失敗率に基づいて、前記ソフトウェアプログラムの修復として、前記修復候補を受け入れることを含む、請求項11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
  20. 前記複数のテストオラクルは、前記フォールト位置を含む、前記ソフトウェアプログラムのユニットに関する、前記ソフトウェアプログラムの観測された挙動に基づく、請求項11に記載の非一時的なコンピュータ読み取り可能な記憶媒体。
JP2017145312A 2016-09-26 2017-07-27 自動ソフトウェアプログラム修復 Active JP6891703B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/276,628 US10180897B2 (en) 2016-09-26 2016-09-26 Automated software program repair
US15/276,628 2016-09-26

Publications (2)

Publication Number Publication Date
JP2018055676A true JP2018055676A (ja) 2018-04-05
JP6891703B2 JP6891703B2 (ja) 2021-06-18

Family

ID=61685462

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017145312A Active JP6891703B2 (ja) 2016-09-26 2017-07-27 自動ソフトウェアプログラム修復

Country Status (2)

Country Link
US (1) US10180897B2 (ja)
JP (1) JP6891703B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10268572B2 (en) * 2017-08-03 2019-04-23 Fujitsu Limited Interactive software program repair
US10664383B2 (en) 2018-08-22 2020-05-26 Fujitsu Limited Automated software program repair of similar code snippets
CN111506492B (zh) * 2019-01-31 2023-05-26 百度在线网络技术(北京)有限公司 一种应用程序的测试方法及装置、设备、存储介质
US11119740B2 (en) * 2020-01-08 2021-09-14 Fujitsu Limited Parsability of code snippets

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004046310A (ja) * 2002-07-09 2004-02-12 Hitachi Ltd 障害修復プログラム適用方法及びその実施装置並びにその処理プログラム
JP2008250914A (ja) * 2007-03-30 2008-10-16 Canon Software Inc プログラム修正装置及び方法、並びにプログラム
US20090292941A1 (en) * 2008-05-22 2009-11-26 Nec Laboratories America, Inc. Proof-guided error diagnosis (ped) by triangulation of program error causes
JP2015035185A (ja) * 2013-08-09 2015-02-19 富士通株式会社 テストデータ生成プログラム、テストデータ生成方法、およびテストデータ生成装置
JP2017151977A (ja) * 2016-02-23 2017-08-31 富士通株式会社 ソフトウエアプログラムの修復のための方法及びプログラム

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6161193A (en) * 1998-03-18 2000-12-12 Lucent Technologies Inc. Methods and apparatus for process replication/recovery in a distributed system
GB0423357D0 (en) * 2004-10-21 2004-11-24 Ibm System and method for automatically generating self-checking software
US8271961B1 (en) * 2008-08-13 2012-09-18 Intuit Inc. Method and system for predictive software system quality measurement
US8527813B2 (en) * 2011-12-19 2013-09-03 Siemens Aktiengesellschaft Dynamic reprioritization of test cases during test execution
US8881095B1 (en) * 2012-03-30 2014-11-04 Sprint Communications Company L.P. Software defect prediction
US8874968B1 (en) * 2012-04-27 2014-10-28 Coresonic Ab Method and system for testing a processor designed by a configurator
US10108526B2 (en) * 2012-11-27 2018-10-23 Purdue Research Foundation Bug localization using version history
GB2530516A (en) * 2014-09-24 2016-03-30 Ibm Intelligent Software Test Augmenting

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004046310A (ja) * 2002-07-09 2004-02-12 Hitachi Ltd 障害修復プログラム適用方法及びその実施装置並びにその処理プログラム
JP2008250914A (ja) * 2007-03-30 2008-10-16 Canon Software Inc プログラム修正装置及び方法、並びにプログラム
US20090292941A1 (en) * 2008-05-22 2009-11-26 Nec Laboratories America, Inc. Proof-guided error diagnosis (ped) by triangulation of program error causes
JP2015035185A (ja) * 2013-08-09 2015-02-19 富士通株式会社 テストデータ生成プログラム、テストデータ生成方法、およびテストデータ生成装置
JP2017151977A (ja) * 2016-02-23 2017-08-31 富士通株式会社 ソフトウエアプログラムの修復のための方法及びプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
鷲見 創一,外3名: "自動プログラム修正の修正可能バグ数に関する考察", コンピュータソフトウェア, vol. 第33巻,第3号, JPN6021014654, 25 July 2016 (2016-07-25), JP, pages 81 - 87, ISSN: 0004492054 *

Also Published As

Publication number Publication date
JP6891703B2 (ja) 2021-06-18
US10180897B2 (en) 2019-01-15
US20180089065A1 (en) 2018-03-29

Similar Documents

Publication Publication Date Title
US10296447B2 (en) Automated software program repair
US10152406B2 (en) Software program repair
JP6878933B2 (ja) ソフトウエアプログラムの修復のための方法及びプログラム
US9846637B2 (en) Machine learning based software program repair
US10678673B2 (en) Software program fault localization
US8533685B2 (en) Processing apparatus, trace unit and diagnostic apparatus
JP7110789B2 (ja) 自動化されたソフトウェアプログラム修復候補の選択
JP6891703B2 (ja) 自動ソフトウェアプログラム修復
US10268572B2 (en) Interactive software program repair
US10664383B2 (en) Automated software program repair of similar code snippets
US10049031B2 (en) Correlation of violating change sets in regression testing of computer software
US11586534B2 (en) Identifying flaky tests
JP7404839B2 (ja) ソフトウェアプログラム不良位置の識別
JP2016115175A (ja) ソフトウェアテスト装置およびソフトウェアテストプログラム
JP2018060525A (ja) イベント駆動型ソフトウェアテストシーケンス決定
US10496519B2 (en) Method invocation synthesis for software program repair
US10642716B1 (en) Automated software program repair
US10761962B1 (en) Automated software program repair
JPWO2019142266A1 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200514

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210412

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: 20210427

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210510

R150 Certificate of patent or registration of utility model

Ref document number: 6891703

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150