"データベースDBに格納されているデータの読み出し操作を伴う機能性テストを実施するためのテストデータを生成するテストデータ生成装置であって、テストケースを格納するテストケース記憶手段と、設計情報として、ソフトウェアの入力値の定義域を表す入力値定義、ソフトウェアの処理の流れを表す処理フロー図、データベースの設計情報であるDB定義を取得し、入力変数、DBテーブル変数、及び該ソフトウェアの特定の振る舞いを引き起こすようにテストデータが満たすべき条件である制約を抽出し、前記テストケース記憶手段に格納するテストケース抽出手段と、前記テストケース記憶手段から取得した、DBテーブル変数のレコード件数に関する制約を解き、該DBテーブル変数のレコード件数を決定し、該レコード件数分のDBレコード変数を生成し、前記テストデータ記憶手段に格納するDBレコード件数決定手段と、前記テストケース記憶手段から取得した、文字列型変数同士の包含関係に関する制約から、文字列長に関する制約を導出し、文字列型変数の文字列長と整数型変数に関する制約を解き、文字列長変数と整数型変数を前記テストケース記憶手段に格納する整数文字列長決定手段と、前記テストケース記憶手段から取得した文字列型変数に関する制約を解き、文字列型変数を構成する文字の値を決定し、前記テストケース記憶手段に格納する文字決定手段と、前記テストケース記憶手段に格納されている前記入力変数、前記DBテーブル変数をテストデータとして出力する出力手段と、を有し、前記テストケース抽出手段は、前記入力値定義及び前記処理フロー図から入力値に対する制約を抽出し、該処理フロー図のDB検索条件から、検索ヒット数、入力値、DB初期状態依存関係に関する制約を抽出し、前記DB定義よりDB初期状態に対する制約を抽出する手段を含み、前記DBレコード件数決定手段は、生成された前記DBレコード変数を取得する手段と、ユーザから前記DB検索条件に一致しないレコードの件数を取得する手段と、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約のうち、前記DB検索条件に一致しない制約をユーザにより指定された前記件数分複製する手段と、複製された制約の比較演算子を否定したものに置換する手段と、DBテーブル変数を生成する手段と、前記比較演算子を複製した制約に含まれるカラム全称参照を、当該カラムに対応する生成された前記DBテーブル変数への参照に置換した制約を生成し、前記テストケース記憶手段に格納する手段と、を含むことを特徴とするテストデータ生成装置。前記DBレコード件数決定手段は、入れ子の配列に相当する複雑なDBテーブルのレコード群を検出した場合に、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約に含まれる不等式で表されたDBテーブルのレコード群の件数に関する制約を選択し、連立不等式として解くことでDBテーブル変数のDBレコード件数を決定する手段を含み、前記整数文字列長決定手段は、入れ子の配列に相当する複雑なDBテーブルのレコード群を検出した場合に、前記テストケース抽出手段で抽出された前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約、前記DB初期状態に対する制約のいずれかに含まれる、不等式で表された文字列の長さに関する制約を選択し、連立不等式として解くことで配列の長さを決定する手段を含む請求項1記載のテストデータ生成装置。前記整数文字列長決定手段は、前記DB初期状態に対する制約のうち、DBレコードの主キー、外部キーに関する制約を選び、整数変数同士比較に変換した制約、前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約、前記DB初期状態に対する制約のいずれかに含まれる、不等式で表された整数に関する制約を選択し、選択された整数に関する制約を連立不等式として解き、制約群を満たす値を求める手段を含む請求項2記載のテストデータ生成装置。前記文字決定手段は、前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約のいずれかに含まれる、文字列変数同士の包含関係に基づいて、該文字列変数同士の対応する位置に存在する文字がそれぞれ一致する、または、不一致となる文字を前記文字の値と決定する手段を含む請求項1記載のテストデータ生成装置。前記文字決定手段は、前記テストケース記憶手段の変数集合から文字型変数を取得し、該文字型変数の文字列長変数の値分だけ文字型変数を生成し、該文字型変数のシンボルに全ての文字型変数で異なる一意の記号を割り当てる手段と、前記テストケース記憶手段から文字列親子ノードのリストを読み込み、文字列親ノードと文字列子ノードの文字列比較演算子の種類に応じて文字型変数ペアリストを生成し、該文字列比較演算子、及び、文字型変数ペアが文字型変数同士、文字列変数と定数文字同士、定数文字同士の各種別に応じて、文字型変数を揃える処理、文字型変数値を定数文字に置き換える処理、文字型変数値を定数文字と異なる文字に置き換える処理、または、定数同士が等価ではない場合は、テストデータを生成することが不可能であることを示すテストデータ生成不可フラグを出力する処理、のいずれかを行う手段と、を含む請求項4記載のテストデータ生成装置。データベースDBに格納されているデータの読み出し操作を伴う機能性テストを実施するためのテストデータを生成するテストデータ生成方法であって、テストケース抽出手段が、設計情報として、ソフトウェアの入力値の定義域を表す入力値定義、ソフトウェアの処理の流れを表す処理フロー図、データベースの設計情報であるDB定義を取得し、入力変数、DBテーブル変数、及び該ソフトウェアの特定の振る舞いを引き起こすようにテストデータが満たすべき条件である制約を抽出し、テストケース記憶手段に格納するテストケース抽出ステップと、DBレコード件数決定手段が、前記テストケース記憶手段から取得した、DBテーブル変数のレコード件数に関する制約を解き、該DBテーブル変数のレコード件数を決定し、該レコード件数分のDBレコード変数を生成し、前記テストデータ記憶手段に格納するDBレコード件数決定ステップと、整数文字列長決定手段が、前記テストケース記憶手段から取得した、文字列型変数同士の包含関係に関する制約から、文字列長に関する制約を導出し、文字列型変数の文字列長と整数型変数に関する制約を解き、文字列長変数と整数型変数を前記テストケース記憶手段に格納する整数文字列長決定ステップと、文字決定手段が、前記テストケース記憶手段から取得した文字列型変数に関する制約を解き、文字列型変数を構成する文字の値を決定し、前記テストケース記憶手段に格納する文字決定ステップと、出力手段が、前記テストケース記憶手段に格納されている前記入力変数、前記DBテーブル変数をテストデータとして出力する出力ステップと、を行い、前記テストケース抽出ステップにおいて、前記入力値定義及び前記処理フロー図から入力値に対する制約を抽出し、該処理フロー図のDB検索条件から、検索ヒット数、入力値、DB初期状態依存関係に関する制約を抽出し、前記DB定義よりDB初期状態に対する制約を抽出し、前記DBレコード件数決定ステップにおいて、生成された前記DBレコード変数を取得するステップと、ユーザから前記DB検索条件に一致しないレコードの件数を取得するステップと、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約のうち、前記DB検索条件に一致しない制約をユーザにより指定された前記件数分複製するステップと、複製された制約の比較演算子を否定したものに置換するステップと、DBテーブル変数を生成するステップと、前記比較演算子を複製した制約に含まれるカラム全称参照を、当該カラムに対応する生成された前記DBテーブル変数への参照に置換した制約を生成し、前記テストケース記憶手段に格納するステップと、を含むことを特徴とするテストデータ生成方法。前記DBレコード件数決定ステップにおいて、入れ子の配列に相当する複雑なDBテーブルのレコード群を検出した場合に、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約に含まれる不等式で表されたDBテーブルのレコード群の件数に関する制約を選択し、連立不等式として解くことでDBテーブル変数のDBレコード件数を決定し、前記整数文字列長決定ステップにおいて、入れ子の配列に相当する複雑なDBテーブルのレコード群を検出した場合に、前記テストケース抽出手段で抽出された前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約、前記DB初期状態に対する制約のいずれかに含まれる、不等式で表された文字列の長さに関する制約を選択し、連立不等式として解くことで配列の長さを決定する請求項6記載のテストデータ生成方法。前記整数文字列長決定ステップにおいて、前記DB初期状態に対する制約のうち、DBレコードの主キー、外部キーに関する制約を選び、整数変数同士比較に変換した制約、前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約、前記DB初期状態に対する制約のいずれかに含まれる、不等式で表された整数に関する制約を選択し、選択された整数に関する制約を連立不等式として解き、制約群を満たす値を求める手段を含む請求項7記載のテストデータ生成方法。前記文字決定ステップにおいて、前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約のいずれかに含まれる、文字列変数同士の包含関係に基づいて、該文字列変数同士の対応する位置に存在する文字がそれぞれ一致する、または、不一致となる文字を前記文字の値と決定する請求項6記載のテストデータ生成方法。前記文字決定ステップにおいて、前記テストケース記憶手段の変数集合から文字列型変数を取得し、該文字列型変数の文字列長変数の値分だけ文字型変数を生成し、該文字型変数のシンボルに全ての文字型変数で異なる一意の記号を割り当てるステップと、前記テストケース記憶手段から文字列親子ノードのリストを読み込み、文字列親ノードと文字列子ノードの文字列比較演算子の種類に応じて文字型変数ペアリストを生成し、該文字列比較演算子、及び、文字型変数ペアが文字型変数同士、文字型変数と定数文字同士、定数文字同士の各種別に応じて、文字型変数を揃える処理、文字型変数値を定数文字に置き換える処理、文字型変数値を定数文字と異なる文字に置き換える処理、または、定数同士が等価ではない場合は、テストデータを生成することが不可能であることを示すテストデータ生成不可フラグを出力する処理、のいずれかを行うステップと、を含む請求項9記載のテストデータ生成方法。しかしながら、上記従来の第1の技術は、DBの初期状態DBテーブル型のデータを生成することができない。また、DB検索条件を設計書から読み取っていないため特定のテストのパスを通すために入力値とDB初期状態が満たすべき制約に抜けがある。また、複雑なデータ構造配列や変数の複雑な相互依存関係があった場合に適切なテストデータが生成できない、という問題がある。また、仮に、従来の第1の技術と第2の技術を組み合わせて用いて入力値とDB初期状態をそれぞれ個別に生成し、検索結果の件数が上限値、下限値で指定される範囲に収まるまで繰り返す方法もあるが、この方法では実用的な時間内で解くことができないという問題がある。また、レコードが特定の件数ヒットするように入力値とDBレコード値を準備した後に、負荷テストのため、そこに上記第2の技術で生成したレコードを大量に入れると、ヒットするレコード件数が変わる可能性があり、処理の分岐が制御できなくなるという問題もある。また、第3の技術では、フロー図を扱うことができないため、特定のテストパスを通す入力値、DB初期状態を生成できない。さらに、DB初期状態に関する必要不可欠な制約例えば、主キーに関する制約で抜けがある。また、文字列変数同士の包含関係を扱うことができない、という問題がある。また、上記の従来技術では、整数変数同士の比較、文字列変数同士の包含関係等価、前方一致、部分一致、後方一致、非等価、後方不一致、部分不一致等の複雑な変数相互の依存関係を扱うテストデータを生成できないという問題がある。本発明は、上記の点に鑑みなされたもので、入力値定義、処理フロー図、DE定義などのソフトウェア設計情報を入力とし、負荷テスト用のDBレコードを生成でき、かつ、DB検索処理結果のレコード件数を制御可能なテストデータを生成するテストデータ生成装置及び方法及びプログラムを提供することを目的とする。上記の課題を解決するために、本発明は、データベースDBに格納されているデータの読み出し操作を伴う機能性テストを実施するためのテストデータを生成するテストデータ生成装置であって、テストケースを格納するテストケース記憶手段と、設計情報として、ソフトウェアの入力値の定義域を表す入力値定義、ソフトウェアの処理の流れを表す処理フロー図、データベースの設計情報であるDB定義を取得し、入力変数、DBテーブル変数、及び該ソフトウェアの特定の振る舞いを引き起こすようにテストデータが満たすべき条件である制約を抽出し、前記テストケース記憶手段に格納するテストケース抽出手段と、前記テストケース記憶手段から取得した、DBテーブル変数のレコード件数に関する制約を解き、該DBテーブル変数のレコード件数を決定し、該レコード件数分のDBレコード変数を生成し、前記テストデータ記憶手段に格納するDBレコード件数決定手段と、前記テストケース記憶手段から取得した、文字列型変数同士の包含関係に関する制約から、文字列長に関する制約を導出し、文字列型変数の文字列長と整数型変数に関する制約を解き、文字列長変数と整数型変数を前記テストケース記憶手段に格納する整数文字列長決定手段と、前記テストケース記憶手段から取得した文字列型変数に関する制約を解き、文字列型変数を構成する文字の値を決定し、前記テストケース記憶手段に格納する文字決定手段と、前記テストケース記憶手段に格納されている前記入力変数、前記DBテーブル変数をテストデータとして出力する出力手段と、を有し、前記テストケース抽出手段は、前記入力値定義及び前記処理フロー図から入力値に対する制約を抽出し、該処理フロー図のDB検索条件から、検索ヒット数、入力値、DB初期状態依存関係に関する制約を抽出し、前記DB定義よりDB初期状態に対する制約を抽出する手段を含み、前記DBレコード件数決定手段は、生成された前記DBレコード変数を取得する手段と、ユーザから前記DB検索条件に一致しないレコードの件数を取得する手段と、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約のうち、前記DB検索条件に一致しない制約をユーザにより指定された前記件数分複製する手段と、複製された制約の比較演算子を否定したものに置換する手段と、DBテーブル変数を生成する手段と、前記比較演算子を複製した制約に含まれるカラム全称参照を、当該カラムに対応する生成された前記DBテーブル変数への参照に置換した制約を生成し、前記テストケース記憶手段に格納する手段と、を含む。また、本発明は、前記DBレコード件数決定手段に、入れ子の配列に相当する複雑なDBテーブルのレコード群を検出した場合に、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約に含まれる不等式で表されたDBテーブルのレコード群の件数に関する制約を選択し、連立不等式として解くことでDBテーブル変数のDBレコード件数を決定する手段を含み、前記整数文字列長決定手段に、入れ子の配列に相当する複雑なDBテーブルのレコード群を検出した場合に、前記テストケース抽出手段で抽出された前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約、前記DB初期状態に対する制約のいずれかに含まれる、不等式で表された文字列の長さに関する制約を選択し、連立不等式として解くことで配列の長さを決定する手段を含む。また、本発明は、前記整数文字列長決定手段には、前記DB初期状態に対する制約のうち、DBレコードの主キー、外部キーに関する制約を選び、整数変数同士比較に変換した制約、前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約、前記DB初期状態に対する制約のいずれかに含まれる、不等式で表された整数に関する制約を選択し、選択された整数に関する制約を連立不等式として解き、制約群を満たす値を求める手段を含む。また、本発明は、前記文字決定手段に、前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約のいずれかに含まれる、文字列変数同士の包含関係に基づいて、該文字列変数同士の対応する位置に存在する文字がそれぞれ一致する、または、不一致となる文字を前記文字の値と決定する手段を含む。また、本発明は、前記文字決定手段に、前記テストケース記憶手段の変数集合から文字列型変数を取得し、該文字列型変数の文字列長変数の値分だけ文字列型変数を生成し、該文字列型変数のシンボルに全ての文字列型変数で異なる一意の記号を割り当てる手段と、前記テストケース記憶手段から文字列親子ノードのリストを読み込み、文字列親ノードと文字列子ノードの文字列比較演算子の種類に応じて文字型変数ペアリストを生成し、該文字列比較演算子、及び、文字列型変数ペアが文字列型変数同士、文字列変数と定数文字同士、定数文字同士の各種別に応じて、文字列型変数を揃える処理、文字列型変数値を定数文字に置き換える処理、文字列型変数値を定数文字と異なる文字に置き換える処理、または、定数同士が等価ではない場合は、テストデータを生成することが不可能であることを示すテストデータ生成不可フラグを出力する処理、のいずれかを行う手段と、を含む。上記のように、本発明によれば、DB検索を行うプログラムに対して、検索条件に一致するレコードに加えて、一致しないレコードをユーザが指定した数だけ生成することが可能であるため、負荷テスト用のDBレコードに加えて、DB検索処理結果のレコード件数を制御することができる。また、本発明では、検索結果が正しい意図したDBレコードのみがヒットすることを確認するためのテストデータを生成できる。すなわち、DBレコード検索結果の件数によって処理が分岐するプログラムにおいて、検索結果件数を上限値、下限値で指定される範囲に収め、処理の分岐を制御できるような入力値とDB初期状態の組合せを実用的な時間内で特定することができる。更に、入れ子配列のような複雑なデータ構造を含むようなソフトウェアであっても、適切にテストデータを生成することができる。また、整数変数同士の比較、文字列変数同士の包含関係等価、前方一致、部分一致、後方一致、非等価、前方一致、後方不一致、部分不一致等の変数の複雑な相互関係を扱うテストデータを生成することができる。以下図面と共に、本発明の実施の形態を説明する。まず、本明細書で使用する用語について説明する。処理フロー図:ソフトウェア設計情報の一種であり、振る舞いソフトウェアの処理の流れを表す。処理フロー図には、フローチャート、UMLアクティビティ図等の種類がある。処理フロー図の例を図1に示す。処理フロー図には、ノードとエッジからなる処理フロー図、ノード、ノードの内容、DB検索条件、検索結果レコード件数、Where句条件群、次ノード接続エッジ群、エッジ、ガード条件を含む。テストパス:処理フロー図の中の特定のパスである。経路網羅性を確保するためには、処理フロー図の中の全てのテストパスに対し、テストパスを通す適切なテストデータを作成する必要がある。テストパスの例を図2に示す。テストパスは、ノードとエッジの情報からなる。入力値定義:ソフトウェア設計情報の一種であり、ソフトウェアの入力値の定義域を表す。入力値定義の例を図3に示す。DB定義:データベース設計情報であり、テーブル名、各テーブルにおけるカラム名、カラムの型、カラムの値の定義域が記述されている。DB定義の例を図4に示す。DB定義は、定義対象のDBテーブル、DBテーブルのレコード、カラム、型と定義域、整数定義域、文字列定義息、カラムの種類、参照先カラムを含む。制約:ソフトウェアの特定の振る舞いを引き起こせるテストデータが満たすべき複数の条件のうちの1つであり、制約の種類は、図5に示すように、1入力値に対する制約:入力値定義、処理フロー図より取得;2検索ヒット数、入力値、DB初期状態の対応に関する制約:処理フロー図に記述されたDB検索条件より取得;3DB初期状態に対する制約:DB定義より取得;があり、上記の1~3に含まれる各制約は図6に示すようにBNFで定義されている。制約は、設計情報に含まれる後述するテストケース抽出部で抽出される制約図6Aと、テストデータ生成処理中に導出される制約図6Bがある。制約には、整数制約、文字列制約、一意制約がある。整数制約には、整数算術式、整数比較演算子、整数算術式に関する制約が含まれる。文字列制約には、文字列因子、文字列比較演算子、文字列因子に関する制約が含まれる。一意制約は、distinctカラム全称参照で表される。図7は、本発明の一実施の形態におけるテストデータ生成装置の構成を示す。テストデータ生成装置100は、ユーザ端末10と接続されている。テストデータ生成装置100は、テストケース抽出部110、DBレコード件数決定部120、整数文字列長決定部130、文字決定部140、テストデータ出力部150、テストケース記憶部160から構成される。上記の構成のうち、テストケース抽出部110、DBレコード件数決定部120、整数文字列長決定部130、文字決定部140、テストデータ出力部150は、CPU内で機能し、テストケース記憶部160は、メモリ、ハードディスク等の記憶媒体である。テストケース抽出部110は、ユーザ端末10からXML形式の設計情報を取得して、当該設計情報から入力変数、DBテーブル変数、制約を抽出し、テストケースaとしてテストケース記憶部160に格納する。テストケースaは、設計情報の図1の処理フロー図、図2のテストパス、図3の入力値定義、図4のDB定義、抽出された入力変数、DBテーブル変数、制約図6Aを含む。DBレコード件数決定部120は、テストケース記憶部160からテストケースaを読み出して、当該テストケースaに含まれるDBテーブル変数からDBレコードの件数の値を決定する。さらに、前述のDB検索条件から抽出された図5の2の制約の論理積の各項の条件の否定に対して、決定された件数分のDBレコード変数を生成する。テストケースaをコピーし、そのメンバであるDBテーブル変数のレコード件数にその値を設定したものをテストケースbとし、当該テストケースbをテストケース記憶部160に格納する。また、DBテーブル変数のカラムに関する制約を各レコードのフィールドに対して展開する。整数文字列長決定部130は、テストケース記憶部160からテストケースb変数、文字列同士の包含関係に関する制約図6Aを読み出して、文字列型変数同士の包含関係に関する制約から文字列長に関する制約図6Bを導出し、文字列型変数の文字列長に関する制約と整数型変数に関する制約図6Aを解き、それらの値を決定し、それらの値とテストケースbをコピーした内容をテストケースcとし、当該テストケースcをテストケース記憶部160に格納する。文字決定部140は、テストケース記憶部160からテストケースcを読み出して、文字列型変数に関する制約図6Aを解き、文字列変数同士の包含関係に基づいて文字列変数同士の対応する位置の文字がそれぞれ一致する、または、不一致になるような文字を決定する。決定された文字値決定済み変数と文字型変数とテストケースcをコピーした内容をテストケースdとし、当該テストケースdをテストケース記憶部160に格納する。テストデータ出力部150は、テストケース記憶部160から入力変数、DBテーブル変数の値をテキスト形式でユーザ端末10に出力する。テストケース記憶部160は、図8Aに示すような上記の各構成から出力される中間データとしてのテストケース、文字列包含関係木、文字列親子ノード及び図6に示す制約等を格納する。テストケース抽出部110からは、テストケースaとして、{制約、変数}が格納される。DBレコード件数決定部120からは、テストケースbとして、{テストケースaDBテーブル変数、DBレコード件数変数、DBレコード変数、DBフィールド変数}が格納される。整数文字列長決定部130からは、テストケースcとして、{テストケースb文字列型変数、文字列長変数、整数型変数、文字列包含関係木、文字列親子ノード}が格納される。文字決定部140からはテストケースdとして、{テストケースc文字型変数、値決定済み変数}が格納される。また、上記のテストケースの他、図8Bの文字列包含関係木、図8Cに示す文字列親子ノード、DBレコード件数決定部120で参照される図8Dに示す文字列比較演算子テーブル、図8Eに示す整数比演算子not変換テーブルが格納される。図8Dの文字列比較演算子テーブルは、前方一致、部分一致、後方一致、等価の各演算子が通常比較、否定比較のいずれであるかを判定するためのテーブルである。図8Eの整数比較演算子not変換テーブルは、>を<=等の否定形に変換するためのテーブルである。以下に、上記の構成における動作を詳細に説明する。最初に、テストデータ生成装置100の全体の動作を説明する。図9は、本発明の一実施の形態におけるテストデータ生成装置の全体処理のフローチャートである。ステップ110テストケース抽出部110において、設計情報を取得する。設計情報は、DB定義DBテーブル変数、DBテーブルの各カラムに対する制約、DBテーブルの主キー、外部キー;入力値定義;処理フロー図;が含まれる。当該設計情報から変数入力変数、DBテーブル変数及び、制約を抽出し、これらをテストケースaとしてテストケース記憶部160に格納する。当該ステップの詳細については、図10にて後述する。ステップ120DBレコード件数決定部120において、テストケース記憶部160からテストケースaを読み込み、DBテーブル変数のレコード件数に関する制約を解き、DBテーブル変数のレコード件数を決定する。図52の制約の論理積の各項の条件の否定に対して決定されたレコード件数分のDBレコード変数を生成する、DB、テーブル変数のカラムに関する制約を各レコードのフィールドに対して展開する。テストケースaをコピーし、そのメンバであるDBテーブル変数のレコード件数にDBレコード変数を設定したものをテストケースbとし、当該テストケースbをテストケース記憶部160に格納する。テストケースbとしてテストケース記憶部160に格納する。詳細については図16で後述する。ステップ130整数文字列長決定部130において、テストケース記憶部160からテストケースbを取得し、文字列型変数同士の包含関係に関する制約から文字列長に関する制約を導出し、テストケース記憶部160の制約集合に追加した後、ステップ120で導出された文字列型変数の文字列長とステップ110で抽出された整数型変数に関する制約を解き、それぞれの値を決定する。テストケースbをコピーし、文字列型の変数の文字列長変数の値と、整数型変数の値を設定したものをテストケースcとしてテストケース記憶部160に格納する。ステップ140テストケース記憶部160からテストケースcを取得し、文字決定部140において、文字列型変数に関する制約を解き、文字列型変数を構成する文字の値を決定し、テストケースcをコピーしたものに設定し、テストケースdとしてテストケース記憶部160に格納する。詳細は図20で後述する。ステップ150テストデータ出力部150において、テストケース記憶部160のテストケースdから入力変数図8A,9行目、DBテーブル変数図8A,5行目の値を取得してユーザ端末10にダンプ出力する。上記のステップ120,130では、入れ子の配列に相当する複雑なデータ構造DBテーブルのレコード群、文字列を検出した際に、入れ子でいう外側の配列の長さDBテーブルのレコード群の件数、文字列の長さに関する制約を、図5に示す条件1、2、3から選び出して、それらを優先して解くことで配列の要素より先に配列の長さを決定する。次に、上記のステップ110のテストケース抽出部110における設計情報から変数、制約を抽出する処理について説明する。図10は、本発明の一実施の形態における図7のS110の詳細フローチャートである。ステップ210テストケース抽出部110は、設計情報からDB定義図4を読み込み、変数、制約を抽出する。詳しくは、DB定義から、DBテーブル変数とDBテーブルの各カラムに対する制約図5の3を抽出し、変数と制約を出力する。ステップ220次に、設計情報から、入力値定義図3を読み込み、変数、制約を抽出する。詳しくは、入力値定義から入力変数と入力値に対する制約図5、1を抽出する。ステップ230次に、処理フロー図図1を読み込み、C1カバレッジを満たすよう、全てのテストパス図2を抽出する。ここで、テストパスの抽出方法を説明する。テストパスの抽出は、テストケース抽出部110内に具備される経路抽出機能で実行する。経路抽出機能は、読み込んだフロー図からテストすべき実行経路を抽出するために、ループ最大通過回数で指定された回数のループを通るような経路のリストを生成する。経路抽出機能は、フロー図内の全ノード情報ノードID,ノード内テキスト、次展開エッジ群と、エッジ情報エッジID,始点接続ノードID,終点接続ノードID,遷移条件を読み込み、経路リストを生成する。当該経路リスト生成処理を以下に示す。図11は、本発明の一実施の形態における経路リスト生成処理のフローチャートである。ステップ2010経路抽出部130は、読み込まれた開始エッジを次展開エッジ群用スタックに積む。なお、当該経路抽出機能に内部にバッファを備え、当該バッファにスタックの領域を設けるものとする。ステップ2020次展開エッジ群用スタックは空であるかを判定し、空である場合は当該処理を終了する。ステップ2030次展開エッジ群用スタックの最上位にある次展開エッジ群に要素があるかを判定し、ない場合はステップ2120に移行する。ステップ2040次展開エッジ群スタックの最上位にある要素現在次展開エッジ群から、ひとつエッジを得て現在エッジとする。ステップ2050現在次展開エッジ群から現在エッジを取り除く。ステップ2060経路エッジ用スタックに積まれているエッジの列内のループ出現回数を計算する。当該処理は、探索途中経路に存在する現在ループ経路の数ループ出現回数を計算するものである。当該処理の詳細については図12で後述する。ステップ2070ループの出現回数ループ最大出現回数がユーザ端末10より入力されたユーザ指定ループ最大通過数に1を加えた値より大きければ、ステップ2020に移行する。当該処理は、探索途中の経路のループ最大出現回数が異常値ユーザ指定ループ最大通過数1を超えたらその経路の探索を打ち切ることである。なお、ループ最大出現回数とは、探索途中経路に含まれる複数のループ経路のうちループ出現回数が最大であるループ経路のループ出現回数である。ステップ2080現在エッジをエッジ用スタックに積み、ループ出現回数をループ出現回数用スタックに積む。ステップ2090現在のエッジのもつ終点ノードIDに基づいて、フロー図からノードを取得し、そのノードのエッジ始点との接続群を取得し、その取得したエッジ始点との接続群を、次展開エッジとして、次展開エッジ群スタックに積む。ステップ2100現在のエッジが終了ノードに接続していない場合はステップ2020に移行する。ステップ2110経路のループ最大出現回数に応じて、上限値、異常値、近傍値とラベルを付与し、経路エッジ用スタックに積まれているエッジの列を出力する。また、上限値、異常値、近傍値のどれにも相当しない経路に関しては出力しない。当該処理の詳細については図13で後述する。ステップ2120次展開エッジ群用スタックをポップする。ステップ2130ポップしたエッジ用スタックが空である場合は、当該処理を終了する。ステップ2140エッジ用スタックとループ出現回数スタックをポップして、処理を終了する。次に、上記の図11のステップ206の経路エッジ用スタックに積まれているエッジの列内の現在ループ経路の出現回数を計算する処理について詳述する。図12は、本発明の一実施の形態における図11のS2060の詳細フローチャートである。ステップ3010経路抽出機能は、バッファから現在エッジを読み込む。ステップ3020経路エッジ用スタックに積まれているエッジの列を読み込む。ステップ3030探索途中経路を生成する。具体的には、経路を複製し、複製した経路を探索途中経路とする。ステップ3040探索途中経路の先頭から、先頭に一番近い現在エッジまでを現在ループ経路が何回出現するか計算する。ステップ3050探索途中経路内で現在ループ経路が何回出現するかループ出現回数を求める。当該ループ出現回数を求める手法として、文献1RSboyerJSMooreAfaststringsearchingalgorithmCommACM20762772等の技術を用いることができる。当該文献1の手法は、文字列照合のアルゴリズムであるが、ひとつのエッジをひとつの文字とみなし、経路エッジの列を文字列とみなせば適用可能である。次に、上記の図11のステップ2110のエッジ用スタックの中身を経路として出力する処理について詳述する。図13は、本発明の一実施の形態における図11のステップ2110の詳細フローチャートである。ステップ4010経路抽出機能は、経路のループ最大出現回数を計算する。具体的には、ループ出現回数用スタックに積まれているループ出現回数の最大値を取得し、ループ最大出現回数とする。ステップ4020ループ最大出現回数Mとユーザ指定ループ最大通過数Nが等しいかM=Nを判定し、等しい場合にはステップ4030に移行し、等しくない場合はステップ4040に移行する。ステップ4030M=Nの場合は上限値ラベルを付与して経路を出力し、当該処理を終了する。M=N以外の場合はステップ4040に移行する。ステップ4040ループ最大出現回数とユーザ指定ループ最大通過数に1を加算した値と等しければM=N1、ステップ4050に移行し、等しくない場合はステップ4060に移行する。ステップ4050M=N1である場合は異常値ラベルを付与して経路を出力し、当該処理を終了する。ステップ4060ループ最大出現回数とユーザ指定ループ最大通過数から1を引いた値とが等しければM=N-1ステップ4070に移行し、等しくなければ当該処理を終了する。ステップ4070M=N-1である場合は近傍値ラベルを付与して経路を出力し、当該処理を終了する。以下、図10の処理の説明に戻る。ステップ240次に、処理フロー図から抽出されたテストパスから、入力値に対する制約図53、処理フロー図のDB検索条件に記述された制約図52を抽出する。入力値に対する制約の制約種類タグに入力条件タグを設定する。DB検索条件に記述された制約の制約種類タグは検索条件タグを設定する。テストパスから制約を抽出する処理については、図14にて後述する。ステップ250上記のステップ210,220,240で抽出された変数及び制約を取得し、これらを纏めた制約集合をメンバとしてもつテストケースオリジナルテストケースaを作成し、テストケース記憶部160に格納する。次に、上記のステップ240のテストパスから制約を抽出する処理について説明する。図14は、本発明の一実施の形態における図10のS240の詳細フローチャートであり、図15は、DB検索条件から制約への変換例を示す。まず、テストパスの各ノードに対して以下の処理を行う。ステップ600テストケース抽出部110は、ステップ230で抽出されたテストパスの各ノードにDB検索条件があるかを、処理フロー図図1を参照して判定し、ある場合にはステップ610に移行し、ない場合は次のノードの処理に移行する。ステップ610ノードにDB検索条件がある場合は、当該DB検索条件のWhere句条件群にある制約を抽出する。図15の例では、設計情報WHEREANDが抽出される。ステップ620DB検索条件の検索結果レコード件数検索ヒット数におけるMincount図1を、MinCountCount制約へと変換して出力する。ここまでの処理をノード数分繰り返す。ステップ630次に、各テストパスの各エッジに対する処理として、テストケースaの処理フロー図図1を参照してエッジガード条件があるかを判定し、ある場合には、エッジガード条件から制約整数制約、文字列制約を抽出する。当該処理をテストパスの各ノードに対して行う。上記の処理から検索ヒット数、入力値、DB初期状態の依存関係に関する制約、DB初期状態に対する制約が抽出される。これにより、処理の分岐を制御できるような条件図5123を設計書から漏れなく抽出して集約しているため、これらの制約を後述する処理により連立不等式に変換し、既存技術で解くことができる。次に、DBレコード件数決定部120における、図9のステップ120のDBレコード件数の値を決定する処理について説明する。図16は、本発明の一実施の形態における図9のS120の詳細フローチャートである。ステップ310DBレコード件数決定部120は、テストケース記憶部160からテストケースaを読み込み、テストケースの各DBテーブル変数に対して以下のステップ370までの処理を行う。ステップ320ユーザから指定されたDBレコード件数デフォルト値を取得する。なお、当該デフォルト値はメモリ図示せずに予め記憶されているものとする。ステップ330ステップ310で読み込んだテストケースaに含まれるDBテーブル変数、制約集合を取得し、制約の中でレコード件数参照を含む制約を全て取得し、出力する。図6の例では、レコード件数参照=Countを出力する。ステップ340上記のレコード件数に関する制約が1つ以上存在する場合は、図8Aに示すテストケースの制約集合の中からDBレコード変数及びDBテーブル変数のレコード件数変数に関する制約を取得する。図8Aの例では、DBレコード変数=IdDBフィールド変数、DBレコード件数変数=Id整数型変数を取得する。DBレコード変数のDBレコード件数に関する制約を解き、レコード件数の値を決定する。このとき、DBレコード変数のレコード件数に関する制約は、整数の不等式となっているため、これらを連立させ連立不等式として既存技術SMTArithmeticTheoryシンプレックス法を用いて解き、制約を満たすレコード件数の値を求める。ステップ360に移行する。ステップ350制約集合にレコード件数に関する制約がない場合は、ユーザ指定DBレコード件数デフォルト値をレコード件数の値として設定する。このとき、テストケースに含まれるテストパスから入力変数に対する制約図53と、DB検索条件に記述された制約図52を抽出する。ステップ360テストケース記憶部160のテストケース領域からDBテーブル変数を取得し、当該DBテーブル変数の件数の値の分だけDBレコード変数を生成し、テストケース領域のDBテーブル変数のメンバとして追加する。ステップ365ステップ360で生成されたDBレコード変数のうち、検索条件に一致しないDBレコード変数を、ユーザが指定した個数だけ生成し、DBテーブル変数のメンバとしてテストケース記憶部160のDBテーブル変数のメンバとして追加する。当該処理により、検索条件で一致するレコードに加えて、一致しないレコードをユーザが指定した数だけ生成することができる。詳細については、図17で後述する。ステップ370テストケース記憶部160から制約集合を取得し、DBテーブルのカラムに対する制約図6Aカラム参照を、DBフィールド変数への制約として展開する。このとき、カラム全称参照∀を含む制約図6Aを選び出し、DBフィールド変数図8Aへの制約として展開する。詳細は図18にて後述する。ステップ380テストケースの各DBテーブル変数に対する上記の処理が終了したら、テストケース記憶部160から制約集合を取得し、外部キーに関する制約をテストケース記憶部160の制約集合に追加する。このとき、カラム存在参照を含む制約を選び出し、DBフィールド変数への制約として展開する。詳細は図19にて後述する。図17は、本発明の一実施の形態における図16のS365の詳細フローチャートである。ステップ1410DBレコード件数決定部120は、DBテーブル変数を取得する。ステップ1420テストケース記憶部160の制約集合図6Aから、制約種類タグが検索条件タグであり、かつ上記で取得したDBテーブル変数に対するDBテーブルのカラムの全称参照が含まれる制約を抽出する。ステップ1430ユーザから指定された不一致DBレコード件数を取得する。ステップ1440ステップ1420で取得したDB検索条件を構成する制約を、ユーザから指定された不一致DBレコード件数分だけ複製し、複製した制約のリストを生成する。ステップ1450複製した制約のリストの制約のうち、ランダムに一つ以上を選び出し、その制約の比較演算子が、文字列比較演算子ならば、図8Dに示す文字列比較演算子テーブル、整数比較演算子ならば図8に示す整数比較演算子not変換テーブルを参照して、その比較演算子を否定notしたものに置換する。ステップ14601つのバリエーションに対するDBレコード変数を1つ生成し、テストケース記憶部160のDBテーブル変数に追加する。ステップ1470ステップ1250において比較演算子を置換した制約に含まれるカラム全称参照を、このカラムに対するDBフィールド変数入力されたDBレコード変数のメンバへの参照に置換する。ステップ1480DBフィールド変数ヘの参照に置換した制約を、テストケース記憶部160内のテーブル変数が属するテストケースの制約集合へ追加する。上記のステップ1450~ステップ1480の処理を、ステップ1440でユーザから指定された件数分複製された各DB検索条件を構成する制約分繰り返す。これにより、各DB検索条件を構成する制約に対応するDBレコード変数が生成されることになる。また、ステップ1470、1480の処理を複製した制約の各制約数分繰り返す。上記の図17の処理により、論理積を構成する項のうち、一つでも条件を満たさなければ検索でヒットしないため、検索条件に合致しないレコードをユーザが指定した数だけ生成することが可能になる。すなわち、負荷テスト用のDBレコードを生成することができ、かつ、DB検索処理結果のレコードの数を制御できるため、ヒットするレコード件数が変わることがない。上記の図16のステップ370のDBテーブルのカラムに対する制約をDBフィールド変数への制約として展開する処理について説明する。図18は、本発明の一実施の形態における図16のS370の詳細フローチャートである。ステップ710DBレコード件数決定部120は、制約集合を取得し、カラム全称参照を含む制約を選び出す。以下の処理を選び出された制約の数だけ繰り返す。ステップ720ステップ710で選び出された制約が一意制約でない場合は、DBテーブルのカラムに対する制約を、DBフィールド変数への制約として展開する。このとき、カラム全称参照図6Aで参照しているDBテーブルに対応するDBテーブル変数のDBレコード件数変数の値図6Aレコード件数参照の分だけ制約を複製する。そして、複製した制約のカラム全称参照部分をDBテーブル変数が保持する各DBレコード変数のカラムに対応するDBフィールド変数で置き換え、DBフィールド変数を含む制約を出力する。ステップ730ステップ710で選び出されたカラム全称参照を含む制約が一意制約であり、カラム型がInt型整数型である場合は、整数型の一意制約をDBフィールド変数への制約として展開する。このとき、distinct∀columXという一意制約に対し、columX、DBフィールド変数をそれぞれfieldX1fieldX2...fieldXnとする。fieldXi>fieldXという整数制約を生成し、x<yという形の整数制約を出力する。ステップ740ステップ710で選び出された制約が一意制約であり、カラム型がString型文字列型である場合は、文字列型の一意制約を、DBフィールド変数への制約として展開する。このとき、カラムに対応する各DBフィールド変数文字列型に対して、id1subStringc1id1subStringc2...idnsubstringcnという文字列制約を追加し、xsubstringcという形の文字列制約を出力する。ここで、c1~cnは定数文字列であり、これらは一意になるように文字列の値を決めておく。例えば、c101、c202などとすればよい。次に、図16のS380の外部キーに関する制約を追加する処理について説明する。図19は、本発明の一実施の形態におけるS380の詳細フローチャートである。ステップ810DBレコード件数決定部120は、テストケース記憶部160からテストケースaを読み込む。ステップ820テストケースaに含まれる制約集合からカラム存在参照を含む制約を選び出す。以下の処理を選び出された制約の数だけ繰り返す。ステップ830各カラム存在参照∃を含む制約のカラム型がInt図6Aである場合は、外部キーに関する制約をDBフィールド変数に対する制約として展開し、xyという形の整数制約を出力する。ここで、制約を展開するとは、入力された整数型外部キーに関する∃columX∃columYという制約に対し、columXcolumYに対応するDBフィールド変数をそれぞれ、fieldX1FieldX2...,fieldXnfiledY1fieldY2...,fieldXmとする。ここで、fieldXianyFieldYという整数制約を生成し、整数変数同士の比較という制約に変形することを指す。ステップ840各カラム存在参照を含む制約のカラム型がString型文字列型図6Aである場合は、文字列型の外部キーに関する制約をDBフィールド変数に対する制約として展開する。この制約の展開とは、入力された文字列型外部キーに関する∃columX∃columYという制約に対し、columXcolumYに対応するDBフィールド変数をそれぞれ、fieldX1fieldX2...filedXnfieldY1fieldY2...fieldXmとする。ここで、fieldXiequalsStringanyFieldY但し、i1~manyFieldYはfieldY1~fieldYmのいずれという整数制約を生成し、文字列変数同士の比較という制約に変形することを指す。上記のDBレコード件数決定部120の、図5の条件3DB初期状態に対する制約に含まれる制約のうち、DBレコードの主キー、外部キーに関する制約を選び出し、整数変数同士の比較、文字列変数同士の比較という種類の制約に変形させることにより、主キー、外部キー制約を、整数型変数同士の比較、文字列型同士の比較という制約に変換する。図5の条件1、条件2の制約と連立させて解いているため、DB定義を満たし、かつ、処理の分岐を制御できるDB初期状態値を生成できる。次に、整数文字列長決定部130の図9のS130の処理について説明する。図20は、本発明の一実施の形態における図9のS130の詳細フローチャートである。ステップ410整数文字列長決定部130は、テストケース記憶部160からテストケースbを読み込む。ステップ420取得したテストケースbに含まれる制約集合から文字列型変数同士の包含関係に関係する文字列制約を選び出す。文字列制約の例を図21aに示す。ステップ430ステップ420で選択された文字列制約における左側の文字列因子を文字列親ノードとし、右側の文字列因子を文字列子ノードとする文字列包含関係木を作成する。文字列演算子別子ノード群は、文字列演算子が図8Dに示す文字列比較演算子テーブルの前方一致、部分一致、後方一致、等価に登録されている順に並べ、文字列包含関係木リストを作成する。文字列包含関係木リストの例を図21bに示す。ステップ440文字列包含関係木リストを取得すると、空のリストを生成し、各文字列包含関係木リストに対し、深さ優先順で探索を行い、各文字列親子ノードをリストに入れていき、文字列親子ノードリストを作成する。文字列親子ノードリストの例を図21cに示す。ステップ450ステップ440において生成された文字列親子ノードリストの各文字列親子ノードに対して、当該文字列親子ノードリストから文字列変数の文字列長に関する制約を抽出する。抽出例を図21dに示す。図21の例において、同図cの文字列C、Dの文字列長の関係はCDであり、文字列A,B,Cの文字列長の関係はACBであり、文字列EとFの文字列長の関係はE=Fであることから、文字列長に関する制約として、LengthLengthLengthLengthLengthLengthLengthを得る図6B。当該ステップ450の詳細については図22で後述する。ステップ460上記の制約集合の中から整数制約文字列長に関する制約も整数制約であるのでこれに含まれるを全て選び出す。ステップ470選び出された整数制約の整数の不等式となっているため、これを連立不等式として既存技術SMTArithmeticTheoryシンプレックス法を用いて解き、制約を満たすレコード件数の値を求める。当該シンプレックス法の他に、SMTやSolver等を用いてもよい。これらの解法は高速であるため、実用的な時間で制約を解き、入力値とDB初期状態の組み合わせを特定できる。次に、上記のステップ450の動作を説明する。図22は、本発明の一実施の形態における図20のS450の詳細フローチャートである。ステップ910整数文字列長決定部130は、ステップ440で生成された文字列親子ノードリストを読み込む。ステップ920読み込まれた文字列親子ノードリストの文字列親子ノードの文字列因子をs0、文字列比較演算子が文字列比較演算子テーブルの等価に属する文字列比較演算子別ノード群の文字列子ノードの文字列因子をs1とおく。LengthLengthという整数制約を全ての文字列子ノードに対して生成する。ステップ930次に、文字列同士の部分一致に関する文字列長制約図6Aを抽出する。具体的には、ステップ910で読み込まれた文字列親子ノードのうち、文字列親ノードの文字列因子をs0、文字列比較演算子が文字列比較演算子テーブル図8Dの前方一致に含まれる文字列比較演算子別ノード群の文字列子ノードの文字列因子をshとする。文字列比較演算子が文字列比較演算テーブルの部分一致に含まれる文字列比較演算子別ノード群の文字列子ノードの文字列因子をs1,s2,...,snとする。文字列比較演算子が文字列比較演算子テーブル図8Dの前方一致に含まれる文字列比較演算子別ノード群の文字列子ノードの文字列因子をstとおき、LengthLengthLength...LengthLengthという整数制約を生成し、これを文字列長に関する整数制約図6Bとしてテストケース記憶部160に格納する。上記の整数文字列長決定部130の処理により、入れ子の外側の配列から順に、その配列の長さを決めていくことにより、最終的に整数に関する制約について連立不等式として解ける状態になり、配列の要素を求めることが可能となり、分割して管理されている複雑なデータ構造入れ子の配列に対して適切にテストデータを生成することが可能となる。また、文字列の長さに関する制約を残さず抽出することで、文字列の長さを先に求めることができ、文字決定部140において解ける状態になるため、文字列同士の包含関係を満たしたテストデータを生成することが可能となる。次に、文字決定部140における図9のS140の処理を詳細に説明する。図23は、本発明の一実施の形態における図9のS140の詳細フローチャートであり、図24は、本発明の一実施の形態における文字決定部の処理を示す。ステップ510文字決定部140は、テストケース記憶部160から読み込んだテストケースcの変数集合から文字列型変数を選ぶ。ステップ520ステップ520で選択された文字列型変数の文字列長変数の値の分だけ文字列型変数を生成し、文字列型変数のメンバとする。文字列型変数のSymbolには全ての文字列型変数で異なる一意性のある記号図24ではσ1、σ2を割り当てる図24a。ステップ530文字列親子ノードリスト図24cを読み込む。なお、文字列親子ノードリストは、対応する文字型変数のSymbol図24の例ではσが揃えてある。ステップ540文字列親子ノードリストの各文字列親子ノードに対して、文字列親子ノード図24cと文字列子ノードの対応する文字を同じ変数で揃える図24d。当該処理は、文字列変数同士の対応する位置に存在する文字を一致させる処理であるため、文字列同士の包含関係を満たしたテストデータを生成することができる。詳細については、図25で後述する。ステップ550文字変数に具体的な文字値を割り当てる。例えば、a~zの範囲のアルファベットからランダムに選んだ文字を当てはめていくという方法がある。このようにして割り当てられた文字変数の値をテストケース記憶部160に出力する。次に、上記の図23のS540の処理について説明する。図25は、本発明の一実施の形態における図23のS540の詳細フローチャートである。ステップ1010文字列決定部140は、文字列親子ノードを読み込む。ステップ1020文字列現在位置を0に設定する。ステップ1030読み込まれた文字列親子ノードの各文字列比較演算子別子ノード群に対して、当該文字列比較演算子ノード群の各文字列子ノードの文字列比較演算子の種類が、前方一致または部分一致、等価、後方一致のいずれであるかを判定する。前方一致または部分一致の場合はステップ1040へ、等価の場合はステップ1050へ、後方一致の場合はステップ1060の処理に移行する。以下、ステップ1080までの処理を文字列比較演算子別子ノード群の各文字列子ノードに対して行う。ステップ1040前方一致、部分一致要の文字列型変数ペアリストを生成する。詳しくは、文字列親ノードの文字列をps、文字列子ノードの文字列をcsとおき、1という文字列変数ペアリストを作成する。そして、文字列現在位置にLengthを加え、ステップ1065に移行する。ステップ1050等価用の文字型変数ペアリストを作成する。詳しくは、文字列親ノード及び文字列子ノードを取得し、文字列親ノードの文字列をps、文字列子ノードのm時列をcsとおき、ps0cs0...-1csLength-1という文字列変数ペアリストを作成する。そして文字列現在位置にLengthを加え、ステップ1065の処理に移行する。ステップ1060後方一致用の文字列型変数のペアリストを作成する。詳しくは、文字列親ノード及び文字列子ノードを取得し、文字列親ノードの文字列をps、文字列子ノードの文字列をcsとおき、Length-Lengthcs0...-1csLength-1という文字列変数ペアリストを作成し、ステップ1065の処理に移行する。ステップ1065テストデータ生成不可フラグを用意し、trueで初期化する。ステップ1070上記のステップ1040,1050,1060で生成された文字型変数ペアリストの各文字型変数ペアの文字を揃える。詳しくは、文字列比較演算子、及び、ステップ1060で生成された文字型変数ペアリストを取得し、文字列比較演算子に基づき文字列型変数ペアの文字を揃える。詳細については図26、図27で後述する。ステップ1080テストデータ生成不可フラグの値がtrueまたは、falseかを判定し、trueの場合は、現在テストデータ生成を試みているテストケースにおいて、テストデータ生成不可であることを示すエラーメッセージを出力する。図26は、本発明の一実施の形態における図25のS1070の詳細フローチャートである。ステップ1110ステップ1040,1050,1060で生成された文字型変数ペアを読み込む。ステップ1115ステップ1010で読み込まれた文字列親子ノードのメンバである各文字列比較演算子別子ノード群のメンバの文字列比較演算子を抽出する。ステップ1120テストケース記憶部160に格納されている文字列比較演算子テーブル図8Dを参照し、ステップ1115で読み込まれた文字列比較演算子が通常比較または否定比較かを判定する。通常比較の場合は、ステップ1125に移行し、否定比較の場合は、ステップ1160に移行する。ステップ1125文字列変数ペアの組は文字列変数同士、文字列変数と定数文字列もしくは値の決まった文字型変数、定数文字同士のいずれであるかを判定する。文字列変数同士の場合はステップ1130に移行し、文字列変数と定数文字列もしくは値の決まった文字型変数の場合はステップ1140に移行し、定数文字同士の場合はステップ1150に移行する。ステップ1130文字列変数ペアの組が文字列変数同士の場合は、文字型変数を揃え、当該処理を終了する。ステップ1140文字列変数ペアの組が文字列変数と定数文字列もしくは値の決まった文字型変数である場合は、文字列変数の値を定数文字に置き換え、当該処理を終了する。ステップ1150文字列変数ペアの組が定数文字同士の場合は、定数同士が等価であるかを確認し、等価でない場合は、テストデータ生成不可エラーを出力し、当該処理を終了する。ステップ1160ステップ1120において、文字列比較演算子の種類が否定比較である場合は、文字型変数の組が、文字列変数同士、文字型変数と定数文字列もしくは値の決まった文字型変数、定数文字同士のいずれであるかを判定し、文字列変数同士である場合はステップ1170に移行し、文字型変数と定数文字列もしくは値の決まった文字型変数である場合はステップ1180に移行し、定数文字同士である場合はステップ1190に移行する。ステップ1170文字型変数の組が文字列変数同士である場合は、文字型変数を揃え、当該処理を終了する。具体的には、文字列変数ペアを構成する2つの文字型変数が異なる文字であるというチェックテストデータ生成フラグfalseをつける。ステップ1180文字型変数の組が文字型変数と定数文字列もしくは値の決まった文字型変数である場合は、文字型変数の値を定数文字と異なる文字に置き換え、当該処理を終了する。ステップ1190文字型変数の組が定数文字同士である場合は、定数同士が非等価であることを確認し、テストデータ生成不可フラグをfalseにし、当該処理を終了する。なお、この処理以前のテストデータ生成不可フラグは、ステップ1065においてtrueで初期化されている。以下に、上記のステップ1070、ステップ1170の定数文字の非等価について説明する。図27は、本発明の一実施の形態におけるS1070とS1170の定数文字の非等価を説明するための図である。ここでは、前方一致の否定比較AnotHeadSubStringBを例とする。なお、テストデータ生成不可フラグの初期値はtrueであるとする。図27の例1では、AとBの対応箇所で1箇所でも非等価な文字があれば、AとBは非等価な文字となり、テストデータ生成不可フラグはfalseとなる。ステップ1170の1回目の処理では、a1=あ、b1あで等価であるので何も行わないが、2回目の処理では、a2=い、b=うであり非等価であるので、データ生成不可フラグをfalseとする。図27の例2では、AとBの対応箇所で1箇所でも非等価な文字がない場合全て等価だった場合は、AとBは等価な文字列となるため、テストデータ生成不可フラグはtrueとなり、ステップ107でテストデータ生成不可エラーが出力される。ステップ1170の1回目の処理では、a1=あ、b1=あで等価で何も行わない。また、1回目の処理でもa2=い、b2いで等価であるので何も行わない。このとき、テストデータ不可フラグはtrueのままとなる。上記の文字決定部140の、図5に示す条件1、条件2、条件3に含まれる制約のうち、文字型変数同士の包含関係に基づき、文字型変数同士の対応する位置に存在する文字がそれぞれ一致するように文字を決定することにより、文字型変数同士の対応する位置に存在する文字が一致するようになるため、文字列同士の包含関係を満たしたテストデータを生成することが可能となる。なお、上記のテストデータ生成装置の各構成の動作をプログラムとして構築し、テストデータ生成装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。本発明は上記の実施の形態に限定されることなく、特許請求の範囲内において種々変更応用が可能である。"