"データベースDBに格納されているデータの読み出し操作を伴う機能性テストを実施するためのテストデータを生成するテストデータ生成装置であって、テストケースを格納するテストケース記憶手段と、設計情報として、ソフトウェアの入力値の定義域を表す入力値定義、ソフトウェアの処理の流れを表す処理フロー図、データベースの設計情報であるDB定義を取得し、入力変数、DBテーブル変数、及び該ソフトウェアの特定の振る舞いを引き起こすようにテストデータが満たすべき条件である制約を抽出し、前記テストケース記憶手段に格納するテストケース抽出手段と、前記テストケース記憶手段から取得した、前記DBテーブル変数のレコード件数に関する制約を解き、該DBテーブル変数のレコード件数を決定し、該レコード件数分のDBレコード変数を生成し、前記テストデータ記憶手段に格納するDBレコード件数決定手段と、前記テストケース記憶手段から取得した、文字列型変数同士の包含関係に関する制約から、文字列長に関する制約を導出し、文字列型変数の文字列長と整数型変数に関する制約を解き、文字列長変数と整数型変数を前記テストケース記憶手段に格納する整数文字列長決定手段と、前記テストケース記憶手段から取得した文字列型変数に関する制約を解き、文字列型変数を構成する文字の値を決定し、前記テストケース記憶手段に格納する文字決定手段と、前記テストケース記憶手段に格納されている前記入力変数、前記DBテーブル変数をテストデータとして出力する出力手段と、を有し、前記テストケース抽出手段は、前記入力値定義及び前記処理フロー図から入力値に対する制約を抽出し、該処理フロー図のDB検索条件から、検索ヒット数、入力値、DB初期状態依存関係に関する制約を抽出し、前記DB定義よりDB初期状態に対する制約を抽出する制約抽出手段と、前記抽出手段で抽出された前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約のうち、比較演算子を含む制約を抽出し、抽出された該制約を境界値テスト用データが満たすべき制約へ変換し、変換された制約を前記テストケース記憶手段に格納する変換手段を含むことを特徴とするテストデータ生成装置。前記変換手段は、前記比較演算子を含む検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yを、境界値と同値のXYの制約に変換する第1の変換手段と、前記比較演算子を含む検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yを、境界値1のXY1の制約に変換する第2の変換手段と、前記比較演算子を含む検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yを、境界値-1のXY-1の制約に変換する第3の変換手段と、を含む請求項1記載のテストデータ生成装置。前記レコード件数決定手段は、入れ子の配列に相当する複雑なDBテーブルのレコード群を検出した場合に、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約に含まれる不等式で表されたDBテーブルのレコード群の件数に関する制約を選択し、連立不等式として解くことでDBテーブル変数のDBレコード件数を決定する手段を含み、前記整数文字列長決定手段は、入れ子の配列に相当する複雑なDBテーブルのレコード群を検出した場合に、前記テストケース抽出手段で抽出された前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約、前記DB初期状態に対する制約のいずれかに含まれる、不等式で表された文字列の長さに関する制約を選択し、連立不等式として解くことで配列の長さを決定する手段を含む請求項1または2記載のテストデータ生成装置。前記レコード件数決定手段は、前記DB初期状態に対する制約のうち、DBレコードの主キー、外部キーに関する制約を選び、整数変数同士比較、または、文字列変数同士の比較とする制約に変形する手段を含む請求項3記載のテストデータ生成装置。前記整数文字列長決定手段は、前記DB初期状態に対する制約のうち、DBレコードの主キー、外部キーに関する制約を選び、整数変数同士比較に変換した制約、前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約、前記DB初期状態に対する制約のいずれかに含まれる、不等式で表された整数に関する制約を選択し、選択された整数に関する制約を連立不等式として解き、制約群を満たす値を求める手段を含む請求項3記載のテストデータ生成装置。データベースDBに格納されているデータの読み出し操作を伴う機能性テストを実施するためのテストデータを生成するテストデータ生成方法であって、テストケース抽出手段が、設計情報として、ソフトウェアの入力値の定義域を表す入力値定義、ソフトウェアの処理の流れを表す処理フロー図、データベースの設計情報であるDB定義を取得し、入力変数、DBテーブル変数、及び該ソフトウェアの特定の振る舞いを引き起こすようにテストデータが満たすべき条件である制約を抽出し、テストケース記憶手段に格納するテストケース抽出ステップと、DBレコード件数決定手段が、前記テストケース記憶手段から取得した、前記DBテーブル変数のレコード件数に関する制約を解き、該DBテーブル変数のレコード件数を決定し、前記テストデータ記憶手段に格納するDBレコード件数決定ステップと、整数文字列長決定手段が、前記テストケース記憶手段から取得した、文字列型変数同士の包含関係に関する制約から、文字列長に関する制約を導出し、文字列型変数の文字列長と整数型変数に関する制約を解き、文字列長変数と整数型変数を前記テストケース記憶手段に格納する整数文字列長決定ステップと、文字決定手段が、前記文字列型変数に関する制約を解き、該文字列型変数を構成する文字の値を決定し、前記テストケース記憶手段に格納する文字決定ステップと、出力手段が、前記テストケース記憶手段に格納されている前記入力変数、前記DBテーブル変数をテストデータとして出力する出力ステップと、を行い、前記テストケース抽出ステップにおいて、前記入力値定義及び前記処理フロー図から入力値に対する制約を抽出し、該処理フロー図のDB検索条件から、検索ヒット数、入力値、DB初期状態依存関係に関する制約を抽出し、前記DB定義よりDB初期状態に対する制約を抽出する制約抽出ステップと、前記抽出手段で抽出された前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約のうち、比較演算子を含む制約を抽出し、抽出された該制約を境界値テスト用データが満たすべき制約へ変換し、変換された制約を前記テストケース記憶手段に格納する変換ステップを含むことを特徴とするテストデータ生成方法。前記変換ステップにおいて、前記比較演算子を含む検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yを、境界値と同値のXYの制約に変換する第1の変換ステップと、前記比較演算子を含む検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yを、境界値1のXY1の制約に変換する第2の変換ステップと、前記比較演算子を含む検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yを、境界値-1のXY-1の制約に変換する第3の変換ステップと、を行う請求項6記載のテストデータ生成方法。前記テストケース抽出ステップにおいて、前記入力値定義及び前記処理フロー図から入力値に対する制約を抽出し、該処理フロー図のDB検索条件から、検索ヒット数、入力値、DB初期状態依存関係に関する制約を抽出し、前記DB定義よりDB初期状態に対する制約を抽出し、前記レコード件数決定ステップにおいて、入れ子の配列に相当する複雑なDBテーブルのレコード群を検出した場合に、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約に含まれる不等式で表されたDBテーブルのレコード群の件数に関する制約を選択し、連立不等式として解くことでDBテーブル変数のDBレコード件数を決定し、前記整数文字列長決定ステップにおいて、入れ子の配列に相当する複雑なDBテーブルのレコード群を検出した場合に、前記テストケース抽出手段で抽出された前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約、前記DB初期状態に対する制約のいずれかに含まれる不等式で表された文字列の長さに関する制約を選択し、連立不等式として解くことで配列の長さを決定する請求項7記載のテストデータ生成方法。前記レコード件数決定ステップにおいて、前記DB初期状態に対する制約のうち、DBレコードの主キー、外部キーに関する制約を選び、整数変数同士比較、または、文字列変数同士の比較とする制約に変形し、前記整数文字列長決定ステップにおいて、前記DB初期状態に対する制約のうち、DBレコードの主キー、外部キーに関する制約を選び、整数変数同士比較に変換した制約、前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約、前記DB初期状態に対する制約のいずれかに含まれる、不等式で表された整数に関する制約を選択し、選択された整数に関する制約を連立不等式として解き、制約群を満たす値を求める請求項7また8記載のテストデータ生成方法。しかしながら、上記従来の第1の技術は、DBの初期状態DBテーブル型のデータを生成することができない。また、DB検索条件を設計書から読み取っていないため特定のテストのパスを通すために入力値とDB初期状態が満たすべき制約に抜けがある。また、複雑なデータ構造配列や変数の複雑な相互依存関係があった場合に適切なテストデータが生成できない、という問題がある。また、仮に、従来の第1の技術と第2の技術を組み合わせて用いても、DB検索条件を設計情報として扱っていないため、DBのレコード検索結果の件数に依存する処理の分岐を制御するテストデータは生成することができない。また、第2の技術では、入力値とDB初期状態を個別に生成し、検索結果の件数が上限値、下限値で指定される範囲に収まるまで繰り返す方法もあるが、実用的な時間内で解くことができないという問題がある。また、第3の技術では、フロー図を扱うことができないため、特定のテストパスを通す入力値、DB初期状態を生成できない。さらに、DB初期状態に関する必要不可欠な制約例えば、主キーに関する制約で抜けがある。また、文字列変数同士の包含関係を扱うことができない、という問題がある。本発明は、上記の点に鑑みなされたもので、入力値定義、処理フロー図、DE定義などのソフトウェア設計情報を入力とし、処理の分岐を制御可能なテストデータを生成すると共に、境界値テストに対してより有効なテストデータを生成することが可能なテストデータ生成装置及び方法及びプログラムを提供することを目的とする。上記の課題を解決するために、本発明は、データベースDBに格納されているデータの読み出し操作を伴う機能性テストを実施するためのテストデータを生成するテストデータ生成装置であって、テストケースを格納するテストケース記憶手段と、設計情報として、ソフトウェアの入力値の定義域を表す入力値定義、ソフトウェアの処理の流れを表す処理フロー図、データベースの設計情報であるDB定義を取得し、入力変数、DBテーブル変数、及び該ソフトウェアの特定の振る舞いを引き起こすようにテストデータが満たすべき条件である制約を抽出し、前記テストケース記憶手段に格納するテストケース抽出手段と、前記テストケース記憶手段から取得した、前記DBテーブル変数のレコード件数に関する制約を解き、該DBテーブル変数のレコード件数を決定し、該レコード件数分のDBレコード変数を生成し、前記テストデータ記憶手段に格納するDBレコード件数決定手段と、前記テストケース記憶手段から取得した、文字列型変数同士の包含関係に関する制約から、文字列長に関する制約を導出し、文字列型変数の文字列長と整数型変数に関する制約を解き、文字列長変数と整数型変数を前記テストケース記憶手段に格納する整数文字列長決定手段と、前記テストケース記憶手段から取得した文字列型変数に関する制約を解き、文字列型変数を構成する文字の値を決定し、前記テストケース記憶手段に格納する文字決定手段と、前記テストケース記憶手段に格納されている前記入力変数、前記DBテーブル変数をテストデータとして出力する出力手段と、を有し、前記テストケース抽出手段は、前記入力値定義及び前記処理フロー図から入力値に対する制約を抽出し、該処理フロー図のDB検索条件から、検索ヒット数、入力値、DB初期状態依存関係に関する制約を抽出し、前記DB定義よりDB初期状態に対する制約を抽出する制約抽出手段と、前記抽出手段で抽出された前記入力値に対する制約、前記検索ヒット数、入力値、DB初期状態依存関係に関する制約のうち、比較演算子を含む制約を抽出し、抽出された該制約を境界値テスト用データが満たすべき制約へ変換し、変換された制約を前記テストケース記憶手段に格納する変換手段を含む。また、前記変換手段は、前記比較演算子を含む検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yを、境界値と同値のXYの制約に変換する第1の変換手段と、前記比較演算子を含む検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yを、境界値1のXY1の制約に変換する第2の変換手段と、前記比較演算子を含む検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yを、境界値-1のXY-1の制約に変換する第3の変換手段と、を含む。また、前記レコード件数決定手段は、入れ子の配列に相当する複雑な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と接続されている。テストデータ生成装置は、テストケース抽出部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テーブル変数、制約を含む。当該テストケースaに含まれる制約のうち、比較演算子を含む制約は、境界値テスト用テストデータが満たすべき制約に変換された制約となる。DBレコード件数決定部120は、テストケース記憶部160からテストケースaを読み出して、当該テストケースaに含まれるDBテーブル変数から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は、図8に示すような上記の各構成から出力される中間データとしてのテストケース、文字列包含関係木、文字列親子ノード及び図6に示す制約等を格納する。テストケース抽出部110からは、テストケースaとして、{制約、変数}が格納される。DBレコード件数決定部120からは、テストケースbとして、{テストケースaDBテーブル変数、DBレコード件数変数、DBレコード変数、DBフィールド変数}が格納される。整数文字列長決定部130からは、テストケースcとして、{テストケースb文字列型変数、文字列長変数、整数型変数、文字列包含関係木、文字列親子ノード}が格納される。文字決定部140からはテストケースdとして、{テストケースc文字型変数、値決定済み変数}が格納される。以下に、上記の構成における動作を詳細に説明する。最初に、テストデータ生成装置100の全体の動作を説明する。図9は、本発明の一実施の形態におけるテストデータ生成装置の全体処理のフローチャートである。ステップ110テストケース抽出部110において、設計情報を取得する。設計情報は、DB定義DBテーブル変数、DBテーブルの各カラムに対する制約、DBテーブルの主キー、外部キー;入力値定義;処理フロー図;が含まれる。当該設計情報から変数入力変数、DBテーブル変数及び、制約を抽出し、これらをテストケースaとしてテストケース記憶部160に格納する。但し、当該テストケース記憶部160に格納される制約には、入力値定義から抽出された入力値条件と処理フロー図から抽出された検索条件の各制約の比較演算子を、境界値テストのための制約に変換した制約が含まれる。当該ステップの詳細については、図10にて後述する。ステップ120DBレコード件数決定部120において、テストケース記憶部160からテストケースaを読み込み、DBテーブル変数のレコード件数に関する制約を解き、DBテーブル変数のレコード件数を決定し、DB、テーブル変数のカラムに関する制約を各レコードのフィールドに対して展開し、テストケースaをコピーし、そのメンバであるDBテーブル変数のレコード件数にその値を設定したものをテストケースbとし、当該テストケースbをテストケース記憶部160に格納する。テストケースbとしてテストケース記憶部160に格納する。詳細については図13で後述する。ステップ130整数文字列長決定部130において、テストケース記憶部160からテストケースbを取得し、文字列型変数同士の包含関係に関する制約から文字列長に関する制約を導出し、テストケース記憶部160の制約集合に追加した後、ステップ120で導出された文字列型変数の文字列長とステップ110で抽出された整数型変数に関する制約を解き、それぞれの値を決定する。テストケースbをコピーし、文字列型の変数の文字列長変数の値と、整数型変数の値を設定したものをテストケースcとしてテストケース記憶部160に格納する。ステップ140テストケース記憶部160からテストケースcを取得し、文字決定部140において、文字列型変数に関する制約を解き、文字列型変数を構成する文字の値を決定し、テストケースcをコピーしたものに設定し、テストケースdとしてテストケース記憶部160に格納する。詳細は図20で後述する。ステップ150テストデータ出力部150において、テストケース記憶部160のテストケースdから入力変数図8,9行目、DBテーブル変数図8,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に格納する。ステップ260ステップ250で作成されたオリジナルテストケースaの制約集合から、タグが検索条件タグ図6A、もしくは、入力値条件タグ図6Aであり、かつ、整数比較演算子図6Aを含む検索条件と入力値条件を選び出す。ステップ270オリジナルテストケースa、検索条件と入力値条件の制約を取得して、境界値テスト用の制約を持つテストケースを生成し、テストケース記憶部160に格納する。当該処理については図16にて後述する。ステップ280テストケース記憶部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を設計書から漏れなく抽出して集約しているため、これらの制約を後述する処理により連立不等式に変換し、既存技術で解くことができる。次に、上記の図10のステップ270の境界値テスト用の制約を持つテストケースを生成する処理について説明する。図16は、本発明の一実施の形態における図10のS270の詳細フローチャートであり、図17は、図16の動作を説明するための図である。ステップ1310テストケース抽出部110は、ステップ250で生成されたテストケースaを読み込み、これをオリジナルテストケースとする。ステップ1320オリジナルテストケースから検索条件と入力値条件の制約を抽出する。具体的には、図17に示すように、オリジナルテストケースから入力値の条件の制約inputId0、検索条件の制約input0をinputId0同値に変換することで境界値と同値となる。ステップ1340検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yとおくを、XY1に置き換える。そして、オリジナルテストケースを複製し、複製したテストケースの制約集合における、検索条件と入力値条件の制約を複製した制約に置き換えたものをテストケース記憶部160に格納する。具体的には、図17に示すように、入力値の条件の制約inputId0をinputId01に変換することで、境界値1となる。。ステップ1350検索条件と入力値条件の制約を複製し、複製した制約X整数比較演算子Yとおくを、XY1に置き換える。そして、オリジナルのテストケースを複製し、複製したテストケースの制約集合における、検索条件と入力値条件の制約を、複製した制約に置き換えたものをテストケース記憶部160に格納する。具体的には、図17に示すように、入力値の条件の制約inputId0をinputId01に変換することで、境界値―1となる。上記のステップ260~ステップ280の処理を行うことにより、以降のステップ120のDBレコード件数決定部120、ステップ130の整数文字列長決定部130、ステップ140の文字決定部140の処理を行うことで、境界値テスト用データが満たすべき制約を満たした解を得ることができる。次に、DBレコード件数決定部120における、図9のステップ120のDBレコード件数の値を決定する処理について説明する。図18は、本発明の一実施の形態における図9のS120の詳細フローチャートである。ステップ310DBレコード件数決定部120は、テストケース記憶部160からテストケースaを読み込む。ステップ320ユーザから指定されたDBレコード件数デフォルト値を取得し、以下、ステップ370までの処理を、テストケースの各DBテーブル変数に対して行う。なお、当該デフォルト値はメモリ図示せずに予め記憶されているものとする。ステップ330ステップ310で読み込んだテストケースaに含まれるDBテーブル変数、制約集合を取得し、制約の中でレコード件数参照を含む制約を全て取得し、出力する。図6の例では、レコード件数参照=Countを出力する。ステップ340上記のレコード件数に関する制約が1つ以上存在する場合は、図8に示すテストケースの制約集合の中からDBレコード変数及びDBテーブル変数のレコード件数変数に関する制約を取得する。図8の例では、DBレコード変数=IdDBフィールド変数、DBレコード件数変数=Id整数型変数を取得する。DBレコード変数のDBレコード件数に関する制約を解き、レコード件数の値を決定する。このとき、DBレコード変数のレコード件数に関する制約は、整数の不等式となっているため、これらを連立させ連立不等式として既存技術SMTArithmeticTheoryシンプレックス法を用いて解き、制約を満たすレコード件数の値を求める。ステップ360に移行する。ステップ350制約集合にレコード件数に関する制約がない場合は、ユーザ指定DBレコード件数デフォルト値をレコード件数の値として設定する。このとき、テストケースに含まれるテストパスから入力変数に対する制約図53と、DB検索条件に記述された制約図52を抽出する。ステップ360テストケース記憶部160のテストケース領域からDBテーブル変数を取得し、当該DBテーブル変数の値の分だけDBレコード変数を生成し、テストケース領域のDBテーブル変数のメンバとして追加する。ステップ370テストケース記憶部160から制約集合を取得し、DBテーブルのカラムに対する制約図6Aカラム参照を、DBフィールド変数への制約として展開する。このとき、カラム全称参照∀を含む制約図6Aを選び出し、DBフィールド変数図8への制約として展開する。詳細は図19にて後述する。ステップ380テストケース記憶部160から制約集合を取得し、外部キーに関する制約をテストケース記憶部160の制約集合に追加する。このとき、カラム存在参照を含む制約を選び出し、DBフィールド変数への制約として展開する。詳細は図20にて後述する。上記の図18のステップ370のDBテーブルのカラムに対する制約をDBフィールド変数への制約として展開する処理について説明する。図19は、本発明の一実施の形態における図18の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などとすればよい。次に、図18のS380の外部キーに関する制約を追加する処理について説明する。図20は、本発明の一実施の形態における図18の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の処理について説明する。図21は、本発明の一実施の形態における図9のS130の詳細フローチャートである。ステップ410整数文字列長決定部130は、テストケース記憶部160からテストケースbを読み込む。ステップ420取得したテストケースbに含まれる制約集合から文字列型変数同士の包含関係に関係する文字列制約を選び出す。文字列制約の例を図22aに示す。ステップ430ステップ420で選択された文字列制約における左側の文字列因子を文字列親ノードとし、右側の文字列因子を文字列子ノードとする文字列包含関係木を作成する。文字列演算子別子ノード群は、文字列演算子が図23に示す文字列比較演算子テーブルの前方一致、部分一致、後方一致、等価に登録されている順に並べ、文字列包含関係木リストを作成する。文字列包含関係木リストの例を図22bに示す。ステップ440文字列包含関係木リストを取得すると、空のリストを生成し、各文字列包含関係木リストに対し、深さ優先順で探索を行い、各文字列親子ノードをリストに入れていき、文字列親子ノードリストを作成する。文字列親子ノードリストの例を図22cに示す。ステップ450ステップ440において生成された文字列親子ノードリストから文字列変数の文字列長に関する制約を抽出する。抽出例を図22dに示す。図22の例において、同図cの文字列C、Dの文字列長の関係はCDであり、文字列A,B,Cの文字列長の関係はACBであり、文字列EとFの文字列長の関係はE=Fであることから、文字列長に関する制約として、LengthLengthLengthLengthLengthLengthLengthを得る図6B。当該処理を文字列親子ノードのリストの各文字列親子ノードに対して行う。詳細については図24で後述する。ステップ460上記の制約集合の中から整数制約文字列長に関する制約も整数制約であるのでこれに含まれるを全て選び出す。ステップ470選び出された整数制約の整数の不等式となっているため、これを連立不等式として既存技術SMTArithmeticTheoryシンプレックス法を用いて解き、制約を満たすレコード件数の値を求める。当該シンプレックス法の他に、SMTやSolver等を用いてもよい。これらの解法は高速であるため、実用的な時間で制約を解き、入力値とDB初期状態の組み合わせを特定できる。次に、上記のステップ450の動作を説明する。図24は、本発明の一実施の形態における図21のS450の詳細フローチャートである。ステップ910整数文字列長決定部130は、ステップ440で生成された文字列親子ノードリストを読み込む。ステップ920読み込まれた文字列親子ノードリストの文字列親子ノードの文字列因子をs0、文字列比較演算子が文字列比較演算子テーブルの等価に属する文字列比較演算子別ノード群の文字列子ノードの文字列因子をs1とおく。LengthLengthという整数制約を全ての文字列子ノードに対して生成する。ステップ930次に、文字列同士の部分一致に関する文字列長制約図6Aを抽出する。具体的には、ステップ910で読み込まれた文字列親子ノードのうち、文字列親ノードの文字列因子をs0、文字列比較演算子が文字列比較演算子テーブル図23の前方一致に含まれる文字列比較演算子別ノード群の文字列子ノードの文字列因子をshとする。文字列比較演算子が文字列比較演算テーブルの部分一致に含まれる文字列比較演算子別ノード群の文字列子ノードの文字列因子をs1,s2,...,snとする。文字列比較演算子が文字列比較演算子テーブルの前方一致に含まれる文字列比較演算子別ノード群の文字列子ノードの文字列因子をstとおき、LengthLengthLength...LengthLengthという整数制約を生成し、これを文字列長に関する整数制約図6Bとして出力する。上記の整数文字列長決定部130の処理により、入れ子の外側の配列から順に、その配列の長さを決めていくことにより、最終的に整数に関する制約について連立不等式として解ける状態になり、配列の要素を求めることが可能となり、分割して管理されている複雑なデータ構造入れ子の配列に対して適切にテストデータを生成することが可能となる。また、文字列の長さに関する制約を残さず抽出することで、文字列の長さを先に求めることができ、文字決定部140において解ける状態になるため、文字列同士の包含関係を満たしたテストデータを生成することが可能となる。次に、文字決定部140における図9のS140の処理を詳細に説明する。図25は、本発明の一実施の形態における図9のS140の詳細フローチャートであり、図26は、本発明の一実施の形態における文字決定部の処理を示す。ステップ510文字決定部140は、テストケース記憶部160から読み込んだテストケースcの変数集合から文字列型変数を選ぶ。ステップ520ステップ520で選択された文字列型変数の文字列長変数の値の分だけ文字列型変数を生成し、文字列型変数のメンバとする。文字列型変数のSymbolには全ての文字列型変数で異なる一意性のある記号図26ではσ1、σ2を割り当てる図26a。ステップ530文字列親子ノードリスト図26cを読み込む。なお、文字列親子ノードリストは、対応する文字型変数のSymbol図26の例ではσが揃えてある。ステップ540文字列親子ノード図26cと文字列子ノードの対応する文字を同じ変数で揃える図26d。当該処理は、文字列変数同士の対応する位置に存在する文字を一致させる処理であるため、文字列同士の包含関係を満たしたテストデータを生成することができる。当該処理を文字列親子ノードリストの各文字列親子ノードに対して行う。詳細については、図27で後述する。ステップ550文字変数に具体的な文字値を割り当てる。例えば、a~zの範囲のアルファベットからランダムに選んだ文字を当てはめていくという方法がある。このようにして割り当てられた文字変数の値をテストケース記憶部160に出力する。次に、上記の図25のS540の処理について説明する。図27は、本発明の一実施の形態における図25のS540の詳細フローチャートである。ステップ1010文字列決定部140は、文字列親子ノードを読み込む。ステップ1020文字列現在位置を0に設定する。以下の処理を文字列親子ノードの各文字列比較演算子別子ノード群の各文字列子ノードに対して行う。ステップ1030読み込まれた文字列親子ノードの各文字列比較演算子別子ノード群に対して、当該文字列比較演算子ノード群の各文字列子ノードの文字列比較演算子の種類が、前方一致または部分一致、等価、後方一致のいずれであるかを判定する。前方一致または部分一致の場合はステップ1040へ、等価の場合はステップ1050へ、後方一致の場合はステップ1060の処理に移行する。ステップ1040前方一致、部分一致要の文字列型変数ペアリストを生成する。詳しくは、文字列親ノードの文字列をps、文字列子ノードの文字列をcsとおき、1という文字列変数ペアリストを作成する。そして、文字列現在位置にLengthを加え、ステップ1070に移行する。ステップ1050等価用の文字型変数ペアリストを作成する。詳しくは、文字列親ノード及び文字列子ノードを取得し、文字列親ノードの文字列をps、文字列子ノードのm時列をcsとおき、ps0cs0...-1csLength-1という文字列変数ペアリストを作成する。そして文字列現在位置にLengthを加え、ステップ1070の処理に移行する。ステップ1060後方一致用の文字列型変数のペアリストを作成する。詳しくは、文字列親ノード及び文字列子ノードを取得し、文字列親ノードの文字列をps、文字列子ノードの文字列をcsとおき、Length-Lengthcs0...-1csLength-1という文字列変数ペアリストを作成し、ステップ1070の処理に移行する。ステップ1070上記のステップ1040,1050,1060で生成された文字型変数ペアリストの各文字型変形ペアの文字を揃える。詳しくは、文字列比較演算子、及び、ステップ1060で生成された文字型変数ペアリストを取得し、文字列比較演算子に基づき文字列型変形ペアの文字を揃える。当該処理を文字型変数ペアリストの各文字型変数ペアに対して行う。詳細について以下に示す。図28は、本発明の一実施の形態における図27のS1070の詳細フローチャートである。ステップ1110ステップ1040,1050,1060で生成された文字型変形ペアを読み込む。ステップ1120読み込んだ文字型変数ペアの組は、文字型変数同士、文字型変数と定数文字もしくは値の決まった文字型変数、定数文字同士のいずれであるかを判断する。文字型変数同士であればステップ1130の処理に移行し、文字型変数と定数文字であればステップ1140の処理に移行し、定数文字同士であればステップ1150の処理に移行する。ステップ1130文字型変数ペアの組が文字型変数同士の場合は、字変数型ペアを構成する2つの文字型変数のSymbolに割り当てられている記号をそれぞれXYとおく。テストケースで用いられている全文字型変数のうちSymbolがXYであるもの全てに対し、SymbolをXに置換した文字型変数ペアを出力する。ステップ1140文字型変数ペアの組が文字型変数と定数文字であれば、文字変数の値を定数文字に置き換えた文字型変数ペアを出力する。ステップ1150文字型変数ペアの組が定数文字同士であれば定数同士が等価であることを確認し、定数同士が等価でない場合はテストデータ生成不可エラーを出力する。上記の文字決定部140の、図5に示す条件1、条件2、条件3に含まれる制約のうち、文字列変数同士の包含関係に基づき、文字列変数同士の対応する位置に存在する文字がそれぞれ一致するように文字を決定することにより、文字列変数同士の対応する位置に存在する文字が一致するようになるため、文字列同士の包含関係を満たしたテストデータを生成することが可能となる。なお、上記のテストデータ生成装置の各構成の動作をプログラムとして構築し、テストデータ生成装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。本発明は上記の実施の形態に限定されることなく、特許請求の範囲内において種々変更応用が可能である。"