(57)【要約】【課題】  プログラムテスト用のデータを、必要な多様性を確保しつつ少ないデータ量で生成する。【解決手段】  データ生成プログラム３０は、カラム定義ファイル６０を読み込んで（S1）、テストデータ生成条件を把握し、外部データ５０等を利用して（S2）、実テーブル１１０，１２０を生成し（S3）、データベース４０に記憶させる。実テーブル１１０，１２０のデータは、プログラム２０に入力され得る合計Ｍ個のパラメータのうち、任意のＮ（Ｍ≧Ｎ＞１）個のパラメータの組合せについて全てのパターンをそれぞれ網羅するように生成される。従って、全てのパターンに従ってテストデータを生成する場合に比べて、データ量を低減でき、必要な多様性を確保できる。テストプログラム１０は、使用する実テーブル１１０を選択した後、プログラム２０のテストを開始する（S4〜S7）。【選択図】        図１
2006227958.tif 000002
【特許請求の範囲】
【請求項１】
プログラムをテストするためのテストデータを生成するデータ生成部と、
このデータ生成部によって生成された前記テストデータを記憶し、前記プログラムに供給するデータベースと、を備え、
前記データ生成部は、前記プログラムに入力され得る合計Ｍ個のパラメータのうち、任意のＮ（Ｍ≧Ｎ＞１）個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるものであるテストデータ生成システム。
【請求項２】
前記データ生成部は、外部のデータ群を利用して前記テストデータを生成可能である請求項１に記載のテストデータ生成システム。
【請求項３】
前記データ生成部は、予め指定されている禁則パターンを除外してから、前記テストパターンを生成する請求項１に記載のテストデータ生成システム。
【請求項４】
前記データ生成部は、予め指定されている禁則パターンを構成する各パラメータ同士を結合させてから、前記テストパターンを生成する請求項１に記載のテストデータ生成システム。
【請求項５】
テスト対象のプログラムに入力され得る複数のパラメータのうち、予め指定されている禁則パターンを除去するステップと、
前記禁則パターンが除去されてから、前記プログラムに入力され得る合計Ｍ個のパラメータのうち、任意のＮ（Ｍ≧Ｎ＞１）個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるステップと、
を含むテストデータ生成方法。
【請求項６】
テスト対象のプログラムに入力され得る複数のパラメータのうち、予め指定されている禁則パターンを除去するステップと、
前記禁則パターンが除去されてから、前記プログラムに入力され得る合計Ｍ個のパラメータのうち、任意のＮ（Ｍ≧Ｎ＞１）個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるステップと、
をコンピュータに実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストデータ生成システム及びテストデータ生成方法に関する。
【背景技術】
【０００２】
例えば、ウェブアプリケーションプログラムのようなプログラム製品は、概要設計、基本設計及び詳細設計等を経てプログラムコードが作成される。そして、このプログラム製品は、種々のテストによって動作が検証され、必要な修正が行われた後で製品として出荷され、実際に使用される。
【０００３】
プログラム製品が正常に動作するか否かをテストするために、プログラム製品は、データベースに接続される。プログラム製品は、データベースに格納されたデータを用いて処理を行う。この処理結果を解析することにより、プログラム製品に修正が必要か否か等を判断することができる。
【０００４】
プログラム製品のバグを検出して必要な修正を施すためには、種々のテストデータを用いて繰り返しテストを行う必要がある。そのプログラム製品の全ての動作を検証可能な多様性のあるテストデータを用いてテストを行うのが好ましい。
【０００５】
多様性のあるテストデータを生成する一つの方法としては、例えば、一つ一つのテストデータをテスト実施者が手動で生成する方法が知られている。他の一つの方法としては、実際に運用されているデータベースから一部の必要なデータのみを抜き出して、テストデータとして利用する方法も知られている。
【０００６】
なお、品質工学の分野では、Ｌ１８等として知られている直交表に実験項目（因子）を割り付けて、より少ない実験回数でテストを行う手法も知られている（非特許文献１，非特許文献２）。また、この直交表を利用したテスト手法を設計段階に適用する技術も知られている（特許文献１）。
【特許文献１】特開２００４−１３３６５９号公報
【非特許文献１】David M. Cohen，Siddhartha R. Dalal, Michael L. Fredman, Gardner C.Patton, The AETG System: An Approach to Testing Based on Combinatorial Design, IEEE Trans. Software Engineering, vol.23, no.7, pp.437-444, July 1997．
【非特許文献２】山本訓稔、秋山浩一，「直交表を利用したソフトウェアテスト−HAYST法−，ソフトウェアテストシンポジウム，2004．
【発明の開示】
【発明が解決しようとする課題】
【０００７】
テスト対象のプログラムに入力され得る全てのパラメータの組合せの数（パターン総数）は、パラメータの総数及び各パラメータの取りうる値によって定まる。例えば、０または１の２値をとるパラメータが合計３個ある場合、そのパターンの総数は８（＝２＾３）となる。また、例えば、０，１，２の３値を取るパラメータが合計３個ある場合は、そのパターンの総数は２７（＝３＾３）個となる。このように、プログラムに入力されるパラメータ数が増大するほど、テストすべきパターン総数は爆発的に増大する。
【０００８】
全てのテストデータをテスト実施者が手作りする方法では、テストデータの作成作業が煩雑で、作業時間も長くなり、プログラムテストの効率を上げることができない。この方法では、テストの準備に多大な労力及び時間を必要とする上に、必要なテストパターンの見落としや不要なテストパターンの発生を招く可能性もある。
【０００９】
実際のデータをマスキングして利用する方法では、全テストデータを手作りする方法に比べて、作業効率を改善可能である。しかし、実際のデータがテストデータとして適している保証はなく、バグを検出するために必要な多様性を備えていない可能性がある。そのプログラムに入力され得る全ての可能性が網羅されていなければ、そのプログラムの潜在的なバグを検出することはできず、テストの信頼性が低下する。
【００１０】
ところで、非特許文献１，２に開示されているように、直交表を用いて、２つの機能間の全ての組合せを網羅する実験計画を策定することにより、少ないテスト回数で多くのパターンを網羅できることが知られている。しかし、これらの文献は、プログラムの有する各機能をそれぞれテストするための方法に関するもので、テストデータの生成方法を開示するものではなく、その示唆も含まれていない。
【００１１】
そこで、本発明の目的は、効率的にプログラムをテストするためのデータを得ることができるようにしたテストデータ生成システム及びテストデータ生成方法を提供することにある。本発明の他の目的は、より少ないデータ量で多様なパターンを網羅するテストデータを生成できるようにしたテストデータ生成システム及びテストデータ生成方法を提供することにある。本発明のさらなる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【００１２】
上記課題を解決すべく、本発明の一つの観点に従うテストデータ生成システムは、プログラムをテストするためのテストデータを生成するデータ生成部と、このデータ生成部によって生成されたテストデータを記憶し、プログラムに供給するデータベースと、を備え、データ生成部は、プログラムに入力され得る合計Ｍ個のパラメータのうち、任意のＮ（Ｍ≧Ｎ＞１）個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるようになっている。
【００１３】
ここで、プログラムとは、テスト対象のプログラムであり、例えば、ウェブアプリケーションプログラム等を挙げることができる。このプログラムには、合計Ｍ個のパラメータが入力され得る。データ生成部は、このＭ個のパラメータのうち、任意のＮ個のパラメータの組合せについて、それぞれ全てのパターンを網羅するテストデータを生成する。
【００１４】
プログラムにｍ１，ｍ２，ｍ３の３個のパラメータが入力され得る場合を例に挙げて説明する。この３個のパラメータｍ１，ｍ２，ｍ３は、それぞれ０または１のいずれかの値を取るものとする。従って、総パターン数は８（＝２＾３）となる。
【００１５】
データ生成部は、これら３個（Ｍ＝３）のパラメータのうち、いずれか任意の２個（Ｎ＝２）のパラメータの組合せについて全てのペアを網羅するパターンを生成する。具体的には、第１パターン「ｍ１（０），ｍ２（１），ｍ３（０）」、第２パターン「ｍ１（０），ｍ２（０），ｍ３（１）」、第３パターン「ｍ１（１），ｍ２（１），ｍ３（１）」、第４パターン「ｍ１（１），ｍ２（０），ｍ３（０）」の合計４パターンとなる。この４つのパターンに着目すると、ｍ１とｍ２、ｍ２とｍ３、ｍ１とｍ３の任意の２個のパラメータのそれぞれについて、その全ての組合せが出現していることがわかる。また、３つのパラメータの組合せについても半分の４パターンが出現している。
【００１６】
テスト対象のプログラムにより実行される情報処理の多くは、１つまたは２つのパラメータに基づいて行われる。例えば、「”電子メールアドレス”と”住所”のうち、”住所”が登録されている場合は、その住所に資料を送付する。」、「”電子メールアドレス”の登録されている”男性”のみに広告メールを送信する。」等のように、２つのパラメータに基づいて情報処理が実行される。
【００１７】
従って、プログラムに入力され得る全てのパラメータの組合せについてそれぞれテストする必要は必ずしもなく、入力パラメータ数よりも少ない数の任意のパラメータ間の組合せのみをテストするだけで、出現し得るバグの多くを検出可能である。本発明は、このような統計学的な知見に基づいて、より少ないデータ量で多様性を確保したテストデータを生成する。従って、テストデータの生成時間を短縮してテスト準備作業の効率を向上させることができ、プログラムのテスト回数を少なくしてテスト作業の効率を高めることができる。
【００１８】
データ生成部は、外部のデータ群を利用してテストデータを生成可能である。外部のデータ群としては、例えば、辞書ファイル、文字列発生プログラム、キー発生プログラム、外部データベース等を挙げることができる。辞書ファイルは、例えば、会員氏名や住所等のダミーデータを生成するために使用することができる。文字列発生プログラムは、例えば、電子メールアドレス等のダミーデータを生成するために使用可能である。キー発生プログラムは、例えば、「男性は”０”、女性は”１”」等のような２値または多値のキーを発生させるために使用することができる。なお、外部データ群に加えて、あるいは、外部データ群に代えて、疑似乱数発生プログラムを利用できる場合もある。
【００１９】
データ生成部は、予め指定されている禁則パターンを除外してから、テストパターンを生成することができる。禁則パターンとは、例えば、そのプログラムの仕様上禁止されているパラメータの組合せとして定義することができる。例えば、そのプログラムの仕様として、「”住所”または”電子メールアドレス”の少なくともいずれか一方は登録されていなければならない。」という条件が設定されている場合、「”住所”及び”電子メールアドレス”の両方とも登録されていない。」というパターンは、プログラムの仕様に違反する禁則パターンである。
【００２０】
このような禁則パターンについてもテストを行うことは可能である。しかし、例えば、プログラムのGUI（Graphical User Interface）等によって、あり得ない組合せの入力が事前に排除されている場合もある。具体的には、”住所”または”電子メールアドレス”のうち少なくともいずれか一方が入力されていない場合は、次のステップに移行させない等のような保護機構が設定されていることがある。このような場合に、禁則パターンについてテストを行うのは効率的ではない。そこで、データ生成部は、禁則パターンを排除してテストデータを生成する。これにより、より少ないデータ量で必要な多様性を確保することができ、効率的なテストデータを得ることができる。
【００２１】
例えば、データ生成部は、予め指定されている禁則パターンを構成する各パラメータ同士を結合させてから、テストパターンを生成可能である。上記の例で説明すると、データ生成部は、”住所”と”電子メールアドレス”の２つのパラメータを結合させて、新たに”住所、電子メールアドレス”というパラメータを生成する。この結合パラメータ”住所、電子メールアドレス”については、”１，１”、”１，０”、”０，１”という許可されている全てのペアが網羅され、禁止されている”０，０”は事前に排除される。
【００２２】
また、例えば、一方のパラメータを設定した場合は、他方のパラメータが設定不能となる排他的な関係にあるパラメータについては、各パラメータの取りうる値（水準）同士の許可された組合せで、新たなパラメータを生成する。例えば、”成年：１、未成年：０”、”閲覧する：１、閲覧しない：０”という２つのパラメータがあり、未成年の場合は閲覧を許可しない場合、”成年、閲覧する”、”成年、閲覧しない”、”未成年、閲覧しない”という、許可された組合せについて新たなパラメータを生成すればよい。
【００２３】
さらに、一方のパラメータを設定した後でなければ他方のパラメータを設定することができない場合のように、特定のパラメータ間に方向性や順序性が存在するときは、この方向性を考慮して、禁則パターンを排除することもできる。
【００２４】
本発明の他の観点に従うテストデータ生成方法は、テスト対象のプログラムに入力され得る複数のパラメータのうち、予め指定されている禁則パターンを除去するステップと、禁則パターンが除去されてから、プログラムに入力され得る合計Ｍ個のパラメータのうち、任意のＮ（Ｍ≧Ｎ＞１）個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるステップと、を含む。
【００２５】
本発明の機能、手段、ステップの全部または一部は、例えば、マイクロコンピュータにより実行されるコンピュータプログラムとして構成可能な場合がある。そして、このコンピュータプログラムは、例えば、ハードディスク、光ディスク、半導体メモリ等の記憶媒体に固定して配布することができる。または、コンピュータプログラムをインターネット等の通信ネットワークを介して、配信することもできる。
【発明を実施するための最良の形態】
【００２６】
以下、図面に基づき、本発明の実施の形態を説明する。本実施形態では、以下に詳述するように、プログラム（20）をテストするためのテストデータ（110，120）を生成するデータ生成部（30）と、このデータ生成部（30）によって生成されたテストデータ（110，120）を記憶し、プログラム（20）に供給するデータベース（40）と、を備え、データ生成部（30）は、プログラム（20）に入力され得る合計Ｍ個のパラメータのうち、任意のＮ（Ｍ≧Ｎ＞１）個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるようになっている。
【００２７】
そして、データ生成部（30）は、テストデータ（110，120）の生成条件を規定するテストデータ生成条件定義情報（60）に基づき、外部のデータ群（50）を利用してテストデータ（110，120）を生成することができる。
【００２８】
このテストデータ生成システムは、それ単独で機能させることができるほか、プログラムテストシステムの一部として機能させることもできる。プログラムテストシステムは、テストデータ（110，120）を記憶するデータベース（40）と、予め設定されたテスト条件に基づいて、データベース（40）に記憶された各テストデータ（110，120）をテスト対象プログラム（20）にそれぞれ供給し、テスト対象プログラム（20）に所定の処理を実行させるテスト制御部（10）とを備えることができる。
【実施例１】
【００２９】
図１は、テストデータ生成システムが利用されるプログラムテストシステムの全体構成を示すブロック図である。このシステムは、例えば、テストプログラム１０と、アプリケーションプログラム２０と、データ生成プログラム３０と、データベース４０と、外部データ５０及びカラム定義ファイル６０とを備えて構成することができる。
【００３０】
テストプログラム１０は、アプリケーションプログラム（以下、「プログラム」）２０のテストを行うためのプログラムである。プログラム２０は、例えば、ウェブアプリケーションに利用されるプログラムである。より具体的には、例えば、プログラム２０は、顧客管理プログラム、社員管理プログラム、売上げ管理プログラム、在庫管理プログラム、利息計算プログラム、予約管理プログラム、財務管理プログラム等のような種々のアプリケーションプログラムとして生成される。
【００３１】
データ生成プログラム３０は、プログラム２０をテストするためのテスト用のデータセットをそれぞれ生成するためのプログラムである。詳細はさらに後述するが、データ生成プログラム３０は、カラム定義ファイル６０に設定されている条件に基づいて、テストデータ（１１０，１２０）を生成する。データ生成プログラム３０は、辞書ファイルや他の外部データベース等の外部データ５０を利用して、テストデータの全部または一部を生成することもできる。ここで、テスト用のデータセットは、例えば、テーブル形式で出力されるため、本実施例では、実テーブル１１０，１２０と呼ぶ。
【００３２】
外部データ５０は、本システムとは異なる別のコンピュータシステム内に存在してもよい。即ち、データ生成プログラム３０は、例えば、通信ネットワークを介して他のデータベースにアクセスし、そのデータベースから取得したデータセットに基づいて実テーブル１１０，１２０をそれぞれ生成することもできる。
【００３３】
データ生成プログラム３０は、より少ない情報量でより多くのパターンを網羅できるように、テスト対象のプログラム２０に入力され得るパラメータ総数Ｍよりも少ないＮ個のパラメータについて、任意のＮ個のパラメータ間の全ての組合せを網羅するように、実テーブル１１０，１２０を生成するようになっている。
【００３４】
データ生成プログラム３０は、テストプログラム１０からの指示に基づいて作動する構成でもよく、テストプログラム１０とは独立してデータ生成プログラム３０のみを単独で作動させる構成でもよい。
【００３５】
先に全体動作の概要を説明すると、データ生成プログラム３０を用いてテストデータとしての実テーブル１１０，１２０を生成させた後（テスト準備段階）、テストプログラム１０は、この実テーブル１１０，１２０を用いてプログラム２０のテストを実行する（テスト実行段階）。
【００３６】
データ生成プログラム３０は、カラム定義ファイル６０を読み込んで（Ｓ１）、テストデータの生成条件を把握する。データ生成プログラム３０は、カラム定義ファイル６０の指示に基づき、外部データ５０等を利用して（Ｓ２）、実テーブル１１０，１２０をそれぞれ生成する（Ｓ３）。生成された実テーブル１１０，１２０は、データベース４０に記憶される。これにより、テスト準備段階が完了する。
【００３７】
次に、テストプログラム１０は、テスト手順に基づいて、テストに使用する実テーブル１１０を選択した後、プログラム２０に対して情報処理の実行を指示する（Ｓ４）。プログラム２０は、実テーブルにアクセスし（Ｓ５）、実テーブルからデータを読出し（Ｓ６）、この読出したデータを処理する。例えば、プログラム２０は、所定の検索条件を満たすデータ群を実テーブル１１０，１２０から読出し、このデータ群を所定の順序で配置して画面を生成等することができる。
【００３８】
テストプログラム１０は、プログラム２０の処理結果を取得し、その処理結果について評価することができる（Ｓ７）。例えば、テストプログラム１０は、その実テーブル１１０，１２０を用いた場合に予測される処理結果との差分を算出することができる。あるいは、処理結果の自動的な評価を行わず、単に処理結果を記憶するだけでもよい。
【００３９】
一つまたは複数のテスト項目が終了すると、テストプログラム１０は、テストに使用する実テーブルを切り替えることができる。例えば、テストプログラム１０は、実テーブル１１０から実テーブル１２０にテストデータを切り替えて、さらに別のテスト項目を実施する。実テーブル１１０，１２０の切替は、手動または自動で行うことができる。
【００４０】
図２は、本システムとコンピュータ資源との関係を模式的に示す説明図である。本システムは、少なくとも一つ以上のコンピュータシステムを用いて構成可能である。コンピュータシステムは、ハードウェア資源及びソフトウェア資源を備えている。ハードウェア資源としては、例えば、CPU（Central Processing Unit）、ROM（Read Only Memory）やRAM（Random Access Memory）等の内部記憶装置、HDD（Hard Disk Drive）等の補助記憶装置、通信インターフェース等を挙げることができる。ソフトウェア資源としては、例えば、OS（Operating System）、デバイスドライバ、ファイルシステム、その他のプログラムモジュール等を挙げることができる。
【００４１】
補助記憶装置２２０には、例えば、種々のプログラムデータ２２１とデータ群２２２とが記憶されている。このプログラムデータ２２１をデータ処理装置２１０が読み込んで実行することにより、テストプログラム１０，プログラム２０及びデータ生成プログラム３０の各機能がそれぞれ実現される。
【００４２】
内部記憶装置２３０には、例えば、データベース４０を構築することができる。データベース４０は、補助記憶装置２２０に記憶されたデータ群を管理する。なお、データベース４０の少なくとも一部を、補助記憶装置２２０内に構築することもできる。
【００４３】
プログラム２０は、単体プログラムとして構成してもよいし、図２に示すように、複数のプログラムを結合または連携させた多層のプログラム集合体として構成してもよい。例えば、プログラム２０は、ユーザインターフェース（UI）層２１と、イベントハンドラ層２２と、ロジック層２３と、データアクセス層２４とから複数階層の構造で構成することもできる。
【００４４】
UI層２１は、例えば、ウェブブラウザ等への情報の出力及びウェブブラウザ等からの情報入力を行うためのプログラムである。イベントハンドラ層２２は、例えば、ユーザによる画面操作等のようなUI層２１で生じたイベント（ユーザ要求）を検出するためのプログラムである。ロジック層２３は、例えば、データのチェックや演算等を行うためのプログラムである。データアクセス層２４は、例えば、データベース４０へのデータ入出力を行うためのプログラムである。なお、これら各層２１〜２４は、それぞれ複数のプログラムから構成することができる。
【００４５】
図３は、テストデータの生成方法を模式的に示す説明図である。説明の便宜のために使用されるユーザ管理項目テーブルＴ１には、例えば、”会員ID”、”氏名”、”性別”、”住所”、”メールアドレス”等のような各カラムが含まれている。本実施例では、これらの各カラムがプログラム２０への入力パラメータとなる。
【００４６】
ここで、”会員ID”及び”氏名”は、それぞれ１つのみの値を取ることができ、一意に決定されるとする。その他の”性別”、”住所”及び”メールアドレス”は、それぞれ複数の値（状態）を取り得る。”性別”では、男性の場合と女性の場合とがある。”住所”では、会員の住所データが実際に登録されている場合と未登録の場合とがある。同様に、”メールアドレス”では、会員のメールアドレスが登録されている場合と未登録の場合とがある。
【００４７】
テーブルＴ１に示されている各パラメータ（カラム）の全ての組合せが、テーブルＴ２に示されている。複数の値を取り得るパラメータが３個あるので、その組合せの総数は、合計８個となる。
【００４８】
この全ての組合せに代えて、本実施例では、テーブルＴ３に示すように、８個の入力パラメータのうち、任意の２個のパラメータ間の全ての組合せをそれぞれ網羅するパターンを生成する。
例えば、テーブルＴ３の”性別”と”住所”との２つのパラメータに着目すると、「男性、住所登録あり」、「男性、住所未登録」、「女性、住所登録あり」、「女性、住所未登録」の全ての組合せが網羅されている。
”住所”と”メールアドレス”との２つのパラメータに着目すると、「住所登録あり、メールアドレス未登録」、「住所未登録、メールアドレス登録あり」、「住所登録あり、メールアドレス登録あり」、「住所未登録、メールアドレス未登録」の全ての組合せが網羅されている。
同様に、”性別”と”メールアドレス”との２つのパラメータに着目すると、「男性、メールアドレス未登録」、「男性、メールアドレス登録あり」、「女性、メールアドレス登録あり」、「女性、メールアドレス未登録」の全ての組合せが網羅されている。
【００４９】
このように、入力され得る全てのパラメータの組合せを用いるのではなく、より少ない数のパラメータ間の組合せをそれぞれ全て網羅することにより、テストデータのデータ量を低減することができる。上記の例では、８パターンが４パターンで済んでいるので、データ量が５０％削減されている。
【００５０】
なお、例えば、それぞれ２値を取るパラメータが合計８個存在する場合、総パターン数は２５６個（＝２＾８）となるが、任意の２個のパラメータ間の全ての組合せをそれぞれ網羅するパターン数は８個となる。また、例えば、それぞれ２値を取るパラメータが合計１６個存在する場合、その総パターン数は６５５３６個（＝２＾１６）となるが、任意の２パラメータ間の全ての組合せをそれぞれ網羅するパターン数は１０個となる。このように、本実施例では、テストデータの量を低減させることができる。テストデータのデータ量を低減しても、任意の２パラメータ間の全ての組合せは網羅されているため、２個のパラメータに基づいて実行される処理に潜むバグを検出することができる。
【００５１】
なお、それぞれ２値を取る全パラメータの中から任意の２個のパラメータを取り上げて、そのパラメータ間の全ての組合せを網羅すると述べたが、これは一例であって、本発明はこれに限定されない。総数Ｍ個のパラメータから任意のＮ（Ｍ≧Ｎ＞１）個のパラメータを取り出し、このパラメータ間の全ての組合せを網羅するパターンであればよい。また、各パラメータの状態は、それぞれ２値、または３値以上で変化してもよい。２値と２値以外の変化を示すパラメータが混在してもよい。
【００５２】
テーブルＴ３に示すような任意のパラメータ間の全ての組合せを網羅するパターンは、比較的簡単な演算で求めることができる。例えば、あり得る全てのパターンを求め、この中から不要なパターンを除去すればよい。この演算には、各カラムと、その取り得る値のみを考慮すればよく、比較的速やかに最小のテストパターンを求めることができる。
【００５３】
図４は、システム全体の動作概要を示すフローチャートである。まず、テスト実施者は、データ生成プログラム３０を用いてテスト用のテーブルデータ（実テーブル１１０，１２０）をそれぞれ生成し、これをデータベース４０に記憶させる（Ｓ１０）。これにより、プログラムテストの準備が整う。なお、このステップの詳細はさらに後述する。
【００５４】
次に、テスト実施者は、テストプログラム１０を用いて、プログラム２０にテスト実行を指示させる（Ｓ２０）。テストプログラム１０は、プログラム２０からの応答を検証し（Ｓ３０）、全てのテスト項目を実施したか否かを判定する（Ｓ４０）。未実施のテスト項目が存在する場合（S40：NO）、テストプログラム１０は、次のテスト項目に使用するテストテーブル（実テーブル）に切り替えてから（Ｓ５０）、プログラム２０にテスト実行を指示する（Ｓ２０）。そして、全てのテスト項目の実施が完了すると（S40：YES）、プログラムテストは正常に終了する。
【００５５】
例えば、最初の一連のテストでは、テスト用に生成された会員情報テーブル等を使用することにより、ドキュメント送付処理等が正常に行われるか否かを検証する。そして、次の一連のテストでは、例えば、会員情報テーブルに処理すべきデータが存在しない場合に、正常に処理が終了するか否かを検証する。このように、テスト対象のプログラム２０が行う情報処理の内容に応じた複数種類のテストデータを用意しておき、テストデータを切り替えながらテストを進めることができる。
なお、それぞれ異なる複数のテーブルを用いてテストを行う場合、これら各テーブルはそれぞれ別々のテーブルであるから、同時に作成することができ、同時に使用することができる。
同一のテスト用テーブルを使用して、かつ、そこに網羅されたデータセットではテストできないようなテスト項目を実施するような場合に、テストテーブルが切り替えられるようになっている（Ｓ５０）。
【００５６】
図５，図６に基づいて、テストの簡単な具体例を説明する。以下の例では、会員情報テーブル１１１及び売上げ管理テーブル１２１の２種類のテストテーブルを使用してプログラムテストを行う場合を例示する。
図５（ａ）に示すように、一方の会員情報テーブル１１１は、例えば、”会員ID”と、”氏名”と、”ドキュメント送付状況”の３つのカラムを有している。”会員ID”には、データ生成プログラム３０により与えられる連続した数値が設定される。”氏名”には、例えば、外部の辞書ファイルから読み出される文字列が設定される。”ドキュメント送付状況”には、ドキュメントを未送付であることを示す値がセットされる。ここでは、「未」として示す。
他方の会員情報テーブル１２１は、例えば、”売上ID”と、”会員ID”と、”請求書作成状況”の３つのカラムを有している。”売上ID”には、データ生成プログラム３０により与えられる連続した数値が設定される。”会員ID”には、会員情報テーブル１１１に登録されている会員IDの中から一つだけ抽出された値が設定される。”請求書作成状況”には、請求書を作成したか否かの区別を示す値が設定される。請求書作成済の場合は「済」、未作成の場合は「未」がそれぞれ設定されるものとする。
【００５７】
図５（ｂ）は、プログラム２０により実行されるテスト対象の処理２１と、この処理２１のテストにおける評価の観点１１とを示す。
テスト対象の処理２１の内容は、例えば、「請求書未作成の場合、請求書を作成し、ドキュメントを送付する。未作成の請求書が無い場合、ドキュメントも送付しない。」というものである。
この場合のテスト観点１１は、例えば、（１）請求書を作成済の場合、”請求書作成状況”のステータスは「済」のままか、（２）請求書が未作成の場合、請求書を作成した後に、”請求書作成状況”のステータスが「未」から「済」に変化しているか、（３）請求書を作成した場合、”ドキュメント送付状況”のステータスが「未」から「済」に変化したか、（４）請求書を作成しなかった場合、”ドキュメント送付状況”のステータスは「未」のままか、といったものになる。
【００５８】
テスト対象の処理２１が正常に作動した場合は、図６に示すように、会員情報テーブル１１１及び売上管理テーブル１２１は、それぞれ変化する。この予測される正常な変化と実際の処理２１の結果とが異なる場合、バグの存在が検出される。
なお、例えば、会員が全く登録されていないパターンについてもテストするような場合は、会員データが未登録である空の会員情報テーブルに切り替える。
【００５９】
図７は、図４中にＳ１０で示すステップの詳細を示すフローチャートである。テストデータ生成処理では、カラム定義ファイル６０を参照し、テスト用テーブル間の依存関係を確認する（Ｓ１１）。テーブル間の依存関係とは、どのテーブルがどのテーブルを参照しているかの関係を示す。
以下、外部のテーブルから参照されるテーブルを被外部参照テーブルと呼び、被外部参照テーブルを参照するテーブルを外部参照テーブルと呼ぶ。
【００６０】
データ生成プログラム３０は、未作成の被外部参照テーブルが存在するか否かを判定する（Ｓ１２）。未作成の被外部参照テーブルが存在する場合（S12：YES）、作成すべき被外部参照テーブルを選択する（Ｓ１３）。即ち、データ生成プログラム３０は、他のテーブルから参照される被外部参照テーブルを先に生成する。
先の例で言えば、会員情報テーブル１１１は売上管理テーブル１２１から参照される被外部参照テーブルである。従って、会員情報テーブル１１１から先にテストデータが生成される。被外部参照テーブルのデータセットを先に生成しなければ、その被外部参照テーブルを参照するテーブルのテストデータを生成することができないためである。
データ生成プログラム３０は、禁則パターンを除去してから（Ｓ１４）、必要最低限のテストパターンを特定し、このテストパターンに具体的な値をそれぞれ当てはめてテスト用のテーブルデータを生成する（Ｓ１５）。
【００６１】
データ生成プログラム３０は、必要な全てのテスト用のテーブルデータを生成したか否かを判定し（Ｓ１６）、まだ生成していないテーブルデータが存在する場合（S16：NO）、Ｓ１１に戻る。
未作成の被外部参照テーブルが存在する場合、Ｓ１１〜Ｓ１５のステップがそれぞれ繰り返される。全ての被外部参照テーブルの生成が完了すると（S12：NO）、データ生成プログラム３０は、外部参照テーブルを選択し（Ｓ１７）、被外部参照テーブルの作成と同様に、禁則パターンを除去して（Ｓ１４）、テストデータを生成する（Ｓ１５）。
【００６２】
そして、全てのテスト用テーブルデータが生成されると（S16：YES）、データ生成プログラム３０は、SQL（Structured Query Language）を利用してテスト用データをさらに生成する（Ｓ１８）。データ生成プログラム３０は、SQLにより生成されたデータをデータベース４０に挿入する（Ｓ１９）。例えば、各テーブルの特定列の合計値等のような別のカラムを生成する場合、全てのテスト用テーブルデータが揃った後で、SQLにより生成する。
【００６３】
図８は、図７中にＳ１４で示す禁則パターン除去処理を示す。データ生成プログラム３０は、カラム定義ファイル６０に示されている禁則条件を取得する（Ｓ１２１）。データ生成プログラム３０は、禁則関係に立つパラメータを結合させ（Ｓ１２２）、この結合されたパラメータの取り得る全ての値の組合せを網羅する（Ｓ１２３）。
【００６４】
データ生成プログラム３０は、全ての禁則パターンを除去したか否かを判定し（Ｓ１２４）、未処理の禁則パターンが存在する場合（S124：NO）、次の禁則条件に移動して（Ｓ１２５）、Ｓ１２１〜Ｓ１２３のステップをそれぞれ繰り返す。全ての禁則パターンを除去した場合（S124：YES）、本処理を終了し、メインプログラムに戻る。
【００６５】
図８中に示すように、例えば、「住所及びメールアドレスの両方とも未登録であること」が禁止されている場合、データ生成プログラム３０は、”住所”パラメータと”メールアドレス”パラメータとを結合させて”住所、メールアドレス”という新しいパラメータを生成する。そして、データ生成プログラム３０は、この結合パラメータ”住所、メールアドレス”の取りうる値の全ての組合せを検出し、網羅する。
このとき、禁則パターンである「住所未登録、メールアドレス未登録」の組合せは除外される。これにより、無駄なテストデータの生成を防止し、テスト用データのデータ量を一層少なくできる。
【００６６】
図９は、カラム定義ファイル６０の一例を示す説明図である。図９に示すカラム定義ファイル６０は、テスト用の「会員テーブル」を生成するために使用される。会員テーブルに含まれるカラム”氏名”では、外部の辞書ファイル（氏名一覧.csv）を用いて、テスト用の氏名データを生成する（Ｐ１）。
【００６７】
カラム”性別”では、外部のテーブル（男女テーブル）に登録されている性別区分データ（男女ID）を取得して、テスト用の性別データを生成する（Ｐ２）。
カラム”住所”では、そのカラムの取りうる状態をdomainタグで分割して指定し、各ドメイン毎にそれぞれ値をセットさせる（Ｐ３）。図９に示す例では、カラム”住所”の取りうる状態を「住所登録あり」と「未登録」の２つにわけている。住所登録がされている場合は、”住所”の値として「東京」をセットさせる。住所未登録の場合は、”住所”の値としてヌルデータ（０）をセットさせる。
【００６８】
Ｐ２に続いて、禁則パターン（forbiddance column）が定義される（Ｐ４）。ここでは、住所が未登録の場合において、”メールアドレス”も未登録であることは、禁止されたパターンであると定義されている。
【００６９】
カラム”メールアドレス”では、カラム”住所”と同様に、メールアドレスが登録されている場合と未登録の場合とに状態が２分割されており、メールアドレスが登録されている場合は、予め用意されたダミーデータ（test@com）がセットされる（Ｐ５）。メールアドレスが未登録の場合は、ヌルデータがセットされる。
【００７０】
なお、テスト用の住所データ及びメールアドレスデータは、上述のように予め指定された固定文字列を用いて生成することもできるし、ランダムな文字列を発生させて使用することもできる。例えば、メールアドレスの場合は「@」の前後でデータを分割し、「@」の前には、数十文字以内でランダムに生成された文字列を当てはめ、「@」の後には、ドメイン生成規則に基づいてランダムに発生させた文字列を当てはめることにより、テスト用のデータを得ることができる。
【００７１】
Ｐ６では、SQLにより、会員テーブルと購入テーブルとに基づいて、各会員ID毎にその購入合計金額をそれぞれ算出し、カラム”合計”を新たに生成している。
【００７２】
本実施例は、上述のように構成されるので、以下の効果を奏する。本実施例では、プログラム２０に入力され得る合計Ｍ個のパラメータのうち、任意のＮ（Ｍ≧Ｎ＞１）個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させる構成とした。従って、全てのパターンに従ってテストデータを生成する場合に比べて、テストデータのデータ量を低減することができる。この結果、より少ないデータ量でより多様なテストデータを効率よく生成することができ、プログラムテストの準備時間を短縮できる。また、テストデータの量が少ないため、プログラムテストに要する時間を短縮することができる。
【００７３】
本実施例では、禁則パターンを除外してテストデータを生成可能とした。従って、無駄なテストデータの生成を未然に防止でき、多様性を確保しつつテストデータのデータ量をより一層少なくすることができる。また、プログラムテストの時間を短縮し、全体の作業効率を向上させることができる。
【実施例２】
【００７４】
図１０に基づいて、第２実施例を説明する。本実施例では、実テーブル１１０，１２０をシノニムのような仮想テーブル１００を用いて自動的に切り替える。
データ切替プログラム７０は、プログラム２０に供給するテスト用のデータセットを切り替えるためのプログラムであり、テストプログラム１０により使用される。仮想テーブル１００は、例えば、実テーブル１１０，１２０のシノニムとして生成される。仮想テーブル１００は、実テーブル１１０，１２０へアクセスするための窓口であり、実テーブル１１０，１２０と論理的に接続されている。仮想テーブル１００は、各実テーブル１１０，１２０のそれぞれについて、一対一で生成される。
【００７５】
この実施例では、テストプログラム１０は、テストに使用する実テーブルを選択し、データ切替プログラム７０を介して切替指示を出す（Ｓ８）。データ切替プログラム７０は、テストプログラム１０から指定された実テーブルについて、仮想テーブル１００を生成する（Ｓ９）。
【００７６】
テストプログラム１０は、仮想テーブル１００を生成させた後、プログラム２０に対して情報処理の実行を指示する（Ｓ４）。プログラム２０は、仮想テーブル１００を介して実テーブルにアクセスし（Ｓ５）、実テーブルからデータを読出し（Ｓ６）、この読出したデータを処理する。その実テーブルから他の実テーブルへ切り替える場合は、作成されている仮想テーブル１００を削除し、次に使用予定の実テーブルに対応する仮想テーブルを新たに生成させる。
【００７７】
このように構成される本実施例でも前記実施例と同様の効果を奏する。これに加えて、本実施例では、データ生成プログラム３０により生成された実テーブル１１０，１２０を仮想テーブル１００を介して自動的に切り替えることができる。従って、プログラムテストの準備段階のみならず、プログラムテストの実行段階の作業効率を向上させることができ、システム全体の効率がより改善される。
【００７８】
本実施例は、例えば、複数種類のテストデータを記憶するデータベース（40）と、予め設定されたテスト条件に基づいて、前記データベース（40）に記憶された前記各テストデータ（110，120）をテスト対象プログラム（20）にそれぞれ供給し、前記テスト対象プログラム（20）に所定の処理を実行させるテスト制御部（10）と、前記テスト制御部（10）からの指示に基づいて、前記テスト対象プログラム（20）によりアクセスされる仮想テーブル（100）を前記各テストデータ（110，120）のいずれか一つと論理的に接続させるテストデータ切替部（70）と、を備え、データ生成部（30）は、プログラム（20）に入力され得る合計Ｍ個のパラメータのうち、任意のＮ（Ｍ≧Ｎ＞１）個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるプログラムテストシステムのように表現することができる。
【００７９】
なお、本発明は、上述した実施の形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。例えば、当業者であれば、前記各実施例を適宜組み合わせることができる。
【図面の簡単な説明】
【００８０】
【図１】本実施例によるテストデータ生成システムが用いられるプログラムテストシステムの全体概要を示すブロック図である。
【図２】プログラムテストシステムのハードウェア構造を模式的に示す説明図である。
【図３】全ての入力パラメータから必要最低限のテストパターンを得る方法を模式的に示す説明図である。
【図４】プログラムテストの全体概要を示すフローチャートである。
【図５】テストの具体例を示す説明図である。
【図６】図５に続く説明図である。
【図７】テストデータ生成処理を示すフローチャートである。
【図８】禁則パターン除去処理を示すフローチャートである。
【図９】カラム定義ファイルの一例を示す説明図である。
【図１０】他の実施例によるプログラムテストシステムの全体概要を示すブロック図である。
【符号の説明】
【００８１】
１０…テストプログラム、２０…アプリケーションプログラム、２１…ユーザインターフェース（UI）層、２２…イベントハンドラ層、２３…ロジック層、２４…データアクセス層、３０…データ生成プログラム、４０…データベース、５０…外部データ、６０…カラム定義ファイル、７０…データ切替プログラム、１００…仮想テーブル、１１０，１２０…実テーブル（テストデータ）、１１１，１１２，１２１，１２２…テスト用テーブル（テストデータ）２１０…データ処理装置、２２０…補助記憶装置、２２１…プログラムデータ、２２２…データ群、２３０…内部記憶装置
【図１】
2006227958.tif 000003
【図２】
2006227958.tif 000004
【図３】
2006227958.tif 000005
【図４】
2006227958.tif 000006
【図５】
2006227958.tif 000007
【図６】
2006227958.tif 000008
【図７】
2006227958.tif 000009
【図８】
2006227958.tif 000010
【図９】
2006227958.tif 000011
【図１０】
2006227958.tif 000012