(57)【特許請求の範囲】
【請求項１】
動的プログラム検証において、障害検出時の実行トレース上の障害発生命令と障害内容と障害判定ルールとから障害判定条件式を生成し、前記障害発生命令を前記障害判定条件式で置換した修正トレースを生成する実行トレース修正手段と、前記修正トレース中の分岐命令の条件式乃至前記障害判定条件式を、前記修正トレース中の代入式に基づいて書き換え、障害発生となる入力値の値域を定義する障害発生条件式として抽出する障害発生条件抽出手段とを有するデータ処理装置。
【請求項２】
前記障害発生条件式を表示する出力装置を有する請求項１記載のデータ処理装置。
【請求項３】
前記障害発生条件式を記憶する手段を有する請求項１および２記載のデータ処理装置。
【請求項４】
前記障害内容を記憶する障害内容記憶部を有し、前記実行トレース修正手段が前記障害内容記憶部から前記障害内容を読み出す請求項１乃至３記載のデータ処理装置。
【請求項５】
前記障害判定ルールを記憶する障害判定ルール記憶部を有し、前記実行トレース修正手段が前記障害判定ルール記憶部から前記障害判定ルールを読み出す請求項１乃至４記載のデータ処理装置。
【請求項６】
検証対象のプログラムを記憶するプログラム記憶部と、前記実行トレースを記憶する実行トレース記憶部とを有する請求項１乃至５記載のデータ処理装置。
【請求項７】
前記障害発生条件式を記憶する障害発生条件記憶部を有する請求項１乃至６記載のデータ処理装置。
【請求項８】
動的プログラム検証において、障害検出時の実行トレース上の障害発生命令と障害内容と障害判定ルールとから障害判定条件式を生成し、前記障害発生命令を前記障害判定条件式で置換した修正トレースを生成する実行トレース修正手段と、前記修正トレース中の分岐命令の条件式乃至前記障害判定条件式を、前記修正トレース中の代入式に基づいて書き換え、障害発生となる入力値の値域を定義する障害発生条件式として抽出する障害発生条件抽出手段とを有するシステム。
【請求項９】
障害検出時の実行トレース上の障害発生命令と障害内容と障害判定ルールとから障害判定条件式を生成し、前記障害発生命令を前記障害判定条件式で置換した修正トレースを生成する処理と、前記修正トレース中の分岐命令の条件式乃至前記障害判定条件式を、前記修正トレース中の代入式に基づいて書き換え、障害発生となる入力値の値域を定義する障害発生条件式として抽出する処理とをコンピュータに実行させるプログラム。
【請求項１０】
コンピュータが、障害検出時の実行トレース上の障害発生命令と障害内容と障害判定ルールとから障害判定条件式を生成し、前記障害発生命令を前記障害判定条件式で置換した修正トレースを生成し、前記修正トレース中の分岐命令の条件式乃至前記障害判定条件式を、前記修正トレース中の代入式に基づいて書き換え、障害発生となる入力値の値域を定義する障害発生条件式として抽出する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理装置、システム、プログラム、及び、方法に関し、特に、動的プログラム検証におけるデータ処理装置、システム、プログラム、及び、方法に関する。
【背景技術】
【０００２】
動的プログラム検証とは、対象となるプログラムに入力値を与えプログラムを実行させて検証を行うテストや、模擬的に同等の処理を行い検証を行うシミュレーション等の技術を用いたプログラムの検証である。動的プログラム検証を行う場合、検証対象となるプログラムに与える入力値の組をあらかじめ作成するか、入力値を自動的に生成するためのルール（制約条件）をあらかじめ用意する必要がある。
【０００３】
テストにおける入力値の組（テストケース）を作成する技術としては、例えば同値分割（非特許文献１の５２ページ）がある。この技術は、入力値に対する制約条件からプログラムへの適切な入力をあらわす有効同値クラスと不適切な入力をあらわす無効同値クラスとを識別し、必要なテストケースの全数が最小となるようにテストケースを設計する技術である。ところが、実際には入力値に対する制約条件が十分に特定できない場合がある。そして、制約条件が十分に特定できない状態で動的プログラム検証を行うと、検証対象プログラムに内在するバグだけでなく、実システムでは起こり得ない不適切な入力値の組が原因で障害を検出する（テスト・検証が失敗する）ことがある。
【０００４】
動的プログラム検証で障害を検出した場合には、以下の手順で対処する必要がある。まず、この障害を検出した際の実行トレースを解析し、障害を発生させるための入力値に対する条件（入力値の値域や、他の入力値との大小関係）を特定する。そして、その条件を用いて、検証対象プログラムに内在するバグが原因でテスト・検証が失敗したのか、入力値の組が不適切だったために失敗したのかを判定する。そして、前者の場合にはバグを見つけ出して修正し、後者の場合には入力値に対する正しい制約条件を導き出して同じ障害が発生しないようにする。
【０００５】
障害が発生する原因を調査するための技術として、例えば、実行トレースの生成方法を含むプログラムデバッグ方法が特許文献１に記載されている。この関連する方法では、ディスプレイ装置の画面上にソースプログラムと対応付けて表示された実行トレースを参照しながらデバッグ作業を行う。この方法により障害を発生させるための入力値に対する条件を特定した場合、その条件は特定の入力値の１つ以上の組みとして示されることになる。
【０００６】
【特許文献１】特開平０５−０４６４３４号公報
【非特許文献１】Glenford J. Myers著 長尾 真監訳「ソフトウェア・テストの技法 第２版」近代科学社、２００６年７月３１日、ｐｐ．５２−５９
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１、非特許文献１では、動的プログラム検証を行う場合、検出された障害を発生させるための入力値に対する条件を示す際、発生条件を特定の入力値の１つ以上の組として示すだけであった。このため、他の入力値について人手により検証しなければならないという問題があった。
【０００８】
例えば、図２に示すＣ言語のプログラムに対して動的プログラム検証を行い、図８に示す入力値の場合に、１６行目の代入命令“ａ［ｐｏｓ］＝ｖａｌ”で配列境界（下界）違反の障害が検出される。この場合、図３に示すこの障害を検出した際の実行トレースを元にして障害を発生させるための入力値に対する条件を抽出すると、ｏｆｆｓｅｔ＝４，ｉｄｘ１＝３，ｉｄｘ２＝２と言う特定の入力値を組み合わせた条件が障害発生原因として示される。
【０００９】
ここでｉｄｘ２＝２が入力値として不適切な値であった場合、検証で用いる入力値の組からｉｄｘ２の値が不適切なためにこの障害を検出した際の実行トレースと同じ実行トレースをたどるものを取り除く必要がある。しかし、ｉｄｘ２＝２という情報だけからは、ｉｄｘ２＝２以外のどのような条件（例えばｉｄｘ２＞０あるいはｉｄｘ２＜４）で、もしくは他の入力値との大小関係により障害が発生するのか判断がつかない。このため、人手により不適切なｉｄｘ２の値を定義する条件式を導出する必要があり、手間がかかっていた。
【００１０】
本発明の目的は、上述した課題を解決するデータ処理装置、システム、プログラム、及び、方法を提供することにある。
【課題を解決するための手段】
【００１１】
本発明のデータ処理装置は、動的プログラム検証において、障害検出時の実行トレース上の障害発生命令と障害内容と障害判定ルールとから障害判定条件式を生成し、前記障害発生命令を前記障害判定条件式で置換した修正トレースを生成する実行トレース修正手段と、前記修正トレース中の分岐命令の条件式乃至前記障害判定条件式を、前記修正トレース中の代入式に基づいて書き換え、障害発生となる入力値の値域を定義する障害発生条件式として抽出する障害発生条件抽出手段とを有する。
【００１２】
本発明のシステムは、動的プログラム検証において、障害検出時の実行トレース上の障害発生命令と障害内容と障害判定ルールとから障害判定条件式を生成し、前記障害発生命令を前記障害判定条件式で置換した修正トレースを生成する実行トレース修正手段と、前記修正トレース中の分岐命令の条件式乃至前記障害判定条件式を、前記修正トレース中の代入式に基づいて書き換え、障害発生となる入力値の値域を定義する障害発生条件式として抽出する障害発生条件抽出手段とを有する。
【００１３】
本発明のプログラムは、障害検出時の実行トレース上の障害発生命令と障害内容と障害判定ルールとから障害判定条件式を生成し、前記障害発生命令を前記障害判定条件式で置換した修正トレースを生成する処理と、前記修正トレース中の分岐命令の条件式乃至前記障害判定条件式を、前記修正トレース中の代入式に基づいて書き換え、障害発生となる入力値の値域を定義する障害発生条件式として抽出する処理とをコンピュータに実行させる。
【００１４】
本発明の方法は、コンピュータが、障害検出時の実行トレース上の障害発生命令と障害内容と障害判定ルールとから障害判定条件式を生成し、前記障害発生命令を前記障害判定条件式で置換した修正トレースを生成し、前記修正トレース中の分岐命令の条件式乃至前記障害判定条件式を、前記修正トレース中の代入式に基づいて書き換え、障害発生となる入力値の値域を定義する障害発生条件式として抽出する。
【発明の効果】
【００１５】
本発明によれば、障害を発生させる入力値の条件を、値域を定義した条件式として得ることが可能になる。
【発明を実施するための最良の形態】
【００１６】
次に、本発明について図面を参照して詳細に説明する。図１は本発明の第１の実施の形態の構成を示すブロック図である。本発明の第１の実施の形態は、中央処理装置１１１と、出力装置１１２と、二次記憶装置１１３とから構成される。
【００１７】
中央処理装置１１１は、実行トレース修正手段１２１と、障害発生条件抽出手段１２２とから構成される。
【００１８】
二次記憶装置１１３は、プログラム記憶部１３１と、実行トレース記憶部１３２と、障害内容記憶部１３３と、障害判定ルール記憶部１３４とから構成される。
【００１９】
プログラム記憶部１３１は、図示しない手段によって格納された、図２に示す構造の検証対象プログラム１４１を記憶している。実行トレース記憶部１３２は、図示しない手段によって格納された、検証で実行した命令とこの命令を実行した時点で参照される変数値の組を時系列に並べた、図３に示す構造の実行トレース１４２を記憶している。障害内容記憶部１３３は、図示しない手段によって格納された、検証で検出した、図４に示す構造の障害内容１４３（例えば、『ａ［ｐｏｓ］における配列境界（下界）違反』など）を記憶している。障害判定ルール記憶部１３４は、図示しない手段によって格納された、図５に示す構造の障害判定ルール１４４（例えば、“配列の添え字＜０”など）を記憶している。障害判定ルール１４４は、障害内容記憶部１３３で記憶している障害内容１４３に対応する障害発生を判定する条件式を導出するためのルールである。
【００２０】
実行トレース修正手段１２１は、障害を検出した後に、プログラム記憶部１３１から検証対象プログラム１４１を読み取る。そして、実行トレース修正手段１２１は、障害を検出した後に、実行トレース記憶部１３２から実行トレース１４２を読み取る。そして、実行トレース修正手段１２１は、障害を検出した後に、障害内容記憶部１３３から障害内容１４３を読み取る。そして、実行トレース修正手段１２１は、障害を検出した後に、障害判定ルール記憶部１３４から障害判定ルール１４４を読み取る。
【００２１】
そして、実行トレース修正手段１２１は、障害内容１４３と障害判定ルール１４４から障害判定条件式を導出する。そして、実行トレース修正手段１２１は、実行トレース１４２の最後にある障害発生命令を導出した障害判定条件式で置換した、図６に示す構造の修正トレース１５２を生成する。
【００２２】
障害発生条件抽出手段１２２は、実行トレース修正手段１２１から渡される修正トレース１５２中の分岐命令の条件式乃至障害判定条件式を、修正トレース１５２中の代入式にもとづいて書き換える。そして、障害発生条件抽出手段１２２は、書き換えた分岐命令の条件式乃至障害判定条件式を、入力値の値域を定義した条件式として抽出する。そして、障害発生条件抽出手段１２２は、抽出した条件式群を障害発生条件として出力装置１１２に出力する。
【００２３】
次に、本発明の実施の形態の動作について図面を参照して説明する。図７は、中央処理装置１１１が行う障害発生条件の抽出動作を示すフローチャートである。
【００２４】
中央処理装置１１１において、実行トレース修正手段１２１が、二次記憶装置１１３の実行トレース記憶部１３２から障害「ｈｚ１」を検出した際の実行トレース１４２（図３の例を参照）を取得する。さらに、実行トレース修正手段１２１が、障害内容記憶部１３３から障害内容１４３を取得する。さらに、実行トレース修正手段１２１が、障害判定ルール記憶部１３４から障害内容１４３に対応する障害判定ルール１４４「ｒｕｌｅ」を取得する（ステップＳＴ１）。
【００２５】
実行トレース修正手段１２１が、障害内容１４３と対応する障害判定ルール１４４「ｒｕｌｅ」から障害判定条件式「ｃｅ」を導出する（ステップＳＴ２）。そして、実行トレース修正手段１２１が、実行トレース１４２の最後にある障害発生命令を障害判定条件式「ｃｅ」で置換した修正トレース１５２を作成する（ステップＳＴ３）。
【００２６】
障害発生条件抽出手段１２２が、障害「ｈｚ１」を発生させるための条件式の集合「Ｃ」（以下、障害発生条件式群「Ｃ」と表す）を空集合とする（ステップＳＴ４）。
【００２７】
そして、障害発生条件抽出手段１２２が、修正トレース１５２中の全ての分岐命令もしくは障害判定条件式に対して、以下に説明するステップＳＴ６からステップＳＴ１４の処理を行う（ステップＳＴ５、ステップＳＴ１５）。
【００２８】
障害発生条件抽出手段１２２が、分岐命令もしくは障害判定条件式の実行時点を実行時点「ｐｂ」とする（ステップＳＴ６）。そして、実行時点「ｐｂ」の分岐命令の条件式もしくは障害判定条件式を分岐条件「ｃｂ」とする。この時、修正トレース１５２の実行時点「ｐｂ」において参照される変数値により分岐条件「ｃｂ」が不成立になる場合には、分岐条件「ｃｂ」の否定の条件式を分岐条件「ｃｂ」とする（ステップＳＴ７）。
【００２９】
続いて、障害発生条件抽出手段１２２が、実行時点「ｐｂ」を起点とし修正トレース１５２の先頭までの命令に対し、以下に説明するステップＳＴ９からステップＳＴ１１の処理を行う（ステップＳＴ８、ステップＳＴ１２）。
【００３０】
障害発生条件抽出手段１２２が、その命令をチェックする（ステップＳＴ９）。そして、代入命令であった場合（ステップＳＴ９でＹＥＳの場合）、障害発生条件抽出手段１２２が、代入式の左辺値である変数が分岐条件「ｃｂ」中の項として存在するか確認する（ステップＳＴ１０）。そして、項として存在する場合（ステップＳＴ１０でＹＥＳの場合）には、障害発生条件抽出手段１２２が、分岐条件「ｃｂ」中の対応する項を代入式の右辺の式で書き換える（ステップＳＴ１１）。
【００３１】
次に、障害発生条件抽出手段１２２が、項の書換えをおこなった分岐条件「ｃｂ」が入力値となる変数を含むか否かをチェックする（ステップＳＴ１３）。そして、入力値となる変数を含む場合（ステップＳＴ１３のＹＥＳの場合）には、障害発生条件抽出手段１２２が、分岐条件「ｃｂ」を障害発生条件式群「Ｃ」に加える（ステップＳＴ１４）。
【００３２】
そして、障害発生条件抽出手段１２２が、出力装置１１２に対して障害発生条件式群「Ｃ」を障害発生条件として出力し（ステップＳＴ１６）、終了する。
【００３３】
次に、図７のフローチャートを参照し、実際のデータを用いて詳細に説明する。具体的な例として、図２に示すＣ言語のプログラム１４１に対して図８に示す入力値を与えて検証を実行したとする。そして、その結果、プログラム１４１の１６行目の代入命令『ａ［ｐｏｓ］＝ｖａｌ』で、『配列境界（下界）違反』の障害を検出し、その際の実行トレース１４２が図３に示すとおりになったとする。
【００３４】
実行トレース修正手段１２１は、二次記憶装置１１３中の実行トレース記憶部１３２から、障害を検出した際の実行トレース１４２を取得する。そして、実行トレース修正手段１２１は、障害内容記憶部１３３から障害内容１４３として『ａ［ｐｏｓ］での配列境界（下界）違反』を取得する。さらに、実行トレース修正手段１２１は、障害判定ルール記憶部１３４から対応する障害判定ルール１４４「ｒｕｌｅ」『配列の添え字＜０』を取得する（ステップＳＴ１）。
【００３５】
繰返しになるが、１６行目の代入命令『ａ［ｐｏｓ］＝ｖａｌ』で検出した障害内容１４３は、『ａ［ｐｏｓ］での配列境界（下界）違反』である。そこで、実行トレース修正手段１２１は、対応する障害判定ルール１４４「ｒｕｌｅ」『配列の添え字＜０』にもとづき障害判定条件式を導出して障害判定条件式「ｃｅ」を『ｐｏｓ＜０』とする（ステップＳＴ２）。そして、実行トレース修正手段１２１は、実行トレース１４２「ＥＸ」の最後にある障害発生命令をこの障害判定条件式「ｃｅ」で置換して図６に示す修正トレース１５２を作成する（ステップＳＴ３）。
【００３６】
障害発生条件抽出手段１２２が、障害発生条件式群「Ｃ」を空集合『｛｝』とする（ステップＳＴ４）。
【００３７】
障害発生条件抽出手段１２２が、修正トレース１５２中のすべての分岐命令もしくは障害判定条件式に対してステップＳＴ６からステップＳＴ１４の処理を繰り返し実行する（ステップＳＴ５とステップＳＴ１５で示すループ）。
【００３８】
まず、最初の分岐命令もしくは障害判定条件式は、実行時点『２』の『ｉｄｘ１ ＜ ｉｄｘ２』である。そこで、障害発生条件抽出手段１２２が、実行時点「ｐｂ」を『２』とする（ステップＳＴ６）。さらに、修正トレース１５２上の変数値『ｉｄｘ１＝３，ｉｄｘ２＝２』を参照すると、元の条件式『ｉｄｘ１ ＜ ｉｄｘ２』は不成立となっている。そこで、障害発生条件抽出手段１２２が、元の条件式の否定の条件式『ｉｄｘ１ ＞＝ ｉｄｘ２』を分岐条件「ｃｂ」とする（ステップＳＴ７）。
【００３９】
そして、障害発生条件抽出手段１２２が、実行時点「ｐｂ」（＝２）を起点として修正トレース１５２の先頭までの命令に対してステップＳＴ９からステップＳＴ１１の処理を行う（ステップＳＴ８とステップＳＴ１２で示すループ）。まず、実行時点「ｐｂ」（＝２）の命令は代入命令ではないので、障害発生条件抽出手段１２２は、ステップＳ１０、ステップＳ１１を行わない（ステップＳＴ９でＮＯ）。次の実行時点『１』の命令は代入命令である（ステップＳＴ９でＹＥＳ）が、その代入式の左辺値である変数『ｖａｌ』は分岐条件「ｃｂ」中の項としては存在しないので、障害発生条件抽出手段１２２はステップＳ１１を行わない（ステップＳＴ１０でＮＯ）。また実行時点「ｐｂ」（＝１）は修正トレース１５２の先頭なので、障害発生条件抽出手段１２２はＳＴ８からの繰り返しを終了する（ステップＳＴ１２）。
【００４０】
分岐条件「ｃｂ」（＝『ｉｄｘ１ ＞＝ ｉｄｘ２』）は、入力値となる変数ｉｄｘ１とｉｄｘ２を含む（ステップＳＴ１３でＹＥＳ）。そこで、障害発生条件抽出手段１２２が、分岐条件「ｃｂ」を障害発生条件式群「Ｃ」に加え、Ｃ＝｛『ｉｄｘ１ ＞＝ ｉｄｘ２』｝とする（ステップＳＴ１４）。
【００４１】
次に、実行時点『２』の分岐命令の次の分岐命令もしくは障害判定条件式は、実行時点『４’』の『ｐｏｓ＜０』であるので、障害発生条件抽出手段１２２が、実行時点「ｐｂ」を『４’』とする（ステップＳＴ６）。さらに、障害発生条件抽出手段１２２が、分岐条件「ｃｂ」を『ｐｏｓ ＜ ０』とする（ステップＳＴ７）。
【００４２】
そして、障害発生条件抽出手段１２２が、実行時点「ｐｂ」（＝４’）を起点として修正トレース１５２の先頭までの命令に対してステップＳＴ９からステップＳＴ１１の処理を行う（ステップＳＴ８とステップＳＴ１２で示すループ）。実行時点「ｐｂ」（＝４’）の命令は代入命令ではないので、障害発生条件抽出手段１２２は、ステップＳ１０、ステップＳ１１を行わない（ステップＳＴ９でＮＯ）。
【００４３】
次の実行時点『３』の命令は代入命令である（ステップＳＴ９でＹＥＳ）。そして、その代入式『ｐｏｓ ＝ ｉｄｘ２ − ｏｆｆｓｅｔ』の左辺値である変数『ｐｏｓ』が分岐条件「ｃｂ」中の項として存在する（ステップＳＴ１０でＹＥＳ）。そこで、障害発生条件抽出手段１２２は、分岐条件「ｃｂ」中の項『ｐｏｓ』を代入式の右辺の式『ｉｄｘ２ − ｏｆｆｓｅｔ』で書き換えることにより、分岐条件「ｃｂ」を『ｉｄｘ２ − ｏｆｆｓｅｔ ＜ ０』とする（ステップＳＴ１１）。
【００４４】
次の実行時点『２』の命令は代入命令ではないので、障害発生条件抽出手段１２２は、ステップＳ１０、ステップＳ１１を行わない（ステップＳＴ９でＮＯ）。
【００４５】
更に、次の実行時点『１』の命令は代入命令である（ステップＳＴ９でＹＥＳ）。しかし、その代入式の左辺値である変数『ｖａｌ』は分岐条件「ｃｂ」中の項としては存在しないので、障害発生条件抽出手段１２２はステップＳ１１を行わない（ステップＳＴ１０でＮＯ）。また実行時点「ｐｂ」（＝１）は修正トレース１５２の先頭なので、障害発生条件抽出手段１２２はＳＴ８からの繰り返しを終了する（ステップＳＴ１２）。
【００４６】
項の書換えを行った分岐条件「ｃｂ」（＝『ｉｄｘ２ − ｏｆｆｓｅｔ ＜ ０』）は入力値ｉｄｘ２とｏｆｆｓｅｔを含む（ステップＳＴ１３でＹＥＳ）。そこで、障害発生条件抽出手段１２２は、この分岐条件「ｃｂ」を障害発生条件式群「Ｃ」に加え、Ｃ＝｛『ｉｄｘ１ ＞＝ ｉｄｘ２』，『ｉｄｘ２ − ｏｆｆｓｅｔ ＜ ０』｝とする（ステップＳＴ１４）。
【００４７】
修正トレース１５２にはこれ以上分岐命令もしくは障害判定条件式がないので、ステップＳＴ５からの繰り返しを終了する（ステップＳＴ１５）。
【００４８】
こうして、障害発生条件抽出手段１２２は、障害発生条件式群「Ｃ」を抽出する。そして、障害発生条件抽出手段１２２は、出力装置１１２に対して、Ｃ＝｛『ｉｄｘ１ ＞＝ ｉｄｘ２』，『ｉｄｘ２ − ｏｆｆｓｅｔ ＜ ０』｝を障害発生条件として出力し（ステップＳＴ１６）、終了する。
【００４９】
本発明の第１の実施の形態によれば、障害を発生させる入力値の値域を定義した条件式として誤った条件式を導出することを防止することができる。その理由は、修正トレース中に存在する分岐命令の条件式に対して、修正トレース中にある代入命令にもとづいて項の書換えを行い、入力値に対する条件式を自動的に抽出するためである。
【００５０】
また、本発明の第１の実施の形態によれば、動的プログラム検証で検出された障害に対する調査・分析作業を削減することができる。その理由は、検出されたある障害の原因が不正な入力値であることが判明した場合、入力値の値域あるいは他の入力値との関係を表した条件式の形式としてこの障害を発生させる条件を抽出するからである。こうして、その条件に合致する他の入力値を起因とする障害を同じ原因で検出された障害とみなすことができる。このため、あらためて調査・分析作業を実施する必要がなくなるためである。
【００５１】
また、本発明の第１の実施の形態によれば、動的プログラム検証における入力値が満たすべき値域や他の入力値との大小関係といった制約条件を洗練する作業を削減することができる。その理由は、抽出された条件中に含まれる１つ以上の不正な入力値を表す条件式に対し、その条件式の否定の条件式をそのまま入力値に対する正しい制約条件とすることができるためである。
【００５２】
次に本発明の第２の実施の形態について図面を参照して詳細に説明する。図９は、本発明の第２の実施の形態の構成を示すブロック図である。
【００５３】
本発明の第２の実施の形態のデータ処理装置１２０は、実行トレース修正手段１２１と、障害発生条件抽出手段１２２とから構成される。実行トレース修正手段１２１と、障害発生条件抽出手段１２２とは、それぞれ、ハードウェアで実現されても良いし、ソフトウェアで実現されても良いし、ハードウェアとソフトウェアの混在により実現されても良い。
【００５４】
実行トレース修正手段１２１は、図示しない手段から、検証対象のプログラム１４１と、障害検出時の実行トレース１４２と、検出した障害内容１４３と、障害判定ルール１４４を取得する。この図示しない手段は、例えば、操作者が図示しない入力装置から入力する手段であっても良い。そして、実行トレース修正手段１２１は、取得した障害内容１４３と障害判定ルール１４４から障害判定条件式を生成し、取得した実行トレース１４２上の障害発生命令を、生成した障害判定条件式で置換した修正トレース１５２を生成する。障害発生条件抽出手段１２２は、修正トレース１５２中の分岐命令の条件式乃至前記障害判定条件式を、同修正トレース１５２中の代入式に基づいて書き換え、障害発生となる入力値の値域を定義する障害発生条件式として抽出する。
【００５５】
こうして、第１の実施の形態と同様の効果を得ることができる。
【００５６】
次に本発明の第３の実施の形態について説明する。図１０は、本発明の第３の実施の形態の構成を示すブロック図である。
【００５７】
本発明の第３の実施の形態は、第１の実施の形態とほぼ同様である。本発明の第３の実施の形態は、出力装置１１２を有していないことが、第１の実施の形態と異なる。また、本発明の第３の実施の形態は、二次記憶装置１１３に障害発生条件記憶部１３５を有することが、第１の実施の形態と異なる。
【００５８】
障害発生条件抽出手段１２２は、二次記憶装置１１３の障害発生条件記憶部１３５に、抽出した障害発生条件式群「Ｃ」を格納する。
【００５９】
本発明の第３の実施の形態によれば、制約条件である障害発生条件式を図示しない手段により、あるいは、他日、あるいは、繰り返して利用することが可能になる。その理由は、制約条件を二次記憶装置に格納することで、必要時に読み出すことができるようにしたためである。
【産業上の利用可能性】
【００６０】
本発明によれば、動的プログラム検証における入力値に対する制約条件の洗練や、失敗したテスト・検証結果の分析（入力値のカテゴライズ）といった用途に適用できる。
【図面の簡単な説明】
【００６１】
【図１】本発明の第１の実施の形態の構成を示すブロック図である。
【図２】本発明の第１、３の実施の形態のプログラム記憶部の構造を示す図である。
【図３】本発明の第１、３の実施の形態の実行トレース記憶部の構造を示す図である。
【図４】本発明の第１、３の実施の形態の障害内容記憶部の構造を示す図である。
【図５】本発明の第１、３の実施の形態の障害判定ルール記憶部の構造を示す図である。
【図６】本発明の第１乃至３の実施の形態の修正トレースの例を示す図である。
【図７】本発明の第１乃至３の実施の形態の動作を示すフローチャートである。
【図８】本発明の第１乃至３の実施の形態の動的プログラム検証実施時の入力データの例である。
【図９】本発明の第２の実施の形態の構成を示すブロック図である。
【図１０】本発明の第３の実施の形態の構成を示すブロック図である。
【符号の説明】
【００６２】
１１１    中央処理装置
１１２    出力装置
１１３    二次記憶装置
１２０    データ処理装置
１２１    実行トレース修正手段
１２２    障害発生条件抽出手段
１３１    プログラム記憶部
１３２    実行トレース記憶部
１３３    障害内容記憶部
１３４    障害判定ルール記憶部
１４１    検証対象プログラム
１４１    プログラム
１４２    実行トレース
１４３    障害内容
１４４    障害判定ルール
１５２    修正トレース
【図１】
0004501978.tif 000002
【図２】
0004501978.tif 000003
【図３】
0004501978.tif 000004
【図４】
0004501978.tif 000005
【図５】
0004501978.tif 000006
【図６】
0004501978.tif 000007
【図７】
0004501978.tif 000008
【図８】
0004501978.tif 000009
【図９】
0004501978.tif 000010
【図１０】
0004501978.tif 000011