(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-29
(45)【発行日】2024-12-09
(54)【発明の名称】プログラム修正装置、プログラム修正方法、及びプログラム修正プログラム
(51)【国際特許分類】
G06F 11/36 20060101AFI20241202BHJP
【FI】
G06F11/36 192
(21)【出願番号】P 2021085420
(22)【出願日】2021-05-20
【審査請求日】2024-02-13
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110000176
【氏名又は名称】弁理士法人一色国際特許事務所
(72)【発明者】
【氏名】安田 和矢
(72)【発明者】
【氏名】代 吉楠
(72)【発明者】
【氏名】秦野 康生
(72)【発明者】
【氏名】伊藤 信治
(72)【発明者】
【氏名】中村 知倫
(72)【発明者】
【氏名】原田 真雄
【審査官】松平 英
(56)【参考文献】
【文献】特開2018-55676(JP,A)
【文献】特開2014-186407(JP,A)
【文献】特開2020-126603(JP,A)
【文献】特開2014-16929(JP,A)
【文献】特開2012-159952(JP,A)
【文献】特開平7-129434(JP,A)
【文献】米国特許出願公開第2017/0293476(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/38
8/60-8/77
9/44-9/445
9/451
11/07
11/28-11/36
(57)【特許請求の範囲】
【請求項1】
プロセッサ及びメモリを有し、
元のプログラムに対し修正が行われたプログラムである修正候補を取得する修正候補取得部と、
前記取得した修正候補において修正が行われた部分に対する入力値を複数パターン設定し、前記修正候補を実行する修正候補実行部と、
前記実行された修正候補において修正が行われた部分の出力値が前記入力値に依存するか否かを判定し、前記修正が行われた部分の出力値が前記入力値に依存すると判定した場合に、前記修正候補を前記元のプログラムに対する修正案として出力する修正候補検査部と、
を備えるプログラム修正装置。
【請求項2】
前記修正候補検査部は、前記修正が行われた部分の各出力値が互いに同一である場合に、前記修正が行われた部分の出力値が前記入力値に依存しないと判定する、
請求項1に記載のプログラム修正装置。
【請求項3】
前記修正候補検査部は、前記修正が行われた部分の各出力値のうち少なくともいずれかが異常値である場合に、前記修正が行われた部分の出力値が前記入力値に依存しないと判定する、
請求項1に記載のプログラム修正装置。
【請求項4】
前記修正候補実行部は、前記修正候補における前記修正が行われた部分の情報と、前記修正が行われた部分の出力値とを対応づけた情報を生成し、
前記修正候補検査部は、前記生成した情報に基づき、前記修正が行われた部分の出力値が前記入力値に依存するか否かを判定する、
請求項1に記載のプログラム修正装置。
【請求項5】
前記修正候補検査部は、前記実行した修正候補内で実行された、前記修正が行われた部分の処理を含む各処理を特定し、特定したパターンが前記複数パターンの入力値のパターンに対して互いに同一又は類似しているか否かを判定し、前記パターンが前記複数パターンの入力値に対して互いに同一又は類似していると判定した場合に、前記取得した複数の出力値が前記変数に依存しないと判定する、
請求項1に記載のプログラム修正装置。
【請求項6】
前記修正候補検査部は、前記修正候補の実行が成功したか否か、及び、前記修正候補における前記修正が行われた部分の出力値が前記入力値に依存するか否かを判定し、前記修正候補の実行が成功し、かつ前記修正が行われた部分の出力値が前記入力値に依存すると判定した場合に、前記修正候補を前記元のプログラムに対する修正案として出力する、
請求項1に記載のプログラム修正装置。
【請求項7】
情報処理装置が、
元のプログラムに対し修正が行われたプログラムである修正候補を取得する修正候補取得処理と、
前記取得した修正候補において修正が行われた部分に対する入力値を複数パターン設定し、前記修正候補を実行する修正候補実行処理と、
前記実行された修正候補において修正が行われた部分の出力値が前記入力値に依存するか否かを判定し、前記修正が行われた部分の出力値が前記入力値に依存すると判定した場合に、前記修正候補を前記元のプログラムに対する修正案として出力する修正候補検査処理と、
を実行するプログラム修正方法。
【請求項8】
情報処理装置に、
元のプログラムに対し修正が行われたプログラムである修正候補を取得する修正候補取得処理と、
前記取得した修正候補において修正が行われた部分に対する入力値を複数パターン設定し、前記修正候補を実行する修正候補実行処理と、
前記実行された修正候補において修正が行われた部分の出力値が前記入力値に依存するか否かを判定し、前記修正が行われた部分の出力値が前記入力値に依存すると判定した場合に、前記修正候補を前記元のプログラムに対する修正案として出力する修正候補検査処理と、
を実行させるプログラム修正プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム修正装置、プログラム修正方法、及びプログラム修正プログラムに関する。
【背景技術】
【0002】
ソフトウェアに含まれる不具合(バグ)を特定し修正する技術として、Automated Program Repair(APR)が提案されている。APRは、例えば、「不具合箇所の特定」及び「パッチの生成」の2つのフェーズで構成される。具体的には、所定の不具合箇所検出プログラムにより、修正対象のソフトウェアにおける不具合箇所を特定した後、その不具合箇所に関する部分を書き換えることでソフトウェアを修正することが可能な修正プログラム(パッチ候補)を複数作成する。そして、作成した各パッチ候補の検証を行うことで、最適なパッチ候補(パッチ案)を特定する。このパッチ案を修正対象のソフトウェアに適用することで、バグが修復される。
【0003】
しかしながら、このパッチ案が必ずしもソフトウェアの開発にとって最良であるとは限らない。例えば、上記のパッチ候補の検証が不充分である場合には多くのパッチ案が出力されて、ソフトウェアの開発者による追加的な確認作業が発生する。
【0004】
ここで、ソフトウェアの修正プログラムの適否を判定する方法として、特許文献1には、テストスーツを利用してソフトウェアプログラム中の誤りを特定し、誤りの特定に応じて、ソフトウェアプログラムを修復テンプレートで修正し、その修正が不適切であるか否かを示すアンチパターン条件を充足するか否かを判定し、修正がアンチパターン条件を充足することに応じてその修正を不許可にし、あるいは、修正がアンチパターン条件を充足しないことに応じて修正後のソフトウェアプログラムについて更なるテストを実行することが記載されている。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1は、所定のステートメントの削除といった不適切な修正を「アンチパターン」として事前定義し、このアンチパターンと一致するパッチ案を除外するものである。しかしながら、プログラムを具体的に実行させて判明するような不適正(例えば、特定の変数や式の内容に依存して現れる修正の不具合)を検知することが難しいという問題がある。
【0007】
本発明はこのような問題に鑑みてなされたもので、その目的は、プログラムの不具合をその内部関係に即して修正することが可能な、プログラム修正装置、プログラム修正方法、及びプログラム修正プログラムを提供することにある。
【課題を解決するための手段】
【0008】
上記課題を解決するための本発明の一つは、プロセッサ及びメモリを有し、元のプログラムに対し修正が行われたプログラムである修正候補を取得する修正候補取得部と、前記取得した修正候補において修正が行われた部分に対する入力値を複数パターン設定し、前
記修正候補を実行する修正候補実行部と、前記実行された修正候補において修正が行われた部分の出力値が前記入力値に依存するか否かを判定し、前記修正が行われた部分の出力値が前記入力値に依存すると判定した場合に、前記修正候補を前記元のプログラムに対する修正案として出力する修正候補検査部と、を備えるプログラム修正装置、とする。
【0009】
また、上記課題を解決するための本発明の一つは、情報処理装置が、元のプログラムに対し修正が行われたプログラムである修正候補を取得する修正候補取得処理と、前記取得した修正候補において修正が行われた部分に対する入力値を複数パターン設定し、前記修正候補を実行する修正候補実行処理と、前記実行された修正候補において修正が行われた部分の出力値が前記入力値に依存するか否かを判定し、前記修正が行われた部分の出力値が前記入力値に依存すると判定した場合に、前記修正候補を前記元のプログラムに対する修正案として出力する修正候補検査処理と、を実行するプログラム修正方法、とする。
【0010】
また、上記課題を解決するための本発明の一つは、情報処理装置に、元のプログラムに対し修正が行われたプログラムである修正候補を取得する修正候補取得処理と、前記取得した修正候補において修正が行われた部分に対する入力値を複数パターン設定し、前記修正候補を実行する修正候補実行処理と、前記実行された修正候補において修正が行われた部分の出力値が前記入力値に依存するか否かを判定し、前記修正が行われた部分の出力値が前記入力値に依存すると判定した場合に、前記修正候補を前記元のプログラムに対する修正案として出力する修正候補検査処理と、を実行させるプログラム修正プログラム、とする。
【発明の効果】
【0011】
本発明によれば、プログラムの不具合をその内部関係に即して修正することができる。
【0012】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【0013】
【
図1】実施例1に係るプログラム修正装置の構成の一例を示す図である。
【
図2】プログラム修正装置が備えるハードウェアの一例を説明する図である。
【
図3】プログラム修正処理の一例を説明するフロー図である。
【
図4】修正候補生成処理の詳細を説明するフロー図である。
【
図7】修正候補実行処理の詳細を説明するフロー図である。
【
図8】修正候補に対するテストコードの一例を示す図である。
【
図11】修正候補検査処理の詳細を説明するフロー図である。
【
図13】実施例2に係るテスト実行時情報の一例を示す図である。
【
図14】実施例2に係る修正候補検査処理の一例を説明するフロー図である。
【発明を実施するための形態】
【0014】
-実施例1-
図1は、実施例1に係るプログラム修正装置100の構成の一例を示す図である。プログラム修正装置100は、プログラムのソースコードに存在する不具合(バグ)を修正するためのプログラム(パッチ)をそれぞれ候補として複数作成し、それらのパッチ(パッチ候補)をそれぞれ適用したソースコード(以下、修正プログラム、又は修正候補という)を作成する。そして、プログラム修正装置100は、予め作成したテストコードを実行
することで、各修正候補の実行結果及び、パッチを適用したソースコードの部分(以下、パッチ部分という)の処理結果に基づき、最も適切なパッチ候補(パッチ案)を特定する。これにより、プログラム修正装置100は、ソースコードの修正を行う。
【0015】
すなわち、プログラム修正装置100は、修正候補生成部210、修正候補取得部215、修正候補実行部220、及び修正候補検査部230の各機能部を備える。
【0016】
また、プログラム修正装置100は、ソースコード291、テストコード292、修正候補情報293、テスト実行結果情報294、テスト実行時情報295、及び修正結果情報296の各情報を記憶する。
【0017】
修正候補生成部210は、ソースコード291に適用するパッチ(パッチ候補)を複数生成し、各パッチを適用したソースコード(修正候補)をそれぞれ生成する。修正候補生成部210は、生成した修正候補を記憶する。
【0018】
なお、ソースコード291は、任意の言語で記述されたプログラムのソースコードである。また、パッチは、例えば、条件分岐式の変更又は追加を行うプログラムである。
【0019】
修正候補取得部215は、修正候補生成部210が生成した修正候補を取得する。
【0020】
修正候補実行部220は、修正候補取得部215が取得した修正候補におけるパッチ部分に複数パターンの入力値を設定することで、修正候補をそれぞれ実行する。本実施形態では、複数パターンの入力値を設定したテストコードを実行して修正候補を呼び出すことで、修正候補を実行するものとする。
【0021】
修正候補検査部230は、修正候補実行部220で実行された修正候補におけるパッチ部分の出力値が、修正候補実行部220で設定した入力値に依存するか否かを判定し、その修正部分の出力値が設定入力値に依存すると判定した場合に、修正候補を元のソースコード291に適用してこれを新たなプログラム(新たなソースコード)として生成する。
【0022】
なお、修正候補検査部230は、修正候補におけるパッチ部分と、修正部分の出力値とを対応づけた情報としてテスト実行時情報295を生成する。
【0023】
ここで、
図2は、プログラム修正装置100が備えるハードウェアの一例を説明する図である。プログラム修正装置100は、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、又はGPU(Graphics Processing Unit)等のプロセッサ110と、ROM(Read Only Memory)、又はRAM(Random Access Memory)等の主記憶装置120と、ハードディスクドライブ(Hard Disk Drive)、フラッシュメモリ(Flash Memory)、又はSSD(Solid State Drive)等の補助記憶装置130と、キーボード、マウス、カードリーダ、又はタッチパネル等の入力装置140と、LCD(Liquid Crystal
Display)、音声出力装置(スピーカ)、又は印字装置等の出力装置150と、NIC(Network Interface Card)、無線通信モジュール、USB(Universal Serial Interface)モジュール、又はシリアル通信モジュール等の通信装置160とを備える。
【0024】
プログラム修正装置100の機能は、プロセッサ311が、主記憶装置120又は補助記憶装置130に格納されているプログラムを読み出して実行することにより実現される。また上記のプログラムは、例えば、記録媒体に記録して配布することができる。
次に、プログラム修正装置100が行う処理について説明する。
【0025】
<プログラム修正処理>
図3は、ソースコードを修正する処理であるプログラム修正処理の一例を説明するフロー図である。プログラム修正処理は、例えば、プログラム修正装置100にユーザから所定の入力が行われたことを契機に実行される。
【0026】
まず、プログラム修正装置100の修正候補生成部210は、不具合箇所をパッチ候補により修正したソースコードである修正候補を生成する修正候補生成処理を実行する(s111)。
【0027】
修正候補実行部220は、修正候補生成処理s111で生成した修正候補におけるパッチ部分に複数パターンの入力値を設定したテストプログラムを実行することで、そのテストプログラムによる修正候補の実行結果の情報(テスト実行結果情報294)及び、修正候補におけるパッチ部分の処理結果の情報(テスト実行時情報295)を生成する修正候補実行処理を実行する(s112)。
【0028】
修正候補検査部230は、修正候補実行処理s112で生成した情報に基づき、そのテストプログラムの実行に成功しかつ、そのパッチ部分がテストプログラムで設定した各入力値に依存しない修正候補を特定することで、最終的な修正候補を決定する修正候補検査処理を実行する(s113)。その後、修正候補検査部230は、最終的な修正候補を正式なパッチ案として出力し、ユーザに提示する(例えば、ファイルに出力し、又は画面に表示する)。以上でプログラム修正処理は終了する。
以下、これらの処理の詳細を説明する。
【0029】
<修正候補生成処理>
図4は、修正候補生成処理s111の詳細を説明するフロー図である。
修正候補生成部210は、ソースコード291を取得し、取得したソースコード291における不具合箇所(バグの箇所)を特定する(s1111)。例えば、修正候補生成部210は、ソースコード291のために用意されたテストケースを実行してそのソースコード291を呼び出す(実行させる)ことで、ソースコード291内の処理の実行経路を特定する。修正候補生成部210は、特定した実行経路に基づきソースコード291内の各処理の疑惑値等を算出し、不具合箇所を特定する(例えば、Spectrum-Based Fault Localization:SBFL)。なお、ここで説明した不具合箇所の特定方法は一例であり、実
行内容と所定のデータベースとの内容比較、又は人手によるチェック等任意の方法を採用できる。
【0030】
(ソースコード)
なお、
図5は、ソースコード291の一例を示す図である。ソースコード291は、例えば、入力される変数2911に対する出力を行う関数2912によって構成され、関数2912は、さらに1又は複数の関数2913を含む。
【0031】
次に、
図4に示すように修正候補生成部210は、s1111で特定したソースコード291の不具合箇所を修正するパッチ候補を複数生成する(s1112)。パッチ候補は、例えば、不具合箇所に対する条件分岐、定数、変数若しくは関数式の追加、不具合箇所の変更、又は不具合箇所の削除等を行うプログラムである。
【0032】
そして、修正候補生成部210は、s1112で生成した各パッチをソースコード291に適用した新たなソースコード(すなわち、修正候補)をそれぞれ生成し、修正候補情報293に記憶する(s1113)。以上で修正候補生成処理s111は終了する。
【0033】
(修正候補情報)
図6は、修正候補情報293の一例を示す図である。修正候補情報293は、各修正候
補のID2931と、修正候補2932とを含む。修正候補2932は、修正前のソースコードにパッチ2933を適用したソースコードである。
【0034】
<修正候補実行処理>
図7は、修正候補実行処理s112の詳細を説明するフロー図である。修正候補取得部215は、修正候補生成処理s111で生成した各修正候補を取得する。そして、修正候補実行部220は、所定のテストコードを実行することで、各修正候補を実行させる(s1121)。
【0035】
(テストコード)
ここで、
図8は、修正候補に対するテストコード292の一例を示す図である。テストコード292は、1又は複数のテスト部2921を有する。各テスト部2921は、修正候補に異なる入力値2922を代入して修正候補を実行する呼び出し部2923と、呼び出し部2923に基づく修正候補の実行結果と予め指定した正解値とが一致するか否かを判定する判定部2924とを含む。
【0036】
判定部2924は、テストの「成功」(実行結果と正解値が一致した場合)又はテストの「失敗」(実行結果と正解値が一致しなかった場合)を出力する。
【0037】
次に、
図7のs1122に示すように修正候補実行部220は、s1121で実行したテストコードに基づくテストコードの実行結果(成功又は失敗)を、テスト実行結果情報294に記憶する。また、修正候補実行部220は、s1121で実行したテストコードにおける、パッチ部分の出力値(例えば、条件分岐における条件判断部分の出力値)の情報を、テスト実行時情報295に記憶する(s1123)。
【0038】
修正候補実行部220は、s1122及びs1123の処理を、各修正候補について実行する。なお、s1122及びs1123の実行順序は問わない。以上で修正候補実行処理s112は終了する。
【0039】
ここで、テスト実行結果情報294及びテスト実行時情報295の具体例を説明する。
【0040】
(テスト実行結果情報)
図9は、テスト実行結果情報294の一例を示す図である。テスト実行結果情報294は、各修正候補のID2941と、テストコードの実行結果2942(具体的には、各判定部の実行結果(成功又は失敗))とを含む。
【0041】
(テスト実行時情報)
図10は、テスト実行時情報295の一例を示す図である。テスト実行時情報295は、各修正候補のID2951と、その修正候補においてパッチが適用された部分である修正後の式2952と、テストコード292の各テスト部2921における修正後の式2952の出力値たる実行時の値2953とを含む。
【0042】
なお、修正後の式2952は、例えば、パッチが条件分岐処理の追加又は変更であればその条件の判定部分であり、パッチが変数又は数式の追加又は変更であればその変数又は数式である。また、実行時の値2953については、修正後の式2952が条件の判定部分である場合には、条件式の値である真(true)、偽(false)、又は例外発生(異常発生)のいずれかの値が設定される。また、修正後の式2952が変数又は数式である場合には、変数又は数式の値が設定される。
【0043】
<修正候補検査処理>
次に、
図11は、修正候補検査処理s113の詳細を説明するフロー図である。
【0044】
修正候補検査部230は、修正候補実行処理s112で生成したテスト実行結果情報294に基づき、テストコードの実行に成功した修正候補を抽出する(s1131)。具体的には、修正候補検査部230は、テスト実行結果情報294の各レコードのうち、テスト実行結果2942の全ての項目が「成功」であるレコードを抽出する。
【0045】
さらに、修正候補検査部230は、s1131で抽出した修正候補のうち、当該修正候補に係るパッチ部分の結果(出力値)がテストコード292のテストパターン(テスト部2921)に依存する修正候補を、最終的な修正候補として特定する(s1132)。
【0046】
例えば、修正候補検査部230は、テスト実行時情報295における、s1131で抽出した修正候補に係るレコードのうち、実行時の値2953の全項目が全て同じである(例えば、全てtrue又はfalseである)レコードを、最終的な修正候補から除外する。
【0047】
また、例えば、修正候補検査部230は、テスト実行時情報295における、s1131で抽出した修正候補に係るレコードのうち、実行時の値2953の全項目のうち所定割合以上(例えば、90%以上)の項目の値が同じである(例えば、true又はfalseで共通である)レコードを、最終的な修正候補から除外する。
【0048】
また、例えば、修正候補検査部230は、テスト実行時情報295における、s1131で抽出した修正候補に係るレコードのうち、実行時の値2953の各項目の値が所定のパターンとなっているレコードを、最終的な修正候補から除外する。
【0049】
また、例えば、修正候補検査部230は、テスト実行時情報295における、s1131で抽出した修正候補に係るレコードのうち、実行時の値2953のいずれかの項目に異常値(例えば、例外発生、又は空値)があるレコードを、最終的な修正候補から除外する。
【0050】
そして、修正候補検査部230は、s1132で特定した最終的な修正候補を、画面に表示する(s1133)。また、修正候補検査部230は、最終的な修正候補を修正結果情報296に記憶する(s1133)。
【0051】
(修正結果情報)
図12は、修正結果情報296の一例を示す図である。この修正結果情報296は、最終的な修正候補(つまり修正されたソースコード)のID2961と、その修正候補の内容たる修正結果2962とを記憶している。
【0052】
同図に示す修正結果2962に関しては、テストコード292の各テスト部2921の実行結果が全て「成功」であった(テスト実行結果情報294)ことが示されている。さらに、この修正結果情報296におけるパッチ2963(条件分岐式「w != null」を含
む処理)の処理結果は「true」、「true」、及び「false」であるのでs1132で説明した除外事由のいずれにもあてはまらない(テスト実行時情報295)。
【0053】
このように、本実施形態のプログラム修正装置100は、テストコード292を用い、修正候補内のパッチ部分に対して複数パターンの入力値を設定して修正候補を実行し、修正候補におけるパッチ部分の出力値(修正後の式2952)がテスト部2921の上記入力値に依存する場合に、その修正候補をソースコード291に適用して修正プログラム(修正ソースコード)を生成する。
【0054】
すなわち、本実施形態のプログラム修正装置100は、修正候補に適用されたパッチが修正候補への入力値に依存しないような場合、すなわちパッチが、様々な内部条件下でソースコードが実行された場合でもソースコードのバグを解消しうるものである正しいプログラムである場合にのみ、これに対応する修正候補を最終的なパッチ案とする。このように、本実施形態のプログラム修正装置100によれば、プログラムの不具合をその内部関係に即して修正することができる。
【0055】
また、本実施形態のプログラム修正装置100は、最終的な修正候補の特定において、修正部分(パッチ)の各出力値が互いに同一である場合に、修正部分の出力値が入力値に依存しないと判定し、修正候補から除外するので、正常に動作しないと考えられる修正候補を確実に除外することができる。
【0056】
同様に、本実施形態のプログラム修正装置100は、最終的な修正候補の特定において、修正部分の各出力値のうち少なくともいずれかが異常値(例外発生等)である場合に、修正部分の出力値が入力値に依存しないと判定し、修正候補から除外するので、正常に動作しないと考えられる修正候補を確実に除外することができる。
【0057】
また、本実施形態のプログラム修正装置100は、修正候補における修正部分の情報(修正後の式2952)と、修正部分の出力値(実行時の値2953)とを対応づけたテスト実行時情報295を生成することで、最終的な修正候補の特定において参照すべき情報を最小限に抑えることができる。これにより、最終的な修正候補の特定に係るリソース負荷を軽減することができる。
【0058】
-実施例2-
実施例1では、プログラム修正装置100は、テスト実行時情報295として、パッチ部分の式(修正後の式2952)とその出力値との関係の情報を生成したが、テスト実行時情報295は、その他の形式の情報であってもよい。
【0059】
図13は、実施例2に係るテスト実行時情報298の一例を示す図である。このテスト実行時情報298は、各修正候補のID2981と、その修正候補における行番号2982(処理の番号でもよい)と、修正候補を各テスト部2921により実行した場合に、修正候補の行番号2982が実行された否かを示す情報である実行有無2983とを含む。実行有無2983は、パッチ部分を含む修正候補の全ての行における実行の有無の情報が設定される。なお、異常値が出力された場合には、その行番号の実行有無2983には「例外発生」等の情報が設定される。
【0060】
ここで、
図14は、実施例2に係る修正候補検査処理の一例を説明するフロー図である。修正候補検査部230のs1141の処理は、実施例1のs1131と同様である。
【0061】
そして、修正候補検査部230は、s1131で抽出した各修正候補について、テスト実行時情報298を参照することにより、その修正候補内でテストコードにより実行された処理(実行経路)を特定し、特定した実行経路における実行有無のパターンがテスト部2921間で同一又は類似しているか否かを判定する。修正候補検査部230は、実行有無のパターンが同一又は類似している場合には、その修正候補を最終的な修正候補から除外する。
【0062】
なお、実行有無のパターンの類似の程度は、例えば、修正候補の全行のうち、実行有無が同じであった行の割合によって判定する。その割合が所定値以上の場合には、類似と判定される。
【0063】
次に行われるs1133の処理は、実施例1のs1133の処理と同様である。
【0064】
このように、修正候補内で実行されたパッチ部分を含む各処理の実行パターンがテスト部2921(入力値)間で同一又は互いに類似している場合には、その修正候補を最終的な修正候補から除外することで、修正候補が任意の処理経路を辿り正しく実行されるようなパッチを特定し、それに対応した修正候補を特定することができる。
【0065】
本発明は以上に説明した実施形態に限定されるものではなく、様々な変形例が含まれる。上記した実施形態は本発明のより良い理解のために詳細に説明したものであり、必ずしも説明の全ての構成を備えるものに限定されるものではない。
【0066】
例えば、各実施例の各装置が備える各機能の一部は他の装置に設けてもよいし、別装置が備える機能を同一の装置に設けてもよい。
【符号の説明】
【0067】
100 プログラム修正装置、220 修正候補実行部、230 修正候補検査部