(57)【特許請求の範囲】
【請求項１】
第１のテーブルと第２のテーブルとの関係付け及び関係多重度を表すスキーマ関連情報と、前記第１のテーブルの区分及び状態の業務上取り得る組み合わせに関する区分状態情報と、前記第１のテーブル及び前記第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、前記第１のテーブルのデータと前記第２のテーブルのデータとを格納するデータベースとにアクセス可能であるコンピュータに、
前記設計情報格納部に格納されている区分状態情報から前記第１のテーブルにおける前記区分及び状態の業務上取り得る組み合わせを特定し、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って前記組み合わせに応じた前記第１のテーブルのレコードを生成し、前記データベースに登録するステップと、
前記設計情報格納部に格納されている前記スキーマ関連情報から、前記第１のテーブルのレコードと前記第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定ステップと、
前記バリエーションにおいて必要となる前記第１のテーブルのレコードであって未生成のレコードが存在する場合には、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、前記データベースに登録する第１テーブル未生成レコード生成ステップと、
前記設計情報格納部に格納されている前記第２のテーブルのスキーマ項目情報及び前記スキーマ関連情報における前記第１のテーブルと前記第２のテーブルとの関係付けに従って、前記バリエーションに応じて必要となる前記第２のテーブルのレコードを生成し、前記データベースに登録する第２テーブルレコード生成ステップと、
を実行させるためのテストデータ生成プログラム。
【請求項２】
前記バリエーション特定ステップが、
前記スキーマ関連情報における前記関係多重度が０乃至ｎ（変数）であり且つユーザにより多重度上限ｍ（２以上の整数）が指定された場合、前記第１のテーブルの１レコードに対応して前記第２のテーブルのレコードなしというバリエーションと、前記第１のテーブルの１レコードに対応して前記第２のテーブルの１レコードというバリエーションと、前記第１のテーブルの１レコードに対応して前記第２のテーブルのｍレコードというバリエーションとを生成するステップ
を含む請求項１記載のテストデータ生成プログラム。
【請求項３】
前記バリエーション特定ステップが、
前記スキーマ関連情報における、前記第１のテーブルの特定のレコードと前記第２のテーブルのレコードの関係多重度がｘ（０以上の整数）乃至ｎ（変数）であり且つ多重度上限ｍ（ｘより大きい整数）が指定された場合、前記第１のテーブルの特定のレコードに対応して前記第２のテーブルのｘレコードであるというバリエーションと、前記第１のテーブルの特定のレコードに対応して前記第２のテーブルのｍレコードであるというバリエーションと、前記第１のテーブルの特定のレコードに対応して前記第２のテーブルのｎレコードというバリエーションとを生成するステップ
を含む請求項１記載のテストデータ生成プログラム。
【請求項４】
前記第１テーブル未生成レコード生成ステップが、
前記第１のテーブルにおいて外部キーに相当するカラムの値のうち、前記バリエーションに基づき使用可能な値が存在するか否かを判断するステップ
を含む請求項１記載のテストデータ生成プログラム。
【請求項５】
前記第２テーブルレコード生成ステップが、
前記第１のテーブルにおいて外部キーに相当するカラムの値のうち、前記バリエーションに基づき使用可能な値を、前記第２のテーブルにおける外部キーに相当するカラムの値として採用するステップ
を含む請求項１記載のテストデータ生成プログラム。
【請求項６】
第１のテーブルと第２のテーブルとの関係付け及び区分値毎の関係多重度を表すスキーマ関連情報と、前記第１のテーブル及び前記第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、前記第１のテーブルのデータと前記第２のテーブルのデータとを格納するデータベースとにアクセス可能であるコンピュータに、
前記設計情報格納部に格納されている前記スキーマ関連情報で指定される区分値のバリエーションを特定し、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って前記区分値のバリエーションに応じた前記第１のテーブルのレコードを生成し、前記データベースに登録するステップと、
前記設計情報格納部に格納されている前記スキーマ関連情報の前記区分値毎の関係多重度から、前記第１のテーブルのレコードと前記第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定ステップと、
前記バリエーションにおいて必要となる前記第１のテーブルのレコードであって未生成のレコードが存在する場合には、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、前記データベースに登録する第１テーブル未生成レコード生成ステップと、
前記設計情報格納部に格納されている前記第２のテーブルのスキーマ項目情報及び前記スキーマ関連情報における前記第１のテーブルと前記第２のテーブルとの関係付けに従って、前記バリエーションに応じて必要となる前記第２のテーブルのレコードを生成し、前記データベースに登録する第２テーブルレコード生成ステップと、
を実行させるためのテストデータ生成プログラム。
【請求項７】
第１及び第２のテーブル並びに当該第１及び第２のテーブルの関係テーブル間の関係付け及び前記第１及び第２のテーブルにおける関連データ項目間における区分値毎の関係多重度を表すスキーマ関連情報と、各前記テーブルのスキーマ項目情報とを格納する設計情報格納部と、各前記テーブルを格納するデータベースとにアクセス可能であるコンピュータに、
前記設計情報格納部に格納されている前記スキーマ関連情報で指定される区分値のバリエーションを特定し、前記設計情報格納部に格納されている前記スキーマ項目情報に従って前記区分値のバリエーションに応じた前記第１及び第２のテーブルのレコードを生成し、前記データベースに登録するステップと、
前記設計情報格納部に格納されている前記スキーマ関連情報の前記関連データ項目間における前記区分値毎の関係多重度から、前記関連データ項目を含む、前記関係テーブルのレコードのバリエーションを特定するバリエーション特定ステップと、
前記関係テーブルのレコードのバリエーションにおいて必要となる前記第１及び第２のテーブルの関連データ項目の値であって未生成の値が存在する場合には、前記設計情報格納部に格納されている前記第１及び第２のテーブルのスキーマ項目情報に従って前記第１及び第２のテーブルの、前記関連データ項目の値を含むレコードを新たに生成し、前記データベースに登録すると共に、前記データベースに登録されている前記第１及び第２のテーブルのレコードを用いて、前記関係テーブルのレコードを生成し、前記データベースに登録する関係テーブル生成ステップと、
をコンピュータに実行させ、
前記バリエーション特定ステップが、
前記関係多重度がａ乃至ｎ：ｂ乃至ｍ（ｎ及びｍは２以上の整数。ａは０以上ｎ未満の整数。ｂは０以上ｍ未満の整数。）というバリエーションの場合に、ｎ：ｍを含む複数のサブバリエーションに展開する展開ステップ
を含み、
前記関係テーブル生成ステップが、
前記ｎ：ｍのサブバリエーションのための前記関係テーブルのレコード群を生成する場合、当該レコード群における、データ項目変更時の影響波及範囲を表すレコード間関係数が、指定されたレコード間関係数上限値以下で最大となるように、前記第１のテーブルの関連データ項目のｎ個の値と前記第２のテーブルの関連データ項目のｍ個の値とを含むデータセットを１又は複数セット用意するステップ
を含むテストデータ生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、業務アプリケーション・プログラム等のテストで使用されるテストデータを自動生成する分野の技術に関する。
【背景技術】
【０００２】
業務アプリケーション・プログラム等のテストを行う際にはテスト実行環境を作成する必要があるが、テスト実行環境としてデータベースに何らかのデータを登録しなければならない場合がある。その場合、以下のような問題があった。
【０００３】
（Ａ）業務上整合性を有するデータの登録
データベースに登録すべきデータは、業務上整合性を有するデータでなければならないが、この点を考慮してデータベースにデータを登録していない場合には、正しいテストが行われない可能性がある。
【０００４】
ＤＢスキーマ情報を利用してデータを作成する例としては、例えば特開２０００−２０５２９号公報が存在しているが、スキーマ情報だけで業務上のルールを全て表すことができるわけではない。
【０００５】
例えば図１左側に示すように、「ユーザ」クラスと「ユーザ履歴」クラスには、１：ｎの関係がある。それぞれ「ユーザ」クラスは「ユーザ」テーブルに、「ユーザ履歴」は「ユーザ履歴」テーブルにマッピングされる。これはスキーマ情報から得られる情報に基づくが、このスキーマ情報からテストデータを生成すると、ユーザの区分（例えば個人と法人）にかかわらず、図１右側に示すように、「ユーザ」テーブルのレコード毎に「ユーザ履歴」テーブルのレコードが０乃至ｎ対応付けられることとなる。
【０００６】
しかし、業務において、ユーザの区分によって「ユーザ」クラスと「ユーザ履歴」クラスとの関係が異なる場合がある。例えば、ユーザが個人の区分である場合には「ユーザ」クラスに「ユーザ履歴」クラスはマッピングされることがなく、ユーザが法人の区分である場合には「ユーザ」クラスに「ユーザ履歴」クラスが０乃至ｎ対応付けられる場合がある。このような場合、図１右側における、ユーザ（個人）とユーザ履歴とのマッピングは、業務上整合性がとれていないデータということになる。従って、「ユーザ（個人）」のレコードに対応して「ユーザ履歴」のレコードを生成しないようにしなければならないが、このようなレコード生成はスキーマ情報のみからは、行うことはできない。
【０００７】
（Ｂ）処理上の網羅性を有するテストデータの生成
データベースに登録されているデータは、業務のプロセスに従って本来様々な状態・種別の値を取り得る。これら全ての状態・種別にわたったテストデータを登録しておくことが重要である。そうでないと、例えば検索処理を実施した結果が正しく検索が行われた結果なのか、又は正しく処理されていないのに検索対象のデータにヒットすべきでないデータが含まれていなかったためであるかを区別することができないからである。
【０００８】
テストデータの処理上の網羅性については、従来はソースコードから処理分岐の条件を抽出し、その閾値としてデータ種別を抽出する方法が存在していた。しかし、ソースコードを人間によって読むにはコストが高くなってしまい、自動静的解析によるものは非常に規模の小さいアプリケーションでのみ成功が報告されており、業務アプリケーションの規模になると正しく抽出することは非常に難しい。
【特許文献１】特開２０００−２０５２９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
以上述べたように、従来の方法では、業務アプリケーション・プログラムにおける業務上の整合性を有するテストデータを自動で生成し、データベースに登録することはできない。また、従来の方法では、テスト対象の業務アプリケーション・プログラムの処理上の網羅性を担保したテストデータを自動的に生成することも不可能である。従って、従来の方法では、業務アプリケーション・プログラムに対して正しいテストを行うために十分なテストデータを生成することができない。
【００１０】
よって、本技術の目的は、業務アプリケーション・プログラムに対して正しいテストを行うために十分なテストデータを自動的に生成することである。
【課題を解決するための手段】
【００１１】
第１の態様に係るテストデータ生成方法は、第１のテーブルと第２のテーブルとの関係付け及び関係多重度を表すスキーマ関連情報と、第１のテーブルの区分及び状態の業務上取り得る組み合わせに関する区分状態情報と、第１のテーブル及び第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、第１のテーブルのデータと第２のテーブルのデータとを格納するデータベースとにアクセス可能であるコンピュータにより実行される。そして、設計情報格納部に格納されている区分状態情報から第１のテーブルにおける区分及び状態の業務上取り得る組み合わせを特定し、設計情報格納部に格納されている第１のテーブルのスキーマ項目情報に従って上記組み合わせに応じた第１のテーブルのレコードを生成し、データベースに登録するステップと、設計情報格納部に格納されているスキーマ関連情報から、第１のテーブルのレコードと第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定ステップと、上記バリエーションにおいて必要となる第１のテーブルのレコードであって未生成のレコードが存在する場合には、設計情報格納部に格納されている第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、データベースに登録する第１テーブル未生成レコード生成ステップと、設計情報格納部に格納されている第２のテーブルのスキーマ項目情報及びスキーマ関連情報における第１のテーブルと第２のテーブルとの関係付けに従って、上記バリエーションに応じて必要となる第２のテーブルのレコードを生成し、データベースに登録する第２テーブルレコード生成ステップとを含む。
【００１２】
第２の態様に係るテストデータ生成方法は、第１のテーブルと第２のテーブルとの関係付け及び区分値毎の関係多重度を表すスキーマ関連情報と、第１のテーブル及び第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、第１のテーブルのデータと第２のテーブルのデータとを格納するデータベースとにアクセス可能であるコンピュータにより実行される。そして、設計情報格納部に格納されているスキーマ関連情報で指定される区分値のバリエーションを特定し、設計情報格納部に格納されている第１のテーブルのスキーマ項目情報に従って区分値のバリエーションに応じた第１のテーブルのレコードを生成し、データベースに登録するステップと、設計情報格納部に格納されているスキーマ関連情報の区分値毎の関係多重度から、第１のテーブルのレコードと第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定ステップと、上記バリエーションにおいて必要となる第１のテーブルのレコードであって未生成のレコードが存在する場合には、設計情報格納部に格納されている第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、データベースに登録する第１テーブル未生成レコード生成ステップと、設計情報格納部に格納されている第２のテーブルのスキーマ項目情報及びスキーマ関連情報における第１のテーブルと第２のテーブルとの関係付けに従って、上記バリエーションに応じて必要となる第２のテーブルのレコードを生成し、データベースに登録する第２テーブルレコード生成ステップとを含む。
【００１３】
第３の態様に係るテストデータ生成方法は、第１及び第２のテーブル並びに当該第１及び第２のテーブルの関係テーブル間の関係付け及び第１及び第２のテーブルにおける関連データ項目間における区分値毎の関係多重度を表すスキーマ関連情報と、各テーブルのスキーマ項目情報とを格納する設計情報格納部と、各テーブルを格納するデータベースとにアクセス可能であるコンピュータにより実行される。そして、設計情報格納部に格納されているスキーマ関連情報で指定される区分値のバリエーションを特定し、設計情報格納部に格納されているスキーマ項目情報に従って区分値のバリエーションに応じた第１及び第２のテーブルのレコードを生成し、データベースに登録するステップと、設計情報格納部に格納されているスキーマ関連情報の関連データ項目間における区分値毎の関係多重度から、関連データ項目を含む、関係テーブルのレコードのバリエーションを特定するバリエーション特定ステップと、関係テーブルのレコードのバリエーションにおいて必要となる第１及び第２のテーブルの関連データ項目の値であって未生成の値が存在する場合には、設計情報格納部に格納されている第１及び第２のテーブルのスキーマ項目情報に従って第１及び第２のテーブルの、関連データ項目の値を含むレコードを新たに生成し、データベースに登録すると共に、データベースに登録されている第１及び第２のテーブルのレコードを用いて、関係テーブルのレコードを生成し、データベースに登録する関係テーブル生成ステップとを含む。そして、上で述べたバリエーション特定ステップは、関係多重度がａ乃至ｎ：ｂ乃至ｍ（ｎ及びｍは２以上の整数。ａは０以上ｎ未満の整数。ｂは０以上ｍ未満の整数。）というバリエーションの場合に、ｎ：ｍを含む複数のサブバリエーションに展開する展開ステップを含む。また、上で述べた関係テーブル生成ステップは、ｎ：ｍのサブバリエーションのための関係テーブルのレコード群を生成する場合、当該レコード群における、データ項目変更時の影響波及範囲を表すレコード間関係数が、指定されたレコード間関係数上限値以下で最大となるように、第１のテーブルの関連データ項目のｎ個の値と第２のテーブルの関連データ項目のｍ個の値とを含むデータセットを１又は複数セット用意するステップを含む。
【発明の効果】
【００１４】
業務アプリケーション・プログラムに対して正しいテストを行うために十分なテストデータを自動的に生成することができる。
【発明を実施するための最良の形態】
【００１５】
［実施の形態１］
図２に本技術の一実施の形態に係るテストデータ生成装置１００の機能ブロック図を示す。テストデータ生成装置１００は、設定情報及び設計情報の入力をユーザから受け付ける入力部１と、スキーマ関連情報、区分・状態情報及びスキーマ項目情報を含む設計情報を格納する設計情報格納部３と、設計情報格納部３から必要な設計情報を読み出す設計情報読み取り部５と、設計情報読み取り部５によって読み出された設計情報及び入力部１からの設定情報を用いて生成すべきテストデータのバリエーションなどを決定する処理を実施するデータ生成決定部７と、データ生成決定部７の処理結果を格納するバリエーションデータ格納部９と、バリエーションデータ格納部９に格納されたデータと設計情報読み取り部５によって読み出された設計情報等を用いてテストデータの生成を行うデータ生成部１１とを有する。なお、データ生成部１１によって生成されたテストデータは、データベース（ＤＢ）１３に登録され、当該ＤＢ１３を用いて業務アプリケーション・プログラムのテストが実施される。
【００１６】
以下では、図３及び図４に示すようなクラス図で表されるデータをテストデータとして生成する例を、第１の例として説明する。図３に示すように、「ユーザ」というクラスに対して、「ユーザ履歴」というクラスが集約という形で関連付けられている。「ユーザ」クラスにはユーザテーブルが対応し、「ユーザ履歴」クラスにはユーザ履歴テーブルが対応する。「ユーザ」テーブルの１レコードあたり、ユーザ履歴テーブルは０乃至ｎのレコードが関連付けられる。このような「ユーザ」クラスと「ユーザ履歴」クラスの関係を、関係多重度が１：ｎと記す。また、図４に示すように、「ユーザ」クラスは、２つの区分を有する。すなわち、「個人・団体」区分と、「ユーザ」区分とを有する。これらの組み合わせにより、例えば保険契約の例では、個人契約者にあたる「個人ユーザ」、法人契約対象者にあたる「団体ユーザ」、個人ユーザが勤めている会社にあたる「個人ユーザ関係」、団体ユーザが所属する自治体や地域団体や利害関係のあるグループにあたる「団体ユーザ関係」、個人契約者ではないが内容にクレームをつけてくる個人にあたる「個人クレーマー」、法人契約対象者ではないが内容にクレームをつけてくる団体にあたる「団体クレーマー」を表す。データの具体的な定義として、「個人・団体」区分は、「団体」（区分値＝１）及び「個人」（区分値＝２）とを含む。さらに、「ユーザ」区分は、「ユーザ」（区分値＝１）、「ユーザ関係」（区分値＝２）、「クレーマー」（区分値＝３）を含む。これによって、「個人・団体」区分で「個人」という区分値を有し且つ「ユーザ」区分で「ユーザ」という区分値を有する「個人ユーザ」というサブクラスと、「個人・団体」区分で「個人」という区分値を有し且つ「ユーザ」区分で「ユーザ関係」という区分値を有する「個人ユーザ関係」というサブクラスと、「個人・団体」区分で「個人」という区分値を有し且つ「ユーザ」区分で「クレーマー」という区分値を有する「個人クレーマー」というサブクラスと、「個人・団体」区分で「団体」という区分値を有し且つ「ユーザ」区分で「ユーザ」という区分値を有する「団体ユーザ」というサブクラスと、「個人・団体」区分で「団体」という区分値を有し且つ「ユーザ」区分で「ユーザ関係」という区分値を有する「団体ユーザ関係」というサブクラスと、「個人・団体」区分で「団体」という区分値を有し且つ「ユーザ」区分で「クレーマー」という区分値を有する「団体クレーマー」というサブクラスとが定義される。
【００１７】
また、図３及び図４には図示していないが、第１の例では、「ユーザ」クラスには「未登録」「登録」「登録削除」という３つの状態が存在するものとする。但し、サブクラスによっては上記のような状態を有さないものもある。具体的には、「個人ユーザ関係」サブクラス及び「団体クレーマー」サブクラスでは「登録」状態及び「登録削除」状態は存在しない。
【００１８】
次に、図５乃至図１７を用いて、テストデータ生成装置１００の処理内容について説明する。まず、入力部１は、ユーザに対して、例えば図６に示すような表示を行って、ユーザから設定情報の入力を促すと共に、設定情報の入力を受け付け、メインメモリなどの記憶装置に格納する。また、さらに設計情報の入力も促すと共に、設計情報の入力を受け付け、設計情報格納部３に格納する（ステップＳ１）。図６の画面例では、生成対象のテーブル（スキーマ）名の入力欄と、１種別あたりの最低生成件数の入力欄と、関係多重度数ｍ（多重度上限とも呼ぶ）の指定入力欄とが設けられている。「１種別あたりの最低生成件数」は、サブクラスと状態との業務上取り得る組み合わせの各々について生成すべきレコード数を指定するものである。関係多重度ｍは、図３で示された「ユーザ」クラスと「ユーザ履歴」クラスとの関係多重度が１：ｎにおけるｎの上限値である。ここでは、主として生成するテーブルの名前が「ユーザ」であり、１種別あたりの最低生成件数が「１」であり、関係多重度数ｎの指定が「２」であることが分かる。
【００１９】
設計情報については、図７乃至図９に示す情報が含まれる。図７に、スキーマ関連情報の例を示す。スキーマ関連情報は、生成する「ユーザ」テーブルに関連する関連テーブル名「ユーザ履歴」と、関連カラム（外部キーのカラム）名「ユーザ番号」と、関係多重度「０．．ｎ」とが含まれる。「０．．ｎ」は、０乃至ｎであることを示す。
【００２０】
図８に、区分・状態情報の例を示す。区分・状態情報は、サブクラスと状態との組み合わせを示す。図８では、「個人ユーザ」サブクラス（個人・団体区分＝２、ユーザ区分＝１）には、「未登録」「登録」「登録削除」という状態が存在し、「団体ユーザ」サブクラス（個人・団体区分＝１、ユーザ区分＝１）には、「未登録」「登録」「登録削除」という状態が存在し、「個人ユーザ関係」サブクラス（個人・団体区分＝２、ユーザ区分＝２）には、「未登録」状態のみが存在し、「団体ユーザ関係」サブクラス（個人・団体区分＝１、ユーザ区分＝２）には、「未登録」「登録」「登録削除」という状態が存在し、「個人クレーマー」サブクラス（個人・団体区分＝２、ユーザ区分＝３）には、「未登録」「登録」「登録削除」という状態が存在し、「団体クレーマー」サブクラス（個人・団体区分＝１、ユーザ区分＝３）には、「未登録」状態のみが存在する。このように理論上は３×６＝１８種類のレコードが存在することになるが、業務上存在しない状態があるので、１４種類のレコードを生成することになる。
【００２１】
図９に、ユーザテーブルのスキーマ項目情報の例を示す。図９では、ユーザテーブルのレコードの各カラム（ユーザ番号、個人・団体区分、ユーザ区分、名称、住所、登録日付、削除日付）について、「主キー」か否か、「未登録」状態における値の有無、「登録」状態における値の有無、「登録削除」状態における値の有無、必須か否かを表す必須区分、及びデータ属性が登録される。データ属性は、どのような値を生成すべきかルール（形式など）及び取り得る値が規定されている。具体的には、半角英数字［１０］は、半角英数字［Ａ，．．．Ｚ，０，．．．９］によって合成される１０桁固定の文字列を表す。本実施の形態では、［］は固定数を表し、（）は以内であることを表している。従って、全角（１００ｂｙｔｅ）は、全角の文字１００ｂｙｔｅ以内であることを表す。
【００２２】
さらに、本例では、主キーは「ユーザ番号」であり、必須のカラムは、「ユーザ番号」「個人・団体区分」及び「ユーザ区分」であり、登録日付については「登録」状態のみに登録され、削除日付については「登録削除」状態のみに登録される。「未登録」状態については、登録日付も削除日付も登録されない。
【００２３】
図７乃至図９に示したようなデータは、マシンリーダブルな形式で入力部１に入力され、入力部１によって設計情報格納部３に格納される。なお、「ユーザ履歴」テーブルのスキーマ項目情報（図１５）も入力され、設計情報格納部３に格納される。
【００２４】
次に、設計情報読み取り部５は、設計情報格納部３から設計情報（スキーマ関連情報、区分・状態情報、スキーマ項目情報）を読み出す（ステップＳ３）。上で述べたようなデータの内容が把握可能となる。
【００２５】
そして、データ生成決定部７は、区分・状態情報及び入力された設定情報に基づき、ユーザテーブルにおいて生成すべきレコードのバリエーションを特定し、バリエーションについてのデータをバリエーションデータ格納部９に格納する（ステップＳ５）。図８に示した区分・状態情報から、サブクラスと状態との業務上取り得る組み合わせが１４種類であることが分かり、図６で示したように「１種別あたりの最低生成件数」が「１」であるから、１種類につき１レコードで、１４件のレコードを生成するということが特定される。このように、区分・状態情報から特定される１４種類のレコードを１つずつ生成することを表すバリエーションのデータが、バリエーションデータ格納部９に格納される。
【００２６】
その後、データ生成部１１は、読み出されたスキーマ項目情報に従って、バリエーションデータ格納部９に格納されているバリエーションにおいて必要とされるレコードを生成し、ＤＢ１３に登録する（ステップＳ７）。例えば、データ生成部１１は、「半角英数字」「半角」「全角」「数字」といった文字列に関する生成メソッドを有しており、長さを入力することによって、予め定められたルール（例えばランダム、「ユーザ番号」などのカラム名に応じて「CUSTOM_」＋「数字（桁数は全体の桁数にあわせる）」といったルール、主キーであれば各値がユニークになるようにするルールなど）に従った文字列を自動的に生成する。
【００２７】
例えば、「団体ユーザ」サブクラスで「未登録」状態のレコードを生成する場合には、図９のスキーマ項目情報に従って、主キーである「ユーザ番号」を、半角英数字［１０］というデータ属性に従って生成する。主キーであるから値はユニークでなければならず、上で述べたように「CUSTOM_」＋「３桁数字」のようなルールに従って生成する。個人・団体区分は、「団体ユーザ」であるから「１」であり、ユーザ区分は、「団体ユーザ」であるから「１」となる。「名称」については全角（１００ｂｙｔｅ）、「住所」については全角（２００ｂｙｔｅ）であるから、ひらがな、英数記号、常用漢字、カタカナの集合からランダムに抽出して長さの分の文字列を生成する。但し、住所については、郵便番号をランダムに生成して、郵便番号に対応する住所を「住所」に利用するようにしても良い。この場合には、郵便番号と住所を対応付ける辞書が必要となる。このようにすると、図１０の第１レコードが生成される。
【００２８】
図１０の第２乃至第１４レコードについては、上で特定されたバリエーションに従って同様に生成される。なお、図９のスキーマ項目情報で必要とされる登録日付と削除日付については、ＹＹＹＹ／ＸＸ／ＺＺというフォーマットに従って所定のルールに従って生成する。例えば、処理日付を含む１週間の日付をランダムに発生させるなどの処理を行うようにしても良い。このようにすれば、１４種類のレコードが各１件生成されることになる。
【００２９】
そして、データ生成決定部７は、未生成の関連テーブルが存在するか判断する（ステップＳ９）。例えば、設計情報に含まれるスキーマ関連情報を参照して、未生成の関連テーブルが存在するか判断する。未生成の関連テーブルが存在すると判断された場合には、端子Ａを介して図１２の処理に移行する。本例では、「ユーザ履歴」テーブルをまだ生成していないので、端子Ａを介して図１２の処理に移行するものとする。
【００３０】
一方、未生成の関連テーブルが存在しないと判断された場合には、データ生成決定部９は、例えば図１１に示すような処理結果を含む表示をユーザに対して出力する（ステップＳ１１）。図１１には、「ユーザ」テーブルのレコードが４２件、「ユーザ履歴」テーブルのレコードが４２件、生成されたデータが\CreatedData\20070618_mouraフォルダに格納されていることが示されている。
【００３１】
図１２の処理の説明に移行して、データ生成決定部７は、スキーマ関連情報に含まれる、生成すべき関連テーブルのカラムの持ち得る区分・状態及び関係多重度と、入力部１によって入力された関係多重度数ｍとから、生成すべき関連テーブルのレコードのバリエーションを決定し、当該バリエーションのデータをバリエーションデータ格納部９に格納する（ステップＳ１３）。
【００３２】
本例では、「ユーザ」テーブルのレコードと、「ユーザ履歴」テーブルのレコードとの間には０．．ｎの集約関連が存在することが、スキーマ関連情報（図７）で特定される。図７では、「ユーザ履歴」テーブルには区分・状態については規定されていない。すなわち、単に「ユーザ」テーブルのレコードと「ユーザ履歴」テーブルのレコードは、１：ｍ（ｍはここでは０を含む整数）の関係にある。従って、本実施の形態では、「ユーザ」テーブルのレコード：「ユーザ履歴」テーブルのレコード＝１：０、「ユーザ」テーブルのレコード：「ユーザ履歴」テーブルのレコード＝１：１、「ユーザ」テーブルのレコード：「ユーザ履歴」テーブルのレコード＝１：ｍの３つのパターンを生成するものとする。なお、ｍはユーザにより指定された多重度上限によって決定される。図６での入力例では、「ユーザ」テーブルのレコード：「ユーザ履歴」テーブルのレコード＝１：２となる。
【００３３】
なお、「ユーザ」テーブルのレコードに対して、「ユーザ履歴」テーブルのレコードとｐ（正の整数）．．ｎの集約関連が存在する場合には、「ユーザ」テーブルのレコード：「ユーザ履歴」テーブルのレコード＝１：ｐ、「ユーザ」テーブルのレコード：「ユーザ履歴」テーブルのレコード＝１：ｍの２つのパターンを生成する。
【００３４】
上でも述べたように、本例では、
「ユーザ」テーブルのレコード：「ユーザ履歴」テーブルのレコード＝１：０
「ユーザ」テーブルのレコード：「ユーザ履歴」テーブルのレコード＝１：１
「ユーザ」テーブルのレコード：「ユーザ履歴」テーブルのレコード＝１：２
の３つのパターンが必要となる。「ユーザ」テーブルのレコード「１」というのは、１４種類のレコードのセットが「１」ということであって、ステップＳ７では１セット分しか生成していないので「ユーザ」テーブルの１４種類のレコードのセットがあと２セット必要で、「ユーザ履歴」テーブルのレコードについては、「ユーザ」テーブルの１４種類のレコードのセット１つにつき１セット（１４種類）、及び「ユーザ」テーブルの１４種類のレコードのセット１つにつき２セット（１４種類×２）必要となる。合計すれば、「ユーザ」テーブルのレコードも１４×３＝４２件（但し１４件はステップＳ７で生成済み）、「ユーザ履歴」テーブルのレコードも１４×３＝４２件生成すべきということになる。
【００３５】
これを別角度から図示すると、図１３に示すようになる。すなわち、「ユーザ」テーブルの１種類のレコード（例えば「団体ユーザ（未登録）」レコード）につき、「ユーザ履歴」のレコードが「無い」場合と、１つある場合と、２つある場合との３つのパターンが、１４種類分存在することとなる。このようなバリエーションのデータをバリエーションデータ格納部９に格納する。
【００３６】
次に、データ生成部１１は、外部キー（例えばスキーマ関連情報における「関連カラム」から特定する。又は「関連元のテーブルと関連テーブルとで同じ名前のカラムを、スキーマ項目情報から特定する）の未使用の値が存在するか判断する（ステップＳ１５）。例えば、ユーザなどによって既に外部キーの値が指定されている場合などには、当該指定されている外部キーのうち未使用の値が存在するかを判断する。そのような値が存在する場合には、データ生成部１１は、当該外部キーの未使用の値を用いて、関連テーブルのスキーマ項目情報に従って、関連テーブルのレコードを１つ生成し、ＤＢ１３に登録する（ステップＳ１７）。その後、データ生成部１１は、ステップＳ１３で特定された必要なバリエーションの全てを生成したか判断する（ステップＳ１９）。全てのバリエーションについてデータを生成したわけではない場合には、ステップＳ１５に戻る。なお、本例では、外部キーの未使用の値はないものとする。一方、全てのバリエーションを生成した場合には、端子Ｂを介して図５のステップＳ９に戻る。
【００３７】
ステップＳ１５で外部キーの未使用の値が存在しないと判断された場合には、データ生成部１１は、関連元テーブル（本例では「ユーザ」テーブル）における外部キー該当カラム（「ユーザ番号」のカラム）に、未使用の値が存在するか判断する（ステップＳ２１）。本例では、ステップＳ７で生成された「ユーザ」テーブルのレコード群（図１０）は、ステップＳ１３で特定されたバリエーションのうち、「ユーザ」テーブルの１レコードに対応して「ユーザ履歴」テーブルのレコードなしというバリエーションに用いられるので、外部キー該当カラムには未使用の値は存在しないと判断される。
【００３８】
ステップＳ２１で、関連元テーブルにおける外部キー該当カラムに、未使用の値が存在すると判断された場合には、データ生成部１１は、当該外部キー該当カラムの未使用の値を用いて、関連テーブルのスキーマ項目情報に従って、関連テーブルのレコードを１つ生成し、ＤＢ１３に登録する（ステップＳ２３）。そしてステップＳ１９に移行する。
【００３９】
一方、関連元テーブルにおける外部キー該当カラムに、未使用の値が存在しないと判断された場合には、データ生成部１１は、関連元テーブルのスキーマ項目情報に従って、ステップＳ１９で特定されたバリエーションに応じて必要となるレコードを１つ生成し、ＤＢ１３に登録する（ステップＳ２５）。本例では、図１４の第１レコードが生成される。
【００４０】
そして、データ生成部１１は、ステップＳ２５で生成された、関連元テーブルにおける外部キー該当カラムの値を用い、関連テーブルのスキーマ項目情報に従って、関連テーブルのレコードを１つ生成し、ＤＢ１３に登録する（ステップＳ２７）。本例では、図１４の第１レコードのユーザ番号「ＣＵＳＴＯＭ＿０１４」を外部キー該当カラムの値として用いて、図１５に示す「ユーザ履歴」テーブルのスキーマ項目情報に従って、図１６の左欄第１レコードを生成する。スキーマ項目情報の使用方法は、「ユーザ」テーブルのスキーマ項目情報と同様である。そして、ステップＳ１９に戻る。
【００４１】
図１５では、「ユーザ番号」及び「履歴移動日」というデータ項目が、主キー且つ必須区分であり、「ユーザ番号」については半角英数字［１０］で構成され、「履歴移動日」についてはＹＹＹＹ／ＸＸ／ＺＺというフォーマットで構成される。
【００４２】
本例の場合、ステップＳ１５、Ｓ２１、Ｓ２５及びＳ２７を繰り返し、図１４の第２レコード乃至第１４レコードを生成し、さらに図１６の第２レコード乃至第１４レコードを生成する。その後、ステップＳ１５、Ｓ２１、Ｓ２５及びＳ２７を実行して、図１７の第１レコードを生成し、さらに図１６の第１５レコードを生成する。そうすると、次に、ステップＳ１５、Ｓ２１及びＳ２３を実行して、図１６の第１６レコードを生成する。このように、「ユーザ」テーブルを１レコード生成すると、ステップＳ２３及びＳ２７で「ユーザ履歴」テーブルのレコードを２件生成する処理を繰り返し、図１７に示す「ユーザ」テーブルの第２乃至第１４レコード及び図１６の残りのレコード（第１７乃至第４２レコード）を生成する。
【００４３】
ここまで実施すれば、全てのバリエーションについて生成し終わることになるので、端子Ｂを介してステップＳ９に戻り、関連テーブルについて全て処理したか判断する。本例では、関連テーブルは、「ユーザ履歴」テーブル以外には存在しないので、処理が終了して、ステップＳ１１で図１１の表示を行う。
【００４４】
以上のような処理を実施することによって、業務上の整合性を保持させると共に処理上の網羅性を担保するようなテストデータをＤＢ１３に登録することができるようになる。
【００４５】
［実施の形態１における第２の例］
次に、第２の例について説明する。第２の例は、図１８に示すようなクラス図で表される。すなわち、「ユーザ」クラスには、２つの区分が存在しており、「個人・団体」区分と、「ユーザ」区分とがある。「個人・団体」区分において団体の場合には区分値＝１となり、個人の場合には区分値＝２となる。また、「ユーザ」区分において、「ユーザ」の場合には区分値＝１であり、「ユーザ関係」の場合には区分値＝２であり、「クレーマー」の場合には区分値３である。そして、「個人・団体」区分の区分値＝１で「ユーザ」区分の区分値＝１は、「団体ユーザ」というサブクラスとなる。ここまでは、第１の例と同じである。しかし、第１の例では「ユーザ」クラス全体について「ユーザ履歴」クラスが集約という関係で関連付けられていたが、第２の例では、「団体ユーザ」というサブクラスにのみ、１：ｎという集約関係で「ユーザ履歴」クラスが関連付けられている。
【００４６】
第２の例における、スキーマ関連情報及び区分・状態情報は、図１９のようになる。図１９では、第１の例とは異なり、スキーマ関連情報と区分・状態情報が統合された形式となっている。本例では、第１の例と同様に、「個人ユーザ」「団体ユーザ」「個人ユーザ関係」「団体ユーザ関係」「個人クレーマー」及び「団体クレーマー」のサブクラスが存在し、「未登録」「登録」「登録削除」という状態が存在し、それらの組み合わせが規定される。但し、「個人ユーザ関係」及び「団体クレーマー」というサブクラスには、「登録」及び「登録削除」という状態は存在しない（「×」マークあり）。また、「団体ユーザ」サブクラスと「登録」状態の組み合わせには、関連テーブル、関連カラム及び関係多重度が規定されており、それぞれ「ユーザ履歴」テーブル、「ユーザ番号」及び「０．．ｎ」という情報が指定されている。同様に、「団体ユーザ関係」サブクラスと「登録」状態の組み合わせには、関連テーブル、関連カラム及び関係多重度が規定されており、それぞれ「ユーザ履歴」テーブル、「ユーザ番号」及び「０．．ｎ」という情報が指定されている。
【００４７】
「ユーザ」テーブルのスキーマ項目情報が、第１の例と同じであるとすると、「ユーザ」テーブルは、図５のステップＳ７で生成される部分（図１０）は同じである。しかし、ステップＳ１３で特定されるバリエーションは第１の例とは異なる。具体的には、図２０に示すように、「団体ユーザ」サブクラスと「登録」状態の組み合わせと「団体ユーザ関係」サブクラスと「登録」状態の組み合わせについては、「ユーザ履歴」テーブルのレコード無し、１レコード対応、２レコード対応というバリエーションが特定されるが、その他のサブクラスと状態の組み合わせについては「ユーザ履歴」テーブルのレコードは関連付けられていない。
【００４８】
従って、「ユーザ」テーブルのレコードは、ステップＳ７で図１４に示したレコード群が生成されているのであれば、図２１に示すように、「ユーザ」テーブルのスキーマ項目情報に従って４レコードが追加で生成される。さらに、「ユーザ履歴」テーブルのレコードは、図２２に示すように、「ユーザ履歴」レコードのスキーマ項目情報に従って、合計６件生成される。なお、図６のような設定情報の入力がなされていることを前提としている。
【００４９】
［実施の形態１における第３の例］
図２３に、第３の例のクラス図を示す。第３の例においては、「ユーザ」クラスに対して「担当販売」クラスが１：ｎで関連しており、「担当販売」クラスに対して「販売員」クラスが１対１で関連している。すなわち、第１及び第２の例のようにクラス間に従属関係がない場合である。
【００５０】
図２４に第３の例の「ユーザ」テーブルのスキーマ関連情報を示す。図２４では、関連テーブル名が、「担当販売」テーブルであり、関連カラムが「ユーザ番号」であり、関係多重度が、「主担当」という区分については「１」（すなわち、１：１）であり、「一般担当」という区分については「０．．ｎ」である。このように、「担当販売」クラスの区分によって関係多重度が異なる例を取り扱う。
【００５１】
なお、「ユーザ」テーブルについては図８に示した区分・状態情報と図９に示したスキーマ項目情報とに従って生成されるものとする。そうすると、図１０に示すようなレコードが生成される。
【００５２】
一方、「担当販売」テーブルのスキーマ項目情報は、図２５に示すようなデータであるものとする。すなわち、主キーとしては「ユーザ番号」及び「販売員ＩＤ」が必須として指定されており、これらは１０文字の半角英数字で構成される。また、担当販売区分も必須として指定されており、主担当の場合には「１」一般担当の場合には「２」が設定されるようになっている。
【００５３】
上で述べたような処理を実施すれば、ステップＳ１３では、図２６に示すようなバリエーションが特定される。すなわち、「ユーザ」テーブルの１４種類のレコードに対して、「担当販売」テーブルの「主担当」区分のレコードが各々１つ対応するバリエーション（「担当販売」テーブルの「一般担当」区分のレコードはなし）と、「ユーザ」テーブルの１４種類のレコードに対して、「担当販売」テーブルの「主担当」区分のレコードが各々１つ対応し、さらに「一般担当」区分のレコードが各々１つ対応するバリエーションと、「ユーザ」テーブルの１４種類のレコードに対して、「担当販売」テーブルの「主担当」区分のレコードが各々１つ対応し、さらに「一般担当」区分のレコードが各々２つ対応するバリエーションとが特定される。
【００５４】
そうすると、「ユーザ」テーブルについてはステップＳ７で１４種類のレコードが１セット生成され、その後、図２６に示したようなバリエーションに応じて、図２５のスキーマ項目情報に従って、図２７Ａ及びＢに示すような「担当販売」テーブルのレコードが生成される。なお、第１及び第２の例と同様に、「ユーザ」テーブルの１４種類のレコードが３セット必要となり、「担当販売」テーブルについては、１４件＋１４件×２＋１４件×３＝８４件のレコードが生成される。図２７Ａ及びＢでは、１つの「ユーザ」レコードにつき「主担当」区分のレコードが必ず１件必要となるため、販売員ＩＤは４２種類必要となる。８４件のレコードのうち残りの４２件のレコードについては、４２種類の販売員ＩＤを使い回すことになる。
【００５５】
次に、残りの関連テーブルとして、「担当販売」テーブルに関連付けられた「販売員」テーブルを生成する。図２８に「担当販売」テーブルのスキーマ関連情報を示す。図２８では、関連テーブル名「販売員」と、関連カラム「販売員ＩＤ」、関係多重度「１」が登録されている。従って、「販売員」テーブルでは、「担当販売」テーブルの「販売員ＩＤ」と１対１になるようにレコードを生成する。上で述べたように、販売員ＩＤは４２種類あるので、「販売員」テーブルのレコードは４２件となる。「担当販売」テーブルから外部キーの値（販売員ＩＤの値）は抽出できる。
【００５６】
ここでは、図２９に示すようなスキーマ項目情報が用いられる。図２９では、主キーである「販売員ＩＤ」が必須で１０桁の半角英数字で構成され、担当販売者名が全角（１００ｂｙｔｅ）で構成される。このようなスキーマ項目情報に従って、図３０に示すような「販売員」テーブルが生成される。
【００５７】
このようにいずれの例においても、業務上の整合性を保持しつつ、処理上の網羅性を担保するようなテストデータをＤＢ１３に登録することができるようになる。
【００５８】
［実施の形態１の変形例］
上で述べた例では、区分・状態情報が用意される例を示したが、業務上特に状態が規定されない場合には、例えば以下で用いる図３８のようなスキーマ関連情報において区分毎に関係多重度が規定されていればよい場合もある。このような場合には、図５のステップＳ５では、区分・状態情報を用いずスキーマ関連情報から取り得る区分値の組み合わせに従って生成すべきレコードのバリエーションを特定し、ステップＳ７でレコードを生成するようにしても良い。さらに、図１２のステップＳ１３でも区分・状態情報を用いずにレコード・バリエーションを特定する。
【００５９】
［実施の形態２］
第１の実施の形態においては、２つのテーブル間における多重度が１：ｎについては処理対象としていたが、０．．ｎ：０．．ｍである場合については処理の対象外としていた。１：ｎの場合にはそのレコード間の関係が一意に決まるのに対して、ｎ：ｍの場合にはそのレコード間の関係のバリエーションが無限にあり得るため、無限のバリエーション中で有限個のレコードを用意する場合に、どのような関係バリエーションを生成すれば網羅性が高く、障害発見に有効なデータとなるかの判断は難しかった。例えば、図３１に示すように、お客様テーブルのレコードと営業テーブルのレコードとの間に、０．．２：０．．２の関係がある場合には、図３２（ａ）に示すように、お客様テーブルにおけるレコードａ１及びａ２と、営業テーブルのレコードｂ１及びｂ２とを、２対２で対応付けるパターンと、図３２（ｂ）に示すように、お客様テーブルにおけるレコードａ１乃至ａ３と、営業テーブルのレコードｂ１乃至ｂ３とを、２対２で対応付けるパターン等が可能である。これ以外のパターンも生成することができるが、上で述べたように、どのようなパターンを採用すべきかを判断するのは難しい。
【００６０】
しかし、業務上このような多重度のテーブル関係は多数存在しており、幅広い業務のテストデータを生成する上で、多重度がｎ：ｍの場合にも対応できるようにする必要がある。
【００６１】
例えば、以下のような業務のためのシステムに対するテストデータを生成する場合を考える。すなわち、（ａ）カーシェアリングクラブがあって、車１台につき所有者は２名ずつ。（２）ある車を使うためにはその車を所有している二人の信任状が必要。（３）同じ車を所有する人同士は互いに信任状を出すことができる。
【００６２】
このような場合、図３３（ａ）に示すようなテストデータを生成することも可能であるし、図３３（ｂ）に示すようなテストデータを生成することも可能である。すなわち、図３３（ａ）では、メンバ１及び２に車Ａ及びＢが２：２で対応付けられており、図３３（ｂ）では、メンバ１乃至３に車Ａ乃至Ｃが２：２で対応付けられている。
【００６３】
ところが、図３３（ａ）の場合には、２台の車をメンバ１及び２で所有し合っており、メンバ１及び２以外にメンバも規定されていないので信任状を発行する場面がない。一方、図３３（ｂ）の場合には、メンバ３は、車Ａを所有していないが、車Ａを所有しているメンバ１と車Ｃを所有しているので、車Ａを使用する際には、車Ａを所有しているメンバ１及び２から信任状を発行してもらえば、車Ａを使用することができる。
【００６４】
すなわち、図３３（ｂ）の例であれば、
ＩＦ（（車Ａの所有者でない）＆（車Ａの所有者である２人のメンバと同じ車を所有している））ｔｈｅｎ（車Ａを使うことができる）
というロジックのテストを行うことができる。
【００６５】
このように同じ多重度ｎ：ｍのテストデータであっても、テストを行うのに十分なテストデータとは限らず、テストを行うのに十分なテストデータを生成する必要がある。
【００６６】
以下では、関係多重度に基づき直接又は間接的に結び付けられたレコード群において変更の影響が波及するレコードの数であるレコード間関係数を導入し、ユーザにその条件値を指定させ、当該条件値に適合するレコードを生成することによって、テストに十分なレコードを含むパターンを生成するものとする。例えば、図３３（ａ）の場合には、メンバというデータ項目と車というデータ項目とで１レコードと考え、例えばメンバ１が変更になると、車Ｂも変更しなければならなくなるので、メンバ１を含むレコードと車Ｂを含むレコードとにより、レコード間関係数は「２」とカウントされる。また、図３３（ｂ）の場合には、メンバ１が変更になると、車Ｃも変更しなければならなくなり、車Ｃを変更するとメンバ３も変更する必要があり、メンバ３を変更すると車Ｂも変更する必要があるというように、メンバ１を含むレコードと車Ｃを含むレコードと車Ｂを含むレコードとにより、レコード間関係数は「３」とカウントされる。
【００６７】
なお、本実施の形態における機能ブロック図は、テストデータ生成装置１００の機能ブロック図（図２）と同じであるものとする。
【００６８】
次に、第２の実施の形態に係るテストデータ生成装置１００の処理内容について図３４乃至図６５を用いて説明する。
【００６９】
まず、処理フローを分かりやすくするための具体例を図３４乃至図３８を用いて説明する。図３４は、テストデータを生成すべきテーブル群の関係を表すクラス図を示す。図３４に示すように、データ項目ａ及びｂについてのテーブルＡと、データ項目ｘについてのテーブルＸと、テーブルＡとテーブルＸとの関係を表し且つデータ項目ａ及びｘについてのテーブルＺとが含まれる。
【００７０】
図３５に、テーブルＡのスキーマ項目定義を示す。テーブルＡには、データ項目ａ及びｂが含まれ、データ項目ａは主キーであり、データ項目ａ及びｂは共に必須のデータ項目である。また、データ項目ａのデータ属性としては、全角（１００ｂｙｔｅ）であり、データ項目ｂのデータ属性としては、半角英数字１文字である。以下、データ項目ｂは区分とも記すものとする。
【００７１】
また、図３６に、テーブルＸのスキーマ項目定義を示す。テーブルＸには、データ項目ｘが含まれ、データ項目ｘは主キーであり、データ項目ｘは必須のデータ項目である。また、データ項目ｘのデータ属性としては、全角（１００ｂｙｔｅ）である。
【００７２】
さらに、図３７に、テーブルＺのスキーマ項目定義を示す。テーブルＺには、データ項目ａ及びｘが含まれ、データ項目ａ及びｘ共に主キーであり、データ項目ａ及びｘは共に必須のデータ項目である。また、データ項目ａのデータ属性としては、全角（１００ｂｙｔｅ）であり、データ項目ｘのデータ属性としては、半角英数字１文字である。
【００７３】
図３８に、テーブルＺのスキーマ関連情報を示す。図３８のスキーマ関連情報では、テーブルＡのデータ項目ｂの値（区分値）毎に、Ａ：Ｘで表される、テーブルＡとテーブルＸの関係多重度が変化することを示している。具体的には、データ項目ｂの値（区分値）が「１」であれば、Ａ：Ｘは、０．．３：０．．２であり、データ項目ｂの値（区分値）が「２」であれば、Ａ：Ｘは、１：０．．２であると規定されている。なお、図３８では関連カラムについては明示されていないが、テーブルＡのデータ項目ｂが、区分値として用いられること及びスキーマ項目定義から、データ項目ａとデータ項目ｘが関連していることが分かる。
【００７４】
次に、図３９乃至図６５を用いて、処理フローについて説明する。まず、入力部１は、ユーザに対して、例えば図４０に示すような表示を行って、ユーザから設定情報の入力を促すと共に、設定情報の入力を受け付け、メインメモリなどの記憶装置に格納する。また、さらに設計情報の入力も促すと共に、設計情報の入力を受け付け（ステップＳ５１）、設計情報格納部３に格納する（ステップＳ５３）。図４０の画面例では、生成対象のテーブル（スキーマ）名の入力欄と、関係多重度数ｎの指定入力欄と、関係多重度ｍの指定入力欄と、レコード間関係数の上限Ｐの指定入力欄とを含む。関係多重度ｎの指定入力欄には、スキーマ関連情報において多重度に具体的な数値が指定されていない場合、多重度ｎに相当する数値を指定するための入力欄である。図３８の例では、「０．．３」における「３」であることが明かであるので入力の必要はない。同様に、関係多重度ｍの指定入力欄には、スキーマ関連情報において多重度に具体的な数値が指定されていない場合、ｍに相当する数値を指定するための入力欄である。図３８の例では、「０．．２」における「２」であることが明らかであるので入力の必要はない。レコード間関係数の上限Ｐの指定入力欄には、上で述べたレコード間関係数の上限値を指定するための入力欄である。
【００７５】
なお、ステップＳ５１で入力される設計情報には、図３５乃至図３８に示したような情報が含まれる。このような設計情報は、マシンリーダブルな形式で入力部１に入力され、入力部１によって設計情報格納部３に格納される。
【００７６】
そして、データ生成決定部７は、入力された設定情報等に基づき、生成対象のテーブルにおいて生成すべきレコードのバリエーションを特定し、当該バリエーションについてのデータをバリエーションデータ格納部９に格納する（ステップＳ５５）。図４０で示した入力画面では、テーブルＡ及びＸが生成対象のテーブルであるので、スキーマ項目定義及びスキーマ関連情報から、テーブルＡ及びＸについて初期的にどのようなバリエーションが必要なのかを特定する。なお、区分・状態情報が設計情報に含まれる場合には、これを用いることになるが、今回の例では区分・状態情報は含まれないので、スキーマ項目定義及びスキーマ関連情報から特定する。図３５及び図３８の例からすると、テーブルＡのデータ項目ｂは区分値「１」又は「２」をとることが分かるので、テーブルＡは、データ項目ｂが「１」のレコード及び「２」のレコードというようなバリエーションが必要であることが分かる。このためバリエーションデータ格納部９には、テーブルＡについてこのようなバリエーションを登録する。一方、図３６及び図３８の例からすると、テーブルＸについては設計情報上特別な制限はなく、単純に１レコード生成すればよいので、そのようなバリエーションについてのデータをバリエーションデータ格納部９に登録する。
【００７７】
その後、データ生成部１１は、読み出されたスキーマ項目情報、スキーマ関連情報等に従って、バリエーションデータ格納部９に格納されているバリエーションにおいて必要とされるレコードを生成し、ＤＢ１３に登録する（ステップＳ５７）。例えば、データ生成部１１は、「半角英数字」「半角」「全角」「数字」といった文字列に関する生成メソッドを有しており、長さを入力することによって、予め定められたルール（例えばランダム、「ユーザ番号」などのカラム名に応じて「CUSTOM_」＋「数字（桁数は全体の桁数にあわせる）」といったルール、主キーであれば各値がユニークになるようにするルールなど）に従った文字列を自動的に生成する。
【００７８】
例えば、テーブルＡについては図４１に示すように区分値であるデータ項目ｂの値が異なる２つのレコードが生成される。また、テーブルＸについては図４２に示すように単純に１レコードが生成される。なお、図４３に示すようにテーブルＺについてはこの段階ではレコードは生成されない。
【００７９】
そして、データ生成決定部７は、未生成の関連テーブルが存在するか判断する（ステップＳ５９）。例えば、設計情報に含まれるスキーマ関連情報等を参照して、未生成の関連テーブルが存在するか判断する。未生成の関連テーブルが存在すると判断された場合には、端子Ｃを介して図４４の処理に移行する。図４０の例では、テーブルＺをまだ生成していないので、端子Ｃを介して図４４の処理に移行するものとする。
【００８０】
図４４の処理の説明に移行して、データ生成決定部７は、スキーマ関連情報に含まれる、生成すべき関連テーブルのカラムの持ち得る区分・状態（存在する場合）及び関係多重度と、入力部１によって入力された関係多重度数ｎ及びｍとから、生成すべき関連テーブルのレコードのバリエーションを決定し、当該バリエーションのデータをバリエーションデータ格納部９に格納する（ステップＳ６１）。
【００８１】
図３８の例からすると、関連テーブルであるテーブルＺにおいてデータ項目ａとデータ項目ｘの関係多重度は、データ項目ａに関連するデータ項目ｂの区分値によって異なることが分かる。従って、データ項目ｂの区分値「１」の場合とデータ項目ｂの区分値「２」の場合とに分け、前者の場合には関係多重度０．．ｎ：０．．ｍについてのバリエーションを後に展開し、後者の場合には関係多重度１：０．．２なので、０：０、１：１、１：２というバリエーションについてのレコードを生成することになる。従って、データ項目ｂの区分値「１」の場合における関係多重度０．．ｎ：０．．ｍについてのバリエーションのデータと、データ項目ｂの区分値「２」の場合における関係多重度０：０、１：１、１：２というバリエーションのデータとをバリエーションデータ格納部９に格納する。
【００８２】
その後、データ生成部１１は、バリエーションデータ格納部９において１つの未処理バリエーションを特定する（ステップＳ６３）。そして、特定したバリエーションが、関係多重度ｎ：ｍ（０．．ｎ：０．．ｍ。以下同様に省略して記する場合もある）のバリエーションであるか判断する（ステップＳ６５）。ここで関係多重度がｎ：ｍではない場合には、データ生成部１１はレコード生成処理を実施する（ステップＳ６７）。このレコード生成処理については、図４５を用いて説明する。但し、図４５の処理フローは、図１２のステップＳ１５乃至Ｓ２７（ステップＳ１９を除く）と実質的に同一である。
【００８３】
まず、データ生成部１１は、外部キー（例えばスキーマ関連情報における「関連カラム」から特定する。又は「関連元のテーブルと関連テーブルとで同じ名前のカラムを、スキーマ項目情報から特定する）の未使用の値が存在するか判断する（ステップＳ１０１）。例えば、ユーザなどによって既に外部キーの値が指定されている場合などには、当該指定されている外部キーのうち未使用の値が存在するかを判断する。そのような値が存在する場合には、データ生成部１１は、当該外部キーの未使用の値を用いて、関連テーブルのスキーマ項目情報に従って、関連テーブルのレコードを生成する（ステップＳ１０３）。そして元の処理に戻る。
【００８４】
ステップＳ１０１で外部キーの未使用の値が存在しないと判断された場合には、データ生成部１１は、関連元テーブルにおける外部キー該当カラムに、未使用の値が存在するか判断する（ステップＳ１０５）。ステップＳ１０５で、関連元テーブルにおける外部キー該当カラムに、未使用の値が存在すると判断された場合には、データ生成部１１は、当該外部キー該当カラムの未使用の値を用いて、関連テーブルのスキーマ項目情報に従って、関連テーブルのレコードを生成する（ステップＳ１０７）。そして元の処理に戻る。  
【００８５】
一方、関連元テーブルにおける外部キー該当カラムに、未使用の値が存在しないと判断された場合には、データ生成部１１は、関連元テーブルのスキーマ項目情報に従って、ステップＳ６３で特定されたバリエーションに応じて必要となるレコードを生成する（ステップＳ１０９）。
【００８６】
そして、データ生成部１１は、ステップＳ１０９で生成された、関連元テーブルにおける外部キー該当カラムの値を用い、関連テーブルのスキーマ項目情報に従って、関連テーブルのレコードを生成する（ステップＳ１１１）。そして元の処理に戻る。
【００８７】
例えば、データ項目ｂの区分値「２」の場合には、上で述べたように関係多重度０：０、１：１、１：２というバリエーションについてレコードを生成する。模式的に書けば、図４６に示すように、（ａ）データ項目ａとデータ項目ｘが０：０で対応する場合、（ｂ）データ項目ａとデータ項目ｘが１：１で対応する場合、（ｃ）データ項目ａとデータ項目ｘが１：２で対応する場合のレコードを生成する必要がある。なお、本例では、データ項目ａが外部キーとして用いられる。
【００８８】
関係多重度０：０を処理する場合、図４１に示した状態から開始すると、データ項目ａの値「ａ２」は未使用の値ということになるので、図４６（ａ）に示すように、データ項目ａの値「ａ２」を採用すると共に、データ項目ｘの値をスキーマ項目情報から「ｘ１０」として生成する。
【００８９】
次に、関係多重度１：１を処理する場合には、テーブルＡには未使用の値はないので、図４６（ｂ）に示すように、データ項目ａの値「ａ１４」を生成すると共に、対応するデータ項目ｘの値「ｘ１１」を生成する。
【００９０】
さらに、関係多重度１：２を処理する場合には、テーブルＡには未使用の値はないので、図４６（ｃ）に示すように、データ項目ａの値「ａ１５」を生成すると共に、対応するデータ項目ｘの値「ｘ１２」及び「ｘ１３」を生成する。
【００９１】
以上のようにして処理が終了すると、図４４の説明に戻って、データ生成部１１は、ステップＳ６７で生成したデータを、ＤＢ１３に登録する（ステップＳ６９）。上で説明した生成データ例では、データ項目ｂの区分値「２」の場合の処理だったので、それに対応してデータ項目ａの値「ａ１４」及び「ａ１５」を、図４７に示すようなデータをテーブルＡに追加登録する。同様に、データ項目ｘについても「ｘ１０」「ｘ１１」「ｘ１２」「ｘ１３」を生成したので、これらを図４８に示すようなデータをテーブルＸに追加登録する。さらに、図４６（ａ）で示した０：０の関係多重度については、対応関係がないということなのでこの場合を除き、図４６（ｂ）及び（ｃ）についての対応関係については、図４９に示すようなデータをテーブルＺに登録する。すなわち、関係多重度１：１についてはａ１４及びｘ１１を含むレコードを登録し、関係多重度１：２についてはａ１５及びｘ１２を含むレコードとａ１５及びｘ１３を含むレコードを登録する。
【００９２】
そして、データ生成部１１は、ステップＳ６１で特定された必要なバリエーションの全てについてデータを生成したか判断する（ステップＳ８１）。全てのバリエーションについてデータを生成したわけではない場合には、ステップＳ６３に戻る。一方、全てのバリエーションを生成した場合には、端子Ｄを介して図３９のステップＳ５９に戻る。
【００９３】
一方、ステップＳ６５で関係多重度がｎ：ｍについてのバリエーションを展開する場面であると判断された場合には、データ生成部１１は、ｎ：ｍレコード生成処理を実施する（ステップＳ７１）。ｎ：ｍレコード生成処理については、図５０を用いて説明する。なお、０．．ｎ：０．．ｍの場合には、０：０、１：１、１：ｍ、ｎ：１及びｎ：ｍを生成する必要がある。本実施の形態では、まずｎ：ｍについてのデータを生成する。
【００９４】
まず、データ生成部１１は、ｎ：ｍのバリエーションについてレコード生成処理を実施する（ステップＳ１２１）。この処理は図４５と同様である。なお、ｎ及びｍについては、スキーマ関連情報又はユーザ設定入力値を用いる。ここではｎ＝３及びｍ＝２である。
【００９５】
外部から入力された未使用の外部キー値が存在せず且つテーブルＡのデータ項目ａに区分値「１」についての未使用の値が存在しない場合には、図４５の処理で図５１に示すようなデータが生成される。すなわち、データ項目ａについては「ａ８」「ａ９」「ａ１０」というデータ値が生成され、データ項目ｘについては「ｘ６」「ｘ７」というデータ値が生成されている。なお、図５１の例では、レコード間関係数は「３」である。
【００９６】
なお、最小のレコード数でｎ：ｍを満たすためには、テーブルＡのデータ項目ａについてはｎ個、テーブルＸのデータ項目ｘについてはｍ個、データ値を生成すればよい。そして、データ項目ａの各データ値からデータ項目ｘのデータ値へｍ本の線を引けば（関連付けを行えば）、合計でｎ×ｍ本の関係が生成され、テーブルＺにおいてｎ×ｍ個のレコードが生成されることになる。
【００９７】
次に、データ生成部１１は、ユーザから指定されたレコード間関係数の上限Ｐを、生成したレコード群のレコード間関係数が超えたか判断する（ステップＳ１２３）。ユーザが「６」をレコード間関係数の上限Ｐとして指定すると、図５１で生成したレコード群のレコード間関係数が「３」であるから、ステップＳ１２３では、生成したレコード群のレコード間関係数は、上限Ｐを超えていないと判断される。
【００９８】
なお、図５１で生成したレコード群においては、カラム値ａ８が変更されると、カラム値ｘ７を変更しなければならず、カラム値ｘ７を変更するとカラム値ａ１０を変更しなければならないので、カラム値ａ８を含むレコードと、カラム値ｘ７を含むレコードと、カラム値ａ１０を含むレコードとにより、レコード間関係数は「３」とカウントされる。
【００９９】
生成したレコード群のレコード間関係数が上限Ｐを超えていない場合には、データ生成部１１は、再度ｎ：ｍのバリエーションについてレコード生成処理を実施する（ステップＳ１２５）。ステップＳ１２１と同様である。従って、ステップＳ１２５では、図５２に示すように、図５１で生成したレコード群と同様のデータが生成される。
【０１００】
そして、データ生成部１１は、レコード間関連付け処理を実施する（ステップＳ１２７）。例えば、図５１に示したレコード群と図５２に示したレコード群を、連結させる処理を実施する。すなわち、図５３に示すような関連付けを行う。図５３において点線の関連付けは、３：２から６：４に直す際に切断された関連付けであり、太線の関連付けは、６：４に直す際に生成された関連付けである。このような連結の方法は、グラフ理論においては周知であり、ここではこれ以上述べないが、予めルール化しておき、当該ルールに従って連結を行うものとする。
【０１０１】
ステップＳ１２７の後にステップＳ１２３に戻って、データ生成部１１は、生成したレコード群のレコード間関係数が、ユーザによって指定されたレコード間関係数の上限Ｐを超えたか判断する。図５３で示したレコード群のレコード間関係数は「６」であり、上限Ｐが「６」であるから、ステップＳ１２３の条件を満たしていないと判断される。このような場合にはステップＳ１２５及びＳ１２７を再度実行する。
【０１０２】
なお、図５３で示したレコード群において、カラム値ａ８が変更されると、カラム値ｘ７が変更され、カラム値ｘ７が変更されるとカラム値ａ１０が変更され、カラム値ａ１０が変更されるとカラム値ｘ８が変更され、カラム値ｘ８が変更されるとカラム値ａ１２も変更され、カラム値ａ８が変更されるとカラム値ｘ６も変更されるのでカラム値ａ１３も変更される。従って、カラム値ａ８を含むレコードと、カラム値ｘ７を含むレコードと、カラム値ａ１０を含むレコードと、カラム値ｘ８を含むレコードと、カラム値ａ１２を含むレコードと、カラム値ａ１３を含むレコードとにより、レコード間関係数は「６」とカウントされる。
【０１０３】
具体的には、図５３で示したレコード群に対して図５１又は図５２に示したようなレコード群を追加して連結すると、図５４のようなレコード群が得られる。しかしながら、レコード間関係数は「９」となってしまう。
【０１０４】
そうするとステップＳ１２３でレコード間関係数の上限Ｐを超えたと判断されるので、データ生成部１１は、追加でレコード生成処理を行っている場合には直前実施時に生成されたデータを破棄し、関連付けをそれより前に戻す（ステップＳ１２９）。追加でレコード生成処理を実施する毎に状態を保存しておき、１つ前の状態に戻すようにしても良い。上で述べた例では図５３に示した状態が採用されることになる。そして元の処理に戻る。
【０１０５】
そして、データ生成部１１は、生成データをＤＢ１３に登録する（ステップＳ１３１）。図５３に基づき追加でテーブルＡに登録されるデータは図５５に示すようなデータである。現在処理しているのはデータ項目ｂの区分値「１」についてであるから、区分値は全て「１」であり、データ項目ａの値は図５３から分かるように「ａ８」乃至「ａ１３」である。また、図５３に基づき追加でテーブルＸに登録されるデータは図５６に示すようなデータである。すなわち、図５３から分かるように「ｘ６」乃至「ｘ９」である。そして、図５３に基づきテーブルＺに登録されるデータは図５７に示すようなデータである。図５７では、図５３の関連付けに応じて１２のレコードが追加される。
【０１０６】
図４４の処理の説明に戻って、ステップＳ７１でｎ：ｍについての処理が終了すると、０．．ｎ：０．．ｍについてのバリエーションで未処理の０：０、１：１、１：ｍ及びｎ：１を処理することになる。データ生成部１１は、これらのうち未処理のサブバリエーションを特定し（ステップＳ７３）、当該パターンについてレコード生成処理を実施する（ステップＳ７５）。この処理についてはステップＳ６７と同じであり、説明は省略する。そして、ステップＳ７５で生成したデータを、ＤＢ１３に登録する（ステップＳ７７）。さらに、ステップＳ７３で示した全てのパターンを処理したか判断し、未処理のサブバリエーションが存在する場合にはステップＳ７３に戻る。一方、全てのサブバリエーションを処理した場合にはステップＳ８１に移行する。
【０１０７】
ステップＳ７３乃至Ｓ７９の繰り返しでは、図５８のようなデータが生成される。但し、図５８（ａ）に示す０：０の場合には、図４１の状態においてデータ項目ｂの区分値「１」でデータ項目ａについての未使用のデータ値「ａ１」を用い、データ項目ｘの未使用のデータ値「ｘ１」を用いるので、新規に生成されるデータはない。図５８（ｂ）に示す１：１の場合には、データ項目ａのデータ値「ａ３」とデータ項目ｘのデータ値「ｘ２」は新規に生成されたものである。さらに、図５８（ｃ）に示す１：ｍ（ここでは２）の場合には、データ項目ａのデータ値「ａ４」とデータ項目ｘのデータ値「ｘ３」及び「ｘ４」は、新たに生成されたものである。そして、図５８（ｄ）に示すｎ（ここでは３）：１の場合には、データ項目ａのデータ値「ａ５」「ａ６」及び「ａ７」とデータ項目ｘのデータ値「ｘ５」は、新たに生成されたものである。
【０１０８】
このようなデータについては、ステップＳ７７でＤＢ１３に追加登録されるが、テーブルＡには図５８に基づき図５９に示すようなレコードが登録され、テーブルＸには図５８に基づき図６０に示すようなレコードが登録され、テーブルＺには図５８に基づき図６１に示すようなレコードが登録される。
【０１０９】
ステップＳ８１で全てのバリエーションについて処理したと判断されると、端子Ｄを介して図３９のステップＳ５９に戻る。
【０１１０】
図３９の処理の説明に戻ると、再度、データ生成決定部７は、未生成の関連テーブルが存在するか判断する（ステップＳ５９）。例えば、設計情報に含まれるスキーマ関連情報を参照して、未生成の関連テーブルが存在するか判断する。未生成の関連テーブルがまだ存在すると判断された場合には、端子Ｃを介して図４４の処理に移行する。
【０１１１】
一方、未生成の関連テーブルが存在しないと判断された場合には、データ生成決定部７は、例えば図６２に示すような処理結果を含む表示をユーザに対して出力する（ステップＳ６０）。図６２には、テーブルＡのレコードが１５件、テーブルＸのレコードが１３件、テーブルＺのレコードが２１件生成され、生成された関連データのセットが\CreatedData\A_X_Zフォルダに格納されていることが示されている。メッセージ内容については、様々な態様に変形可能である。
【０１１２】
最終的にＤＢ１３に格納されるデータをまとめると、テーブルＡについては図６３に示すように１５レコードが生成され、テーブルＸについては図６４に示すように１３レコード生成され、テーブルＺについては図６５に示すように２１レコードが生成される。
【０１１３】
以上のような処理を実施することにより、関係多重度がｎ：ｍであるような場合においても、ユーザによって指定されたレコード間関係数の上限に応じて、業務上の整合性を保持しつつ、処理上の網羅性を担保するようなレコード群を生成することができるようになる。なお、上では０．．ｎ：０．．ｍの例を説明したが、例えば１．．ｎ：１．．ｍであっても、０：０のサブバリエーションを生成しないようにすればよい。同様に下限が１より大きい場合、例えば２．．ｎ：２．．ｍの場合にも、２：２、２：ｍ、ｎ：２、ｎ：ｍといったようにサブバリエーションに展開するようにすればよい。
【０１１４】
以上本発明の実施の形態を説明したが、本発明はこれに限定されるわけではない。例えば、図２に示した機能ブロック図は一例であって、必ずしもプログラムモジュール構成に対応しない場合もある。
【０１１５】
さらに、処理フローについても処理結果が変わらない限り、ステップの順番を入れ替えたり、並列実行させることができる。
【０１１６】
以上述べた実施の形態をまとめると以下のようになる。
【０１１７】
第１の態様に係るテストデータ生成方法は、第１のテーブルと第２のテーブルとの関係付け及び関係多重度を表すスキーマ関連情報と、第１のテーブルの区分及び状態の業務上取り得る組み合わせに関する区分状態情報と、第１のテーブル及び第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、第１のテーブルのデータと第２のテーブルのデータとを格納するデータベースとにアクセス可能であるコンピュータにより実行される。そして、設計情報格納部に格納されている区分状態情報から第１のテーブルにおける区分及び状態の業務上取り得る組み合わせを特定し、設計情報格納部に格納されている第１のテーブルのスキーマ項目情報に従って上記組み合わせに応じた第１のテーブルのレコードを生成し、データベースに登録するステップと、設計情報格納部に格納されているスキーマ関連情報から、第１のテーブルのレコードと第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定ステップと、上記バリエーションにおいて必要となる第１のテーブルのレコードであって未生成のレコードが存在する場合には、設計情報格納部に格納されている第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、データベースに登録する第１テーブル未生成レコード生成ステップと、設計情報格納部に格納されている第２のテーブルのスキーマ項目情報及びスキーマ関連情報における第１のテーブルと第２のテーブルとの関係付けに従って、上記バリエーションに応じて必要となる第２のテーブルのレコードを生成し、データベースに登録する第２テーブルレコード生成ステップとを含む。
【０１１８】
このように業務上取り得る組み合わせに応じた第１のテーブルのレコードを生成することによって、業務上の整合性及び処理上の網羅性を担保し、第１のテーブルのレコードと第２のテーブルのレコードとの対応関係のバリエーションに応じて第１及び第２のテーブルのレコードを生成することによって、処理上の網羅性を担保している。すなわち、業務アプリケーション・プログラムに対して正しいテストを行うために十分なテストデータを自動的に生成することができるようになる。
【０１１９】
なお、上で述べたバリエーション特定ステップが、スキーマ関連情報における関係多重度がｘ（０以上の整数）乃至ｎ（変数）であり且つ多重度上限ｍ（ｘより大きい整数）が指定された場合、第１のテーブルの１レコードに対応して第２のテーブルのｘレコードというバリエーションと、第１のテーブルの１レコードに対応して第２のテーブルのｍレコードというバリエーションとを生成するステップを含むようにしてもよい。処理上の網羅性を担保するためである。
【０１２０】
さらに、上で述べたバリエーション特定ステップが、スキーマ関連情報における関係多重度が０乃至ｎ（変数）であり且つ多重度上限ｍ（２以上の整数）が指定された場合、第１のテーブルの１レコードに対応して第２のテーブルのレコードなしというバリエーションと、第１のテーブルの１レコードに対応して第２のテーブルの１レコードというバリエーションと、第１のテーブルの１レコードに対応して第２のテーブルのｍレコードというバリエーションとを生成するステップを含むようにしてもよい。典型的なバリエーションによって、処理上の網羅性を担保するためである。
【０１２１】
さらに、上で述べたバリエーション特定ステップが、スキーマ関連情報における、第１のテーブルの特定のレコードと第２のテーブルのレコードの関係多重度がｘ（０以上の整数）乃至ｎ（変数）であり且つ多重度上限ｍ（ｘより大きい整数）が指定された場合、第１のテーブルの特定のレコードに対応して第２のテーブルのｘレコードであり且つ第１のテーブルの特定のレコード以外のレコードに対応して第２のテーブルのレコードなしというバリエーションと、第１のテーブルの特定のレコードに対応して第２のテーブルのｍレコードであり且つ第１のテーブルの特定のレコード以外のレコードに対応して第２のテーブルのレコードなしというバリエーションとを生成するステップを含むようにしてもよい。特定のレコード（区分や状態）についてのみ第２のテーブルのレコードが対応付けられるような場合もある。
【０１２２】
また、上で述べた第１テーブル未生成レコード生成ステップが、第１のテーブルにおいて外部キーに相当するカラムの値のうち、上記バリエーションに基づき使用可能な値が存在するか否かを判断するステップを含むようにしてもよい。このようにすれば、上記バリエーションにおいて必要となる第１のテーブルのレコードであって未生成のレコードが存在するか否かを判断することができるようになる。
【０１２３】
さらに、上で述べた第２テーブルレコード生成ステップが、第１のテーブルにおいて外部キーに相当するカラムの値のうち、上記バリエーションに基づき使用可能な値を、第２のテーブルにおける外部キーに相当するカラムの値として採用するステップを含むようにしてもよい。
【０１２４】
また、上で述べた第２テーブルレコード生成ステップが、第１テーブル未生成レコード生成ステップにおいて新たにレコードが生成された場合には、当該新たなレコードにおける外部キーに相当するカラムの値を、第２のテーブルにおける外部キーに相当するカラムの値として採用するステップを含むようにしてもよい。
【０１２５】
さらに、第１の態様に係るテストデータ生成方法において、設計情報格納部が、第１のテーブル又は第２のテーブルと第３のテーブルの関係付け及び関係多重度を表す第２のスキーマ関連情報と、第３のテーブルのスキーマ項目情報とをさらに格納している場合には、設計情報格納部に格納されている第２のスキーマ関連情報とユーザ指定の多重度上限とから、第１のテーブルのレコード又は第２のテーブルのレコードと第３のテーブルのレコードとの対応関係のバリエーションを特定するステップと、上記バリエーションにおいて必要となる第１のテーブルのレコード又は第２のテーブルのレコードであって未生成のレコードが存在する場合には、設計情報格納部に格納されている第１のテーブル又は第２のテーブルのスキーマ項目情報に従って新たにレコードを生成し、データベースに登録するステップと、設計情報格納部に格納されている第３のテーブルのスキーマ項目情報及び第２のスキーマ関連情報における第１のテーブル又は第２のテーブルと第３のテーブルとの関係付けに従って、バリエーションに応じて必要となる第３のテーブルのレコードを生成し、データベースに登録するステップとをさらに含むようにしても良い。複数の関連テーブルが存在する場合にも対処することができるようになる。
【０１２６】
第２の態様に係るテストデータ生成方法は、第１のテーブルと第２のテーブルとの関係付け及び区分値毎の関係多重度を表すスキーマ関連情報と、前記第１のテーブル及び前記第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、前記第１のテーブルのデータと前記第２のテーブルのデータとを格納するデータベースとにアクセス可能であるコンピュータにより実行される。そして、設計情報格納部に格納されているスキーマ関連情報で指定される区分値のバリエーションを特定し、設計情報格納部に格納されている第１のテーブルのスキーマ項目情報に従って区分値のバリエーションに応じた第１のテーブルのレコードを生成し、データベースに登録するステップと、設計情報格納部に格納されているスキーマ関連情報の区分値毎の関係多重度から、第１のテーブルのレコードと第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定ステップと、バリエーションにおいて必要となる第１のテーブルのレコードであって未生成のレコードが存在する場合には、設計情報格納部に格納されている第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、データベースに登録する第１テーブル未生成レコード生成ステップと、設計情報格納部に格納されている第２のテーブルのスキーマ項目情報及びスキーマ関連情報における第１のテーブルと第２のテーブルとの関係付けに従って、バリエーションに応じて必要となる第２のテーブルのレコードを生成し、データベースに登録する第２テーブルレコード生成ステップとを含む。
【０１２７】
このように区分状態情報が用意されない場合においても、業務アプリケーション・プログラムに対して正しいテストを行うために十分なテストデータを自動的に生成することができる。
【０１２８】
第３の態様に係るテストデータ生成方法は、第１及び第２のテーブル並びに当該第１及び第２のテーブルの関係テーブル間の関係付け及び第１及び第２のテーブルにおける関連データ項目間における区分値毎の関係多重度を表すスキーマ関連情報と、各テーブルのスキーマ項目情報とを格納する設計情報格納部と、各テーブルを格納するデータベースとにアクセス可能であるコンピュータにより実行される。そして、設計情報格納部に格納されているスキーマ関連情報で指定される区分値のバリエーションを特定し、設計情報格納部に格納されている前記スキーマ項目情報に従って区分値のバリエーションに応じた第１及び第２のテーブルのレコードを生成し、データベースに登録するステップと、設計情報格納部に格納されているスキーマ関連情報の関連データ項目間における区分値毎の関係多重度から、関連データ項目を含む、関係テーブルのレコードのバリエーションを特定するバリエーション特定ステップと、関係テーブルのレコードのバリエーションにおいて必要となる第１及び第２のテーブルの関連データ項目の値であって未生成の値が存在する場合には、設計情報格納部に格納されている第１及び第２のテーブルのスキーマ項目情報に従って第１及び第２のテーブルの、関連データ項目の値を含むレコードを新たに生成し、データベースに登録すると共に、データベースに登録されている第１及び第２のテーブルのレコードを用いて、関係テーブルのレコードを生成し、データベースに登録する関係テーブル生成ステップとを含む。
【０１２９】
そして、上で述べたバリエーション特定ステップは、関係多重度がａ乃至ｎ：ｂ乃至ｍ（ｎ及びｍは２以上の整数。ａは０以上ｎ未満の整数。ｂは０以上ｍ未満の整数。）というバリエーションの場合に、ｎ：ｍを含む複数のサブバリエーションに展開する展開ステップを含む。また、上で述べた関係テーブル生成ステップは、ｎ：ｍのサブバリエーションのための関係テーブルのレコード群を生成する場合、当該レコード群における、データ項目変更時の影響波及範囲を表すレコード間関係数が、指定されたレコード間関係数上限値以下で最大となるように、第１のテーブルの関連データ項目のｎ個の値と第２のテーブルの関連データ項目のｍ個の値とを含むデータセットを１又は複数セット用意するステップを含む。
【０１３０】
このようにすれば、関係多重度がａ乃至ｎ：ｂ乃至ｍの場合においても、テスト上十分な網羅性をもってテストデータを生成することができるようになる。また、業務アプリケーション・プログラムにおける業務上の整合性を担保しつつテストデータを生成することもできる。
【０１３１】
なお、ａ＝０且つｂ＝０である場合には、展開ステップにおいて、０：０、１：１、１：ｍ及びｎ：１のサブバリエーションに展開するようにしてもよい。これによって網羅性が担保される。
【０１３２】
なお、本方法をコンピュータに実行させるためのプログラムを作成することができ、このプログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。また、ネットワークなどを介してデジタル信号として配信される場合もある。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【０１３３】
なお、テストデータ生成装置１００は、例えばコンピュータ装置であって、図６６に示すように当該コンピュータ装置においては、メモリ２５０１（記憶部）とＣＰＵ２５０３（処理部）とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ）及びＷｅｂブラウザを含むアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。このようなコンピュータは、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１３４】
（付記１）
第１のテーブルと第２のテーブルとの関係付け及び関係多重度を表すスキーマ関連情報と、前記第１のテーブルの区分及び状態の業務上取り得る組み合わせに関する区分状態情報と、前記第１のテーブル及び前記第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、前記第１のテーブルのデータと前記第２のテーブルのデータとを格納するデータベースとにアクセス可能であるコンピュータに、
前記設計情報格納部に格納されている区分状態情報から前記第１のテーブルにおける前記区分及び状態の業務上取り得る組み合わせを特定し、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って前記組み合わせに応じた前記第１のテーブルのレコードを生成し、前記データベースに登録するステップと、
前記設計情報格納部に格納されている前記スキーマ関連情報から、前記第１のテーブルのレコードと前記第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定ステップと、
前記バリエーションにおいて必要となる前記第１のテーブルのレコードであって未生成のレコードが存在する場合には、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、前記データベースに登録する第１テーブル未生成レコード生成ステップと、
前記設計情報格納部に格納されている前記第２のテーブルのスキーマ項目情報及び前記スキーマ関連情報における前記第１のテーブルと前記第２のテーブルとの関係付けに従って、前記バリエーションに応じて必要となる前記第２のテーブルのレコードを生成し、前記データベースに登録する第２テーブルレコード生成ステップと、
を実行させるためのテストデータ生成プログラム。
【０１３５】
（付記２）
前記バリエーション特定ステップが、
前記スキーマ関連情報における前記関係多重度がｘ（０以上の整数）乃至ｎ（変数）であり且つユーザにより多重度上限ｍ（ｘより大きい整数）が指定された場合、前記第１のテーブルの１レコードに対応して前記第２のテーブルのｘレコードというバリエーションと、前記第１のテーブルの１レコードに対応して前記第２のテーブルのｍレコードというバリエーションとを生成するステップ
を含む付記１記載のテストデータ生成プログラム。
【０１３６】
（付記３）
前記バリエーション特定ステップが、
前記スキーマ関連情報における前記関係多重度が０乃至ｎ（変数）であり且つユーザにより多重度上限ｍ（２以上の整数）が指定された場合、前記第１のテーブルの１レコードに対応して前記第２のテーブルのレコードなしというバリエーションと、前記第１のテーブルの１レコードに対応して前記第２のテーブルの１レコードというバリエーションと、前記第１のテーブルの１レコードに対応して前記第２のテーブルのｍレコードというバリエーションとを生成するステップ
を含む付記１記載のテストデータ生成プログラム。
【０１３７】
（付記４）
前記バリエーション特定ステップが、
前記スキーマ関連情報における、前記第１のテーブルの特定のレコードと前記第２のテーブルのレコードの前記関係多重度がｘ（０以上の整数）乃至ｎ（変数）であり且つユーザにより多重度上限ｍ（ｘより大きい整数）が指定された場合、前記第１のテーブルの特定のレコードに対応して前記第２のテーブルのｘレコードであり且つ前記第１のテーブルの特定のレコード以外のレコードに対応して前記第２のテーブルのレコードなしというバリエーションと、前記第１のテーブルの特定のレコードに対応して前記第２のテーブルのｍレコードであり且つ前記第１のテーブルの特定のレコード以外のレコードに対応して前記第２のテーブルのレコードなしというバリエーションとを生成するステップ
を含む付記１記載のテストデータ生成プログラム。
【０１３８】
（付記５）
前記第１テーブル未生成レコード生成ステップが、
前記第１のテーブルにおいて外部キーに相当するカラムの値のうち、前記バリエーションに基づき使用可能な値が存在するか否かを判断するステップ
を含む付記１記載のテストデータ生成プログラム。
【０１３９】
（付記６）
前記第２テーブルレコード生成ステップが、
前記第１のテーブルにおいて外部キーに相当するカラムの値のうち、前記バリエーションに基づき使用可能な値を、前記第２のテーブルにおける外部キーに相当するカラムの値として採用するステップ
を含む付記１記載のテストデータ生成プログラム。
【０１４０】
（付記７）
前記第２テーブルレコード生成ステップが、
前記第１テーブル未生成レコード生成ステップにおいて新たにレコードが生成された場合には、当該新たなレコードにおける外部キーに相当するカラムの値を、前記第２のテーブルにおける外部キーに相当するカラムの値として採用するステップ
を含む付記１記載のテストデータ生成プログラム。
【０１４１】
（付記８）
前記設計情報格納部が、第１のテーブル又は第２のテーブルと第３のテーブルの関係付け及び関係多重度を表す第２のスキーマ関連情報と、前記第３のテーブルのスキーマ項目情報とをさらに格納している場合には、
前記設計情報格納部に格納されている前記第２のスキーマ関連情報とユーザ指定の多重度上限とから、前記第１のテーブルのレコード又は前記第２のテーブルのレコードと前記第３のテーブルのレコードとの対応関係のバリエーションを特定するステップと、
前記バリエーションにおいて必要となる前記第１のテーブルのレコード又は前記第２のテーブルのレコードであって未生成のレコードが存在する場合には、前記設計情報格納部に格納されている前記第１のテーブル又は前記第２のテーブルのスキーマ項目情報に従って新たにレコードを生成し、前記データベースに登録するステップと、
前記設計情報格納部に格納されている前記第３のテーブルのスキーマ項目情報及び前記第２のスキーマ関連情報における前記第１のテーブル又は前記第２のテーブルと前記第３のテーブルとの関係付けに従って、前記バリエーションに応じて必要となる前記第３のテーブルのレコードを生成し、前記データベースに登録するステップと、
をさらに前記コンピュータに実行させるための付記１記載のテストデータ生成プログラム。
【０１４２】
（付記９）
第１のテーブルと第２のテーブルとの関係付け及び関係多重度を表すスキーマ関連情報と、前記第１のテーブルの区分及び状態の業務上取り得る組み合わせに関する区分状態情報と、前記第１のテーブル及び前記第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、前記第１のテーブルのデータと前記第２のテーブルのデータとを格納するデータベースとにアクセス可能であるコンピュータに実行されるテストデータ生成方法であって、
前記設計情報格納部に格納されている区分状態情報から前記第１のテーブルにおける前記区分及び状態の業務上取り得る組み合わせを特定し、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って前記組み合わせに応じた前記第１のテーブルのレコードを生成し、前記データベースに登録するステップと、
前記設計情報格納部に格納されている前記スキーマ関連情報から、前記第１のテーブルのレコードと前記第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定ステップと、
前記バリエーションにおいて必要となる前記第１のテーブルのレコードであって未生成のレコードが存在する場合には、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、前記データベースに登録する第１テーブル未生成レコード生成ステップと、
前記設計情報格納部に格納されている前記第２のテーブルのスキーマ項目情報及び前記スキーマ関連情報における前記第１のテーブルと前記第２のテーブルとの関係付けに従って、前記バリエーションに応じて必要となる前記第２のテーブルのレコードを生成し、前記データベースに登録する第２テーブルレコード生成ステップと、
を含むテストデータ生成方法。
【０１４３】
（付記１０）
第１のテーブルと第２のテーブルとの関係付け及び関係多重度を表すスキーマ関連情報と、前記第１のテーブルの区分及び状態の業務上取り得る組み合わせに関する区分状態情報と、前記第１のテーブル及び前記第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、
前記設計情報格納部に格納されている区分状態情報から前記第１のテーブルにおける前記区分及び状態の業務上取り得る組み合わせを特定し、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って前記組み合わせに応じた前記第１のテーブルのレコードを生成し、データベースに登録する手段と、
前記設計情報格納部に格納されている前記スキーマ関連情報から、前記第１のテーブルのレコードと前記第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定手段と、
前記バリエーションにおいて必要となる前記第１のテーブルのレコードであって未生成のレコードが存在する場合には、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、データベースに登録する第１テーブル未生成レコード生成手段と、
前記設計情報格納部に格納されている前記第２のテーブルのスキーマ項目情報及び前記スキーマ関連情報における第１のテーブルと前記第２のテーブルとの関係付けに従って、前記バリエーションに応じて必要となる前記第２のテーブルのレコードを生成し、データベースに登録する第２テーブルレコード生成手段と、
を有するテストデータ生成装置。
【０１４４】
（付記１１）
第１のテーブルと第２のテーブルとの関係付け及び区分値毎の関係多重度を表すスキーマ関連情報と、前記第１のテーブル及び前記第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、前記第１のテーブルのデータと前記第２のテーブルのデータとを格納するデータベースとにアクセス可能であるコンピュータに、
前記設計情報格納部に格納されている前記スキーマ関連情報で指定される区分値のバリエーションを特定し、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って前記区分値のバリエーションに応じた前記第１のテーブルのレコードを生成し、前記データベースに登録するステップと、
前記設計情報格納部に格納されている前記スキーマ関連情報の前記区分値毎の関係多重度から、前記第１のテーブルのレコードと前記第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定ステップと、
前記バリエーションにおいて必要となる前記第１のテーブルのレコードであって未生成のレコードが存在する場合には、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、前記データベースに登録する第１テーブル未生成レコード生成ステップと、
前記設計情報格納部に格納されている前記第２のテーブルのスキーマ項目情報及び前記スキーマ関連情報における前記第１のテーブルと前記第２のテーブルとの関係付けに従って、前記バリエーションに応じて必要となる前記第２のテーブルのレコードを生成し、前記データベースに登録する第２テーブルレコード生成ステップと、
を実行させるためのテストデータ生成プログラム。
【０１４５】
（付記１２）
第１及び第２のテーブル並びに当該第１及び第２のテーブルの関係テーブル間の関係付け及び前記第１及び第２のテーブルにおける関連データ項目間における区分値毎の関係多重度を表すスキーマ関連情報と、各前記テーブルのスキーマ項目情報とを格納する設計情報格納部と、各前記テーブルを格納するデータベースとにアクセス可能であるコンピュータに、
前記設計情報格納部に格納されている前記スキーマ関連情報で指定される区分値のバリエーションを特定し、前記設計情報格納部に格納されている前記スキーマ項目情報に従って前記区分値のバリエーションに応じた前記第１及び第２のテーブルのレコードを生成し、前記データベースに登録するステップと、
前記設計情報格納部に格納されている前記スキーマ関連情報の前記関連データ項目間における前記区分値毎の関係多重度から、前記関連データ項目を含む、前記関係テーブルのレコードのバリエーションを特定するバリエーション特定ステップと、
前記関係テーブルのレコードのバリエーションにおいて必要となる前記第１及び第２のテーブルの関連データ項目の値であって未生成の値が存在する場合には、前記設計情報格納部に格納されている前記第１及び第２のテーブルのスキーマ項目情報に従って前記第１及び第２のテーブルの、前記関連データ項目の値を含むレコードを新たに生成し、前記データベースに登録すると共に、前記データベースに登録されている前記第１及び第２のテーブルのレコードを用いて、前記関係テーブルのレコードを生成し、前記データベースに登録する関係テーブル生成ステップと、
をコンピュータに実行させ、
前記バリエーション特定ステップが、
前記関係多重度がａ乃至ｎ：ｂ乃至ｍ（ｎ及びｍは２以上の整数。ａは０以上ｎ未満の整数。ｂは０以上ｍ未満の整数。）というバリエーションの場合に、ｎ：ｍを含む複数のサブバリエーションに展開する展開ステップ
を含み、
前記関係テーブル生成ステップが、
前記ｎ：ｍのサブバリエーションのための前記関係テーブルのレコード群を生成する場合、当該レコード群における、データ項目変更時の影響波及範囲を表すレコード間関係数が、指定されたレコード間関係数上限値以下で最大となるように、前記第１のテーブルの関連データ項目のｎ個の値と前記第２のテーブルの関連データ項目のｍ個の値とを含むデータセットを１又は複数セット用意するステップ
を含むテストデータ生成プログラム。
【０１４６】
（付記１３）
ａ＝０且つｂ＝０である場合
前記展開ステップにおいて、０：０、１：１、１：ｍ及びｎ：１のサブバリエーションに展開する
付記１２記載のテストデータ生成プログラム。
【０１４７】
（付記１４）
第１のテーブルと第２のテーブルとの関係付け及び区分値毎の関係多重度を表すスキーマ関連情報と、前記第１のテーブル及び前記第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、前記第１のテーブルのデータと前記第２のテーブルのデータとを格納するデータベースとにアクセス可能であるコンピュータにより実行されるテストデータ生成方法であって、
前記設計情報格納部に格納されている前記スキーマ関連情報で指定される区分値のバリエーションを特定し、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って前記区分値のバリエーションに応じた前記第１のテーブルのレコードを生成し、前記データベースに登録するステップと、
前記設計情報格納部に格納されている前記スキーマ関連情報の前記区分値毎の関係多重度から、前記第１のテーブルのレコードと前記第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定ステップと、
前記バリエーションにおいて必要となる前記第１のテーブルのレコードであって未生成のレコードが存在する場合には、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、前記データベースに登録する第１テーブル未生成レコード生成ステップと、
前記設計情報格納部に格納されている前記第２のテーブルのスキーマ項目情報及び前記スキーマ関連情報における前記第１のテーブルと前記第２のテーブルとの関係付けに従って、前記バリエーションに応じて必要となる前記第２のテーブルのレコードを生成し、前記データベースに登録する第２テーブルレコード生成ステップと、
を含むテストデータ生成方法。
【０１４８】
（付記１５）
第１及び第２のテーブル並びに当該第１及び第２のテーブルの関係テーブル間の関係付け及び前記第１及び第２のテーブルにおける関連データ項目間における区分値毎の関係多重度を表すスキーマ関連情報と、各前記テーブルのスキーマ項目情報とを格納する設計情報格納部と、各前記テーブルを格納するデータベースとにアクセス可能であるコンピュータにより実行されるテストデータ生成方法であって、
前記設計情報格納部に格納されている前記スキーマ関連情報で指定される区分値のバリエーションを特定し、前記設計情報格納部に格納されている前記スキーマ項目情報に従って前記区分値のバリエーションに応じた前記第１及び第２のテーブルのレコードを生成し、前記データベースに登録するステップと、
前記設計情報格納部に格納されている前記スキーマ関連情報の前記関連データ項目間における前記区分値毎の関係多重度から、前記関連データ項目を含む、前記関係テーブルのレコードのバリエーションを特定するバリエーション特定ステップと、
前記関係テーブルのレコードのバリエーションにおいて必要となる前記第１及び第２のテーブルの関連データ項目の値であって未生成の値が存在する場合には、前記設計情報格納部に格納されている前記第１及び第２のテーブルのスキーマ項目情報に従って前記第１及び第２のテーブルの、前記関連データ項目の値を含むレコードを新たに生成し、前記データベースに登録すると共に、前記データベースに登録されている前記第１及び第２のテーブルのレコードを用いて、前記関係テーブルのレコードを生成し、前記データベースに登録する関係テーブル生成ステップと、
をコンピュータに実行させ、
前記バリエーション特定ステップが、
前記関係多重度がａ乃至ｎ：ｂ乃至ｍ（ｎ及びｍは２以上の整数。ａは０以上ｎ未満の整数。ｂは０以上ｍ未満の整数。）というバリエーションの場合に、ｎ：ｍを含む複数のサブバリエーションに展開する展開ステップ
を含み、
前記関係テーブル生成ステップが、
前記ｎ：ｍのサブバリエーションのための前記関係テーブルのレコード群を生成する場合、当該レコード群における、データ項目変更時の影響波及範囲を表すレコード間関係数が、指定されたレコード間関係数上限値以下で最大となるように、前記第１のテーブルの関連データ項目のｎ個の値と前記第２のテーブルの関連データ項目のｍ個の値とを含むデータセットを１又は複数セット用意するステップ
を含むテストデータ生成方法。
【０１４９】
（付記１６）
第１のテーブルと第２のテーブルとの関係付け及び区分値毎の関係多重度を表すスキーマ関連情報と、前記第１のテーブル及び前記第２のテーブルのスキーマ項目情報とを格納する設計情報格納部と、
前記設計情報格納部に格納されている前記スキーマ関連情報で指定される区分値のバリエーションを特定し、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って前記区分値のバリエーションに応じた前記第１のテーブルのレコードを生成し、データベースに登録する手段と、
前記設計情報格納部に格納されている前記スキーマ関連情報の前記区分値毎の関係多重度から、前記第１のテーブルのレコードと前記第２のテーブルのレコードとの対応関係のバリエーションを特定するバリエーション特定手段と、
前記バリエーションにおいて必要となる前記第１のテーブルのレコードであって未生成のレコードが存在する場合には、前記設計情報格納部に格納されている前記第１のテーブルのスキーマ項目情報に従って新たにレコードを生成し、前記データベースに登録する第１テーブル未生成レコード生成手段と、
前記設計情報格納部に格納されている前記第２のテーブルのスキーマ項目情報及び前記スキーマ関連情報における前記第１のテーブルと前記第２のテーブルとの関係付けに従って、前記バリエーションに応じて必要となる前記第２のテーブルのレコードを生成し、前記データベースに登録する第２テーブルレコード生成手段と、
を有するテストデータ生成装置。
【０１５０】
（付記１７）
第１及び第２のテーブル並びに当該第１及び第２のテーブルの関係テーブル間の関係付け及び前記第１及び第２のテーブルにおける関連データ項目間における区分値毎の関係多重度を表すスキーマ関連情報と、各前記テーブルのスキーマ項目情報とを格納する設計情報格納部と、
前記設計情報格納部に格納されている前記スキーマ関連情報で指定される区分値のバリエーションを特定し、前記設計情報格納部に格納されている前記スキーマ項目情報に従って前記区分値のバリエーションに応じた前記第１及び第２のテーブルのレコードを生成し、データベースに登録する手段と、
前記設計情報格納部に格納されている前記スキーマ関連情報の前記関連データ項目間における前記区分値毎の関係多重度から、前記関連データ項目を含む、前記関係テーブルのレコードのバリエーションを特定するバリエーション特定手段と、
前記関係テーブルのレコードのバリエーションにおいて必要となる前記第１及び第２のテーブルの関連データ項目の値であって未生成の値が存在する場合には、前記設計情報格納部に格納されている前記第１及び第２のテーブルのスキーマ項目情報に従って前記第１及び第２のテーブルの、前記関連データ項目の値を含むレコードを新たに生成し、前記データベースに登録すると共に、前記データベースに登録されている前記第１及び第２のテーブルのレコードを用いて、前記関係テーブルのレコードを生成し、データベースに登録する関係テーブル生成手段と、
を有し、
前記バリエーション特定手段が、
前記関係多重度がａ乃至ｎ：ｂ乃至ｍ（ｎ及びｍは２以上の整数。ａは０以上ｎ未満の整数。ｂは０以上ｍ未満の整数。）というバリエーションの場合に、ｎ：ｍを含む複数のサブバリエーションに展開する手段
を有し、
前記関係テーブル生成手段が、
前記ｎ：ｍのサブバリエーションのための前記関係テーブルのレコード群を生成する場合、当該レコード群における、データ項目変更時の影響波及範囲を表すレコード間関係数が、指定されたレコード間関係数上限値以下で最大となるように、前記第１のテーブルの関連データ項目のｎ個の値と前記第２のテーブルの関連データ項目のｍ個の値とを含むデータセットを１又は複数セット用意する手段
を有するテストデータ生成装置。
【図面の簡単な説明】
【０１５１】
【図１】従来技術の問題を説明するための図である。
【図２】第１の実施の形態に係るシステム概要を示す図である。
【図３】第１の例のクラス図を示す図である。
【図４】第１の例の別の観点からのクラス図である。
【図５】第１の実施の形態における処理フローを示す図である。
【図６】入力画面の一例を示す図である。
【図７】ユーザ履歴テーブルのスキーマ関連情報の一例を示す図である。
【図８】ユーザテーブルの区分・状態情報の一例を示す図である。
【図９】ユーザテーブルのスキーマ項目情報の一例を示す図である。
【図１０】ユーザテーブルの第１の部分を示す図である。
【図１１】出力画面の一例を示す図である。
【図１２】第１の実施の形態における処理フローを示す図である。
【図１３】第１の例におけるユーザテーブルとユーザ履歴テーブルとの対応関係のバリエーションを示す図である。
【図１４】ユーザテーブルの第２の部分を示す図である。
【図１５】ユーザ履歴テーブルのスキーマ項目情報の一例を示す図である。
【図１６】ユーザ履歴テーブルの一例を示す図である。
【図１７】ユーザテーブルの第３の部分を示す図である。
【図１８】第２の例におけるクラス図である。
【図１９】第２の例の区分・状態情報を示す図である。
【図２０】第２の例におけるユーザテーブルとユーザ履歴テーブルとの対応関係のバリエーションを示す図である。
【図２１】第２の例におけるユーザテーブルの追加分を示す図である。
【図２２】第２の例におけるユーザ履歴テーブルを示す図である。
【図２３】第３の例におけるクラス図である。
【図２４】担当販売テーブルのスキーマ関連情報の一例を示す図である。
【図２５】担当販売テーブルのスキーマ項目情報の一例を示す図である。
【図２６】第３の例におけるユーザテーブルと担当販売テーブルとの対応関係におけるバリエーションを示す図である。
【図２７Ａ】担当販売テーブルの一例を示す図である。
【図２７Ｂ】担当販売テーブルの一例を示す図である。
【図２８】販売員テーブルのスキーマ関連情報の一例を示す図である。
【図２９】販売員テーブルのスキーマ項目情報の一例を示す図である。
【図３０】販売員テーブルの一例を示す図である。
【図３１】第２の実施の形態の前提を説明するための図である。
【図３２】第２の実施の形態の前提を説明するための図である。
【図３３】第２の実施の形態の前提を説明するための図である。
【図３４】第２の実施の形態を説明するための具体例のクラス図である。
【図３５】テーブルＡのスキーマ項目定義の一例を示す図である。
【図３６】テーブルＸのスキーマ項目定義の一例を示す図である。
【図３７】テーブルＺのスキーマ項目定義の一例を示す図である。
【図３８】スキーマ関連情報の一例を示す図である。
【図３９】第２の実施の形態における処理フローを示す図である。
【図４０】設定情報入力画面の一例を示す図である。
【図４１】第１段階におけるテーブルＡの状態を示す図である。
【図４２】第１段階におけるテーブルＸの状態を示す図である。
【図４３】第１段階におけるテーブルＺの状態を示す図である。
【図４４】第２の実施の形態における処理フローを示す図である。
【図４５】レコード生成処理の処理フローを示す図である。
【図４６】（ａ）乃至（ｃ）は、レコード生成処理において最初に用意されるデータの一例を示す図である。
【図４７】第２段階においてテーブルＡに追加されるデータを示す図である。
【図４８】第２段階においてテーブルＸに追加されるデータを示す図である。
【図４９】第２段階においてテーブルＺに追加されるデータを示す図である。
【図５０】ｎ：ｍレコード生成処理の処理フローを示す図である。
【図５１】第３段階において用意されるデータの一例を示す図である。
【図５２】第３段階において追加されるデータの一例を示す図である。
【図５３】第３段階において連結されたデータの一例を示す図である。
【図５４】第３段階においてさらに連結されたデータの一例を示す図である。
【図５５】第３段階においてテーブルＡに追加されるデータの一例を示す図である。
【図５６】第３段階においてテーブルＸに追加されるデータの一例を示す図である。
【図５７】第３段階においてテーブルＺに追加されるデータの一例を示す図である。
【図５８】（ａ）乃至（ｄ）は、第４段階において用意されるデータの一例を示す図である。
【図５９】第４段階においてテーブルＡに追加されるデータの一例を示す図である。
【図６０】第４段階においてテーブルＸに追加されるデータの一例を示す図である。
【図６１】第４段階においてテーブルＺに追加されるデータの一例を示す図である。
【図６２】処理結果の出力例を示す図である。
【図６３】最終的にテーブルＡに格納されるデータの一例を示す図である。
【図６４】最終的にテーブルＸに格納されるデータの一例を示す図である。
【図６５】最終的にテーブルＺに格納されるデータの一例を示す図である。
【図６６】コンピュータの機能ブロック図である。
【符号の説明】
【０１５２】
１  入力部
３  設計情報格納部
５  設計情報読み取り部
７  データ生成決定部
９  バリエーションデータ格納部
１１  データ生成部
１３  ＤＢ
【図１】
0005292956.tif 000002
【図２】
0005292956.tif 000003
【図３】
0005292956.tif 000004
【図４】
0005292956.tif 000005
【図５】
0005292956.tif 000006
【図６】
0005292956.tif 000007
【図７】
0005292956.tif 000008
【図８】
0005292956.tif 000009
【図９】
0005292956.tif 000010
【図１０】
0005292956.tif 000011
【図１１】
0005292956.tif 000012
【図１２】
0005292956.tif 000013
【図１３】
0005292956.tif 000014
【図１４】
0005292956.tif 000015
【図１５】
0005292956.tif 000016
【図１６】
0005292956.tif 000017
【図１７】
0005292956.tif 000018
【図１８】
0005292956.tif 000019
【図１９】
0005292956.tif 000020
【図２０】
0005292956.tif 000021
【図２１】
0005292956.tif 000022
【図２２】
0005292956.tif 000023
【図２３】
0005292956.tif 000024
【図２４】
0005292956.tif 000025
【図２５】
0005292956.tif 000026
【図２６】
0005292956.tif 000027
【図２７Ａ】
0005292956.tif 000028
【図２７Ｂ】
0005292956.tif 000029
【図２８】
0005292956.tif 000030
【図２９】
0005292956.tif 000031
【図３０】
0005292956.tif 000032
【図３１】
0005292956.tif 000033
【図３２】
0005292956.tif 000034
【図３３】
0005292956.tif 000035
【図３４】
0005292956.tif 000036
【図３５】
0005292956.tif 000037
【図３６】
0005292956.tif 000038
【図３７】
0005292956.tif 000039
【図３８】
0005292956.tif 000040
【図３９】
0005292956.tif 000041
【図４０】
0005292956.tif 000042
【図４１】
0005292956.tif 000043
【図４２】
0005292956.tif 000044
【図４３】
0005292956.tif 000045
【図４４】
0005292956.tif 000046
【図４５】
0005292956.tif 000047
【図４６】
0005292956.tif 000048
【図４７】
0005292956.tif 000049
【図４８】
0005292956.tif 000050
【図４９】
0005292956.tif 000051
【図５０】
0005292956.tif 000052
【図５１】
0005292956.tif 000053
【図５２】
0005292956.tif 000054
【図５３】
0005292956.tif 000055
【図５４】
0005292956.tif 000056
【図５５】
0005292956.tif 000057
【図５６】
0005292956.tif 000058
【図５７】
0005292956.tif 000059
【図５８】
0005292956.tif 000060
【図５９】
0005292956.tif 000061
【図６０】
0005292956.tif 000062
【図６１】
0005292956.tif 000063
【図６２】
0005292956.tif 000064
【図６３】
0005292956.tif 000065
【図６４】
0005292956.tif 000066
【図６５】
0005292956.tif 000067
【図６６】
0005292956.tif 000068