(57)【要約】      （修正有）【課題】余分なテストケースを除去する。【解決手段】実行エンジン１１３は、シンボリック実行を行う。パス条件計算部１１４は、パス条件を生成し、変換部１０８に出力する。代入部１０９は、パス条件に、固定データ格納部１０７に格納されている固定値を代入する。簡約化部１１０は、パス条件を簡約化することにより簡約化パス条件を生成し、簡約化データ格納部１１１に格納する。テスト入力生成部１１５は、簡約化データ格納部１１１に格納されている簡約化パス条件を満たす充足値を求め、当該充足値と固定値とを含むテスト入力をテストケース生成部１１６に出力する。テストケース生成部１１６は、テスト入力とパス条件とを含むテストケースを生成し、第１テストケース格納部１１７に格納する。除去部１１８は、第１テストケース格納部１１７に格納されているデータを用いて処理を行い、結果を第２テストケース格納部１１９に格納する。【選択図】図４
2014153908.tif 000002
【特許請求の範囲】
【請求項１】
シンボリック実行を繰り返し行うことにより得られる複数のパス条件の各々について、当該パス条件に含まれるシンボル変数の一部に固定値を代入することにより当該パス条件を簡約化した簡約化パス条件を生成し、
生成された複数の簡約化パス条件の各々について、当該簡約化パス条件を満たすシンボル変数の値を算出すると共に、算出された当該値と前記固定値と簡約化する前のパス条件とを含むテストデータを生成し
生成された前記テストデータの一部において同じパス条件を含むテストデータが重複しないように削除する
処理をコンピュータに実行させるためのテストデータ生成プログラム。
【請求項２】
固定値が代入されない第１のシンボル変数と固定値が代入される第２のシンボル変数との組合せを複数生成する
処理をさらに前記コンピュータに実行させ、
前記簡約化パス条件を生成する処理において、
当該複数の組合せの各々についてシンボリック実行を行う
ことを特徴とする請求項１記載のテストデータ生成プログラム。
【請求項３】
前記簡約化パス条件を生成する処理において、
前記パス条件に含まれる前記第２のシンボル変数について、前記パス条件に含まれる少なくともいずれかの論理式が成立しないか判定し、
前記パス条件に含まれる論理式がいずれも成立すると判定された場合に、前記パス条件に含まれる前記第２のシンボル変数に固定値を代入することにより簡約化した簡約化パス条件を生成する
ことを特徴とする請求項２記載のテストデータ生成プログラム。
【請求項４】
シンボリック実行を繰り返し行うことにより得られる複数のパス条件の各々について、当該パス条件に含まれるシンボル変数の一部に固定値を代入することにより当該パス条件を簡約化した簡約化パス条件を生成し、
生成された複数の簡約化パス条件の各々について、当該簡約化パス条件を満たすシンボル変数の値を算出すると共に、算出された当該値と前記固定値と簡約化する前のパス条件とを含むテストデータを生成し
生成された前記テストデータにおいて同じパス条件を含むテストデータが重複しないように削除する
処理をコンピュータが実行するテストデータ生成方法。
【請求項５】
シンボリック実行を繰り返し行うことにより得られる複数のパス条件の各々について、当該パス条件に含まれるシンボル変数の一部に固定値を代入することにより当該パス条件を簡約化した簡約化パス条件を生成する第１処理部と、
生成された複数の簡約化パス条件の各々について、当該簡約化パス条件を満たすシンボル変数の値を算出すると共に、算出された当該値と前記固定値と簡約化する前のパス条件とを含むテストデータを生成する第２処理部と、
生成された前記テストデータにおいて同じパス条件を含むテストデータが重複しないように削除する第３処理部と
を有するテストデータ生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムのテストに利用するテストデータの生成技術に関する。
【背景技術】
【０００２】
プログラムのテストを実行する際には、確認すべき観点を網羅するように、テスト入力及び期待される結果等を含むテストケースのセットを用意する。テストケースを用意する作業の中でも特にテスト入力の作成は、人手で行うことが多い、多大な労力を要する作業である。
【０００３】
この労力を減らすための技術として、シンボリック実行によりテスト入力を生成する技術が知られている。シンボリック実行は、プログラム中の変数を具体化せず、シンボル値という特殊な値を持たせたままプログラムを実行する技術である。このシンボル値を保持する変数のことをシンボル変数と呼ぶ。シンボリック実行においては、シンボル変数が分岐等の判定条件に利用された場合、判定条件が成立する場合のパス及び成立しない場合のパスの各々を網羅的に実行する。このとき、パスを実行するために（すなわち、判定条件を成立させるために又は成立させないために）シンボル値が満たすべき条件が保持される。この条件はパス条件と呼ばれ、シンボリック実行によって実行されたパス毎に保持される。特定のパス条件を充足するような値（以下、充足値と呼ぶ）が存在しない場合には、そのパス条件についてのパスを実行できないので、そのパスをテストの対象から除外する。パス条件の充足値が存在する場合には、充足解をテスト入力とする。
【０００４】
シンボリック実行の問題点として、いわゆるパス爆発が発生することにより、シンボリック実行を実用的な時間及び計算量で行えなくなることが指摘されている。
【０００５】
パス爆発を防ぐための方法として、シンボル化する変数を切り替えながらシンボリック実行を繰り返し行う技術が知られている。この技術について、図１乃至図３を用いて説明する。
【０００６】
例えば図１に示したような制御構造を有するプログラムに対してシンボリック実行を行うことを考える。このプログラムにおける変数はｘ及びｙである。このプログラムにおいては、分岐１５１において「ｘ＊（ｙ＋１）＞１０」が成立するか判定される。成立する場合には処理はルート１５２に進み、成立しない場合には処理はルート１５３に進む。また、分岐１６１において「ｙ＞５」が成立するか判定される。成立する場合には処理はルート１６２に進み、成立しない場合には処理はルート１６３に進む。
【０００７】
まず、図２を用いて、ｘをシンボル変数とし且つｙをデフォルト値（図２の例では１）としてシンボリック実行を行った場合について説明する。この場合、分岐１５１における判定条件は「ｘ＊２＞１０」になる。ルート１５２に進む場合のテストケースとして、例えばテスト入力（ｘ、ｙ）＝（６，１）を含むテストケース１が生成される。また、分岐１６１における判定条件は「１＞５」になる。この判定条件は成立しないので、ルート１６３に進む。そして、例えばテスト入力（ｘ，ｙ）＝（０，１）を含むテストケース２が生成される。
【０００８】
図３を用いて、ｘをデフォルト値（図３の例では０）とし且つｙをシンボル変数としてシンボリック実行を行った場合について説明する。この場合、分岐１５１における判定条件は「０＞１０」になる。この判定条件は成立しないので、ルート１５３に進む。また、分岐１６１における判定条件は「ｙ＞５」のままである。ルート１６２に進む場合のテストケースとして、例えばテスト入力（ｘ，ｙ）＝（０，６）を含むテストケース３が生成される。また、ルート１６３に進む場合のテストケースとして、例えばテスト入力（ｘ，ｙ）＝（０，０）を含むテストケース４が生成される。
【０００９】
このようにすれば、同時に扱うシンボル変数の数を減らせるので、パス爆発を防ぐことができる。但し、この技術を利用するとテストケースが冗長になる場合がある。例えば図１乃至図３を用いて説明した例においては、テストケース２とテストケース４とは同じパスについてのテストケースであるため、どちらかのテストケースは不要である。シンボリック実行に関する従来の技術によっては、このような余分なテストケースを除去することができない。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００９−８７３５５号公報
【特許文献２】特開２０１２−０６８８６９号公報
【非特許文献】
【００１１】
【非特許文献１】玉井哲雄、福永光一、「記号実行システム」、情報処理、情報処理学会、１９８２年１月、Vol.23 No.1, p.18-28
【非特許文献２】Kazuki Munakata et al. "Test Case Selection based on Path Condtions of Symbolic Execution", 19th Asia-Pacific Software Engineering Conference, 2012, IEEE computer society, p.318-321
【発明の概要】
【発明が解決しようとする課題】
【００１２】
従って、本発明の目的は、１つの側面では、余分なテストケースを除去するための技術を提供することである。
【課題を解決するための手段】
【００１３】
本発明に係るテストデータ生成方法は、シンボリック実行を繰り返し行うことにより得られる複数のパス条件の各々について、当該パス条件に含まれるシンボル変数の一部に固定値を代入することにより当該パス条件を簡約化した簡約化パス条件を生成し、生成された複数の簡約化パス条件の各々について、当該簡約化パス条件を満たすシンボル変数の値を算出すると共に、算出された当該値と固定値と簡約化する前のパス条件とを含むテストデータを生成し、生成された前記テストデータおいて同じパス条件を含むテストデータが重複しないように削除する処理を含む。
【発明の効果】
【００１４】
余分なテストケースを除去できるようになる。
【図面の簡単な説明】
【００１５】
【図１】図１は、従来技術について説明するための図である。
【図２】図２は、従来技術について説明するための図である。
【図３】図３は、従来技術について説明するための図である。
【図４】図４は、テストケース生成装置の機能ブロック図である。
【図５】図５は、プログラム格納部に格納されるプログラムの一例を示す図である。
【図６】図６は、プログラムの制御構造の一例を示す図である。
【図７】図７は、ドライバ格納部に格納されるドライバの一例を示す図である。
【図８】図８は、本実施の形態の概要について説明するための図である。
【図９】図９は、メインの処理フローを示す図である。
【図１０】図１０は、処理の開始時点における第１テストケース格納部の状態及び第２テストケースの状態を示す図である。
【図１１】図１１は、抽出処理の処理フローを示す図である。
【図１２】図１２は、変数格納部に格納されるデータの一例を示す図である。
【図１３】図１３は、組合せ生成処理の処理フローを示す図である。
【図１４】図１４は、実行制御部により生成される組合せの一例を示す図である。
【図１５】図１５は、固定データ格納部に格納されるデータの一例を示す図である。
【図１６】図１６は、シンボリック実行の処理フローを示す図である。
【図１７】図１７は、実行エンジンが管理するデータの一例を示す図である。
【図１８】図１８は、簡約化処理の処理フローを示す図である。
【図１９】図１９は、簡約化処理の具体例を示す図である。
【図２０】図２０は、簡約化処理の具体例を示す図である。
【図２１】図２１は、原子論理式が簡約化手順に従って簡約化される様子を示す図である。
【図２２】図２２は、原子論理式が簡約化手順に従って簡約化される様子を示す図である。
【図２３】図２３は、テストケース生成処理の処理フローを示す図である。
【図２４】図２４は、テストケース生成処理について説明するための図である。
【図２５】図２５は、テストケース生成処理について説明するための図である。
【図２６】図２６は、第１テストケース格納部に格納されるデータの一例を示す図である。
【図２７】図２７は、絞り込み処理の処理フローを示す図である。
【図２８】図２８は、第２テストケース格納部に格納されるデータの一例を示す図である。
【図２９】図２９は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１６】
図４に、本実施の形態に係るテストケース生成装置１の機能ブロック図を示す。テストケース生成装置１は、プログラム格納部１０１と、ドライバ格納部１０２と、変数格納部１０３と、固定データ計算部１０５及び実行制御部１０６を含む制御部１０４と、固定データ格納部１０７と、代入部１０９及び簡約化部１１０を含む変換部１０８と、簡約化データ格納部１１１と、実行エンジン１１３、パス条件計算部１１４、テスト入力生成部１１５及びテストケース生成部１１６を含むシンボリック実行部１１２と、第１テストケース格納部１１７と、除去部１１８と、第２テストケース格納部１１９とを含む。
【００１７】
実行制御部１０６は、ドライバ格納部１０２に格納されているデータを用いて、シンボル変数の候補を抽出し、変数格納部１０３に格納する。また、実行制御部１０６は、プログラム格納部１０１に格納されているプログラム及びシンボル変数の情報を実行エンジン１１３に出力する。固定データ計算部１０５は、固定シンボル変数のデータを生成し、固定データ格納部１０７に格納する。
【００１８】
代入部１０９は、パス条件計算部１１４から受け取ったパス条件に、固定データ格納部１０７に格納されている固定値を代入する。簡約化部１１０は、代入部１０９から受け取ったパス条件を簡約化することにより簡約化パス条件を生成し、簡約化データ格納部１１１に格納する。
【００１９】
実行エンジン１１３は、実行制御部１０６からの要求に応じ、シンボリック実行を行う。なお、実行エンジン１１３は、シンボリック実行を行うモジュールであり、例えばＪａｖａ（登録商標） ＰａｔｈＦｉｎｄｅｒである。パス条件計算部１１４は、パス条件を生成し、変換部１０８に出力する。テスト入力生成部１１５は、簡約化データ格納部１１１に格納されている簡約化パス条件を満たす充足値を求め、当該充足値と固定値とを含むテスト入力をテストケース生成部１１６に出力する。テストケース生成部１１６は、テスト入力とパス条件とを含むテストケースを生成し、第１テストケース格納部１１７に格納する。
【００２０】
除去部１１８は、第１テストケース格納部１１７に格納されているデータを用いて処理を行い、処理結果を第２テストケース格納部１１９に格納する。
【００２１】
図５に、プログラム格納部１０１に格納されるデータの一例を示す。図５の例では、シンボリック実行の対象になるプログラムが格納される。
【００２２】
図６に、図５に示したプログラムの制御構造を示す。この制御構造には、条件が「！ｐ３．ｓｔａｒｔｓＷｉｔｈ（”ＺＺ０１”）」である分岐６０１と、条件が「ｍｏｄｅ．ｅｑｕａｌｓ（”００”）＞」である分岐６０２と、条件が「ｍｏｄｅ．ｅｑｕａｌｓ（”０１”）＞」である分岐６０３と、条件が「ｄｉｆｆ＞０」である分岐６０４と、条件が「ｄｉｆｆ＝＝０」である分岐６０５とが含まれる。
【００２３】
図７に、ドライバ格納部１０２に格納されるデータの一例を示す。図７の例では、シンボリック実行を開始するためのドライバが格納される。ドライバには、シンボル変数を宣言する部分（図７における、＠Ｓｙｍｂｏｌｉｃ（”ｔｒｕｅ”）という命令及びｐｕｂｌｉｃ  ｓｔａｔｉｃで始まる命令）と、シンボリック実行の対象になるプログラムを呼び出す部分（図７における、ｉｎｔ  ｃｏｄｅ＝ｔａｒｇｅｔ．ｍｅｔｈｏｄ１（ｐａｒａｍ１，ｐａｒａｍ２，ｐａｒａｍ３）；という命令）とが含まれる。
【００２４】
次に、テストケース生成装置１の動作の概要について説明する。本実施の形態においては、自由シンボル変数及び固定シンボル変数という２種類のシンボル変数を導入する。自由シンボル変数は通常のシンボル変数であり、固定シンボル変数はその値として固定値を持つシンボル変数である。
【００２５】
シンボリック実行によってパス条件を求めるにあたっては、自由シンボル変数及び固定シンボル変数のいずれについても通常のシンボル変数と同様に取り扱う。但し、求められたパス条件を用いてテスト入力を計算する際には、自由シンボル変数だけを通常のシンボル変数と同様に取り扱う一方、固定シンボル変数には固定値を代入することで、簡約化パス条件を生成する。そして、この簡約化パス条件の充足値を求めることで、テスト入力を生成する。
【００２６】
これについて、図１乃至３に示したプログラムを例にして具体的に説明する。図８は、図１乃至３に示したプログラムに対して本実施の形態の処理を実行した場合を示している。図８における左側は、変数ｘを自由シンボル変数とし且つ変数ｙを固定シンボル変数としてシンボリック実行を行った場合の例であり、右側は、変数ｙを自由シンボル変数とし且つ変数ｘを固定シンボル変数としてシンボリック実行を行った場合の例である。いずれの場合も、まずプログラムにおけるパス８０１乃至８０３についてパス条件を生成する。
【００２７】
ここで、左側の例においては、固定シンボル変数ｙに対し固定値１を代入することにより各パス条件を簡約化する。パス８０１については「ｘ＊２＞１０」という簡約化パス条件が得られ、パス８０２については「（ｘ＊２＜＝１０）＆＆（１＜＝５）」という簡約化パス条件が得られ、パス８０３については「（ｘ＊２＜＝１０）＆＆（１＞５）」という簡約化パス条件が得られる。この簡約化パス条件の充足値を求めることにより、パス８０１についてテストケース１を生成し、パス８０２についてテストケース２を生成する。パス８０３についての簡約化パス条件を満たすｘの値は存在しないので、パス８０３についてはテストケースが生成されない。
【００２８】
一方、右側の例においては、固定シンボル変数ｘに対し固定値０を代入することにより各パス条件を簡約化する。パス８０１については「０＞１０」という簡約化パス条件が得られ、パス８０２については「（０＜＝１０）＆＆（ｙ＜＝５）」という簡約化パス条件が得られ、パス８０３については「（０＜＝１０）＆＆（ｙ＞５）」という簡約化パス条件が得られる。この簡約化パス条件の充足値を求めることにより、パス８０３についてテストケース８０３を生成し、パス８０２についてテストケース４を生成する。パス８０１についての簡約化パス条件を満たすｙの値は存在しないので、パス８０１についてはテストケースが生成されない。
【００２９】
この時点においてはテストケース２とテストケース４とが重複することになるが、本実施の形態においては、簡約化する前のパス条件を比較することにより重複を排除する。上で述べた例の場合、テストケース１のパス条件は「ｘ＊（ｙ＋１）＞１０」であり、テストケース２のパス条件は「ｘ＊（ｙ＋１）＜＝１０＆＆ｙ＜＝５」であり、テストケース３のパス条件は「ｘ＊（ｙ＋１）＜＝１０＆＆ｙ＞５」であり、テストケース４のパス条件は「ｘ＊（ｙ＋１）＝＜１０＆＆ｙ＜＝５」である。テストケース２のパス条件とテストケース４のパス条件は同じであるので、テストケース２とテストケース４とが重複していると判断できる。よって、テストケース２又はテストケース４のいずれかを削除することにより、余分なテストデータを除去できる。
【００３０】
次に、図９乃至図２８を用いて、テストケース生成装置１の動作を詳細に説明する。制御部１０４における実行制御部１０６は、例えば操作者からテストケースの生成指示を受け付けると、抽出処理を実行する（図９：ステップＳ１）。抽出処理については、図１１及び図１２を用いて説明する。なお、処理の開始時点においては、例えば図１０に示すように、第１テストケース格納部１１７及び第２テストケース１１９は空の状態である。
【００３１】
まず、実行制御部１０６は、ドライバ格納部１０２に格納されているドライバにおけるシンボル変数の宣言文を抽出する（図１１：ステップＳ２１）。シンボル変数の宣言文は、例えば、図７において＠Ｓｙｍｂｏｌｉｃ（”ｔｒｕｅ”）という命令及びｐｕｂｌｉｃ  ｓｔａｔｉｃで始まる命令である。また、実行制御部１０６は、変数名と変数の型とを対応付けて変数格納部１０３に格納する。
【００３２】
図１２に、変数格納部１０３に格納されるデータの一例を示す。図１２の例では、変数名と、変数の型とが格納される。
【００３３】
実行制御部１０６は、未処理の宣言文が有るか判断する（ステップＳ２３）。未処理の宣言文が無い場合（ステップＳ２３：Ｎｏルート）、元の処理に戻る。一方、未処理の宣言文が有る場合（ステップＳ２３：Ｙｅｓルート）、実行制御部１０６は、未処理の宣言文を１つ特定する（ステップＳ２５）。
【００３４】
実行制御部１０６は、初期値が宣言されているか判断する（ステップＳ２７）。初期値が宣言されている場合（ステップＳ２７：Ｙｅｓルート）、実行制御部１０６は、宣言文におけるシンボル変数の固定値に当該初期値を設定する（ステップＳ２９）。初期値とは、例えば、図７において「ｐａｒａｍ１＝」の後に続く値である。一方、初期値が宣言されていない場合（ステップＳ２７：Ｎｏルート）、実行制御部１０６は、宣言文におけるシンボル変数の型に応じた初期値を生成し、シンボル変数の固定値に設定する（ステップＳ３１）。シンボル変数の型に応じた初期値とはシンボル変数の型に従う具体値のことであり、例えば整数型であれば「１」である。なお、ステップＳ２９及びＳ３１において設定されたシンボル変数及び固定値は、関連付けられてメインメモリ等の記憶装置に格納される。
【００３５】
以上のような処理を実行すれば、固定シンボル変数の固定値として適切な値を抽出できるようになる。
【００３６】
図９の説明に戻り、実行制御部１０６は、組合せ生成処理を実行する（ステップＳ３）。組合せ生成処理については、図１３乃至図１５を用いて説明する。
【００３７】
まず、実行制御部１０６は、シンボル変数の候補についてのデータ（ここでは、変数名及び変数の型）を変数格納部１０３から取得する（図１３：ステップＳ４１）。
【００３８】
実行制御部１０６は、自由シンボル変数と固定シンボル変数との組合せを生成し（ステップＳ４３）、ステップＳ４１において取得されたデータと、ステップＳ２９及びＳ３１において設定された固定値とを固定データ計算部１０５に出力する。
【００３９】
図１４に、実行制御部１０６により生成される組合せの一例を示す。図１４の例では、生成された組合せには、自由シンボル変数を変数ＳＤｒｉｖｅｒ．ｐａｒａｍ１とし且つ固定シンボル変数を変数ＳＤｒｉｖｅｒ．ｐａｒａｍ２及び変数ＳＤｒｉｖｅｒ．ｐａｒａｍ３とする組合せ、自由シンボル変数を変数ＳＤｒｉｖｅｒ．ｐａｒａｍ２とし且つ固定シンボル変数を変数ＳＤｒｉｖｅｒ．ｐａｒａｍ３及び変数ＳＤｒｉｖｅｒ．ｐａｒａｍ１とする組合せ、及び自由シンボル変数を変数ＳＤｒｉｖｅｒ．ｐａｒａｍ３とし且つ固定シンボル変数を変数ＳＤｒｉｖｅｒ．ｐａｒａｍ１及び変数ＳＤｒｉｖｅｒ．ｐａｒａｍ２とする組合せとが含まれる。
【００４０】
固定データ計算部１０５は、実行制御部１０６から受け取ったデータを含む、固定シンボル変数のデータを生成（ステップＳ４５）し、固定データ格納部１０７に格納する。そして処理を終了する。
【００４１】
図１５に、固定データ格納部１０７に格納されるデータの一例を示す。図１５の例では、固定データ格納部１０７には、固定シンボル変数名と、変数の型と、固定値とが格納される。固定値は、ステップＳ２９及びＳ３１において設定された初期値である。このように、固定データ格納部１０７には、各組合せについて固定シンボル変数に関する情報が格納される。
【００４２】
以上のようにして生成された各組合せについてシンボリック実行を行えば、シンボリック実行を繰り返し行うことが可能になる。
【００４３】
図９の説明に戻り、実行制御部１０６は、未処理の組合せが有るか判断する（ステップＳ５）。未処理の組合せが有る場合（ステップＳ５：Ｙｅｓルート）、実行制御部１０６は、未処理の組合せを１つ特定する（ステップＳ７）。
【００４４】
実行制御部１０６は、ステップＳ７において特定された組合せについてシンボリック実行を行うことをシンボリック実行部１１２に要求する。これに応じ、実行エンジン１１３は、シンボリック実行を実施する（ステップＳ９）。シンボリック実行については、図１６乃至図２６を用いて説明する。なお、実行エンジン１１３は、シンボリック実行の実行中に図１５に示すようなデータを管理する。図１７の例では、実行エンジン１１３は、シンボル変数と、シンボル変数の型と、シンボル値とを管理する。シンボル値とは、実際にパス条件に出現する値のことである。すなわち、シンボル変数は、パス条件の中においては「ＳＤｒｉｖｅｒ・・」の形で出現するわけではなく「ｐａｒａｍ・・」の形で出現する。なお、上で述べたように、パス条件の生成までは自由シンボル変数と固定シンボル変数との区別無くシンボリック実行が行われる。
【００４５】
まず、実行エンジン１１３は、シンボリック実行の初期化を実行する（図１６：ステップＳ５１）。具体的には、実行エンジン１１３は、実行位置をプログラムの先頭に移動し、またメモリ内容をクリアする。
【００４６】
実行エンジン１１３は、プログラムに次の命令が有るか判断する（ステップＳ５３）。次の命令が有る場合（ステップＳ５３：Ｙｅｓルート）、実行エンジン１１３は、その命令（以下、処理対象の命令と呼ぶ）を解析する（ステップＳ５７）。例えば、命令の内容及び関係する変数等について解析を行う。
【００４７】
実行エンジン１１３は、処理対象の命令が分岐命令であるか判断する（ステップＳ５９）。分岐命令である場合（ステップＳ５９：Ｙｅｓルート）、実行エンジン１１３は、分岐命令において未選択の分岐を１つ選択する（ステップＳ６１）。そしてステップＳ６３の処理に移行する。
【００４８】
一方、処理対象の命令が分岐命令ではない場合（ステップＳ５９：Ｎｏルート）、実行エンジン１１３は、パス条件計算部１１４に処理を要求する。これに応じ、パス条件計算部１１４は、パス条件を計算する（ステップＳ６３）。パス条件計算部１１４は、計算されたパス条件を変換部１０８に出力する。
【００４９】
これに応じ、変換部１０８は、簡約化処理を実行する（ステップＳ６５）。簡約化処理については、図１８乃至図２２を用いて説明する。
【００５０】
まず、代入部１０９は、パス条件計算部１１４から受け取ったパス条件のコピーを生成することにより、簡約化パス条件を生成する（図１８：ステップＳ８１）。ステップＳ８１において生成される簡約化パス条件はまだ簡約化されていない。ステップＳ８１の処理により、例えば”ｐａｒａｍ３”．ｓｔａｒｔｓＷｉｔｈ（”ＺＺ０１”）∧（”ｐａｒａｍ３”．ｓｕｂＳｔｒｉｎｇ（４）．ｅｑｕａｌｓ（”００”））∧（ｐａｒａｍ１−ｐａｒａｍ２＋１００）＞０というような簡約化パス条件が生成される。
【００５１】
代入部１０９は、ステップＳ８１において生成された簡約化パス条件に含まれるシンボル変数に対応する固定値を固定データ格納部１０７から抽出し、抽出された固定値をシンボル変数に代入する（ステップＳ８３）。また、代入部１０９は、処理後の簡約化パス条件を簡約化部１１０に出力する。ステップＳ８３の処理により、例えば”ＺＺ０１００”．ｓｔａｒｔｓＷｉｔｈ（”ＺＺ０１”）∧（”ＺＺ０１００”．ｓｕｂＳｔｒｉｎｇ（４）．ｅｑｕａｌｓ（”００”））∧（ｐａｒａｍ１−１００＋１００）＞０というような簡約化パス条件が生成される。
【００５２】
なお、固定データ格納部１０７には、各組合せについての固定シンボル変数に関するデータが格納されているので、代入部１０９は、現在処理を行っている組合せについてのデータから固定値を抽出する。
【００５３】
簡約化部１１０は、簡約化パス条件に未処理の原子論理式が有るか判断する（ステップＳ８５）。ここで、原子論理式とは、「且つ」で接続されている要素のことである。例えば簡約化パス条件が、”ＺＺ０１００”．ｓｔａｒｔｓＷｉｔｈ（”ＺＺ０１”）∧（”ＺＺ０１００”．ｓｕｂＳｔｒｉｎｇ（４）．ｅｑｕａｌｓ（”００”））∧（ｐａｒａｍ１−１００＋１００）＞０である場合、「”ＺＺ０１００”．ｓｔａｒｔｓＷｉｔｈ（”ＺＺ０１”）」、「（”ＺＺ０１００”．ｓｕｂＳｔｒｉｎｇ（４）．ｅｑｕａｌｓ（”００”））」及び「（ｐａｒａｍ１−１００＋１００）＞０」が原子論理式である。
【００５４】
未処理の原子論理式が無い場合（ステップＳ８５：Ｎｏルート）、簡約化処理が完了したので、簡約化部１１０は、簡約化処理をする前のパス条件と簡約化パス条件とを対応付けて簡約化データ格納部１１１に格納する。そして元の処理に戻る。
【００５５】
一方、未処理の原子論理式が有る場合（ステップＳ８５：Ｙｅｓルート）、簡約化部１１０は、未処理の原子論理式を１つ特定する（ステップＳ８７）。ステップＳ８７において特定された原子論理式を、以下では「処理対象の原子論理式」と呼ぶ。
【００５６】
簡約化部１１０は、処理対象の原子論理式に含まれる部分式を計算する（ステップＳ８９）。ここで、計算可能な部分式は、例えば自由シンボル値が関係しない部分式又は特定の簡約化ルールが与えられている部分式である。例えば原子論理式（ｐａｒａｍ１−１００＋１００）における部分式「１００−１００」を計算すると０になる。
【００５７】
簡約化部１１０は、計算前後において処理対象の原子論理式に変化が有るか判断する（ステップＳ９１）。処理対象の原子論理式に変化が有る場合（ステップＳ９１：Ｙｅｓルート）、ステップＳ８９の処理に戻る。一方、処理対象の原子論理式に変化が無い場合（ステップＳ９１：Ｎｏルート）、簡約化部１１０は、処理対象の原子論理式が「ｆａｌｓｅ」である（すなわち、成立しない原子論理式である）か判断する（ステップＳ９３）。処理対象の原子論理式が「ｆａｌｓｅ」である場合（ステップＳ９３：Ｙｅｓルート）、処理対象の原子論理式は成立しないので、簡約化部１１０は、「ｆａｌｓｅ」を簡約化パス条件に設定する（ステップＳ９５）。簡約化部１１０は、簡約化処理をする前のパス条件と簡約化パス条件（ｆａｌｓｅ）とを対応付けて簡約化データ格納部１１１に格納する。そして元の処理に戻る。
【００５８】
一方、処理対象の原子論理式が「ｆａｌｓｅ」ではない場合（ステップＳ９３：Ｎｏルート）、簡約化部１１０は、処理対象の原子論理式が「ｔｒｕｅ」である（すなわち、成立する原子論理式である）か判断する（ステップＳ９７）。処理対象の原子論理式が「ｔｒｕｅ」である場合（ステップＳ９７：Ｙｅｓルート）、簡約化部１１０は、処理対象の原子論理式を簡約化パス条件から削除する（ステップＳ９９）。一方、処理対象の原子論理式が「ｔｒｕｅ」ではない場合（ステップＳ９７：Ｎｏルート）、簡約化部１１０は、ステップＳ８７において特定された原子論理式を、計算後の原子論理式で置換する（ステップＳ１０１）。ステップＳ９９及びステップＳ１０１の処理の後、ステップＳ８５の処理に戻る。
【００５９】
以上のような処理を実行すれば、自由シンボル変数及び固定シンボル変数を含むパス条件を簡約化し、自由シンボル変数のみを含む簡約化パス条件を生成できるようになる。
【００６０】
図１９及び図２０に、簡約化処理の具体例を示す。例えば図１９におけるパス条件１９０１において、固定シンボル変数がｐ３であるとする。代入部１０９によってｐ３に対して固定値「”ＺＺ０１００”」が代入されると、簡約化パス条件１９０２になる。さらに、簡約化部１１０によって簡約化パス条件１９０２が成立するか判断されるが、この簡約化パス条件は成立しないので、最終的に簡約化パス条件１９０３になる。
【００６１】
また、例えば図２０におけるパス条件２００１において、自由シンボル変数がｐａｒａｍ１であり、固定シンボル変数がｐａｒａｍ２及びｐａｒａｍ３であるとする。代入部１０９によってｐａｒａｍ２に対して固定値「１００」が代入され、ｐａｒａｍ３に対して固定値「”ＺＺ０１００”」が代入されると、簡約化パス条件２００２になる。さらに、簡約化部１１０によって各原子論理式が簡約化されると共に、その原子論理式が成立するか判断される。最終的に、簡約化パス条件２００３の形まで簡約化される。
【００６２】
なお、固定値代入後の簡約手順をまとめると、以下のようになる。
【００６３】
（１）各原子論理式に対し、適用できるところが無くなるまで変換ルール（１ａ）を適用する。
（１ａ）シンボル変数が関係しない部分式の値を、当該部分式を計算した結果に変換する。
（２）（１）を実施後ｆａｌｓｅに変換された原子論理式があれば、簡約化パス条件をｆａｌｓｅとする。
（３）（１）及び（２）を実施後ｆａｌｓｅにならなかった簡約化パス条件については、ｔｒｕｅに変換された原子論理式を除去したものを簡約化パス条件とする。
【００６４】
上述のような簡約手順に従って原子論理式が簡約化される様子を図２１及び図２２の例を用いて説明する。
【００６５】
図２１の例においては、パス条件２１０１の簡約化を行う。まず、手順（１）において変換ルール（１ａ）を適用すると、簡約化パス条件２１０２が生成される。この簡約化パス条件に対しさらに変換ルール（１ａ）を適用すると、簡約化パス条件２１０３が生成される。そして、簡約化パス条件２１０３を手順（２）で簡約化することにより、最終的に簡約化パス条件２１０４を得ることができる。
【００６６】
図２２の例においては、パス条件２２０２の簡約化を行う。まず、手順（１）において変換ルール（１ａ）を各原子論理式に適用すると、簡約化パス条件２２０２が生成される。この簡約化パス条件における２番目及び３番目の原子論理式に対しさらに変換ルール（１ａ）を適用すると、簡約化パス条件２２０３が生成される。そして、簡約化パス条件２２０３を手順（３）で簡約化することにより、最終的に簡約化パス条件２２０４を得ることができる。
【００６７】
図１６の説明に戻り、テスト入力生成部１１５は、簡約化データ格納部１１１に新たに格納された簡約化パス条件の充足値が有るか判断する（ステップＳ６７）。簡約化パス条件の充足値が有る場合（ステップＳ６７：Ｙｅｓルート）、処理対象の命令を実際に実行できるので、テスト入力生成部１１５は、処理対象の命令を実行することを実行エンジン１１３に要求する。これに応じ、実行エンジン１１３は、処理対象の命令を実行する（ステップＳ６９）。そしてステップＳ５３の処理に戻る。簡約化パス条件の充足値が無い場合（ステップＳ６７：Ｎｏルート）、ステップＳ７３の処理に移行する。
【００６８】
一方、ステップＳ５３において、次の命令が無いと判断された場合（ステップＳ５３：Ｎｏルート）、実行エンジン１１３は、テスト入力生成部１１５に、テストケース生成処理の実行を要求する。これに応じ、テスト入力生成部１１５及びテストケース生成部１１６は、テストケース生成処理を実行する（ステップＳ７１）。テストケース生成処理については、図２３を用いて説明する。
【００６９】
まず、テスト入力生成部１１５は、簡約化データ格納部１１１に格納されている簡約化パス条件の充足値を算出することにより、自由シンボル変数に関するテスト入力を生成し、メインメモリ等の記憶装置に格納する（図２３：ステップＳ１１１）。例えば簡約化データ格納部１１１に「ｐａｒａｍ１＞０」という簡約化パス条件が格納されている場合には、「ｐａｒａｍ１＝１」というテスト入力を生成する。なお、充足値は、従来よりよく知られている制約ソルバ等を使って算出することができる。
【００７０】
テスト入力生成部１１５は、固定シンボル変数の固定値を含むテスト入力を生成し、メインメモリ等の記憶装置に格納する（ステップＳ１１３）。例えば固定シンボル変数がＳＤｒｉｖｅｒ．ｐａｒａｍ２及びＳＤｒｉｖｅｒ．ｐａｒａｍ３である場合には、テスト入力生成部１１５は、ＳＤｒｉｖｅｒ．ｐａｒａｍ２及びＳＤｒｉｖｅｒ．ｐａｒａｍ３についての固定値を固定データ格納部１０７から読み出す。そして、テスト入力生成部１１５は、例えば「ｐａｒａｍ２＝１００」及び「ｐａｒａｍ３＝”ＺＺ０１００”」というテスト入力を生成する。
【００７１】
テスト入力生成部１１５は、ステップＳ１１１において生成されたテスト入力及びステップＳ１１３において生成されたテスト入力をテストケース生成部１１６に出力する。これに応じ、テストケース生成部１１６は、テスト入力生成部１１５から受け取ったテスト入力及び簡約化する前のパス条件を含むテストケースを生成し（ステップＳ１１５）、第１テストケース格納部１１７に格納する。簡約化する前のパス条件は、簡約化データ格納部１１１において簡約化パス条件に対応付けられているパス条件である。そして処理を終了する。
【００７２】
以上のような処理を実行すれば、簡約化パス条件を満たす充足値と固定値とを含むテスト入力に、簡約化される前のパス条件を対応付けておくことができるようになる。
【００７３】
図１６の説明に戻り、実行エンジン１１３は、処理対象の命令までのパスに分岐命令が有るか判断する（ステップＳ７３）。分岐命令が無い場合（ステップＳ７３：Ｎｏルート）、到達可能なパスを実行し尽くしたので、元の処理に戻る。一方、分岐命令が有る場合（ステップＳ７３：Ｙｅｓルート）、実行エンジン１１３は、直前の分岐命令にバックトラックする（ステップＳ７５）。
【００７４】
実行エンジン１１３は、直前の分岐命令に未選択の分岐が有るか（すなわち、未実行のパスが有るか）判断する（ステップＳ７７）。未選択の分岐が無い場合（ステップＳ７７：Ｎｏルート）、他の分岐命令を探索するため、ステップＳ７３の処理に戻る。一方、未選択の分岐が有る場合（ステップＳ７７：Ｙｅｓルート）、実行エンジン１１３は、未選択の分岐を１つ選択する（ステップＳ７９）。そしてステップＳ６３の処理に移行する。
【００７５】
以上のように、パス条件の生成までは自由シンボル変数と固定シンボル変数との区別無くいずれの変数についてもシンボル化され、シンボリック実行が行われる。これにより、シンボル変数全体に関するパス条件を生成することができるようになる。
【００７６】
従来の方法によってシンボリック実行を繰り返し行った場合、デフォルト値が代入されないシンボル変数のみが関係するパス条件を生成するため、同じパスを通過するテストケースについて異なるパス条件が得られることがある。そのため、テストケースが重複しているか判断することができない。一方、本実施の形態に示した方法の場合、シンボル変数が同じであれば、同じパスを通過するテストケースについて生成されるパス条件は同じになる。これにより、自由シンボル変数及び固定シンボル変数を切り替えつつシンボリック実行を繰り返し行う場合であっても、簡約化する前のパス条件をもとにテストケースの重複を判断できるようになる。
【００７７】
一方で、簡約化パス条件は、自由シンボル変数のみが関係するパス条件であるため、これを充足可能性の判定及びテスト入力の生成に用いることによって、パス爆発による弊害の発生を防ぐことができるようになる。
【００７８】
図２４及び図２５を用いて、シンボリック実行によるテストケースの生成について説明する。図２４の例は、図６に示したプログラムにおける分岐６０１において条件が成立すると判定された場合である。この例においては、最終的にパス条件２４５０が生成される。このパス条件を簡約化した簡約化パス条件を満たす充足値が無いと判断されると、このパス条件についてはテストケースを生成しない。
【００７９】
図２５の例は、図６に示したプログラムにおける分岐６０１において条件が成立しないと判定され、分岐６０２において条件が成立すると判定され、分岐６０４において条件が成立すると判定された場合である。この例においては、最終的にパス条件２５５０が生成される。このパス条件を簡約化した簡約化パス条件を満たす充足値が有ると判断されたとすると、例えば、図２５におけるテストケース２５５１が生成される。
【００８０】
図２６に、第１テストケース格納部１１７に格納されるデータの一例を示す。図２６の例では、テストケースの識別番号と、テスト入力と、パス条件とが格納される。
【００８１】
図９の説明に戻り、シンボリック実行が完了するとステップＳ５の処理に戻る。ステップＳ５において、未処理の組合せが無いと判断された場合（ステップＳ５：Ｎｏルート）、実行制御部１０６は、除去部１１８に処理を要求する。これに応じ、除去部１１８は、絞り込み処理を実行し（ステップＳ１１）、処理を終了する。絞り込み処理については、図２７及び図２８を用いて説明する。
【００８２】
まず、除去部１１８は、第１テストケース格納部１１７に格納されているテストケースのうち未処理のテストケースが有るか判断する（図２７：ステップＳ１２１）。未処理のテストケースが無い場合（ステップＳ１２１：Ｎｏルート）、元の処理に戻る。未処理のテストケースが有る場合（ステップＳ１２１：Ｙｅｓルート）、除去部１１８は、未処理のテストケースを１つ特定する（ステップＳ１２３）。
【００８３】
除去部１１８は、ステップＳ１２３において特定されたテストケースに含まれるパス条件と同じパス条件を含むテストケースが第２テストケース格納部１１９に格納されているか判断する（ステップＳ１２５）。同じパス条件を含むテストケースが第２テストケース格納部１１９に格納されている場合（ステップＳ１２５：Ｙｅｓルート）、重複するテストケースが存在するということなので、ステップＳ１２１の処理に戻る。
【００８４】
一方、同じパス条件を含むテストケースが第２テストケース格納部１１９に格納されていない場合（ステップＳ１２５：Ｎｏルート）、除去部１１８は、ステップＳ１２３において特定されたテストケースを第２テストケース格納部１１９に追加する（ステップＳ１２７）。そしてステップＳ１２１の処理に戻る。
【００８５】
以上のような処理を実行すれば、第１テストケース格納部１１７に格納されている余分なテストケースを除去できるようになる。
【００８６】
図２８に、第２テストケース格納部１１９に格納されるデータの一例を示す。図２８の例では、テストケースの識別番号と、テスト入力と、パス条件とが格納される。図２８に示したテストケースは、図２６に示したテストケースから一部のテストケースを除去したものである。図２６に示したテストケースと比較すると、テストケース４乃至６及びテストケース８が除去されている。これは、テストケース４のパス条件はテストケース１のパス条件と同じであり、テストケース５のパス条件はテストケース２のパス条件と同じであり、テストケース６のパス条件はテストケース３のパス条件と同じであり、テストケース８のパス条件はテストケース１又は４のパス条件と同じであるからである。
【００８７】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明したテストケース生成装置１の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００８８】
また、上で説明した各テーブルの構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００８９】
なお、上では自由シンボル変数が１つである組合せだけを示したが、自由シンボル変数の数は１つずつには限られない。自由シンボル変数の数は２以上であってもよい。
【００９０】
また、第２テストケース格納部１１９を設けなくてもよい。この場合には、除去部１１８が、第１テストケース格納部１１７に格納されているテストケースの一部を除去すればよい。
【００９１】
なお、上で述べたテストケース生成装置１は、コンピュータ装置であって、図２９に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００９２】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００９３】
本実施の形態に係るテストデータ生成方法は、（Ａ）シンボリック実行を繰り返し行うことにより得られる複数のパス条件の各々について、当該パス条件に含まれるシンボル変数の一部に固定値を代入することにより当該パス条件を簡約化した簡約化パス条件を生成し、（Ｂ）生成された複数の簡約化パス条件の各々について、当該簡約化パス条件を満たすシンボル変数の値を算出すると共に、算出された当該値と固定値と簡約化する前のパス条件とを含むテストデータを生成し、データ格納部に格納し、（Ｃ）データ格納部において同じパス条件を含むテストデータが重複しないように、データ格納部に格納されているテストデータの一部を削除する処理を含む。
【００９４】
このようにすれば、同じパスについて生成されるテストデータは、たとえ簡約化パス条件を満たすシンボル変数の値と固定値との組合せが異なっていたとしても、簡約化する前のパス条件が同じになる。よって、上で述べたようにすれば、余分なテストデータを除去できるようになる。また、簡約化したパス条件を満たすシンボル変数の値を求める処理を行うので、計算量を抑制できるようになる。
【００９５】
また、本テストデータ生成方法が、（Ｄ）固定値が代入されない第１のシンボル変数と固定値が代入される第２のシンボル変数との組合せを複数生成する処理をさらに含むようにしてもよい。そして、上で述べた簡約化パス条件を生成する処理において、（ａ１）当該複数の組合せの各々についてシンボリック実行を行うようにしてもよい。このようにすれば、プログラムにおけるパスを網羅するように繰り返しシンボリック実行を行えるようになる。
【００９６】
また、上で述べた簡約化パス条件を生成する処理において、（ａ２）パス条件に含まれる第２のシンボル変数に固定値を代入し、パス条件に含まれる少なくともいずれかの論理式が成立しないか判定し、（ａ３）パス条件に含まれる少なくともいずれかの論理式が成立しないと判定された場合に、充足値が存在しない簡約化パス条件を生成し、（ａ４）パス条件に含まれる論理式がいずれも成立すると判定された場合に、パス条件に含まれる第２のシンボル変数に固定値を代入することにより簡約化した簡約化パス条件を生成するようにしてもよい。このようにすれば、到達することができるパスについてのみテストデータを生成できるようになる。
【００９７】
また、上で述べた固定値は、シンボリック実行の対象になるプログラムにおいて宣言されているシンボル変数の型に従う値であってもよい。このようにすれば、シンボリック実行を問題なく行うことができるようになる。
【００９８】
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００９９】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１００】
（付記１）
シンボリック実行を繰り返し行うことにより得られる複数のパス条件の各々について、当該パス条件に含まれるシンボル変数の一部に固定値を代入することにより当該パス条件を簡約化した簡約化パス条件を生成し、
生成された複数の簡約化パス条件の各々について、当該簡約化パス条件を満たすシンボル変数の値を算出すると共に、算出された当該値と前記固定値と簡約化する前のパス条件とを含むテストデータを生成し
生成された前記テストデータの一部において同じパス条件を含むテストデータが重複しないように削除する
処理をコンピュータに実行させるためのテストデータ生成プログラム。
【０１０１】
（付記２）
固定値が代入されない第１のシンボル変数と固定値が代入される第２のシンボル変数との組合せを複数生成する
処理をさらに前記コンピュータに実行させ、
前記簡約化パス条件を生成する処理において、
当該複数の組合せの各々についてシンボリック実行を行う
ことを特徴とする付記１記載のテストデータ生成プログラム。
【０１０２】
（付記３）
前記簡約化パス条件を生成する処理において、
前記パス条件に含まれる前記第２のシンボル変数について、前記パス条件に含まれる少なくともいずれかの論理式が成立しないか判定し、
前記パス条件に含まれる論理式がいずれも成立すると判定された場合に、前記パス条件に含まれる前記第２のシンボル変数に固定値を代入することにより簡約化した簡約化パス条件を生成する
ことを特徴とする付記２記載のテストデータ生成プログラム。
【０１０３】
（付記４）
前記固定値は、シンボリック実行の対象になるプログラムにおいて宣言されているシンボル変数の型に従う値である
ことを特徴とする付記１乃至３のいずれか１つ記載のテストデータ生成プログラム。
【０１０４】
（付記５）
シンボリック実行を繰り返し行うことにより得られる複数のパス条件の各々について、当該パス条件に含まれるシンボル変数の一部に固定値を代入することにより当該パス条件を簡約化した簡約化パス条件を生成し、
生成された複数の簡約化パス条件の各々について、当該簡約化パス条件を満たすシンボル変数の値を算出すると共に、算出された当該値と前記固定値と簡約化する前のパス条件とを含むテストデータを生成し
生成された前記テストデータにおいて同じパス条件を含むテストデータが重複しないように削除する
処理をコンピュータが実行するテストデータ生成方法。
【０１０５】
（付記６）
シンボリック実行を繰り返し行うことにより得られる複数のパス条件の各々について、当該パス条件に含まれるシンボル変数の一部に固定値を代入することにより当該パス条件を簡約化した簡約化パス条件を生成する第１処理部と、
生成された複数の簡約化パス条件の各々について、当該簡約化パス条件を満たすシンボル変数の値を算出すると共に、算出された当該値と前記固定値と簡約化する前のパス条件とを含むテストデータを生成する第２処理部と、
生成された前記テストデータにおいて同じパス条件を含むテストデータが重複しないように削除する第３処理部と
を有するテストデータ生成装置。
【符号の説明】
【０１０６】
１  テストケース生成装置    １０１  プログラム格納部
１０２  ドライバ格納部    １０３  変数格納部
１０４  制御部    １０５  固定データ計算部
１０６  実行制御部    １０７  固定データ格納部
１０８  変換部    １０９  代入部
１１０  簡約化部    １１１  簡約化データ格納部
１１２  シンボリック実行部    １１３  実行エンジン
１１４  パス条件計算部    １１５  テスト入力生成部
１１６  テストケース生成部    １１７  第１テストケース格納部
１１８  除去部    １１９  第２テストケース格納部
【図１】
2014153908.tif 000003
【図２】
2014153908.tif 000004
【図３】
2014153908.tif 000005
【図４】
2014153908.tif 000006
【図５】
2014153908.tif 000007
【図６】
2014153908.tif 000008
【図７】
2014153908.tif 000009
【図８】
2014153908.tif 000010
【図９】
2014153908.tif 000011
【図１０】
2014153908.tif 000012
【図１１】
2014153908.tif 000013
【図１２】
2014153908.tif 000014
【図１３】
2014153908.tif 000015
【図１４】
2014153908.tif 000016
【図１５】
2014153908.tif 000017
【図１６】
2014153908.tif 000018
【図１７】
2014153908.tif 000019
【図１８】
2014153908.tif 000020
【図１９】
2014153908.tif 000021
【図２０】
2014153908.tif 000022
【図２１】
2014153908.tif 000023
【図２２】
2014153908.tif 000024
【図２３】
2014153908.tif 000025
【図２４】
2014153908.tif 000026
【図２５】
2014153908.tif 000027
【図２６】
2014153908.tif 000028
【図２７】
2014153908.tif 000029
【図２８】
2014153908.tif 000030
【図２９】
2014153908.tif 000031