(57)【特許請求の範囲】
【請求項１】
データ定義文を含み且つテストデータに関する制約を格納する制約データ格納部に格納されている前記制約における前記データ定義文に含まれる文字列型のデータ項目を数値型のデータ項目に変換し、変換した前記データ項目を変換項目一覧格納部に格納する型変換ステップと、
型変換後の前記制約を満たすデータを求め、制約充足解データとして記憶装置に格納する制約充足解算出ステップと、
前記記憶装置に格納されている前記制約充足解データから、前記変換項目一覧格納部に格納されている前記データ項目に係る数値を収集するステップと、
収集した各数値について、当該数値に対応する文字列を生成し、生成した前記文字列を当該数値と対応付けて対応表データ格納部に格納する対応表生成ステップと、
前記記憶装置に格納されている前記制約充足解データにおいて、前記変換項目一覧格納部に格納されている前記データ項目に係る各数値を、前記対応表データ格納部に格納され且つ当該数値に対応する前記文字列で置換することにより、型変換前の前記制約を満たすテストデータを生成するステップと、
をコンピュータに実行させるためのテストデータ生成プログラム。
【請求項２】
前記型変換ステップが、
条件付き文字列型のデータ項目が前記データ定義文に含まれる場合、当該条件付き文字列型のデータ項目を、当該条件付き文字列型に対応する数値型のデータ項目に変換するステップと、
前記条件付き文字列型毎に当該条件付き文字列型に対応する数値型の値域を格納する値域一覧格納部から、変換した前記データ項目に係る数値型の値域を抽出し、前記条件付き文字列型に対応する数値型と抽出した値域とを含むデータ定義文を前記制約に追加するステップと、
を含み、
前記対応表生成ステップが、
収集した各数値について、当該数値を基に前記値域一覧格納部を検索し、前記値域一覧格納部に格納されているいずれかの値域内の数値であるか判断するステップと、
収集した数値のうち、前記値域一覧格納部に格納されているいずれかの値域内であると判断された数値について、前記値域一覧格納部から、当該数値に対応する前記条件付き文字列型を特定し、特定した前記条件付き文字列型に適合し且つ当該数値に対応する文字列を生成するステップと、
を含む、請求項１記載のテストデータ生成プログラム。
【請求項３】
前記対応表生成ステップが、
収集した各数値について、当該数値に所定の文字列を付加することにより、当該数値に対応する文字列を生成するステップ
を含む、請求項１のテストデータ生成プログラム。
【請求項４】
データ定義文を含み且つテストデータに関する制約を格納する制約データ格納部に格納されている前記制約における前記データ定義文に含まれる文字列型のデータ項目を数値型のデータ項目に変換し、変換した前記データ項目を変換項目一覧格納部に格納する型変換ステップと、
型変換後の前記制約を満たすデータを求め、制約充足解データとして記憶装置に格納する制約充足解算出ステップと、
前記記憶装置に格納されている前記制約充足解データから、前記変換項目一覧格納部に格納されている前記データ項目に係る数値を収集するステップと、
収集した各数値について、当該数値に対応する文字列を生成し、生成した前記文字列を当該数値と対応付けて対応表データ格納部に格納する対応表生成ステップと、
前記記憶装置に格納されている前記制約充足解データにおいて、前記変換項目一覧格納部に格納されている前記データ項目に係る各数値を、前記対応表データ格納部に格納され且つ当該数値に対応する前記文字列で置換することにより、型変換前の前記制約を満たすテストデータを生成するステップと、
を含み、コンピュータにより実行されるテストデータ生成方法。
【請求項５】
データ定義文を含み且つテストデータに関する制約を格納する制約データ格納部と、
変換項目一覧格納部と、
対応表データ格納部と、
前記制約データ格納部に格納されている前記制約における前記データ定義文に含まれる文字列型のデータ項目を数値型のデータ項目に変換し、変換した前記データ項目を前記変換項目一覧格納部に格納する型変換手段と、
型変換後の前記制約を満たすデータを求め、制約充足解データとして記憶装置に格納する制約充足解算出手段と、
前記記憶装置に格納されている前記制約充足解データから、前記変換項目一覧格納部に格納されている前記データ項目に係る数値を収集する収集手段と、
収集した各数値について、当該数値に対応する文字列を生成し、生成した前記文字列を当該数値と対応付けて前記対応表データ格納部に格納する対応表生成手段と、
前記記憶装置に格納されている前記制約充足解データにおいて、前記変換項目一覧格納部に格納されている前記データ項目に係る各数値を、前記対応表データ格納部に格納され且つ当該数値に対応する前記文字列で置換することにより、型変換前の前記制約を満たすテストデータを生成する文字列置換手段と、
を有するテストデータ生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、業務アプリケーションのテストで使用されるテストデータを自動生成する分野の技術に関する。
【背景技術】
【０００２】
業務アプリケーションのテストを行う際には、例えば図１に示すように、テスト項目の内容、業務アプリケーションにおける画面項目定義や画面遷移定義、テーブル定義、ＥＲ図（Entity Relationship Diagram）などの様々な制約を全て満たすテストデータを準備する必要がある。例えば、商品の在庫が足りない場合には、受注できないようになっている業務アプリケーションに対して、「発注入力画面で確認ボタン押下時に、入力された担当者及び商品に対応するレコードが担当者テーブルに存在し、かつ入力された発注数が在庫テーブル内の対応する商品の在庫数を超えている場合、発注確認画面でエラー表示されることを確認」というテストを行う際には、これらの制約を満たす発注入力画面、担当者テーブル及び在庫テーブルのデータを準備する必要がある。また、業務アプリケーションでは、文字列型のデータを扱うため、文字列を含むテストデータを生成することが必須となってくる。例えば図１では、発注入力画面の「担当者」「商品」、担当者テーブルの「担当」「商品」「承認者」、在庫テーブルの「商品」などが、文字列型のデータとなる。
【０００３】
一方、様々な制約を同時に満たすデータを生成する技術として、充足可能性問題を解くＳＭＴ（Satisfiability Modulo Theories：充足可能性モジュロ理論）ソルバを利用したデータ生成技術が存在する。なお、ＳＭＴソルバの詳細については非特許文献２及び３などを参照のこと。また、ＳＭＴソルバを利用した文字列データ生成技術として、例えば非特許文献１記載の技術などが存在している。
【０００４】
この従来技術では、数値型配列を用いて、各文字をＡＳＣＩＩ（American Standards Committee for Information Interchange）コードで表すことにより、１つの文字列を表現するようになっている。また、この従来技術では、図２に示すような流れで文字列データを生成するようになっている。具体的には、図２に示すように、「文字列Ａ＝文字列Ｂ  かつ  文字列Ａの長さ＞＝５」という制約があった場合、文字列Ａと文字列Ｂとは同一文字列であることから、文字列Ａと文字列Ｂの長さは同一となる。従って、「Ａ.ｌｅｎｇｔｈ＝Ｂ．ｌｅｎｇｔｈ  ａｎｄ  Ａ．ｌｅｎｇｔｈ＞＝５」という論理式が導き出される。なお、「Ａ．ｌｅｎｇｔｈ」は文字列Ａの長さを意味する。そして、ＳＭＴソルバを利用して、この論理式を満たす解（すなわち、文字列の長さ）を特定する。ここでは、文字列の長さが５に特定されたものとする。この場合、文字列Ａは、数値型配列Ａ[０]〜Ａ[４]によって表され、文字列Ｂは、数値型配列Ｂ[０]〜Ｂ[４]によって表される。
【０００５】
そして、上で述べたように文字列Ａと文字列Ｂとは同一文字列であることから、Ａ[ｉ]＝Ｂ[ｉ]となる（ｉ＝０〜４）。従って、「Ａ[０]＝Ｂ[０]  ａｎｄ  Ａ[１]＝Ｂ[１]  ａｎｄ  Ａ[２]＝Ｂ[２]  ａｎｄ  Ａ[３]＝Ｂ[３]  ａｎｄ  Ａ[４]＝Ｂ[４]」という論理式が導き出される。そして、ＳＭＴソルバを利用して、この論理式を満たす解を１つ特定する。ここでは、論理式を満たす解として、Ａ[０]＝Ｂ[０]＝６５（すなわち、文字「Ａ」）、Ａ[１]＝Ｂ[１]＝６６（すなわち、文字「Ｂ」）、Ａ[２]＝Ｂ[２]＝６７（すなわち、文字「Ｃ」）、Ａ[３]＝Ｂ[３]＝６８（すなわち、文字「Ｄ」）、Ａ[４]＝Ｂ[４]＝６９（すなわち、文字「Ｅ」）が特定されたものとする。その後、ＡＳＣＩＩコードを文字に置き換え、文字列に変換することにより、文字列Ａ＝文字列Ｂ＝“ＡＢＣＤＥ”という文字列データが生成される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】ＷＯ２００５／０７１６０９公報
【特許文献２】特開平８−３２９１６５号公報
【非特許文献】
【０００７】
【非特許文献１】Nikolaj Bjorner, Nikolai Tillmann and Andrei Voronkov, "Path Feasibility Analysis for String-Manipulating Programs", Proc. of TACAS 2009, Tools and Algorithms for the Construction and Analysis of Systems, LNCS, vol 5505, pages 307-321, March 2009.
【非特許文献２】Armin Biere, Marijn Heule, Hans Van Maaren, Toby Walsh, "Handbook of Satisfiability(Frontiers in Artificial Intelligence and Applications)", IOS Press, 2009/2
【非特許文献３】R.E. Bryant, Daniel Kroening, Ofer Strichman, "Decision Procedures: An Algorithmic Point of View(Texts in Theoretical Computer Science. An EATCS Series)", Springer, 2008/7/7
【発明の概要】
【発明が解決しようとする課題】
【０００８】
以上述べたように、従来技術では、１つの文字列を数値型配列で表現するようになっているため、１つの文字列につき、数値型配列の要素数分の値をＳＭＴソルバによって求めなければならない。例えば、１つの文字列の文字数が数十から数百であったとすると、数千もの文字列を生成するためには、数万から数十万もの値をＳＭＴソルバによって求めなければならない。この場合、ＳＭＴソルバによる計算量が膨大になり、実用的な時間で計算することができない。従って、多くの文字列を生成する場合には、あまり実現的な技術ではない。また、大量のメモリを消費することになり、メモリ不足などの問題が生じる可能性もある。
【０００９】
従って、本技術の目的は、多くの文字列を生成する場合でも、計算量を最小限に抑えつつ、文字列を含むテストデータを自動生成することである。
【課題を解決するための手段】
【００１０】
本テストデータ生成方法は、データ定義文を含み且つテストデータに関する制約を格納する制約データ格納部に格納されている制約におけるデータ定義文に含まれる文字列型のデータ項目を数値型のデータ項目に変換し、変換したデータ項目を変換項目一覧格納部に格納する型変換ステップと、型変換後の制約を満たすデータを求め、制約充足解データとして記憶装置に格納する制約充足解算出ステップと、記憶装置に格納されている制約充足解データから、変換項目一覧格納部に格納されているデータ項目に係る数値を収集するステップと、収集した各数値について、当該数値に対応する文字列を生成し、生成した文字列を当該数値と対応付けて対応表データ格納部に格納する対応表生成ステップと、記憶装置に格納されている制約充足解データにおいて、変換項目一覧格納部に格納されているデータ項目に係る各数値を、対応表データ格納部に格納され且つ当該数値に対応する文字列で置換することにより、型変換前の制約を満たすテストデータを生成するステップとを含む。
【発明の効果】
【００１１】
多くの文字列を生成する場合でも、計算量を最小限に抑えつつ、文字列を含むテストデータを自動生成できる。
【図面の簡単な説明】
【００１２】
【図１】図１は、テストデータの概要を説明するための図である。
【図２】図２は、従来手法の流れを示す図である。
【図３】図３は、本技術の第１の実施の形態に係るテストデータ生成装置の機能ブロック図である。
【図４】図４は、制約データ格納部に格納される制約の一例を示す図である。
【図５】図５は、対応表データ格納部に格納される対応表の一例を示す図である。
【図６】図６は、テストデータ生成装置のメインの処理フローを示す図である。
【図７】図７は、型変換処理の処理フローを示す図である。
【図８】図８は、型変換処理により生成される制約と変換項目一覧の一例を示す図である。
【図９】図９は、制約充足解データの一例を示す図である。
【図１０】図１０は、対応表生成処理の処理フローを示す図である。
【図１１】図１１は、対応表生成処理により生成される対応表の一例を示す図である。
【図１２】図１２は、文字列置換処理の処理フローを示す図である。
【図１３】図１３は、文字列置換処理により生成されるテストデータの一例を示す図である。
【図１４】図１４は、本技術の第２の実施の形態に係るテストデータ生成装置の機能ブロック図である。
【図１５】図１５は、値域一覧データ格納部に格納される値域一覧の一例を示す図である。
【図１６】図１６は、型変換処理２の処理フローを示す図である。
【図１７】図１７は、型変換処理２により生成される制約と変換項目一覧の一例を示す図である。
【図１８】図１８は、制約充足解データの一例を示す図である。
【図１９】図１９は、対応表生成処理２の処理フローを示す図である。
【図２０】図２０は、対応表生成処理２により生成される対応表の一例を示す図である。
【図２１】図２１は、文字列置換処理により生成されるテストデータの一例を示す図である。
【図２２】図２２は、コンピュータの機能ブロック図である。
【図２３】図２３は、本技術の第１の態様に係るテストデータ生成方法の処理フローを示す図である。
【図２４】図２４は、本技術の第２の態様に係るテストデータ生成装置の機能ブロック図である。
【発明を実施するための形態】
【００１３】
［実施の形態１］
本技術の第１の実施の形態に係るテストデータ生成装置１００の機能ブロック図を図３に示す。本実施の形態に係るテストデータ生成装置１００は、制約データ格納部１と、型変換部３と、変換後制約データ格納部５と、変換項目一覧データ格納部７と、ＳＭＴソルバ実行部９と、制約充足解データ格納部１１と、対応表生成部１３と、対応表データ格納部１５と、文字列置換部１７と、テストデータ格納部１９とを有する。なお、ネットワークを介して接続される他のコンピュータにテストデータ格納部１９が含まれるような場合もあり、その場合には、テストデータ生成装置１００が、後で説明する処理によって生成したテストデータをネットワークを介して他のコンピュータに出力する。
【００１４】
型変換部３は、制約データ格納部１に格納されているデータを用いて、後で説明する型変換処理を実施し、処理結果を変換後制約データ格納部５に格納する。また、変換項目一覧データ格納部７には、型変換部３による型変換処理によって、文字列型から数値型に変換されたデータ項目の一覧が格納される。ＳＭＴソルバ実行部９は、変換後制約データ格納部５に格納されているデータを用いて、制約充足解データを求めるための処理を実施し、処理結果を制約充足解データ格納部１１に格納する。対応表生成部１３は、変換項目一覧データ格納部７と制約充足解データ格納部１１とに格納されているデータを用いて、後で説明する対応表生成処理を実施し、処理結果を対応表データ格納部１５に格納する。文字列置換部１７は、変換項目一覧データ格納部７と制約充足解データ格納部１１と対応表データ格納部１５とに格納されているデータを用いて、後で説明する文字列置換処理を実施し、処理結果をテストデータ格納部１９に格納する。
【００１５】
制約データ格納部１には、テストデータに関する制約が格納される。図４に、制約データ格納部１に格納される制約の一例を示す。図４において、第１行目の「define 担当者T(担当者record, 担当者record, 担当者record)」は、４つの担当者recordを含む担当者テーブルを定義しており、第２行目の「define 担当者record(担当:String, 商品:String, 承認者:String)」は、「担当」、「商品」及び「承認者」を含む担当者recordを定義している。なお、「担当」、「商品」及び「承認者」は、文字列（String）型のデータ（変数と呼ぶ場合もある）となっている。また、第３行目の「define 発注入力画面(担当者:String, 商品:String, 発注数:int)」は、「担当者」、「商品」及び「発注数」を含む発注入力画面を定義している。なお、「担当者」及び「商品」は、文字列型のデータとなっており、「発注数」は、数値（int）型のデータとなっている。さらに、第４行目以降は、制約条件を規定する論理式となっている。例えば、第４行目以降の「numOf(filter(rec in 担当者T, rec.担当 == 発注入力画面.担当者 and rec.商品 == 発注入力画面.商品)) ＞ 0)」は、「担当者recordの担当と発注入力画面の担当者とが一致し、且つ担当者recordの商品と発注入力画面の商品とが一致する」という条件で、担当者テーブルからレコードの絞り込みを行い、該当するレコードの数が１以上になるという制約を表している。なお、これは簡単な制約の一例であるから、制約の内容はこのようなものに限定されるものではない。
【００１６】
対応表データ格納部１５には、図５に示すような対応表が格納される。図５の例では、対応表には、数値の列と、文字列の列とが含まれ、各数値に対応する文字列が格納される。
【００１７】
次に、図６乃至図１３を用いて、本実施の形態に係るテストデータ生成装置１００の処理について説明する。まず、型変換部３は、制約データ格納部１からテストデータに関する制約を読み出し（図６：ステップＳ１）、読み出したデータを用いて型変換処理を実施する（ステップＳ３）。型変換処理については図７及び図８を用いて説明する。
【００１８】
まず、型変換部３は、事前処理として、読み出した制約を変換後制約データ格納部５にコピーする。そして、型変換部３は、制約に含まれる定義文（図４の例では、define文）の中から未処理の定義文を１つ特定する（図７：ステップＳ１１）。そして、型変換部３は、特定した定義文中に、文字列型のデータ項目が含まれているか判断する（ステップＳ１３）。例えば文字列検索を行い、文字列「String」が含まれているか判断する。特定した定義文中に、文字列型のデータ項目が含まれていなければ（ステップＳ１３：Ｎｏルート）、処理は、ステップＳ２３の処理に移行する。
【００１９】
一方、特定した定義文中に、文字列型のデータ項目が含まれている場合（ステップＳ１３：Ｙｅｓルート）、型変換部３は、特定した定義文中に含まれる文字列型のデータ項目のうち未処理のデータ項目を１つ特定する（ステップＳ１５）。そして、型変換部３は、変換後制約データ格納部５に格納されている制約において、特定したデータ項目のデータ型を文字列型から数値型に変換する（ステップＳ１７）。すなわち、String型のデータ項目が、int型のデータ項目に変換される。そして、型変換部３は、変換したデータ項目を変換項目一覧データ格納部７に登録する（ステップＳ１９）。
【００２０】
そして、型変換部３は、特定した定義文中に含まれる文字列型のデータ項目全てについて処理が完了したか判断する（ステップＳ２１）。特定した定義文中に、文字列型の未処理のデータ項目がある場合（ステップＳ２１：Ｎｏルート）、ステップＳ１５の処理に戻り、型変換部３は、ステップＳ１５乃至ステップＳ２１の処理を繰り返す。
【００２１】
一方、特定した定義文中に含まれる文字列型のデータ項目全てについて処理が完了した場合（ステップＳ２１：Ｙｅｓルート）、ステップＳ２３の処理に移行する。
【００２２】
そして、型変換部３は、制約に含まれる全ての定義文について処理が完了したか判断する（ステップＳ２３）。未処理の定義文がある場合（ステップＳ２３：Ｎｏルート）、ステップＳ１１の処理に戻り、型変換部３は、ステップＳ１１乃至ステップＳ２３の処理を繰り返す。
【００２３】
一方、制約に含まれる全ての定義文について処理が完了した場合（ステップＳ２３：Ｙｅｓルート）、本処理を終了し、元の処理に戻る。
【００２４】
例えば図４に示した制約に対して型変換処理を実施すると、図８に示すような型変換後の制約のデータが変換後制約データ格納部５に格納される。型変換後の制約では、第２行目の「担当」、「商品」及び「承認者」と、第３行目の「担当者」及び「商品」とが、String型からint型に変換されている。また、型変換処理を実施すると、String型からint型に変換された５つのデータ項目（「担当者record.担当」、「担当者record.商品」、「担当者record.承認者」、「発注入力画面.担当者」及び「発注入力画面.商品」）を含む変換項目一覧が変換項目一覧データ格納部７に格納される。
【００２５】
図６の説明に戻って、型変換処理（ステップＳ３）を実施した後、ＳＭＴソルバ実行部９が、変換後制約データ格納部５に格納されている型変換後の制約に対してＳＭＴソルバを実行し、型変換後の制約を満たす解を算出し、制約充足解データ格納部１１に格納する（ステップＳ５）。これにより、各データ項目の値の組み合わせの中から、型変換後の制約を満たす１の組み合わせが特定される。
【００２６】
例えば図８に示したような型変換後の制約に対してＳＭＴソルバを実行した場合、制約充足解データとして、図９に示すような発注入力画面及び担当者テーブルのデータが算出される。図９では、担当者recordの担当と発注入力画面の担当者とが一致し、且つ担当者recordの商品と発注入力画面の商品とが一致するレコードが担当者テーブルに１つ存在しており、型変換後の制約を満たしている。なお、ＳＭＴソルバ自体は周知であるからこれ以上述べない。
【００２７】
その後、対応表生成部１３が、変換項目一覧データ格納部７と制約充足解データ格納部１１とに格納されているデータを用いて、対応表生成処理を実施する（ステップＳ７）。対応表生成処理については図１０及び図１１を用いて説明する。
【００２８】
まず、対応表生成部１３は、変換項目一覧データ格納部７において未処理のデータ項目を１つ特定する（図１０：ステップＳ３１）。そして、対応表生成部１３は、制約充足解データ格納部１１から、特定したデータ項目に対応する数値を収集する（ステップＳ３３）。例えば図８に示したような変換項目一覧が変換項目一覧データ格納部７に格納され、図９に示したような制約充足解データが制約充足解データ格納部１１に格納されていた際に、ステップＳ３１において「担当者record.担当」が特定された場合、当該データ項目に対応する数値として「0」「1」「1」「2」が収集される。
【００２９】
そして、対応表生成部１３は、収集した各数値について当該数値を含むレコードを対応表データ格納部１５における対応表に登録する（ステップＳ３５）。なお、同一数値が複数存在する場合は、当該数値について１レコードだけ登録する。すなわち、収集した数値が「0」「1」「1」「2」であった場合には、３つのレコードを登録する。
【００３０】
そして、対応表生成部１３は、変換項目一覧データ格納部７における全てのデータ項目について処理が完了したか判断する（ステップＳ３７）。変換項目一覧データ格納部７における全てのデータ項目について処理が完了していなければ（ステップＳ３７：Ｎｏルート）、ステップＳ３１に戻り、対応表生成部１３は、ステップＳ３１乃至ステップＳ３７の処理を繰り返す。この際、同一数値を含むレコードが対応表に既に登録されている場合には、ステップＳ３５において、その数値についてレコードを登録する必要はない。
【００３１】
一方、変換項目一覧データ格納部７における全てのデータ項目について処理が完了した場合（ステップＳ３７：Ｙｅｓルート）、対応表生成部１３は、対応表データ格納部１５の対応表から未処理のレコードを１つ特定する（ステップＳ３９）。そして、対応表生成部１３は、特定したレコードに含まれる数値と予め設定されている固定文字列とを用いて、当該数値に対応する文字列を生成し、そのレコードに登録する（ステップＳ４１）。なお、文字列の生成方法については、他の数値の文字列と区別できるような文字列を生成できれば、他の手法を採用してもよい。
【００３２】
そして、対応表生成部１３は、対応表データ格納部１５の対応表における全てのレコードについて処理が完了したか判断する（ステップＳ４３）。対応表における全てのレコードについて処理が完了していなければ（ステップＳ４３：Ｎｏルート）、ステップＳ３９の処理に戻り、対応表生成部１３は、ステップＳ３９及びステップＳ４３の処理を繰り返す。
【００３３】
一方、対応表における全てのレコードについて処理が完了した場合（ステップＳ４３：Ｙｅｓルート）、本処理を終了し、元の処理に戻る。
【００３４】
例えば文字列「abcd」が固定文字列であった場合に、図８に示した変換項目一覧と図９に示した制約充足解データとを用いて対応表生成処理を実施すると、図１１に示すような対応表が生成される。図１１に示すように、対応表には、数値「0」から「8」までの９つのレコードが登録され、各レコードには、数値の前に固定文字列が付加された文字列（「abcd0」、「abcd1」、「abcd2」、・・・、「abcd8」）が設定されている。
【００３５】
図６の説明に戻って、対応表生成処理（ステップＳ７）を実施した後、文字列置換部１７が、変換項目一覧データ格納部７と制約充足解データ格納部１１と対応表データ格納部１５とに格納されているデータを用いて、文字列置換処理を実施する（ステップＳ９）。その後、処理を終了する。なお、文字列置換処理については図１２及び図１３を用いて説明する。
【００３６】
まず、文字列置換部１７は、事前処理として、制約充足解データ格納部１１に格納されている制約充足解データをテストデータ格納部１９にコピーする。そして、文字列置換部１７は、変換項目一覧データ格納部７において未処理のデータ項目を１つ特定する（図１２：ステップＳ５１）。そして、文字列置換部１７は、制約充足解データから、特定したデータ項目に設定されている数値を特定する（ステップＳ５３）。なお、そのデータ項目について、複数の数値が設定されている場合には、全て特定する。例えば制約充足解データが図９に示したようなデータであり、ステップＳ５１において「担当者record.担当」が特定された場合には、担当者テーブルの担当の列に設定されている「0」「1」「1」「2」が特定される。
【００３７】
そして、文字列置換部１７は、対応表データ格納部１５の対応表から、特定した数値に対応する文字列を取得する（ステップＳ５５）。例えば、図１１に示したような対応表が対応表データ格納部１５に格納されており、ステップＳ５３において数値「0」「1」「1」「2」が特定された場合には、本ステップでは、文字列「abcd0」、「abcd1」及び「abcd2」が取得される。そして、文字列置換部１７は、テストデータ格納部１９に格納されている制約充足解データにおいて、特定したデータ項目に設定されている数値を、対応する文字列で置換する（ステップＳ５７）。例えば、図９に示したような制約充足解データにおいて、担当者テーブルの担当の列に設定されている「0」「1」「1」「2」は、「abcd0」「abcd1」「abcd1」「abcd2」に置換される。
【００３８】
そして、文字列置換部１７は、変換項目一覧データ格納部７における全てのデータ項目について処理が完了したか判断する（ステップＳ５９）。変換項目一覧データ格納部７における全てのデータ項目について処理が完了していなければ（ステップＳ５９：Ｎｏルート）、ステップＳ５１の処理に戻り、文字列置換部１７は、ステップＳ５１乃至ステップＳ５９の処理を繰り返す。
【００３９】
一方、変換項目一覧データ格納部７における全てのデータ項目について処理が完了した場合（ステップＳ５９：Ｙｅｓルート）、本処理を終了し、元の処理に戻る。
【００４０】
このように、制約充足解データに含まれる値のうち、型変換が行われたデータ項目の値を、対応する文字列で置換することにより、テストデータを生成する。例えば図８に示した変換項目一覧と図９に示した制約充足解データ（すなわち、発注入力画面及び担当者テーブルのデータ）と図１１に示した対応表とを用いて文字列置換処理を実施すると、図１３の下側に示すような発注入力画面及び担当者テーブルのデータがテストデータとして生成される。図１３に示すように、発注入力画面の担当者及び商品と、担当者テーブルの担当、商品及び承認者とに設定されていた数値が、対応表に従って文字列に置換されている。そして、これは、型変換前の制約を満たすテストデータとなっている。
【００４１】
以上のような処理を実施することにより、ＳＭＴソルバを実行する前に、文字列型を単なる数値型に変換するので、ＳＭＴソルバで求めるのは、１つの文字列当たり１つの数値だけになる。また、ＳＭＴソルバを実行した後で、データ型を変換したデータ項目の数値については、対応する文字列に置換するので、文字列を含むテストデータを生成できる。例えば、１つの文字列の文字数が数十から数百であった場合、ＳＭＴソルバによって求めるべき値の数は、１つの文字列を数値型配列で表現する場合に比べて、数十〜数百分の１となり、大幅に削減される。すなわち、計算量を抑えることができるので、業務アプリケーションのテストで使用されるテストデータを実用的な時間で生成できるようになる。
【００４２】
［実施の形態２］
例えば、業務アプリケーションにおいて、文字種や文字列の長さなどの条件が定められた文字列型（以下、条件付き文字列型と呼ぶ）のデータを扱う場合がある。その場合には、文字種や文字列の長さなどの条件を満たすような文字列を含むテストデータを生成する必要がある。そこで、第２の実施の形態では、文字種や文字列の長さなどの条件を満たすような文字列を含むテストデータを自動生成する。
【００４３】
図１４に、第２の実施の形態に係るテストデータ生成装置１００の機能ブロック図を示す。本実施の形態に係るテストデータ生成装置１００は、制約データ格納部１と、型変換部３と、変換後制約データ格納部５と、変換項目一覧データ格納部７と、ＳＭＴソルバ実行部９と、制約充足解データ格納部１１と、対応表生成部１３と、対応表データ格納部１５と、文字列置換部１７と、テストデータ格納部１９と、値域一覧データ格納部２１を有する。すなわち、図３に示した機能ブロック図に対して、値域一覧データ格納部２１が追加されている。本実施の形態では、型変換部３は、制約データ格納部１と値域一覧データ格納部２１とに格納されているデータを用いて処理を実施する。また、本実施の形態では、対応表生成部１３は、変換項目一覧データ格納部７と制約充足解データ格納部１１と値域一覧データ格納部２１とに格納されているデータを用いて処理を実施する。なお、それ以外は、図３に示したものと同じである。
【００４４】
値域一覧データ格納部２１には、条件付き文字列型に対応する数値型の値域の一覧が予め格納される。図１５に、値域一覧データ格納部２１に格納される値域一覧の一例を示す。図１５の例では、値域一覧データ格納部２１には、条件付き文字列型の列と、値域の列とが含まれる。例えば、図１５において、条件付き文字列型「全角文字列」に対応する数値型の値域は、１０００＜＝ｃ＜２０００となっている。また、条件付き文字列型「StringLen3」に対応する数値型の値域は、２０００＜＝ｃ＜３０００となっている。例えば制約の作成と共に、ユーザが制約に含まれる条件付き文字列型を値域一覧データ格納部２１に登録するなどし、重ならないような値域を予め設定しておく。なお、「全角文字列」は、全角文字の文字列型であり、「StringLen3」は、文字列の長さが３の文字列型であるものとする。
【００４５】
次に、本実施の形態に係るテストデータ生成装置１００の処理について説明する。なお、全体の処理フローは、図６に示した処理フローと基本的に同じであるが、本実施の形態では、ステップＳ３（図６）において、型変換部３が図１６に示すような型変換処理２を実施し、ステップＳ７（図６）において、対応表生成部１３が図１９に示すような対応表生成処理２を実施する。以下、型変換処理２及び対応表生成処理２についてそれぞれ説明する。
【００４６】
最初に、図１６乃至図１８を用いて、型変換処理２について説明する。まず、型変換部３は、事前処理として、ステップＳ１において読み出した制約を変換後制約データ格納部５にコピーする。そして、型変換部３は、制約に含まれる定義文（図４の例では、define文）の中から未処理の定義文を１つ特定する（図１６：ステップＳ６１）。そして、型変換部３は、特定した定義文中に、文字列型又は条件付き文字列型のデータ項目が含まれているか判断する（ステップＳ６３）。例えば文字列検索を行い、値域一覧データ格納部２１に設定されている条件付き文字列型や文字列型が含まれているか判断する。特定した定義文中に、文字列型又は条件付き文字列型のデータ項目が含まれていなければ（ステップＳ６３：Ｎｏルート）、処理は、ステップＳ７９の処理に移行する。
【００４７】
一方、特定した定義文中に、文字列型又は条件付き文字列型のデータ項目が含まれている場合（ステップＳ６３：Ｙｅｓルート）、型変換部３は、特定した定義文中に含まれる文字列型又は条件付き文字列型のデータ項目のうち未処理のデータ項目を１つ特定する（ステップＳ６５）。そして、型変換部３は、特定したデータ項目が条件付き文字列型であるか判断する（ステップＳ６７）。特定したデータ項目が条件付き文字列型ではない場合（ステップＳ６７：Ｎｏルート）、すなわち文字列型である場合には、型変換部３は、変換後制約データ格納部５に格納されている制約において、特定したデータ項目のデータ型を文字列型から数値型に変換する（ステップＳ６９）。なお、本ステップの処理は、ステップＳ１７（図７）の処理と同じである。その後、処理は、ステップＳ７５の処理に移行する。
【００４８】
一方、特定したデータ項目が条件付き文字列型である場合（ステップＳ６７：Ｙｅｓルート）、型変換部３は、変換後制約データ格納部５に格納されている制約において、特定したデータ項目のデータ型を、条件付き文字列型に対応する数値型に変換する（ステップＳ７１）。本実施の形態では、値域一覧データ格納部２１に設定されている条件付き文字列型に「int」を付加したものを、当該条件付き文字列型に対応する数値型とする。従って、「全角文字列」であれば、対応する数値型は「全角文字列int」となる。また、「StringLen3」であれば、対応する数値型は「StringLen3int」となる。
【００４９】
そして、型変換部３は、予め値域一覧データ格納部２１に設定されている値域に従って、変換先の数値型のサブタイプの定義文を、変換後制約データ格納部５に格納されている制約に追加する（ステップＳ７３）。例えば図１５に示したような値域一覧に従って「全角文字列int」、「StringLen3int」に変換した場合には、「definetype 全角文字列int subtype (c:int and 1000＜＝c＜2000)」、「definetype StringLen3int subtype (c:int and 2000＜＝c＜3000)」といったサブタイプの定義文を追加する。なお、前者の定義文では、全角文字列int型の値域が、１０００以上且つ２０００未満であることを定義している。また、後者の定義文では、StringLen3int型の値域が、２０００以上且つ３０００未満であることを定義している。その後、処理は、ステップＳ７５の処理に移行する。
【００５０】
そして、ステップＳ７５の処理に移行して、型変換部３は、変換したデータ項目を変換項目一覧データ格納部７に登録する（ステップＳ７５）。なお、本ステップの処理は、ステップＳ１９の処理と同じである。
【００５１】
そして、型変換部３は、特定した定義文中に含まれる文字列型又は条件付き文字列型のデータ項目全てについて処理が完了したか判断する（ステップＳ７７）。特定した定義文中に、文字列型又は条件付き文字列型の未処理のデータ項目がある場合（ステップＳ７７：Ｎｏルート）、ステップＳ６５の処理に戻り、型変換部３は、ステップＳ６５乃至ステップＳ７７の処理を繰り返す。
【００５２】
一方、特定した定義文中に含まれる文字列型又は条件付き文字列型のデータ項目全てについて処理が完了した場合（ステップＳ７７：Ｙｅｓルート）、ステップＳ７９の処理に移行する。
【００５３】
そして、型変換部３は、制約に含まれる全ての定義文について処理が完了したか判断する（ステップＳ７９）。未処理の定義文がある場合（ステップＳ７９：Ｎｏルート）、ステップＳ６１の処理に戻り、型変換部３は、ステップＳ６１乃至ステップＳ７９の処理を繰り返す。
【００５４】
一方、制約に含まれる全ての定義文について処理が完了した場合（ステップＳ７９：Ｙｅｓルート）、本処理を終了し、元の処理に戻る。
【００５５】
図１７に、条件付き文字列型を含む制約に対して型変換処理２を実施した場合の一例を示す。図１７に示す制約は、基本的には図４に示した制約と同じであるが、第２行目において、担当者recordの「担当」が全角文字列String型になっており、「商品」がStringLen3型になっている。また、第３行目において、発注入力画面の「担当者」が全角文字列String型になっており、「商品」がStringLen3型になっている。このような制約に対して型変換処理２を実施すると、同じく図１７に示すような型変換後の制約が生成される。具体的には、型変換後の制約では、第２行目の「担当」と第３行目の「担当者」とが、全角文字列String型から全角文字列int型に変換され、第２行目の「商品」と第３行目の「商品」とが、StringLen3型からStringLen3int型に変換され、第２行目の「承認者」が、String型からint型に変換されている。さらに、型変換後の制約には、第４行目及び第５行目に、上で述べたような、サブタイプの定義文が追加されている。また、図１７に示すように、数値型に変換された５つのデータ項目（「担当者record.担当」、「担当者record.商品」、「担当者record.承認者」、「発注入力画面.担当者」及び「発注入力画面.商品」）を含む変換項目一覧が変換項目一覧データ格納部７に格納される。
【００５６】
そして、ステップＳ３において型変換処理２を実施した後、図６に示したように、処理はステップＳ５に移行する。なお、例えば図１７に示したような型変換後の制約に対して、ステップＳ５の処理を実施すると、図１８に示すような発注入力画面及び担当者テーブルのデータが制約充足解データとして算出される。図１７に示した型変換後の制約では、担当者recordの担当と発注入力画面の担当者とが全角文字列int型になっているので、図１８に示すように、発注入力画面の担当者と担当者テーブルの担当の列には、１０００以上且つ２０００未満の数値が設定されている。また、型変換後の制約では、担当者recordの商品と発注入力画面の商品とがStringLen3int型になっているので、図１８に示すように、発注入力画面の商品と担当者テーブルの商品の列には、２０００以上且つ３０００未満の数値が設定されている。なお、図１８において、一点鎖線で囲まれている部分は、全角文字列int型であることを示しており、二点鎖線で囲まれている部分は、StringLen3int型であることを示している（以下、同様）。また、担当者recordの担当と発注入力画面の担当者とが一致し、且つ担当者recordの商品と発注入力画面の商品とが一致するレコードが担当者テーブルに１つ存在しており、型変換後の制約を満たしている。
【００５７】
次に、図１９及び図２０を用いて、対応表生成処理２について説明する。まず、対応表生成部１３は、変換項目一覧データ格納部７において未処理のデータ項目を１つ特定する（図１９：ステップＳ８１）。そして、対応表生成部１３は、制約充足解データ格納部１１から、特定したデータ項目に対応する数値を収集する（ステップＳ８３）。そして、対応表生成部１３は、収集した各数値について当該数値を含むレコードを対応表データ格納部１５における対応表に登録する（ステップＳ８５）。
【００５８】
そして、対応表生成部１３は、変換項目一覧データ格納部７における全てのデータ項目について処理が完了したか判断する（ステップＳ８７）。変換項目一覧データ格納部７における全てのデータ項目について処理が完了していなければ（ステップＳ８７：Ｎｏルート）、ステップＳ８１に戻り、対応表生成部１３は、ステップＳ８１乃至ステップＳ８７の処理を繰り返す。この際、同一数値を含むレコードが対応表に既に登録されている場合には、ステップＳ８５において、その数値についてレコードを登録する必要はない。
【００５９】
一方、変換項目一覧データ格納部７における全てのデータ項目について処理が完了した場合（ステップＳ８７：Ｙｅｓルート）、対応表生成部１３は、対応表データ格納部１５の対応表から未処理のレコードを１つ特定する（ステップＳ８９）。なお、ここまでの処理は、上で説明した対応表生成処理（図１０）におけるステップＳ３１乃至ステップＳ３９の処理と同じである。
【００６０】
そして、対応表生成部１３は、特定したレコードに含まれる数値が、値域一覧データ格納部２１に格納されている値域一覧におけるいずれかの値域に属しているか判断する（ステップＳ９１）。特定したレコードに含まれる数値が、値域一覧におけるいずれの値域にも属していなければ（ステップＳ９１：Ｎｏルート）、対応表生成部１３は、特定したレコードに含まれる数値と予め設定されている固定文字列とを用いて、当該数値に対応する文字列を生成し、そのレコードに登録する（ステップＳ９３）。なお、本ステップの処理は、ステップＳ４１の処理と同じである。その後、処理は、ステップＳ９９の処理に移行する。
【００６１】
一方、特定したレコードに含まれる数値が、値域一覧のいずれかの値域に属している場合（ステップＳ９１：Ｙｅｓルート）、対応表生成部１３は、値域一覧データ格納部２１に格納されている値域一覧から、当該数値に対応する条件付き文字列型を特定する（ステップＳ９５）。すなわち、レコードに含まれる数値を基に値域一覧を検索して、当該数値が該当する値域を特定し、その値域に対応付けられている条件付き文字列型を特定する。そして、対応表生成部１３は、特定した条件付き文字列型に適合し且つ当該数値に対応する文字列を生成し、レコードに登録する（ステップＳ９７）。例えば、全角文字列であれば、全角の文字列「あいうえお」を予め定めておき、全角に変換した数値（例えば２桁以上の場合は一の位の値など）を付加することで全角の文字列を生成する。また、例えば、StringLen3であれば、長さ２の文字列「AB」を予め定めておき、数値（例えば２桁以上の場合は一の位の値など）を付加することで長さ３の文字列を生成する。なお、文字列の生成方法については、他の数値の文字列と区別でき、なおかつ条件付き文字列型に適合する文字列を生成できれば、他の手法を採用してもよい。その後、処理は、ステップＳ９９の処理に移行する。
【００６２】
そして、対応表生成部１３は、対応表データ格納部１５の対応表における全てのレコードについて処理が完了したか判断する（ステップＳ９９）。対応表における全てのレコードについて処理が完了していなければ（ステップＳ９９：Ｎｏルート）、ステップＳ８９の処理に戻り、対応表生成部１３は、ステップＳ８９及びステップＳ９９の処理を繰り返す。
【００６３】
一方、対応表における全てのレコードについて処理が完了した場合（ステップＳ９９：Ｙｅｓルート）、本処理を終了し、元の処理に戻る。
【００６４】
例えば図１５に示した値域一覧と図１７に示した変換項目一覧と図１８に示した制約充足解データとを用いて対応表生成処理２を実施すると、図２０に示すような対応表が生成される。図２０に示すように、対応表には、数値「1000」「1001」「1002」「2001」「2002」「2003」「2004」「5」「6」「7」「8」についての１１レコードが登録されている。また、値域一覧において、１０００以上且つ２０００未満の数値は条件付き文字列型「全角文字列」に対応しているので、数値「1000」「1001」「1002」に係るレコードには、「あいうえお０」「あいうえお１」「あいうえお２」といった全角の文字列がそれぞれ設定されている。また、値域一覧において、２０００以上且つ３０００未満の数値は条件付き文字列型「StringLen3」に対応しているので、数値「2001」「2002」「2003」「2004」に係るレコードには、「AB1」「AB2」「AB3」「AB4」といった長さ３の文字列がそれぞれ設定されている。なお、値域一覧におけるいずれの値域にも属していない数値に係るレコードには、数値の前に固定文字列が付加された文字列（「abcd5」「abcd6」「abcd7」「abcd8」）がそれぞれ設定されている。
【００６５】
そして、ステップＳ７において対応表生成処理２を実施した後、図６に示したように、処理はステップＳ９に移行する。例えば、図１７に示した変換項目一覧と図１８に示した制約充足解データと図２０に示した対応表とを用いて文字列置換処理（図６：ステップＳ９）を実施すると、図２１の下側に示すようなテストデータが生成される。なお、文字列置換処理自体は、第１の実施の形態の処理と変わらないので説明は省略する。図２１に示すように、発注入力画面の担当者及び商品と、担当者テーブルの担当、商品及び承認者とに設定されていた数値が、対応表に従って文字列に置換されている。図２１に示すように、発注入力画面の担当者と担当者テーブルの担当の列には、全角の文字列が設定されている。また、発注入力画面の商品と担当者テーブルの商品の列には、長さ３の文字列が設定されている。そして、これは、型変換前の制約を満たすテストデータとなっている。
【００６６】
以上のような処理を実施することにより、条件付き文字列型のデータを扱う業務アプリケーションのテストで使用されるテストデータを自動生成することができる。なお、第１の実施の形態と同様に、本実施の形態においても、ＳＭＴソルバによって求めるべき値の数を大幅に削減できるので、計算量を抑えられる。
【００６７】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、図３及び図１４に示したテストデータ生成装置１００の機能ブロックは必ずしも実際のプログラムモジュール構成と一致するわけではない。データ格納部の構成も同様に一例にすぎない。また、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしてもよい。
【００６８】
また、ステップＳ４１、ステップＳ９３及びステップＳ９７については、所定の文字列に数値を付加して文字列を生成するような処理例を示したが、重複しないように文字列を生成できれば、他の手法を採用するようにしてもよい。
【００６９】
なお、上で述べたテストデータ生成装置１００は、コンピュータ装置であって、図２２に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００７０】
以上述べた本実施の形態をまとめると、以下のようになる。
【００７１】
第１の態様に係るテストデータ生成方法は、データ定義文を含み且つテストデータに関する制約を格納する制約データ格納部に格納されている制約におけるデータ定義文に含まれる文字列型のデータ項目を数値型のデータ項目に変換し、変換したデータ項目を変換項目一覧格納部に格納する型変換ステップ（図２３：Ｓ１００１）と、型変換後の制約を満たすデータを求め、制約充足解データとして記憶装置に格納する制約充足解算出ステップ（図２３：Ｓ１００３）と、記憶装置に格納されている制約充足解データから、変換項目一覧格納部に格納されているデータ項目に係る数値を収集するステップ（図２３：Ｓ１００５）と、収集した各数値について、当該数値に対応する文字列を生成し、生成した文字列を当該数値と対応付けて対応表データ格納部に格納する対応表生成ステップ（図２３：Ｓ１００７）と、記憶装置に格納されている制約充足解データにおいて、変換項目一覧格納部に格納されているデータ項目に係る各数値を、対応表データ格納部に格納され且つ当該数値に対応する文字列で置換することにより、型変換前の制約を満たすテストデータを生成するステップ（図２３：Ｓ１００９）とを含む。
【００７２】
このようにすれば、文字列型のデータ項目は単なる数値型のデータ項目に変換され、制約充足解データを求めた後で、変換されたデータ項目の各数値は、対応する文字列に置換されるので、１つの文字列につき、複数の数値を計算する必要がなくなる。従って、多くの文字列を生成する場合でも、計算量を抑えつつ、テストデータを自動生成できるようになる。
【００７３】
また、上で述べた型変換ステップが、条件付き文字列型のデータ項目がデータ定義文に含まれる場合、当該条件付き文字列型のデータ項目を、当該条件付き文字列型に対応する数値型のデータ項目に変換するステップと、条件付き文字列型毎に当該条件付き文字列型に対応する数値型の値域を格納する値域一覧格納部から、変換したデータ項目に係る数値型の値域を抽出し、条件付き文字列型に対応する数値型と抽出した値域とを含むデータ定義文を制約に追加するステップとを含むようにしてもよい。そして、上で述べた対応表生成ステップが、収集した各数値について、当該数値を基に値域一覧格納部を検索し、値域一覧格納部に格納されているいずれかの値域内の数値であるか判断するステップと、収集した数値のうち、値域一覧格納部に格納されているいずれかの値域内であると判断された数値について、値域一覧格納部から、当該数値に対応する条件付き文字列型を特定し、特定した条件付き文字列型に適合し且つ当該数値に対応する文字列を生成するステップとを含むようにしてもよい。このようにすれば、例えば文字種や文字数などの定められた条件付き文字列型についても、当該条件付き文字列型に適合する文字列を自動生成できるようになる。
【００７４】
さらに、上で述べた制約充足解算出ステップが、充足可能性モジュロ理論ソルバを用いて、制約に含まれる各データ項目の値の組み合わせの中から制約を満たす１の組み合わせを制約充足解データとして特定するステップを含むようにしてもよい。１つの文字列につき、複数の数値を求める必要はないので、充足可能性モジュロ理論（ＳＭＴ）ソルバの計算時間を抑えることができる。
【００７５】
また、上で述べた対応表生成ステップが、収集した各数値について、当該数値に所定の文字列を付加することにより、当該数値に対応する文字列を生成するステップを含むようにしてもよい。このようにすれば、数値毎の文字列を容易に生成することができる。
【００７６】
なお、条件付き文字列型が、文字種及び文字数の少なくともいずれかが定められた文字列型である場合もある。
【００７７】
第２の態様に係るテストデータ生成装置は、データ定義文を含み且つテストデータに関する制約を格納する制約データ格納部（図２４：１５０１）と、変換項目一覧格納部（図２４：１５０３）と、対応表データ格納部（図２４：１５０５）と、制約データ格納部に格納されている制約におけるデータ定義文に含まれる文字列型のデータ項目を数値型のデータ項目に変換し、変換したデータ項目を変換項目一覧格納部に格納する型変換手段（図２４：型変換部１５０９）と、型変換後の制約を満たすデータを求め、制約充足解データとして記憶装置（図２４：１５０７）に格納する制約充足解算出手段（図２４：制約充足解算出部１５１１）と、記憶装置に格納されている制約充足解データから、変換項目一覧格納部に格納されているデータ項目に係る数値を収集する収集手段（図２４：収集部１５１３）と、収集した各数値について、当該数値に対応する文字列を生成し、生成した文字列を当該数値と対応付けて対応表データ格納部に格納する対応表生成手段（図２４：対応表生成部１５１５）と、記憶装置に格納されている制約充足解データにおいて、変換項目一覧格納部に格納されているデータ項目に係る各数値を、対応表データ格納部に格納され且つ当該数値に対応する文字列で置換することにより、型変換前の制約を満たすテストデータを生成する文字列置換手段（図２４：文字列置換部１５１７）とを有する。
【００７８】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
【００７９】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００８０】
（付記１）
データ定義文を含み且つテストデータに関する制約を格納する制約データ格納部に格納されている前記制約における前記データ定義文に含まれる文字列型のデータ項目を数値型のデータ項目に変換し、変換した前記データ項目を変換項目一覧格納部に格納する型変換ステップと、
型変換後の前記制約を満たすデータを求め、制約充足解データとして記憶装置に格納する制約充足解算出ステップと、
前記記憶装置に格納されている前記制約充足解データから、前記変換項目一覧格納部に格納されている前記データ項目に係る数値を収集するステップと、
収集した各数値について、当該数値に対応する文字列を生成し、生成した前記文字列を当該数値と対応付けて対応表データ格納部に格納する対応表生成ステップと、
前記記憶装置に格納されている前記制約充足解データにおいて、前記変換項目一覧格納部に格納されている前記データ項目に係る各数値を、前記対応表データ格納部に格納され且つ当該数値に対応する前記文字列で置換することにより、型変換前の前記制約を満たすテストデータを生成するステップと、
をコンピュータに実行させるためのテストデータ生成プログラム。
【００８１】
（付記２）
前記型変換ステップが、
条件付き文字列型のデータ項目が前記データ定義文に含まれる場合、当該条件付き文字列型のデータ項目を、当該条件付き文字列型に対応する数値型のデータ項目に変換するステップと、
前記条件付き文字列型毎に当該条件付き文字列型に対応する数値型の値域を格納する値域一覧格納部から、変換した前記データ項目に係る数値型の値域を抽出し、前記条件付き文字列型に対応する数値型と抽出した値域とを含むデータ定義文を前記制約に追加するステップと、
を含み、
前記対応表生成ステップが、
収集した各数値について、当該数値を基に前記値域一覧格納部を検索し、前記値域一覧格納部に格納されているいずれかの値域内の数値であるか判断するステップと、
収集した数値のうち、前記値域一覧格納部に格納されているいずれかの値域内であると判断された数値について、前記値域一覧格納部から、当該数値に対応する前記条件付き文字列型を特定し、特定した前記条件付き文字列型に適合し且つ当該数値に対応する文字列を生成するステップと、
を含む、付記１記載のテストデータ生成プログラム。
【００８２】
（付記３）
前記制約充足解算出ステップが、
充足可能性モジュロ理論ソルバを用いて、前記制約に含まれる各前記データ項目の値の組み合わせの中から前記制約を満たす１の組み合わせを前記制約充足解データとして特定するステップ
を含む、付記１又は２記載のテストデータ生成プログラム。
【００８３】
（付記４）
前記対応表生成ステップが、
収集した各数値について、当該数値に所定の文字列を付加することにより、当該数値に対応する文字列を生成するステップ
を含む、付記１のテストデータ生成プログラム。
【００８４】
（付記５）
前記条件付き文字列型が、文字種及び文字数の少なくともいずれかが定められた文字列型である
付記２記載のテストデータ生成プログラム。
【００８５】
（付記６）
データ定義文を含み且つテストデータに関する制約を格納する制約データ格納部に格納されている前記制約における前記データ定義文に含まれる文字列型のデータ項目を数値型のデータ項目に変換し、変換した前記データ項目を変換項目一覧格納部に格納する型変換ステップと、
型変換後の前記制約を満たすデータを求め、制約充足解データとして記憶装置に格納する制約充足解算出ステップと、
前記記憶装置に格納されている前記制約充足解データから、前記変換項目一覧格納部に格納されている前記データ項目に係る数値を収集するステップと、
収集した各数値について、当該数値に対応する文字列を生成し、生成した前記文字列を当該数値と対応付けて対応表データ格納部に格納する対応表生成ステップと、
前記記憶装置に格納されている前記制約充足解データにおいて、前記変換項目一覧格納部に格納されている前記データ項目に係る各数値を、前記対応表データ格納部に格納され且つ当該数値に対応する前記文字列で置換することにより、型変換前の前記制約を満たすテストデータを生成するステップと、
を含み、コンピュータにより実行されるテストデータ生成方法。
【００８６】
（付記７）
データ定義文を含み且つテストデータに関する制約を格納する制約データ格納部と、
変換項目一覧格納部と、
対応表データ格納部と、
前記制約データ格納部に格納されている前記制約における前記データ定義文に含まれる文字列型のデータ項目を数値型のデータ項目に変換し、変換した前記データ項目を前記変換項目一覧格納部に格納する型変換手段と、
型変換後の前記制約を満たすデータを求め、制約充足解データとして記憶装置に格納する制約充足解算出手段と、
前記記憶装置に格納されている前記制約充足解データから、前記変換項目一覧格納部に格納されている前記データ項目に係る数値を収集する収集手段と、
収集した各数値について、当該数値に対応する文字列を生成し、生成した前記文字列を当該数値と対応付けて前記対応表データ格納部に格納する対応表生成手段と、
前記記憶装置に格納されている前記制約充足解データにおいて、前記変換項目一覧格納部に格納されている前記データ項目に係る各数値を、前記対応表データ格納部に格納され且つ当該数値に対応する前記文字列で置換することにより、型変換前の前記制約を満たすテストデータを生成する文字列置換手段と、
を有するテストデータ生成装置。
【符号の説明】
【００８７】
１  制約データ格納部    ３  型変換部
５  変換後制約データ格納部    ７  変換項目一覧データ格納部
９  ＳＭＴソルバ実行部    １１  制約充足解データ格納部
１３  対応表生成部    １５  対応表データ格納部
１７  文字列置換部    １９  テストデータ格納部
２１  値域一覧データ格納部
１００  テストデータ生成装置
【図１】
0005407727.tif 000002
【図２】
0005407727.tif 000003
【図３】
0005407727.tif 000004
【図４】
0005407727.tif 000005
【図５】
0005407727.tif 000006
【図６】
0005407727.tif 000007
【図７】
0005407727.tif 000008
【図８】
0005407727.tif 000009
【図９】
0005407727.tif 000010
【図１０】
0005407727.tif 000011
【図１１】
0005407727.tif 000012
【図１２】
0005407727.tif 000013
【図１３】
0005407727.tif 000014
【図１４】
0005407727.tif 000015
【図１５】
0005407727.tif 000016
【図１６】
0005407727.tif 000017
【図１７】
0005407727.tif 000018
【図１８】
0005407727.tif 000019
【図１９】
0005407727.tif 000020
【図２０】
0005407727.tif 000021
【図２１】
0005407727.tif 000022
【図２２】
0005407727.tif 000023
【図２３】
0005407727.tif 000024
【図２４】
0005407727.tif 000025