(57)【特許請求の範囲】
【請求項１】
ソフトウェアのテストデータを生成するテストデータ生成方法であって，
制約中に含まれる関係式中の文字列変数が等価であることを示す等価関係および制約中の前記等価関係に該当する関係式の変換パターンを示す等価関係パターン，ならびに，関係式中の文字列変数が等価関係以外の関係を持つことを示す非等価関係および制約中の前記非等価関係に該当する関係式の変換パターンを示す非等価関係パターンを定義する関係情報を記憶する記憶部を備えるコンピュータが，
ソフトウェアのテスト項目および制約条件を含む元制約情報を取得して，前記元制約情報の制約条件に出現する文字列変数を抽出して，前記元制約情報および前記関係情報にもとづいて前記抽出した各文字列変数を含む関係式を前記等価関係または前記非等価関係に分類する処理ステップと，
前記元制約情報を解析して前記非等価関係に分類された関係式の文字列変数を抽出し，前記抽出した文字列変数の各々を起点展開変数に設定する処理ステップと，
前記元制約情報を解析して前記等価関係に分類された関係式の文字列変数を抽出し，前記抽出した等価関係の文字列変数のうち，前記起点展開変数から等価関係により辿ることができる全ての変数を取り出して，前記取り出した変数および前記起点展開変数を前記展開変数に分類する処理ステップと，
前記等価関係パターンおよび前記非等価関係パターンをもとに前記元制約情報を変換して生成した変換後制約情報において，前記元制約情報に出現する文字列変数のうち前記展開変数に分類された文字列変数のみを配列で表現し，前記展開変数に分類されなかった文字列変数を1次元変数で表現する処理ステップとを，実行する
ことを特徴とするデータ生成方法。
【請求項２】
前記コンピュータが，
前記変換後制約情報の充足可能性を判定して，前記変換後制約情報が充足可能である場合に与える前記変換後制約情報の各変数の値にもとづいて，前記元制約情報を充足するテストデータを生成する制約充足データ生成ステップを，実行する
ことを特徴とする請求項１に記載のデータ生成方法。
【請求項３】
ソフトウェアのテストデータ生成装置であって，
制約中に含まれる関係式中の文字列変数が等価であることを示す等価関係および制約中の前記等価関係に該当する関係式の変換パターンを示す等価関係パターン，ならびに，関係式中の文字列変数が等価関係以外の関係を持つことを示す非等価関係および制約中の前記非等価関係に該当する関係式の変換パターンを示す非等価関係パターンを定義する関係情報を記憶する記憶部と，
ソフトウェアのテスト項目および制約条件を含む元制約情報を取得して，前記元制約情報の制約条件に出現する文字列変数を抽出して，前記元制約情報および前記関係情報にもとづいて前記抽出した各文字列変数を含む関係式を前記等価関係または前記非等価関係に分類する文字列制約抽出部と，
前記元制約情報を解析して前記非等価関係に分類された関係式の文字列変数を抽出し，前記抽出した文字列変数の各々を起点展開変数に設定する非等価関係解析部と，
前記元制約情報を解析して前記等価関係に分類された関係式の文字列変数を抽出し，前記抽出した等価関係の文字列変数のうち，前記起点展開変数から等価関係により辿ることができる全ての変数を取り出して，前記取り出した変数および前記起点展開変数を前記展開変数に分類する等価関係解析部と，
前記等価関係パターンおよび前記非等価関係パターンをもとに前記元制約情報を変換して生成した変換後制約情報において，前記元制約情報に出現する文字列変数のうち前記展開変数に分類された文字列変数のみを配列で表現し，前記展開変数に分類されなかった文字列変数を1次元変数で表現する制約変換部とを備える
ことを特徴とするデータ生成装置。
【請求項４】
コンピュータに，ソフトウェアのテストデータ生成処理を実行させるためのプログラムであって，
制約中に含まれる関係式中の文字列変数が等価であることを示す等価関係および制約中の前記等価関係に該当する関係式の変換パターンを示す等価関係パターン，ならびに，関係式中の文字列変数が等価関係以外の関係を持つことを示す非等価関係および制約中の前記非等価関係に該当する関係式の変換パターンを示す非等価関係パターンを定義する関係情報を記憶する記憶部を備える前記コンピュータに，
ソフトウェアのテスト項目および制約条件を含む元制約情報を取得して，前記元制約情報の制約条件に出現する文字列変数を抽出して，前記元制約情報および前記関係情報にもとづいて前記抽出した各文字列変数を含む関係式を前記等価関係または前記非等価関係に分類する処理と，
前記元制約情報を解析して前記非等価関係に分類された関係式の文字列変数を抽出し，前記抽出した文字列変数の各々を起点展開変数に設定する処理と，
前記元制約情報を解析して前記等価関係に分類された関係式の文字列変数を抽出し，前記抽出した等価関係の文字列変数のうち，前記起点展開変数から等価関係により辿ることができる全ての変数を取り出して，前記取り出した変数および前記起点展開変数を前記展開変数に分類する処理と，
前記等価関係パターンおよび前記非等価関係パターンをもとに前記元制約情報を変換して生成した変換後制約情報において，前記元制約情報に出現する文字列変数のうち前記展開変数に分類された文字列変数のみを配列で表現し，前記展開変数に分類されなかった文字列変数を1次元変数で表現する処理とを，実行させる
ことを特徴とするデータ生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，ソフトウェアのテストデータを生成する技術に関する。特に，本発明は，大量の文字列データを要するソフトウェアのテストデータを生成する技術に関する。
【背景技術】
【０００２】
業務アプリケーションプログラムの処理動作のテストを実施するため，テストデータの生成が行われる。
【０００３】
このようなテストデータ生成においては，テスト項目に関する前提条件，データベースのデータテーブルの相関関係等の様々な制約を同時に満たすような，画面入力データ，データベースデータ等を生成する必要がある。特に，これらのデータの大部分は文字列である。すなわち，業務アプリケーション用テストデータ生成において，文字列データを生成することが必須となっている。
【０００４】
図２７は，業務アプリケーション用テストデータにおける文字列データの例を示す図である。
【０００５】
担当者テーブル，在庫テーブルを備えて発注業務を支援する業務アプリケーション用のテストデータ生成を例にとる。発注業務アプリケーションのテスト項目の一例として，発注入力画面９０で確認ボタンが押下された場合に，“入力した「担当者」と「商品」に対応するレコードが担当者テーブル９１に存在し，かつ，入力した発注数が在庫テーブル９２内の対応する商品の在庫数以上である”という制約条件に該当するときに，“発注確認画面にエラー表示する”という動作を確認するテストがある場合に，上記の制約条件を満たすような画面入力データ，データベースデータを生成する必要がある。
【０００６】
そして，発注入力画面９０で入力される担当者（発注者），商品（発注商品），担当者テーブル９１のデータ項目の担当，商品，在庫テーブル９２の商品等，多くの文字列が生成対象となる。
【０００７】
近年，この技術分野に関しては，コンピュータの性能向上，ＳＡＴ（SATisfiability problem）やＳＭＴ（Satisfiability Modulo Theories）といった論理式の充足可能性問題に関する研究の進歩を背景として，論理式の充足可能性問題を解く装置，すなわちＳＡＴソルバ，ＳＭＴソルバ等を用いて，データが満たすべき条件の充足解を求め，これらの充足解にもとづいてテストデータを生成する技術が登場している。
【０００８】
ＳＭＴとは，述語論理式の充足可能性問題をいう。
【０００９】
ＳＭＴソルバは，ＤＰＬＬ（Ｔ）アルゴリズム等を用いて，述語論理式の充足可能性問題を解くツールである。ＳＭＴソルバの多くは，ＤＰＬＬ（Ｔ）アルゴリズム（非特許文献１の１１章参照）等を用いて，入力された制約の充足可能性を判定する。
【００１０】
なお，上記のＤＰＬＬ（Ｔ）（Davis-Putnam-Logemann-Loveland Theory）は，命題論理用の充足可能性判定アルゴリズムであるＤＰＬＬアルゴリズムを述語論理に拡張したものである。ここで，理論（Ｔ）とは，述語論理のサブセットを指すものである。例えば，“ｘ＝ｙかつｙ＝１かつｘ！＝２”といった自然数の等価関係（＝）のみから構成される論理式のクラスは，理論の１つとされる。
【００１１】
ＳＭＴソルバを利用した文字列データ生成の技術において，文字列をＡＳＣＩＩコード等の各文字に相当する数値あるいはビットベクタの配列として表現し，対応した制約の充足解をＳＭＴソルバによって求めることによってテストデータを生成するアプローチが知られている。
【先行技術文献】
【非特許文献】
【００１２】
【非特許文献１】ダニエル  クローニング（Daniel Kroening）他，「決定手続き：アルゴリズム的観点（Decision Procedures: An Algorithmic Point of View）」，ISBN:978-3540741046，２００８年
【非特許文献２】ニコライ  ブルネル（Nikolaj Bjorner）他，「文字列のパス実行可能性解析−文字列処理プログラム（Path Feasibility Analysis for String-Manipulating Programs）」，http://research.microsoft.com/pubs/81181/fulltext.pdf，２００８年１０月
【非特許文献３】アダム  ケズン（Adam Kiezun）他，「ＨＡＭＰＩ：文字列制約のためのソルバ（HAMPI: A Solver for String Constraints）」，ISSTA '09: Proceedings of the eighteenth international symposium on Software testing and analysis (2009)，pp. 105-116，http://dspace.mit.edu/handle/1721.1/44584，２００９年
【発明の概要】
【発明が解決しようとする課題】
【００１３】
上述のテストデータ生成において，制約からの文字列生成に関する処理では，制約中の文字列全てを配列として表現した制約を入力としていた。そのため，プログラムにおける関数の引数や，ＨＴＭＬにおけるフォーム入力等の小さいデータは，従来技術を用いて生成することが可能であるが，従来技術を業務アプリケーションのデータベース，画面のような大規模な文字列データの生成処理に適用した場合には，性能的な課題が発生する。
【００１４】
具体的には，従来のあるアプローチは，文字列を数値（ＡＳＣＩＩコード)の配列として表現する手法であって，各文字列に対し文字列に相当する配列の長さをＳＭＴソルバで決定し，さらに，決定した長さの固定長配列の各要素に入る数値をＳＭＴソルバで決定している。この従来アプローチでは，制約に表現する文字列について全文字列変数を配列で表現するため，制約に出現する全ての文字列変数の総文字数分の変数が必要となる。
【００１５】
しかし，業務アプリケーションでは膨大な量の文字列データを処理するのが一般的であり，数千もの文字列データの生成が必要である。したがって，全文字列を数値型（ＡＳＣＩＩコード）の配列として扱うと，文字列変数の総文字数分の変数に対応する数万〜数十万の数値変数の値を決定しなければならず，実用的な時間で計算ができないうえ，莫大な数の変数を扱うメモリが不足するという問題がある。
【００１６】
また，制約に表現する文字列のうち，本来配列として扱う必要のない文字列まで配列として扱った制約を解いてしまうため，ＳＭＴソルバによる充足可能性判定の処理効率が上がらないという問題がある。
【００１７】
よって，業務アプリケーションのようにテストデータとして大量の文字列データが必要となるケースでは，文字列変数を配列として扱うと，膨大な時間・空間計算量が必要となってしまい，従来手法を適用することは実際には非常に困難であった。
【００１８】
本発明は，このような従来技術の問題点に鑑みてなされたものであり，その目的は，業務アプリケーションのようにテストデータとして大量の文字列データを要するプログラムに対しても，実用的な時間および空間計算量でテストデータを生成することができる技術を実現するデータ生成方法，データ生成装置，およびデータ生成プログラムを提供することである。
【課題を解決するための手段】
【００１９】
本願において開示されるデータ生成方法の代表的なものの概要を簡単に説明すれば，以下のとおりである。すなわち，データ生成方法は，ソフトウェアのテストデータを生成するテストデータ生成方法であって，制約中に含まれる関係式中の文字列変数が等価であることを示す等価関係および制約中の前記等価関係に該当する関係式の変換パターンを示す等価関係パターン，ならびに，関係式中の文字列変数が等価関係以外の関係を持つことを示す非等価関係および制約中の前記非等価関係に該当する関係式の変換パターンを示す非等価関係パターンを定義する関係情報を記憶する記憶部を備えるコンピュータが実行するものである。
【００２０】
上記のテストデータ生成方法は，１）ソフトウェアのテスト項目および制約条件を含む元制約情報を取得して，前記元制約情報の制約条件に出現する文字列変数を抽出して，前記元制約情報および前記関係情報にもとづいて前記抽出した各文字列変数を含む関係式を前記等価関係または前記非等価関係に分類する処理ステップと，２）前記元制約情報を解析して前記非等価関係に分類された関係式の文字列変数を抽出し，前記抽出した文字列変数の各々を起点展開変数に設定する処理ステップと，３）前記元制約情報を解析して前記等価関係に分類された関係式の文字列変数を抽出し，前記抽出した等価関係の文字列変数のうち，前記起点展開変数から等価関係により辿ることができる全ての変数を取り出して，前記取り出した変数および前記起点展開変数を前記展開変数に分類する処理ステップと，４）前記等価関係パターンおよび前記非等価関係パターンをもとに前記元制約情報を変換して生成した変換後制約情報において，前記元制約情報に出現する文字列変数のうち前記展開変数に分類された文字列変数のみを配列で表現し，前記展開変数に分類されなかった文字列変数を1次元変数で表現する処理ステップとを有する。
【発明の効果】
【００２１】
上記の処理ステップを有するデータ生成方法によれば，制約に表現する文字列について配列で表現すべき文字列変数を必要最小限に限定することができる。
【００２２】
よって，テストデータ生成において，上記のデータ生成方法によって変換された制約条件がＳＭＴソルバへ入力されて，ＳＭＴソルバが解く制約の単位規模を抑えることができ，効率的に文字列を含むテストデータを得ることができる。
【００２３】
すなわち，ＳＭＴソルバの計算時間および消費メモリを大幅に削減することができ，従来困難であった大量の文字列データを含んだデータ生成にＳＭＴを適用することが可能となり，さまざまな制約を満たした業務アプリケーション向けデータ生成を実用時間で自動化することができる。
【００２４】
開示されるデータ生成方法を業務アプリケーションのテストデータ生成に適用した場合に，実際の業務アプリケーションのテストデータ生成用の制約において表現する文字列変数の殆どの変数は配列として扱う必要がないため，計算時間およびメモリの効率化に，顕著な効果を奏することができる。
【図面の簡単な説明】
【００２５】
【図１】本発明の一実施の形態として開示するデータ生成装置の構成例を示す図である。
【図２】一実施の形態において記憶部に記憶される関係情報の例を示す図である。
【図３】一実施の形態におけるテスト項目を説明するための図である。
【図４】一実施の形態におけるデータ生成装置の処理の流れを示す図である。
【図５】一実施の形態において，元制約情報に含まれるテスト項目および画面定義の例を示す図である。
【図６】一実施の形態において，元制約情報に含まれるテーブル定義およびテーブル間の相関関係の例を示す図である。
【図７】一実施の形態における等価関係および非等価関係の分類例を示す図である。
【図８】一実施の形態における起点展開変数の例を示す図である。
【図９】一実施の形態における等価関係解析処理を説明する図である。
【図１０】一実施の形態における制約中の画面項目およびデータ項目に関するデータ構造定義の例を示す図である。
【図１１】一実施の形態における制約中の画面項目およびデータ項目に関するデータ構造定義の例を示す図である。
【図１２】一実施の形態におけるインスタンス定義の例を示す図である。
【図１３】一実施の形態において，制約変換部によって変換された変換情報（変換後制約）の例を示す図である。
【図１４】一実施の形態における元制約充足データの例を示す図である。
【図１５】一実施の形態における，文字等を割り当てた元制約充足データの例を示す図である。
【図１６】図４に示す処理フローの「等価関係および非等価関係抽出処理（ステップＳ１０１）」の詳細フロー図である。
【図１７】図４に示す処理フローの「非等価関係解析処理（ステップＳ１０２）」の詳細フロー図である。
【図１８】図４に示す処理フローの「等価関係解析処理（ステップＳ１０３）」の詳細フロー図である。
【図１９】図１８に示す処理フローのステップＳ４０５の処理の詳細フロー図である。
【図２０】図４に示す処理フローの「制約変換処理（ステップＳ１０４）」の詳細処理フロー図である。
【図２１】図２０に示す処理フローの「データ構造定義処理（ステップＳ６０１）」の詳細処理フロー図である。
【図２２】図２０に示す処理フローの「データ構造定義処理（ステップＳ６０１）」の詳細処理フロー図である。
【図２３】図２０に示す処理フローの「元制約情報の変換処理（ステップＳ６０２）」の詳細処理フロー図である。
【図２４】図２１に示す処理フローの「テーブル型定義処理（ステップＳ７０５）」の詳細処理フロー図である。
【図２５】図４に示す処理フローの「制約充足値からのテストデータ生成処理（ステップＳ１０７）」の詳細処理フロー図である。
【図２６】一実施の形態におけるデータ生成装置のハードウェア構成例を示す図である。
【図２７】アプリケーションのソフトウェアのテスト項目の例を示す図である。
【発明を実施するための形態】
【００２６】
以下，本発明の一実施形態として開示するデータ生成装置について説明する。
【００２７】
図１は，開示するデータ生成装置１の構成例を示す図である。
【００２８】
データ生成装置１は，アプリケーションソフトウェアのテスト項目，種々の制約等を示す元制約情報２から，元制約情報２に定義された制約を充足するテスト用データ（元制約充足データ）３を出力する装置である。
【００２９】
データ生成装置１は，記憶部１０，文字列制約抽出部１１，非等価関係解析部１３，等価関係解析部１５，制約変換部１７，および制約充足データ生成部１９を有する。
【００３０】
記憶部１０は，元制約情報２の制約条件や各定義に含まれる文字列同士の関係について，制約変換処理時に，必要がある場合のみ配列として扱う文字列の関係を示す等価関係と，配列として扱う文字列の関係を示す非等価関係を定義する関係情報を記憶する記憶部である。
【００３１】
図２は，記憶部１０に記憶される関係情報の例を示す図である。
【００３２】
図２（Ａ）は，関係情報に含まれる等価関係パターン１０ａの例を示す。等価関係パターン１０ａは，制約変換処理において，必要がある場合のみ配列として扱う文字列の関係を示す定義（内容）と，文字列を配列として扱う場合に各関係の制約変換において変換されるパターン（変換パターン）とを定義する情報である。
【００３３】
図２（Ａ）に示す等価関係パターン１０ａにおいて，パターン名＝ＥＱ１のパターンは，「文字列項目Ａ＝文字列Ｂ（具体値）」の関係を「等価関係」として扱い，制約変換処理において，該当する関係の文字列を，
「forall i from 0 to 文字列Bの文字数-1 {文字列項目A[i] = 文字列Bのi文字目} かつforall j s.t. j >= 文字列Bの文字数 {文字列項目A[j] = ""(空文字)}」と変換することを示す。
【００３４】
図２（Ｂ）は，関係情報に含まれる非等価関係パターン１０ｂの例を示す。非等価関係パターン１０ｂは，制約変換処理において，配列として扱う文字列の関係を示す定義（内容）と，各関係の制約変換において変換されるパターン（変換パターン）とを定義する情報である。
【００３５】
図２（Ｂ）に示す非等価関係パターン１０ｂにおいて，パターン名＝ＮＥＱ１のパターンは，「charAt(文字列項目A, indexA) = 文字B(具体値)」の関係を「非等価関係」として扱い，制約変換処理において，該当する関係の文字列を，
「文字列項目A[indexA] = 文字B」と変換することを示す。
【００３６】
文字列制約抽出部１１は，ソフトウェアのテスト項目と，画面定義，テーブル定義，テーブル相関等の制約情報とを含む元制約情報２を取得して，取得した元制約情報２から文字列変数を抽出する。文字列変数とは，元制約情報２に出現する制約式の文字列型の項目である。
【００３７】
文字列制約抽出部１１は，元制約情報２および関係情報（等価関係パターン１０ａ，非等価関係パターン１０ｂ）を参照して，抽出した各文字列変数を含む関係式を等価関係または非等価関係に分類する。
【００３８】
非等価関係解析部１３は，文字列制約抽出部１１で非等価関係に分類された関係式を解析して，配列として扱う文字列変数（展開変数）の探索の起点とする起点展開変数を取得する。起点展開変数とは，展開項目として扱う文字列変数のリストの起点でもある。
【００３９】
等価関係解析部１５は，文字列制約抽出部１１によって等価関係に分類された関係式を解析し，非等価関係解析部１３によって抽出された起点展開変数各々について，起点展開変数から等価関係を辿ることができる全ての変数を抽出して，抽出した全変数を展開変数とし，その展開変数を起点展開変数のリストに追加する。このリストを変数分類５０とする。
【００４０】
なお，文字列制約抽出部１１によって抽出された全文字列変数のうち，展開変数とされなかった文字列変数，すなわち変数分類５０に含まれていない変数は，配列として扱わない文字列変数であり，非展開変数に分類される。
【００４１】
制約変換部１７は，元制約情報２から，制約充足データ生成部１９の入力となる制約情報（変換後制約）を生成する。制約変換部１７は，生成する制約において，元制約情報２に出現する文字列変数のうち，展開変数に分類された文字列変数のみを配列で表現し，非展開変数に分類された文字列変数を1次元変数で表現する。
【００４２】
制約充足データ生成部１９は，制約変換部１７によって生成された制約情報（変換後制約）の充足可能性問題を解き，その解（充足値）にもとづいて，元制約情報２の制約を充足するテストデータである元制約充足データ３を生成する。
【００４３】
以下に，データ生成装置１の動作を説明する。
【００４４】
本実施形態において，データ生成装置１が生成するテストデータによるテスト対象は図書館システムに含まれるソフトウェアであるとする。
【００４５】
図３は，テスト項目を説明するための図である。
【００４６】
ソフトウェアのテスト項目は，「メニュー画面４１で『貸出・予約』ボタンが押下された場合に，このボタン押下のイベントを契機にデータベース４０を参照して，ユーザが学生であり（ユーザＩＤが‘Ｓ’で始まるＩＤ），既に３冊貸し出している状態である場合に，貸出・予約画面４２に，結果コードＥ１２３４５に対応するメッセージ（これ以上の貸出はできません）を表示する」という内容とする。
【００４７】
図４は，データ生成装置１の処理の流れを示す図である。
【００４８】
ステップＳ１０１：等価関係および非等価関係抽出処理
文字列制約抽出部１１は，元制約情報２を入力して，元制約情報２に出現する文字列変数を含む関係式を等価関係と非等価関係とに分類する。
【００４９】
元制約情報２には，図５および図６に示すような，テスト項目２１，関連する画面定義２２，データベースのテーブル定義２３，テーブルの相関関係（ＥＲ関係）２４が含まれる。
【００５０】
図５（Ａ）は，テスト項目２１の例である。テスト項目２１は，テスト内容を示す情報である。ここで，テスト項目２１は，メニュー画面４１の表示中に「貸出・予約」のイベントを検出した場合のメッセージ表示動作確認テストであり，「メニュー画面４１のＩＤが‘Ｓ’で始まり，かつ，図６（Ａ）のデータベース４０のユーザテーブルに存在するものであること，メニュー画面４１のＩＤ，ユーザに対応するレコードが貸出情報テーブルに３つある」という制約を示している。
【００５１】
図５（Ｂ）は，画面定義２２の例である。画面定義２２は，画面の各入力項目に入力されるデータのデータ型，入力桁数等を示すデータテーブルである。例えば，図５（Ｂ）の画面定義２２では，メニュー画面４１の項目「ＩＤ」は，文字列型かつ１０桁のデータであるという定義が示されている。
【００５２】
図６（Ａ）はテーブル定義２３の例である。テーブル定義２３は，データベースの各データテーブルの項目，格納されるデータ型，桁数等を示すテーブルである。図６（Ａ）のテーブル定義２３では，例えば，貸出情報テーブルの「貸出ＩＤ」は，文字列型，１１桁であるという定義が示されている。
【００５３】
図６（Ｂ）は，テーブルの相関関係２４の例である。テーブルの相関関係２４は，データベース４０の各データテーブルに格納されている変数等の相関関係を示す情報である。
【００５４】
ステップＳ１０１の処理において，文字列制約抽出部１１は，元制約情報２のテスト項目２１および制約情報（テーブルの相関関係２４等）の制約式を逐次解析し，制約式中の項目の関係式を抽出して，抽出した関係式中の各項目が属する画面やテーブルを特定する。また，文字列制約抽出部１１は，関係式の抽出時に，各項目を含むテーブルと画面を一意に特定する。
【００５５】
さらに，文字列制約抽出部１１は，関係式中の項目が文字列型（文字列変数）であれば，関係情報を参照して，等価関係または非等価関係に分類する。
【００５６】
なお，関係式中の数値型，日付型等の文字列型以外の項目は除外され，論理的に等価な式が重複して存在する場合には，１つを代表して他は除去される。
【００５７】
図７は，等価関係および非等価関係の分類例を示す図である。
【００５８】
図７に示すように，「charAt(メニュー画面.ID, 0)= "S"」は，画面定義２２から，メニュー画面のデータ項目であり，データ型＝文字列，桁数＝１０であることが特定され，さらに，非等価パターンに該当するので，非等価関係に分類される。
【００５９】
また，「ユーザT(テーブル）.ユーザID)」と「メニュー画面.ID」のテーブル定義２３の定義（文字列，１０桁）が特定される。そして，「ユーザT(テーブル）.ユーザID=メニュー画面.ID」は，等価関係パターン１０ａのＥＱ２に該当するので，等価関係に分類される。
【００６０】
ステップＳ１０２：非等価関係解析処理
非等価関係解析部１３は，文字列制約抽出部１１によって非等価関係に分類された関係式を解析して，文字列変数を起点展開変数に設定する。
【００６１】
図８に示すように，起点展開変数は，配列として扱うと判断した項目（展開項目）を示すリストである変数分類５０の元となる項目である。
【００６２】
ステップＳ１０３：等価関係解析処理
等価関係解析部１５は，関係式中の文字列変数のうち等価関係に分類されたものを解析して，各起点展開変数から等価関係による繋がりを有する項目（文字列変数）を取得して，変数分類５０に追加する。
【００６３】
図９は，等価関係解析処理を説明するための図である。
【００６４】
等価関係解析部１５は，まず，起点展開変数「メニュー画面.ID」を注目変数（推移関係を辿る対象の項目）として，元制約情報２の画面定義２２，テーブル定義２３，テーブルの相関関係２４から，注目変数を含む等価関係を得る。
【００６５】
そして，等価関係解析部１５は，その等価関係において参照される項目（文字列変数）を特定して参照項目とし，その参照項目を，変数分類５０に展開項目として追加する。ここでは，「ユーザT.ユーザID」が参照項目として特定され，変数分類５０に追加される。
【００６６】
さらに，等価関係解析部１５は，参照項目（展開項目「ユーザT.ユーザID」）を注目変数として，この注目変数を含む等価関係を得て，得た等価関係において参照される項目（「貸出情報T.ユーザID」）を得て展開項目とし，変数分類５０に追加する。
【００６７】
このように，等価関係解析部１５は，起点展開変数，およびその起点展開変数から等価関係を推移的に辿ることが可能な項目全てを展開項目として変数分類５０に追加する。
【００６８】
なお，等価関係に分類された項目（文字列変数）のうち，変数分類５０に追加されなかった項目（文字列変数）は，制約中で配列として表現する必要がなく，１次元変数（例えば，整数型）として表現される。
【００６９】
ステップＳ１０４：制約変換処理
制約変換部１７は，まず，元制約情報２を，制約充足データ生成部１９が処理可能な形式の制約情報（変換後制約）に変換する。変換において，制約変換部１７は，変数分類５０に分類された文字列変数を配列で表現し，それ以外の文字列変数を整数型で表現して変換する。
【００７０】
具体的には，制約変換部１７は，元制約情報２と分類変数５０を入力して，概ね，文字列変数のデータ構造定義の設定処理と，制約情報，テスト項目情報の変換処理の２フェーズの処理を行う。
【００７１】
制約変換部１７は，データ構造定義処理として，文字列変数について，画面定義２２，テーブル定義２３の該当する項目定義にもとづいて，各項目に対応する桁数の文字列型を定義する。例えば，画面定義２２，テーブル定義２３から，型定義するべき桁数の文字列は，８桁，１０桁，１１桁，１６桁，３２桁，６４桁の文字列であるのでこれらを定義する。さらに，制約変換部１７は，例えば，各文字は０以上２５６未満の整数と定義する。
【００７２】
なお，制約変換部１７は，文字列の桁数は，画面定義２２，テーブル定義２３から設定するだけでなく，他の方法で設定してもよい。例えば，予め所定の統一的な桁数を採用したり，非特許文献２の手法によって設定してもよい。
【００７３】
次に，制約変換部１７は，画面のデータ型定義処理として，元制約情報２中に出現する各画面について，テスト項目２１，画面定義２３等を参照し，画面項目のデータ型を定義する。その際に，制約変換部１７は，各画面項目に関して，変数分類５０の展開項目（配列として扱う変数）であるかを判定する。画面項目が展開項目であれば，制約変換部１７は，その画面項目を，対応する桁数をもつ文字列型として定義し，展開項目でなければ，その画面項目を１次元変数（ここでは，整数）として定義する。
【００７４】
例えば，元制約情報２において，出現する画面は，メニュー画面４１のみであるので，メニュー画面４１の全画面項目の定義が用意される。制約変換部１７は，メニュー画面４１の画面項目「ＩＤ」が変数分類５０の展開項目であるので，画面項目「ＩＤ」を１０桁の文字列（String10 ID）として定義する。メニュー画面４１の画面項目「ユーザ」が変数分類５０の展開項目ではないので，「ユーザ」は，整数（intユーザ）として定義する。その結果，メニュー画面の定義として，「(define-type メニュー画面 (int ユーザ, String10 ID))」が生成される。
【００７５】
次に，制約変換部１７は，テーブルのデータ型定義処理として，各テーブルについて，テーブル定義２３を参照し，テーブルのデータ型を定義する。その際に，制約変換部１７は，各テーブル項目に関して，変数分類５０の展開項目であるかを判定する。テーブル項目が展開項目であれば，そのテーブル項目を，対応する桁数をもつ文字列型として定義し，展開項目でなければ，そのテーブル項目を整数として定義する。
【００７６】
図１０および図１１は，生成される画面項目およびデータ項目に関するデータ構造定義の例を示す図である。
【００７７】
図１０は，変換後制約の一部となるデータ構造定義の例を示す図である。図１１は，図１０のデータ構造定義をテーブルで模式的に示す図である。
【００７８】
図１０のデータ構造定義では，変数分類５０の展開項目である項目が配列（StringN(Nは桁数））として，それ以外の項目が１次元変数（int）として定義されている。
【００７９】
図１１に示すように，充足解の算出処理において，配列として表現される展開項目は桁数分の数値変数が処理対象となるが，展開項目以外の項目は１次元変数で処理すればよく，処理対象となる数値変数の量が大幅に減少されることがわかる。
【００８０】
さらに，制約変換部１７は，テーブル・画面のインスタンス定義処理として，制約充足データ生成部１９が，解（充足値）を求める対象である，各画面型，テーブル型の変数(インスタンス)を定義する。
【００８１】
図１２は，インスタンス定義の例を示す図である。図１２に示すように，メニュー画面のインスタンス「メニュー画面_I」，ユーザテーブルのインスタンス「ユーザT_I」，図書テーブルのインスタンス「図書T_I」，貸出テーブルのインスタンス「貸出T_I」の各定義が生成される。
【００８２】
次に，制約変換部１７は，元制約情報２の変換を行う。
【００８３】
より詳しくは，制約変換部１７は，元制約情報２中の各関係式において出現する項目が，変数分類５０の展開項目であるかどうかをチェックする。関係式に出現する項目が展開項目であれば，制約変換部１７は，関係情報の等価関係パターン１０ａ，非等価関係パターン１０ｂを参照して，その関係式を該当する変換パターンを用いて書き換える。関係式に出現する項目が展開項目でなければ，その関係式を維持して，必要に応じてインスタンス名の変更のみを行う。
【００８４】
一例として，制約変換部１７は，テーブルの相関関係２４の「rec1.ユーザID = rec2.ユーザID」について，「rec1」は貸出情報テーブル，「rec2」はユーザテーブルのレコードであって，「貸出情報T.ユーザID」と「ユーザT.ユーザID」が変数分類５０の展開項目であり，かつ，この関係式が関係情報１０の等価関係パターン１０ａのＥＱ２に該当するので，その変換パターンにもとづいて「forall i from 0 to 9 rec1.ユーザID[i] = rec2.ユーザID[i]」と変換する。
【００８５】
また，制約変換部１７は，テスト項目２１の「(charAt(メニュー画面.ID, 0) = "S")」について，「メニュー画面.ID」が変数分類５０の展開項目であり，この関係式が非等価関係パターン１０ｂのＮＥＱ１に該当するので，その変換パターンにもとづいて，「(メニュー画面_I.ID[0] = "S")」と変換する。
【００８６】
さらに，制約変換部１７は，テスト項目２１の「rec1.ユーザID=メニュー画面.ID 
」について，「メニュー画面.ID」が変数分類５０の展開項目であり，「rec1」はユーザテーブルのレコードであり，さらに「ユーザT.ユーザID」が展開項目であり，この関係式が関係情報１０の等価関係パターン１０ａのＥＱ２に該当するので，その変換パターンにもとづいて，「(forall i from 0 to 9 rec1.ユーザID[i]=メニュー画面_I.ID[i]) 」と変換する。
【００８７】
なお，"S"，"test"等の具体的な文字や文字列が変換対象に出現する場合には，制約変換部１７は，それらの具体的な文字(列)に対応する定数値を，事前に与えておく。例えば，"S"は，整数８３（ＳのＡＳＣＩＩコード）と等価な定数とする。なお，このような定数値については，対応表を用いて別の値にマッピングするようにしてもよい。
【００８８】
図１３は，制約変換部１７によって変換された変換情報（変換後制約）の例を示す図である。図１３に示す変換情報が，制約充足データ生成部１９の入力となる。
【００８９】
ステップＳ１０５：制約情報（変換後制約）の解算出処理
制約充足データ生成部１９は，制約変換部１７によって変換された制約情報（変換後制約）について，充足可能性問題を解き，解を算出する。充足可能性問題の解算出の処理は，既知のＳＭＴソルバの機能によって実現される。
【００９０】
制約充足データ生成部１９は，まず，入力された制約情報から，論理的な最小単位である原子論理式に対応する命題論理式を得る。そして，制約充足データ生成部１９は，入力された制約情報の各原子論理式を対応する命題論理式で変換した論理式が充足可能であるように，各命題論理式に対して真偽値を与えていく。制約充足データ生成部１９は，原子論理式の真偽値が対応する各命題論理式の真偽値と一致するように，その原子論理式に出現するインスタンス(変数)の具体的な充足値が得られるかを試行する。
【００９１】
ステップＳ１０６：充足可能性の判定処理
制約充足データ生成部１９は，ステップＳ１０５の処理における上記の試行の結果，実際に各インスタンスの具体的な充足値を得た場合に，入力された制約情報を充足可能と判定して（Ｓ１０６のＹ），ステップＳ１０７の処理へ進み，各インスタンスの具体的な充足値を得られなかった場合に（Ｓ１０６のＮ），ステップＳ１０８の処理へ進む。
【００９２】
ステップＳ１０７：制約充足値からのテストデータ生成処理
制約充足データ生成部１９は，入力された制約情報を充足可能と判定した場合に，試行で得た各インスタンスの充足値をもとに具体的な値を割り当てたデータを生成し，元制約充足データ３（テストデータ）として出力する。
【００９３】
図１４および図１５は，テストデータとなる元制約充足データ３の例を示す図である。
【００９４】
図１４に示す元制約充足データ３は，入力された制約情報が充足可能と判定された場合における各インスタンスの充足値によって示す状態である。
【００９５】
図１５は，図１４の元制約充足データ３の各インスタンスの値を，ASCIIコード，所定の対応表をもとに変換した値で示す状態である。
【００９６】
制約充足データ生成部１９は，図１４に示す元制約充足データ３の，配列として表現されたユーザＩＤ（char）について，各桁のインスタンスに与えられた充足値をＡＳＣＩＩコードとみなして文字に変換し，各桁（文字）を連結してユーザＩＤを生成する。さらに，制約充足データ生成部１９は，１次元変数として表現されたユーザ名，メールアドレス，電話番号，書籍ＩＤ，書籍名等について，変数値（int）をもとに，所定の対応表に従って対応する値に変換して，各データを生成する。
【００９７】
ステップＳ１０８：データ生成失敗の通知処理
制約充足データ生成部１９は，入力された制約情報を充足不能と判定した場合に，元制約充足データ３の生成失敗の旨のメッセージを通知する。
【００９８】
図１６〜図２５を用いて，図４に示す処理フローの各処理ステップの処理内容を，より詳細に説明する。
【００９９】
図１６は，図４に示す処理フローの「等価関係および非等価関係抽出処理（ステップＳ１０１）」の詳細フロー図である。
【０１００】
文字列制約抽出部１１は，元制約情報２のテスト項目２１および画面定義２２，テーブル定義２３，テーブルの相関関係２４等の制約情報中の全関係式を解析したかを判定する（ステップＳ２０１）。
【０１０１】
全関係式を解析していれば（ステップＳ２０１のＹ），文字列制約抽出部１１は，処理を終了するが，全関係式を抽出していなければ（ステップＳ２０１のＮ），未解析の関係式を得る（ステップＳ２０２）。文字列制約抽出部１１は，関係式に出現する項目が属するテーブル，画面を特定し（ステップＳ２０３），関係式に出現する項目のデータ型を特定する（ステップＳ２０４）。
【０１０２】
さらに，文字列制約抽出部１１は，関係式が関係情報の等価関係パターン１０ａにマッチするかを判定する（ステップＳ２０５）。関係式が関係情報の等価関係パターン１０ａにマッチすれば（ステップＳ２０５のＹ），文字列制約抽出部１１は，重複する等価関係が既に登録されているかを調べる（ステップＳ２０６）。重複する等価関係が既に登録されていれば（ステップＳ２０６のＹ），文字列制約抽出部１１は，ステップＳ２０１の処理へ戻り，重複する等価関係が登録されていなければ（ステップＳ２０６のＮ），その関係式を等価関係に分類する（ステップＳ２０７）。
【０１０３】
関係式が関係情報の等価関係パターン１０ａにマッチしなければ（ステップＳ２０５のＮ），文字列制約抽出部１１は，その関係式が非等価関係パターン１０ｂにマッチするかを判定する（ステップＳ２０８）。関係式が非等価関係パターン１０ｂにマッチしていれば（ステップＳ２０８のＹ），文字列制約抽出部１１は，重複する非等価関係が既に登録されているかを調べる（ステップＳ２０９）。重複する等価関係が登録されていなければ（ステップＳ２０９のＮ），文字列制約抽出部１１は，その関係式を非等価関係に分類する（ステップＳ２１０）。
【０１０４】
関係式が非等価関係パターン１０ｂにマッチしていない（ステップＳ２０８のＮ），もしくは，重複する等価関係が既に登録されていれば（ステップＳ２０９のＹ），文字列制約抽出部１１は，ステップＳ２０１の処理へ戻る。
【０１０５】
図１７は，図４に示す処理フローの「非等価関係解析処理（ステップＳ１０２）」の詳細フロー図である。
【０１０６】
非等価関係解析部１３は，全ての非等価関係を解析したかを判定する（ステップＳ３０１）。全非等価関係を解析していれば（ステップＳ３０１のＹ），非等価関係解析部１３は，処理を終了するが，全非等価関係を解析していなければ（ステップＳ３０１のＮ），未解析の非等価関係を得る（ステップＳ３０２）。
【０１０７】
非等価関係解析部１３は，非等価関係中の全ての項目を解析したかを判定する（ステップＳ３０３）。非等価関係中の全ての項目を解析していなければ（ステップＳ３０３のＮ），非等価関係解析部１３は，未解析の項目を得て（ステップＳ３０４），その項目が起点展開変数に登録されているか調べる（ステップＳ３０５）。その項目が起点展開変数に登録されてなければ（ステップＳ３０５のＮ），非等価関係解析部１３は，その項目を起点展開変数に登録し（ステップＳ３０６），その項目が起点展開変数に登録されていれば（ステップＳ３０５のＹ），ステップＳ３０３の処理へ戻る。
【０１０８】
非等価関係中の全ての項目を解析していれば（ステップＳ３０３のＹ），非等価関係解析部１３は，ステップＳ３０１の処理へ戻る。
【０１０９】
図１８は，図４に示す処理フローの「等価関係解析処理（ステップＳ１０３）」の詳細フロー図である。
【０１１０】
等価関係解析部１５は，起点展開変数中の全ての展開項目を解析したかを判定する（ステップＳ４０１）。起点展開変数中の全ての展開項目を解析していれば（ステップＳ４０１のＹ），処理を終了するが，起点展開変数中の全ての展開項目を解析していなければ（ステップＳ４０１のＮ），等価関係解析部１５は，未解析の展開項目を得て（ステップＳ４０２），その展開項目が変数分類５０に登録されているか調べる（ステップＳ４０３）。その展開項目が変数分類５０に登録されてなければ（ステップＳ４０３のＮ），等価関係解析部１５は，その展開項目を変数分類５０に追加し（ステップＳ４０４），さらに，等価関係を辿ることが可能な展開項目の解析を行う（ステップＳ４０５）。
【０１１１】
その展開項目が変数分類５０に既に登録されているときは（ステップＳ４０３のＮ），等価関係解析部１５は，ステップＳ４０１の処理へ戻る。
【０１１２】
図１９は，図１８に示す処理フローのステップＳ４０５の処理の詳細なフロー図である。
【０１１３】
等価関係解析部１５は，起点展開変数を注目変数とし（ステップＳ５０１），さらに，注目変数を含む等価関係を得る（ステップＳ５０２）。等価関係解析部１５は，等価関係を全て解析したかを判定して（ステップＳ５０３），等価関係を全て解析していれば（ステップＳ５０３のＹ），変数分類５０中の展開項目のうち，未注目の項目が存在するかを判定する（ステップＳ５０４）。
【０１１４】
未注目の項目が存在すれば（ステップＳ５０４のＹ），等価関係解析部１５は，未注目の項目を選んで，注目変数として（ステップＳ５０５），ステップＳ５０２の処理へ戻る。未注目の項目が存在しなければ（ステップＳ５０４のＮ），等価関係解析部１５は，処理を終了する。
【０１１５】
ステップＳ５０３で，等価関係を全て解析していなければ（ステップＳ５０３のＮ），等価関係解析部１５は，未解析の等価関係を得て（ステップＳ５０６），等価関係において，注目変数から参照される項目（推移関係を1ホップ辿ることで到達可能な項目）を全て得て，参照項目とする（ステップＳ５０７）。
【０１１６】
そして，等価関係解析部１５は，参照項目が変数分類５０中の展開項目に登録されているかを調べて（ステップＳ５０８），展開項目に登録されていなければ（ステップＳ５０８のＮ），その参照項目を，変数分類５０中に展開項目として登録する（ステップＳ５０９）。展開項目に登録されていれば（ステップＳ５０８のＹ），等価関係解析部１５は，ステップＳ５０３の処理へ戻る。
【０１１７】
図２０は，図４に示す処理フローの「制約変換処理（ステップＳ１０４）」の詳細フロー図である。
【０１１８】
制約変換部１７は，元制約情報２を入力して，データ構造定義処理を行い（ステップＳ６０１），さらに，元制約情報２の（テスト項目２１，画面定義２２，データ定義２３，データの相関関係２４等）の変換処理を行い，元制約充足データ３を出力する（ステップＳ６０２）。
【０１１９】
図２１および図２２は，図２０に示す処理フローの「データ構造定義処理（ステップＳ６０１）」の詳細処理フロー図である。
【０１２０】
制約変換部１７は，画面定義２２，テーブル定義２３に出現する文字列項目の桁数を収集し（ステップＳ７０１），収集した各桁数に応じた文字列型を定義する（ステップＳ７０２）。さらに，制約変換部１７は，テスト項目２１，制約情報（画面定義２２，テーブル定義２３，データの相関関係２４）に出現する画面を特定する（ステップＳ７０３）。
【０１２１】
制約変換部１７は，全画面の型を定義したかを判定し（ステップＳ７０４），全画面の型を定義したら（ステップＳ７０４のＹ），テーブル型定義処理を行い（ステップＳ７０５），定義した各型に対応するインスタンスを定義して（ステップＳ７０６），処理を終了する。
【０１２２】
制約変換部１７は，全画面の型を定義していなければ（ステップＳ７０４のＮ），型が未定義の画面を選択して（ステップＳ７０７），選択した画面における全画面項目の型付けを行ったかを判定する（ステップＳ７０８）。選択した画面における全画面項目の型付けを行っていれば（ステップＳ７０８のＹ），制約変換部１７は，画面項目の型付けをもとに画面型を定義する（ステップＳ７０９）。
【０１２３】
選択した画面における全画面項目の型付けを行っていなければ（ステップＳ７０８のＮ），制約変換部１７は，型付けを行っていない画面項目を選択して（ステップＳ７１０），その画面項目が変数分類５０の展開項目であるかを調べる（ステップＳ７１１）。その画面項目が展開項目であれば（ステップＳ７１１のＹ），制約変換部１７は，その画面項目を文字列型とし（ステップＳ７１２），展開項目でなければ（ステップＳ７１１のＮ），その画面項目を整数型とする（ステップＳ７１３）。
【０１２４】
図２３は，図２０に示す処理フローの「元制約情報の変換処理（ステップＳ６０２）」の詳細処理フロー図である。
【０１２５】
制約変換部１７は，元制約情報２を構成する全関係式をチェックしたかを判定する（ステップＳ９０１）。元制約情報２を構成する全関係式をチェックしていれば（ステップＳ９０１のＹ），制約変換部１７は，変換対象の関係式に紐付いた変換後の表現をもとに，変換後の制約式を出力して（ステップＳ９０２），処理を終了する。
【０１２６】
元制約情報２を構成する全関係式をチェックしていなければ（ステップＳ９０１のＮ），制約変換部１７は，未チェックの関係式を選択し（ステップＳ９０３），その関係式中の展開項目を特定する（ステップＳ９０４）。
【０１２７】
さらに，制約変換部１７は，その関係式が関係情報１０の等価関係パターン１０ａにマッチするかを判定する（ステップＳ９０５）。関係式が等価関係パターン１０ａにマッチすれば（ステップＳ９０５のＹ），制約変換部１７は，マッチしたパターン（等価関係パターン１０ａ）に従って，変換後の表現を関係式に紐付ける（ステップＳ９０６）。
【０１２８】
関係式が等価関係パターン１０ａにマッチしなければ（ステップＳ９０５のＮ），制約変換部１７は，その関係式が非等価関係パターン１０ｂにマッチするかを判定する（ステップＳ９０７）。関係式が非等価関係パターン１０ｂにマッチすれば（ステップＳ９０７のＹ），制約変換部１７は，マッチしたパターン（非等価関係パターン１０ｂ）に従って，変換後の表現を関係式に紐付けて（ステップＳ９０６），処理を終了する。
【０１２９】
関係式が非等価関係パターン１０ｂにマッチしなければ（ステップＳ９０７のＮ），制約変換部１７は，ステップＳ９０１の処理へ戻る。
【０１３０】
図２４は，図２１に示す処理フローの「テーブル型定義処理（ステップＳ７０５）」の詳細処理フロー図である。
【０１３１】
制約変換部１７は，全テーブル型を定義したかを判定し（ステップＳ８０１），全テーブル型を定義していれば（ステップＳ８０１のＹ），処理を終了するが，全テーブル型を定義していなければ（ステップＳ８０１のＮ），型が未定義のテーブルを選択する（ステップＳ８０２）。
【０１３２】
そして，制約変換部１７は，選択したテーブルにおける全テーブル項目の型付けを行ったかを調べる（ステップＳ８０３）。全テーブル項目の型付けを行っていれば（ステップＳ８０３のＹ），制約変換部１７は，テーブル項目の型付けを元にレコード型，テーブル型を定義して（ステップＳ８０４），ステップＳ８０１の処理へ戻る。
【０１３３】
全テーブル項目の型付けを行っていなければ（ステップＳ８０３のＮ），制約変換部１７は，型付けを行っていないテーブル項目を選択して（ステップＳ８０５），そのテーブル項目が変数分類５０の展開項目であるかを調べる（ステップＳ８０６）。制約変換部１７は，そのテーブル項目が展開項目であれば（ステップＳ８０６のＹ），そのテーブル項目を文字列型とし（ステップＳ８０７），そのテーブル項目が展開項目でなければ（ステップＳ８０６のＮ），そのテーブル項目を整数型とする（ステップＳ８０８）。
【０１３４】
図２５は，図４に示す処理フローの「制約充足値からのテストデータ生成処理（ステップＳ１０７）」の詳細処理フロー図である。
【０１３５】
制約充足データ生成部１９は，変数分類５０の展開項目に対応する文字列インスタンスを構成する配列要素に与えられた充足値に対して，充足値に対応する文字を割り当て，結合する（ステップＳ１００１）。
【０１３６】
さらに，制約充足データ生成部１９は，展開項目以外の文字列に相当する整数型インスタンスに与えられた充足値に対して，充足値に対応する文字列を割り当て（ステップＳ１００２），処理を終了する。
【０１３７】
次に，図２６に，データ生成装置１のハードウェア構成例を示す。
【０１３８】
データ生成装置１は，演算装置（ＣＰＵ）１０１，一時記憶装置（ＤＲＡＭ，フラッシュメモリ等）１０２，永続性記憶装置（ＨＤＤ，フラッシュメモリ等）１０３，および，ネットワークＮとのネットワークインターフェース１０４を有するコンピュータ１００と，入力装置（キーボード，マウス等）１２０と出力装置（ディスプレイ，プリンタ等）１３０とによって実施することができる。
【０１３９】
また，データ生成装置１は，コンピュータ１００が実行可能なプログラムによって実施することができる。この場合に，データ生成装置１が有すべき機能の処理内容を記述したプログラムが提供される。提供されたプログラムをコンピュータ１００が実行することによって，上記説明したデータ生成装置１の処理機能がコンピュータ１００上で実現される。
【０１４０】
すなわち，データ生成装置１の文字列制約抽出部１１，非等価関係解析部１３，等価関係解析部１５，制約変数部１７，制約充足データ生成部１９等は，プログラムで構成することができ，これらのプログラムが一時記憶装置１０２にロードされて実行されることにより，各処理部の機能が実現される。また，必要な情報，元制約情報２，関係情報１０等は永続性記憶装置１０３に格納される。
【０１４１】
なお，コンピュータ１００は，可搬型記録媒体から直接プログラムを読み取り，そのプログラムに従った処理を実行することもできる。また，コンピュータ１００は，サーバコンピュータからプログラムが転送されるごとに，逐次，受け取ったプログラムに従った処理を実行することもできる。
【０１４２】
さらに，このプログラムは，コンピュータ１００で読み取り可能な記録媒体に記録しておくことができる。
【０１４３】
以上説明したように，開示したデータ生成装置１によれば，次のような効果がある。
【０１４４】
データ生成装置１においては，非等価関係解析部１３および等価関係解析部１５によって，元制約情報２に出現する文字列変数のうち，配列で表現すべき文字列変数を必要最小限に限定することができる。すなわち，データ生成処理で必要な変数が，展開変数の総文字数と非展開変数の総数の和に削減される。
【０１４５】
また，制約情報の表現において，配列として扱うことが必須の文字列以外は1次元の変数として扱われるので，制約に出現する変数の数が少なくなる。
【０１４６】
これによって，既知のＳＭＴソルバを用いた制約充足データ生成部１９が解く充足可能性問題の規模が小さくなる。
【０１４７】
よって，制約充足データ生成部１９が充足解を求めるために必要な処理時間・空間計算量を大幅に削減することができ，実用的な時間・空間計算量で制約を解くことができる。すなわち，これまで困難であった大量の文字列データを含むようなデータ生成処理に，ＳＭＴソルバ機能を適用することが可能となる。
【０１４８】
特に，業務アプリケーションのテストデータ生成用の制約において，制約に出現する変数のほとんどは，配列として扱う必要がないため，充足可能性問題の規模を小さくするという上記作用の効果が顕著である。
【符号の説明】
【０１４９】
１  データ生成装置
１０  記憶部
１１  文字列制約抽出部
１３  非等価関係解析部
１５  等価関係解析部
１７  制約変換部
１９  制約充足データ生成部
２  元制約情報
３  元制約充足データ
【図１】
0005447054.tif 000002
【図２】
0005447054.tif 000003
【図３】
0005447054.tif 000004
【図４】
0005447054.tif 000005
【図５】
0005447054.tif 000006
【図６】
0005447054.tif 000007
【図７】
0005447054.tif 000008
【図８】
0005447054.tif 000009
【図９】
0005447054.tif 000010
【図１０】
0005447054.tif 000011
【図１１】
0005447054.tif 000012
【図１２】
0005447054.tif 000013
【図１３】
0005447054.tif 000014
【図１４】
0005447054.tif 000015
【図１５】
0005447054.tif 000016
【図１６】
0005447054.tif 000017
【図１７】
0005447054.tif 000018
【図１８】
0005447054.tif 000019
【図１９】
0005447054.tif 000020
【図２０】
0005447054.tif 000021
【図２１】
0005447054.tif 000022
【図２２】
0005447054.tif 000023
【図２３】
0005447054.tif 000024
【図２４】
0005447054.tif 000025
【図２５】
0005447054.tif 000026
【図２６】
0005447054.tif 000027
【図２７】
0005447054.tif 000028