説明

テストデータ生成システム及びテストデータ生成方法

【課題】 プログラムテスト用のデータを、必要な多様性を確保しつつ少ないデータ量で生成する。
【解決手段】 データ生成プログラム30は、カラム定義ファイル60を読み込んで(S1)、テストデータ生成条件を把握し、外部データ50等を利用して(S2)、実テーブル110,120を生成し(S3)、データベース40に記憶させる。実テーブル110,120のデータは、プログラム20に入力され得る合計M個のパラメータのうち、任意のN(M≧N>1)個のパラメータの組合せについて全てのパターンをそれぞれ網羅するように生成される。従って、全てのパターンに従ってテストデータを生成する場合に比べて、データ量を低減でき、必要な多様性を確保できる。テストプログラム10は、使用する実テーブル110を選択した後、プログラム20のテストを開始する(S4〜S7)。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、テストデータ生成システム及びテストデータ生成方法に関する。
【背景技術】
【0002】
例えば、ウェブアプリケーションプログラムのようなプログラム製品は、概要設計、基本設計及び詳細設計等を経てプログラムコードが作成される。そして、このプログラム製品は、種々のテストによって動作が検証され、必要な修正が行われた後で製品として出荷され、実際に使用される。
【0003】
プログラム製品が正常に動作するか否かをテストするために、プログラム製品は、データベースに接続される。プログラム製品は、データベースに格納されたデータを用いて処理を行う。この処理結果を解析することにより、プログラム製品に修正が必要か否か等を判断することができる。
【0004】
プログラム製品のバグを検出して必要な修正を施すためには、種々のテストデータを用いて繰り返しテストを行う必要がある。そのプログラム製品の全ての動作を検証可能な多様性のあるテストデータを用いてテストを行うのが好ましい。
【0005】
多様性のあるテストデータを生成する一つの方法としては、例えば、一つ一つのテストデータをテスト実施者が手動で生成する方法が知られている。他の一つの方法としては、実際に運用されているデータベースから一部の必要なデータのみを抜き出して、テストデータとして利用する方法も知られている。
【0006】
なお、品質工学の分野では、L18等として知られている直交表に実験項目(因子)を割り付けて、より少ない実験回数でテストを行う手法も知られている(非特許文献1,非特許文献2)。また、この直交表を利用したテスト手法を設計段階に適用する技術も知られている(特許文献1)。
【特許文献1】特開2004−133659号公報
【非特許文献1】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.
【非特許文献2】山本訓稔、秋山浩一,「直交表を利用したソフトウェアテスト−HAYST法−,ソフトウェアテストシンポジウム,2004.
【発明の開示】
【発明が解決しようとする課題】
【0007】
テスト対象のプログラムに入力され得る全てのパラメータの組合せの数(パターン総数)は、パラメータの総数及び各パラメータの取りうる値によって定まる。例えば、0または1の2値をとるパラメータが合計3個ある場合、そのパターンの総数は8(=2^3)となる。また、例えば、0,1,2の3値を取るパラメータが合計3個ある場合は、そのパターンの総数は27(=3^3)個となる。このように、プログラムに入力されるパラメータ数が増大するほど、テストすべきパターン総数は爆発的に増大する。
【0008】
全てのテストデータをテスト実施者が手作りする方法では、テストデータの作成作業が煩雑で、作業時間も長くなり、プログラムテストの効率を上げることができない。この方法では、テストの準備に多大な労力及び時間を必要とする上に、必要なテストパターンの見落としや不要なテストパターンの発生を招く可能性もある。
【0009】
実際のデータをマスキングして利用する方法では、全テストデータを手作りする方法に比べて、作業効率を改善可能である。しかし、実際のデータがテストデータとして適している保証はなく、バグを検出するために必要な多様性を備えていない可能性がある。そのプログラムに入力され得る全ての可能性が網羅されていなければ、そのプログラムの潜在的なバグを検出することはできず、テストの信頼性が低下する。
【0010】
ところで、非特許文献1,2に開示されているように、直交表を用いて、2つの機能間の全ての組合せを網羅する実験計画を策定することにより、少ないテスト回数で多くのパターンを網羅できることが知られている。しかし、これらの文献は、プログラムの有する各機能をそれぞれテストするための方法に関するもので、テストデータの生成方法を開示するものではなく、その示唆も含まれていない。
【0011】
そこで、本発明の目的は、効率的にプログラムをテストするためのデータを得ることができるようにしたテストデータ生成システム及びテストデータ生成方法を提供することにある。本発明の他の目的は、より少ないデータ量で多様なパターンを網羅するテストデータを生成できるようにしたテストデータ生成システム及びテストデータ生成方法を提供することにある。本発明のさらなる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【0012】
上記課題を解決すべく、本発明の一つの観点に従うテストデータ生成システムは、プログラムをテストするためのテストデータを生成するデータ生成部と、このデータ生成部によって生成されたテストデータを記憶し、プログラムに供給するデータベースと、を備え、データ生成部は、プログラムに入力され得る合計M個のパラメータのうち、任意のN(M≧N>1)個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるようになっている。
【0013】
ここで、プログラムとは、テスト対象のプログラムであり、例えば、ウェブアプリケーションプログラム等を挙げることができる。このプログラムには、合計M個のパラメータが入力され得る。データ生成部は、このM個のパラメータのうち、任意のN個のパラメータの組合せについて、それぞれ全てのパターンを網羅するテストデータを生成する。
【0014】
プログラムにm1,m2,m3の3個のパラメータが入力され得る場合を例に挙げて説明する。この3個のパラメータm1,m2,m3は、それぞれ0または1のいずれかの値を取るものとする。従って、総パターン数は8(=2^3)となる。
【0015】
データ生成部は、これら3個(M=3)のパラメータのうち、いずれか任意の2個(N=2)のパラメータの組合せについて全てのペアを網羅するパターンを生成する。具体的には、第1パターン「m1(0),m2(1),m3(0)」、第2パターン「m1(0),m2(0),m3(1)」、第3パターン「m1(1),m2(1),m3(1)」、第4パターン「m1(1),m2(0),m3(0)」の合計4パターンとなる。この4つのパターンに着目すると、m1とm2、m2とm3、m1とm3の任意の2個のパラメータのそれぞれについて、その全ての組合せが出現していることがわかる。また、3つのパラメータの組合せについても半分の4パターンが出現している。
【0016】
テスト対象のプログラムにより実行される情報処理の多くは、1つまたは2つのパラメータに基づいて行われる。例えば、「”電子メールアドレス”と”住所”のうち、”住所”が登録されている場合は、その住所に資料を送付する。」、「”電子メールアドレス”の登録されている”男性”のみに広告メールを送信する。」等のように、2つのパラメータに基づいて情報処理が実行される。
【0017】
従って、プログラムに入力され得る全てのパラメータの組合せについてそれぞれテストする必要は必ずしもなく、入力パラメータ数よりも少ない数の任意のパラメータ間の組合せのみをテストするだけで、出現し得るバグの多くを検出可能である。本発明は、このような統計学的な知見に基づいて、より少ないデータ量で多様性を確保したテストデータを生成する。従って、テストデータの生成時間を短縮してテスト準備作業の効率を向上させることができ、プログラムのテスト回数を少なくしてテスト作業の効率を高めることができる。
【0018】
データ生成部は、外部のデータ群を利用してテストデータを生成可能である。外部のデータ群としては、例えば、辞書ファイル、文字列発生プログラム、キー発生プログラム、外部データベース等を挙げることができる。辞書ファイルは、例えば、会員氏名や住所等のダミーデータを生成するために使用することができる。文字列発生プログラムは、例えば、電子メールアドレス等のダミーデータを生成するために使用可能である。キー発生プログラムは、例えば、「男性は”0”、女性は”1”」等のような2値または多値のキーを発生させるために使用することができる。なお、外部データ群に加えて、あるいは、外部データ群に代えて、疑似乱数発生プログラムを利用できる場合もある。
【0019】
データ生成部は、予め指定されている禁則パターンを除外してから、テストパターンを生成することができる。禁則パターンとは、例えば、そのプログラムの仕様上禁止されているパラメータの組合せとして定義することができる。例えば、そのプログラムの仕様として、「”住所”または”電子メールアドレス”の少なくともいずれか一方は登録されていなければならない。」という条件が設定されている場合、「”住所”及び”電子メールアドレス”の両方とも登録されていない。」というパターンは、プログラムの仕様に違反する禁則パターンである。
【0020】
このような禁則パターンについてもテストを行うことは可能である。しかし、例えば、プログラムのGUI(Graphical User Interface)等によって、あり得ない組合せの入力が事前に排除されている場合もある。具体的には、”住所”または”電子メールアドレス”のうち少なくともいずれか一方が入力されていない場合は、次のステップに移行させない等のような保護機構が設定されていることがある。このような場合に、禁則パターンについてテストを行うのは効率的ではない。そこで、データ生成部は、禁則パターンを排除してテストデータを生成する。これにより、より少ないデータ量で必要な多様性を確保することができ、効率的なテストデータを得ることができる。
【0021】
例えば、データ生成部は、予め指定されている禁則パターンを構成する各パラメータ同士を結合させてから、テストパターンを生成可能である。上記の例で説明すると、データ生成部は、”住所”と”電子メールアドレス”の2つのパラメータを結合させて、新たに”住所、電子メールアドレス”というパラメータを生成する。この結合パラメータ”住所、電子メールアドレス”については、”1,1”、”1,0”、”0,1”という許可されている全てのペアが網羅され、禁止されている”0,0”は事前に排除される。
【0022】
また、例えば、一方のパラメータを設定した場合は、他方のパラメータが設定不能となる排他的な関係にあるパラメータについては、各パラメータの取りうる値(水準)同士の許可された組合せで、新たなパラメータを生成する。例えば、”成年:1、未成年:0”、”閲覧する:1、閲覧しない:0”という2つのパラメータがあり、未成年の場合は閲覧を許可しない場合、”成年、閲覧する”、”成年、閲覧しない”、”未成年、閲覧しない”という、許可された組合せについて新たなパラメータを生成すればよい。
【0023】
さらに、一方のパラメータを設定した後でなければ他方のパラメータを設定することができない場合のように、特定のパラメータ間に方向性や順序性が存在するときは、この方向性を考慮して、禁則パターンを排除することもできる。
【0024】
本発明の他の観点に従うテストデータ生成方法は、テスト対象のプログラムに入力され得る複数のパラメータのうち、予め指定されている禁則パターンを除去するステップと、禁則パターンが除去されてから、プログラムに入力され得る合計M個のパラメータのうち、任意のN(M≧N>1)個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるステップと、を含む。
【0025】
本発明の機能、手段、ステップの全部または一部は、例えば、マイクロコンピュータにより実行されるコンピュータプログラムとして構成可能な場合がある。そして、このコンピュータプログラムは、例えば、ハードディスク、光ディスク、半導体メモリ等の記憶媒体に固定して配布することができる。または、コンピュータプログラムをインターネット等の通信ネットワークを介して、配信することもできる。
【発明を実施するための最良の形態】
【0026】
以下、図面に基づき、本発明の実施の形態を説明する。本実施形態では、以下に詳述するように、プログラム(20)をテストするためのテストデータ(110,120)を生成するデータ生成部(30)と、このデータ生成部(30)によって生成されたテストデータ(110,120)を記憶し、プログラム(20)に供給するデータベース(40)と、を備え、データ生成部(30)は、プログラム(20)に入力され得る合計M個のパラメータのうち、任意のN(M≧N>1)個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるようになっている。
【0027】
そして、データ生成部(30)は、テストデータ(110,120)の生成条件を規定するテストデータ生成条件定義情報(60)に基づき、外部のデータ群(50)を利用してテストデータ(110,120)を生成することができる。
【0028】
このテストデータ生成システムは、それ単独で機能させることができるほか、プログラムテストシステムの一部として機能させることもできる。プログラムテストシステムは、テストデータ(110,120)を記憶するデータベース(40)と、予め設定されたテスト条件に基づいて、データベース(40)に記憶された各テストデータ(110,120)をテスト対象プログラム(20)にそれぞれ供給し、テスト対象プログラム(20)に所定の処理を実行させるテスト制御部(10)とを備えることができる。
【実施例1】
【0029】
図1は、テストデータ生成システムが利用されるプログラムテストシステムの全体構成を示すブロック図である。このシステムは、例えば、テストプログラム10と、アプリケーションプログラム20と、データ生成プログラム30と、データベース40と、外部データ50及びカラム定義ファイル60とを備えて構成することができる。
【0030】
テストプログラム10は、アプリケーションプログラム(以下、「プログラム」)20のテストを行うためのプログラムである。プログラム20は、例えば、ウェブアプリケーションに利用されるプログラムである。より具体的には、例えば、プログラム20は、顧客管理プログラム、社員管理プログラム、売上げ管理プログラム、在庫管理プログラム、利息計算プログラム、予約管理プログラム、財務管理プログラム等のような種々のアプリケーションプログラムとして生成される。
【0031】
データ生成プログラム30は、プログラム20をテストするためのテスト用のデータセットをそれぞれ生成するためのプログラムである。詳細はさらに後述するが、データ生成プログラム30は、カラム定義ファイル60に設定されている条件に基づいて、テストデータ(110,120)を生成する。データ生成プログラム30は、辞書ファイルや他の外部データベース等の外部データ50を利用して、テストデータの全部または一部を生成することもできる。ここで、テスト用のデータセットは、例えば、テーブル形式で出力されるため、本実施例では、実テーブル110,120と呼ぶ。
【0032】
外部データ50は、本システムとは異なる別のコンピュータシステム内に存在してもよい。即ち、データ生成プログラム30は、例えば、通信ネットワークを介して他のデータベースにアクセスし、そのデータベースから取得したデータセットに基づいて実テーブル110,120をそれぞれ生成することもできる。
【0033】
データ生成プログラム30は、より少ない情報量でより多くのパターンを網羅できるように、テスト対象のプログラム20に入力され得るパラメータ総数Mよりも少ないN個のパラメータについて、任意のN個のパラメータ間の全ての組合せを網羅するように、実テーブル110,120を生成するようになっている。
【0034】
データ生成プログラム30は、テストプログラム10からの指示に基づいて作動する構成でもよく、テストプログラム10とは独立してデータ生成プログラム30のみを単独で作動させる構成でもよい。
【0035】
先に全体動作の概要を説明すると、データ生成プログラム30を用いてテストデータとしての実テーブル110,120を生成させた後(テスト準備段階)、テストプログラム10は、この実テーブル110,120を用いてプログラム20のテストを実行する(テスト実行段階)。
【0036】
データ生成プログラム30は、カラム定義ファイル60を読み込んで(S1)、テストデータの生成条件を把握する。データ生成プログラム30は、カラム定義ファイル60の指示に基づき、外部データ50等を利用して(S2)、実テーブル110,120をそれぞれ生成する(S3)。生成された実テーブル110,120は、データベース40に記憶される。これにより、テスト準備段階が完了する。
【0037】
次に、テストプログラム10は、テスト手順に基づいて、テストに使用する実テーブル110を選択した後、プログラム20に対して情報処理の実行を指示する(S4)。プログラム20は、実テーブルにアクセスし(S5)、実テーブルからデータを読出し(S6)、この読出したデータを処理する。例えば、プログラム20は、所定の検索条件を満たすデータ群を実テーブル110,120から読出し、このデータ群を所定の順序で配置して画面を生成等することができる。
【0038】
テストプログラム10は、プログラム20の処理結果を取得し、その処理結果について評価することができる(S7)。例えば、テストプログラム10は、その実テーブル110,120を用いた場合に予測される処理結果との差分を算出することができる。あるいは、処理結果の自動的な評価を行わず、単に処理結果を記憶するだけでもよい。
【0039】
一つまたは複数のテスト項目が終了すると、テストプログラム10は、テストに使用する実テーブルを切り替えることができる。例えば、テストプログラム10は、実テーブル110から実テーブル120にテストデータを切り替えて、さらに別のテスト項目を実施する。実テーブル110,120の切替は、手動または自動で行うことができる。
【0040】
図2は、本システムとコンピュータ資源との関係を模式的に示す説明図である。本システムは、少なくとも一つ以上のコンピュータシステムを用いて構成可能である。コンピュータシステムは、ハードウェア資源及びソフトウェア資源を備えている。ハードウェア資源としては、例えば、CPU(Central Processing Unit)、ROM(Read Only Memory)やRAM(Random Access Memory)等の内部記憶装置、HDD(Hard Disk Drive)等の補助記憶装置、通信インターフェース等を挙げることができる。ソフトウェア資源としては、例えば、OS(Operating System)、デバイスドライバ、ファイルシステム、その他のプログラムモジュール等を挙げることができる。
【0041】
補助記憶装置220には、例えば、種々のプログラムデータ221とデータ群222とが記憶されている。このプログラムデータ221をデータ処理装置210が読み込んで実行することにより、テストプログラム10,プログラム20及びデータ生成プログラム30の各機能がそれぞれ実現される。
【0042】
内部記憶装置230には、例えば、データベース40を構築することができる。データベース40は、補助記憶装置220に記憶されたデータ群を管理する。なお、データベース40の少なくとも一部を、補助記憶装置220内に構築することもできる。
【0043】
プログラム20は、単体プログラムとして構成してもよいし、図2に示すように、複数のプログラムを結合または連携させた多層のプログラム集合体として構成してもよい。例えば、プログラム20は、ユーザインターフェース(UI)層21と、イベントハンドラ層22と、ロジック層23と、データアクセス層24とから複数階層の構造で構成することもできる。
【0044】
UI層21は、例えば、ウェブブラウザ等への情報の出力及びウェブブラウザ等からの情報入力を行うためのプログラムである。イベントハンドラ層22は、例えば、ユーザによる画面操作等のようなUI層21で生じたイベント(ユーザ要求)を検出するためのプログラムである。ロジック層23は、例えば、データのチェックや演算等を行うためのプログラムである。データアクセス層24は、例えば、データベース40へのデータ入出力を行うためのプログラムである。なお、これら各層21〜24は、それぞれ複数のプログラムから構成することができる。
【0045】
図3は、テストデータの生成方法を模式的に示す説明図である。説明の便宜のために使用されるユーザ管理項目テーブルT1には、例えば、”会員ID”、”氏名”、”性別”、”住所”、”メールアドレス”等のような各カラムが含まれている。本実施例では、これらの各カラムがプログラム20への入力パラメータとなる。
【0046】
ここで、”会員ID”及び”氏名”は、それぞれ1つのみの値を取ることができ、一意に決定されるとする。その他の”性別”、”住所”及び”メールアドレス”は、それぞれ複数の値(状態)を取り得る。”性別”では、男性の場合と女性の場合とがある。”住所”では、会員の住所データが実際に登録されている場合と未登録の場合とがある。同様に、”メールアドレス”では、会員のメールアドレスが登録されている場合と未登録の場合とがある。
【0047】
テーブルT1に示されている各パラメータ(カラム)の全ての組合せが、テーブルT2に示されている。複数の値を取り得るパラメータが3個あるので、その組合せの総数は、合計8個となる。
【0048】
この全ての組合せに代えて、本実施例では、テーブルT3に示すように、8個の入力パラメータのうち、任意の2個のパラメータ間の全ての組合せをそれぞれ網羅するパターンを生成する。
例えば、テーブルT3の”性別”と”住所”との2つのパラメータに着目すると、「男性、住所登録あり」、「男性、住所未登録」、「女性、住所登録あり」、「女性、住所未登録」の全ての組合せが網羅されている。
”住所”と”メールアドレス”との2つのパラメータに着目すると、「住所登録あり、メールアドレス未登録」、「住所未登録、メールアドレス登録あり」、「住所登録あり、メールアドレス登録あり」、「住所未登録、メールアドレス未登録」の全ての組合せが網羅されている。
同様に、”性別”と”メールアドレス”との2つのパラメータに着目すると、「男性、メールアドレス未登録」、「男性、メールアドレス登録あり」、「女性、メールアドレス登録あり」、「女性、メールアドレス未登録」の全ての組合せが網羅されている。
【0049】
このように、入力され得る全てのパラメータの組合せを用いるのではなく、より少ない数のパラメータ間の組合せをそれぞれ全て網羅することにより、テストデータのデータ量を低減することができる。上記の例では、8パターンが4パターンで済んでいるので、データ量が50%削減されている。
【0050】
なお、例えば、それぞれ2値を取るパラメータが合計8個存在する場合、総パターン数は256個(=2^8)となるが、任意の2個のパラメータ間の全ての組合せをそれぞれ網羅するパターン数は8個となる。また、例えば、それぞれ2値を取るパラメータが合計16個存在する場合、その総パターン数は65536個(=2^16)となるが、任意の2パラメータ間の全ての組合せをそれぞれ網羅するパターン数は10個となる。このように、本実施例では、テストデータの量を低減させることができる。テストデータのデータ量を低減しても、任意の2パラメータ間の全ての組合せは網羅されているため、2個のパラメータに基づいて実行される処理に潜むバグを検出することができる。
【0051】
なお、それぞれ2値を取る全パラメータの中から任意の2個のパラメータを取り上げて、そのパラメータ間の全ての組合せを網羅すると述べたが、これは一例であって、本発明はこれに限定されない。総数M個のパラメータから任意のN(M≧N>1)個のパラメータを取り出し、このパラメータ間の全ての組合せを網羅するパターンであればよい。また、各パラメータの状態は、それぞれ2値、または3値以上で変化してもよい。2値と2値以外の変化を示すパラメータが混在してもよい。
【0052】
テーブルT3に示すような任意のパラメータ間の全ての組合せを網羅するパターンは、比較的簡単な演算で求めることができる。例えば、あり得る全てのパターンを求め、この中から不要なパターンを除去すればよい。この演算には、各カラムと、その取り得る値のみを考慮すればよく、比較的速やかに最小のテストパターンを求めることができる。
【0053】
図4は、システム全体の動作概要を示すフローチャートである。まず、テスト実施者は、データ生成プログラム30を用いてテスト用のテーブルデータ(実テーブル110,120)をそれぞれ生成し、これをデータベース40に記憶させる(S10)。これにより、プログラムテストの準備が整う。なお、このステップの詳細はさらに後述する。
【0054】
次に、テスト実施者は、テストプログラム10を用いて、プログラム20にテスト実行を指示させる(S20)。テストプログラム10は、プログラム20からの応答を検証し(S30)、全てのテスト項目を実施したか否かを判定する(S40)。未実施のテスト項目が存在する場合(S40:NO)、テストプログラム10は、次のテスト項目に使用するテストテーブル(実テーブル)に切り替えてから(S50)、プログラム20にテスト実行を指示する(S20)。そして、全てのテスト項目の実施が完了すると(S40:YES)、プログラムテストは正常に終了する。
【0055】
例えば、最初の一連のテストでは、テスト用に生成された会員情報テーブル等を使用することにより、ドキュメント送付処理等が正常に行われるか否かを検証する。そして、次の一連のテストでは、例えば、会員情報テーブルに処理すべきデータが存在しない場合に、正常に処理が終了するか否かを検証する。このように、テスト対象のプログラム20が行う情報処理の内容に応じた複数種類のテストデータを用意しておき、テストデータを切り替えながらテストを進めることができる。
なお、それぞれ異なる複数のテーブルを用いてテストを行う場合、これら各テーブルはそれぞれ別々のテーブルであるから、同時に作成することができ、同時に使用することができる。
同一のテスト用テーブルを使用して、かつ、そこに網羅されたデータセットではテストできないようなテスト項目を実施するような場合に、テストテーブルが切り替えられるようになっている(S50)。
【0056】
図5,図6に基づいて、テストの簡単な具体例を説明する。以下の例では、会員情報テーブル111及び売上げ管理テーブル121の2種類のテストテーブルを使用してプログラムテストを行う場合を例示する。
図5(a)に示すように、一方の会員情報テーブル111は、例えば、”会員ID”と、”氏名”と、”ドキュメント送付状況”の3つのカラムを有している。”会員ID”には、データ生成プログラム30により与えられる連続した数値が設定される。”氏名”には、例えば、外部の辞書ファイルから読み出される文字列が設定される。”ドキュメント送付状況”には、ドキュメントを未送付であることを示す値がセットされる。ここでは、「未」として示す。
他方の会員情報テーブル121は、例えば、”売上ID”と、”会員ID”と、”請求書作成状況”の3つのカラムを有している。”売上ID”には、データ生成プログラム30により与えられる連続した数値が設定される。”会員ID”には、会員情報テーブル111に登録されている会員IDの中から一つだけ抽出された値が設定される。”請求書作成状況”には、請求書を作成したか否かの区別を示す値が設定される。請求書作成済の場合は「済」、未作成の場合は「未」がそれぞれ設定されるものとする。
【0057】
図5(b)は、プログラム20により実行されるテスト対象の処理21と、この処理21のテストにおける評価の観点11とを示す。
テスト対象の処理21の内容は、例えば、「請求書未作成の場合、請求書を作成し、ドキュメントを送付する。未作成の請求書が無い場合、ドキュメントも送付しない。」というものである。
この場合のテスト観点11は、例えば、(1)請求書を作成済の場合、”請求書作成状況”のステータスは「済」のままか、(2)請求書が未作成の場合、請求書を作成した後に、”請求書作成状況”のステータスが「未」から「済」に変化しているか、(3)請求書を作成した場合、”ドキュメント送付状況”のステータスが「未」から「済」に変化したか、(4)請求書を作成しなかった場合、”ドキュメント送付状況”のステータスは「未」のままか、といったものになる。
【0058】
テスト対象の処理21が正常に作動した場合は、図6に示すように、会員情報テーブル111及び売上管理テーブル121は、それぞれ変化する。この予測される正常な変化と実際の処理21の結果とが異なる場合、バグの存在が検出される。
なお、例えば、会員が全く登録されていないパターンについてもテストするような場合は、会員データが未登録である空の会員情報テーブルに切り替える。
【0059】
図7は、図4中にS10で示すステップの詳細を示すフローチャートである。テストデータ生成処理では、カラム定義ファイル60を参照し、テスト用テーブル間の依存関係を確認する(S11)。テーブル間の依存関係とは、どのテーブルがどのテーブルを参照しているかの関係を示す。
以下、外部のテーブルから参照されるテーブルを被外部参照テーブルと呼び、被外部参照テーブルを参照するテーブルを外部参照テーブルと呼ぶ。
【0060】
データ生成プログラム30は、未作成の被外部参照テーブルが存在するか否かを判定する(S12)。未作成の被外部参照テーブルが存在する場合(S12:YES)、作成すべき被外部参照テーブルを選択する(S13)。即ち、データ生成プログラム30は、他のテーブルから参照される被外部参照テーブルを先に生成する。
先の例で言えば、会員情報テーブル111は売上管理テーブル121から参照される被外部参照テーブルである。従って、会員情報テーブル111から先にテストデータが生成される。被外部参照テーブルのデータセットを先に生成しなければ、その被外部参照テーブルを参照するテーブルのテストデータを生成することができないためである。
データ生成プログラム30は、禁則パターンを除去してから(S14)、必要最低限のテストパターンを特定し、このテストパターンに具体的な値をそれぞれ当てはめてテスト用のテーブルデータを生成する(S15)。
【0061】
データ生成プログラム30は、必要な全てのテスト用のテーブルデータを生成したか否かを判定し(S16)、まだ生成していないテーブルデータが存在する場合(S16:NO)、S11に戻る。
未作成の被外部参照テーブルが存在する場合、S11〜S15のステップがそれぞれ繰り返される。全ての被外部参照テーブルの生成が完了すると(S12:NO)、データ生成プログラム30は、外部参照テーブルを選択し(S17)、被外部参照テーブルの作成と同様に、禁則パターンを除去して(S14)、テストデータを生成する(S15)。
【0062】
そして、全てのテスト用テーブルデータが生成されると(S16:YES)、データ生成プログラム30は、SQL(Structured Query Language)を利用してテスト用データをさらに生成する(S18)。データ生成プログラム30は、SQLにより生成されたデータをデータベース40に挿入する(S19)。例えば、各テーブルの特定列の合計値等のような別のカラムを生成する場合、全てのテスト用テーブルデータが揃った後で、SQLにより生成する。
【0063】
図8は、図7中にS14で示す禁則パターン除去処理を示す。データ生成プログラム30は、カラム定義ファイル60に示されている禁則条件を取得する(S121)。データ生成プログラム30は、禁則関係に立つパラメータを結合させ(S122)、この結合されたパラメータの取り得る全ての値の組合せを網羅する(S123)。
【0064】
データ生成プログラム30は、全ての禁則パターンを除去したか否かを判定し(S124)、未処理の禁則パターンが存在する場合(S124:NO)、次の禁則条件に移動して(S125)、S121〜S123のステップをそれぞれ繰り返す。全ての禁則パターンを除去した場合(S124:YES)、本処理を終了し、メインプログラムに戻る。
【0065】
図8中に示すように、例えば、「住所及びメールアドレスの両方とも未登録であること」が禁止されている場合、データ生成プログラム30は、”住所”パラメータと”メールアドレス”パラメータとを結合させて”住所、メールアドレス”という新しいパラメータを生成する。そして、データ生成プログラム30は、この結合パラメータ”住所、メールアドレス”の取りうる値の全ての組合せを検出し、網羅する。
このとき、禁則パターンである「住所未登録、メールアドレス未登録」の組合せは除外される。これにより、無駄なテストデータの生成を防止し、テスト用データのデータ量を一層少なくできる。
【0066】
図9は、カラム定義ファイル60の一例を示す説明図である。図9に示すカラム定義ファイル60は、テスト用の「会員テーブル」を生成するために使用される。会員テーブルに含まれるカラム”氏名”では、外部の辞書ファイル(氏名一覧.csv)を用いて、テスト用の氏名データを生成する(P1)。
【0067】
カラム”性別”では、外部のテーブル(男女テーブル)に登録されている性別区分データ(男女ID)を取得して、テスト用の性別データを生成する(P2)。
カラム”住所”では、そのカラムの取りうる状態をdomainタグで分割して指定し、各ドメイン毎にそれぞれ値をセットさせる(P3)。図9に示す例では、カラム”住所”の取りうる状態を「住所登録あり」と「未登録」の2つにわけている。住所登録がされている場合は、”住所”の値として「東京」をセットさせる。住所未登録の場合は、”住所”の値としてヌルデータ(0)をセットさせる。
【0068】
P2に続いて、禁則パターン(forbiddance column)が定義される(P4)。ここでは、住所が未登録の場合において、”メールアドレス”も未登録であることは、禁止されたパターンであると定義されている。
【0069】
カラム”メールアドレス”では、カラム”住所”と同様に、メールアドレスが登録されている場合と未登録の場合とに状態が2分割されており、メールアドレスが登録されている場合は、予め用意されたダミーデータ(test@com)がセットされる(P5)。メールアドレスが未登録の場合は、ヌルデータがセットされる。
【0070】
なお、テスト用の住所データ及びメールアドレスデータは、上述のように予め指定された固定文字列を用いて生成することもできるし、ランダムな文字列を発生させて使用することもできる。例えば、メールアドレスの場合は「@」の前後でデータを分割し、「@」の前には、数十文字以内でランダムに生成された文字列を当てはめ、「@」の後には、ドメイン生成規則に基づいてランダムに発生させた文字列を当てはめることにより、テスト用のデータを得ることができる。
【0071】
P6では、SQLにより、会員テーブルと購入テーブルとに基づいて、各会員ID毎にその購入合計金額をそれぞれ算出し、カラム”合計”を新たに生成している。
【0072】
本実施例は、上述のように構成されるので、以下の効果を奏する。本実施例では、プログラム20に入力され得る合計M個のパラメータのうち、任意のN(M≧N>1)個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させる構成とした。従って、全てのパターンに従ってテストデータを生成する場合に比べて、テストデータのデータ量を低減することができる。この結果、より少ないデータ量でより多様なテストデータを効率よく生成することができ、プログラムテストの準備時間を短縮できる。また、テストデータの量が少ないため、プログラムテストに要する時間を短縮することができる。
【0073】
本実施例では、禁則パターンを除外してテストデータを生成可能とした。従って、無駄なテストデータの生成を未然に防止でき、多様性を確保しつつテストデータのデータ量をより一層少なくすることができる。また、プログラムテストの時間を短縮し、全体の作業効率を向上させることができる。
【実施例2】
【0074】
図10に基づいて、第2実施例を説明する。本実施例では、実テーブル110,120をシノニムのような仮想テーブル100を用いて自動的に切り替える。
データ切替プログラム70は、プログラム20に供給するテスト用のデータセットを切り替えるためのプログラムであり、テストプログラム10により使用される。仮想テーブル100は、例えば、実テーブル110,120のシノニムとして生成される。仮想テーブル100は、実テーブル110,120へアクセスするための窓口であり、実テーブル110,120と論理的に接続されている。仮想テーブル100は、各実テーブル110,120のそれぞれについて、一対一で生成される。
【0075】
この実施例では、テストプログラム10は、テストに使用する実テーブルを選択し、データ切替プログラム70を介して切替指示を出す(S8)。データ切替プログラム70は、テストプログラム10から指定された実テーブルについて、仮想テーブル100を生成する(S9)。
【0076】
テストプログラム10は、仮想テーブル100を生成させた後、プログラム20に対して情報処理の実行を指示する(S4)。プログラム20は、仮想テーブル100を介して実テーブルにアクセスし(S5)、実テーブルからデータを読出し(S6)、この読出したデータを処理する。その実テーブルから他の実テーブルへ切り替える場合は、作成されている仮想テーブル100を削除し、次に使用予定の実テーブルに対応する仮想テーブルを新たに生成させる。
【0077】
このように構成される本実施例でも前記実施例と同様の効果を奏する。これに加えて、本実施例では、データ生成プログラム30により生成された実テーブル110,120を仮想テーブル100を介して自動的に切り替えることができる。従って、プログラムテストの準備段階のみならず、プログラムテストの実行段階の作業効率を向上させることができ、システム全体の効率がより改善される。
【0078】
本実施例は、例えば、複数種類のテストデータを記憶するデータベース(40)と、予め設定されたテスト条件に基づいて、前記データベース(40)に記憶された前記各テストデータ(110,120)をテスト対象プログラム(20)にそれぞれ供給し、前記テスト対象プログラム(20)に所定の処理を実行させるテスト制御部(10)と、前記テスト制御部(10)からの指示に基づいて、前記テスト対象プログラム(20)によりアクセスされる仮想テーブル(100)を前記各テストデータ(110,120)のいずれか一つと論理的に接続させるテストデータ切替部(70)と、を備え、データ生成部(30)は、プログラム(20)に入力され得る合計M個のパラメータのうち、任意のN(M≧N>1)個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるプログラムテストシステムのように表現することができる。
【0079】
なお、本発明は、上述した実施の形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。例えば、当業者であれば、前記各実施例を適宜組み合わせることができる。
【図面の簡単な説明】
【0080】
【図1】本実施例によるテストデータ生成システムが用いられるプログラムテストシステムの全体概要を示すブロック図である。
【図2】プログラムテストシステムのハードウェア構造を模式的に示す説明図である。
【図3】全ての入力パラメータから必要最低限のテストパターンを得る方法を模式的に示す説明図である。
【図4】プログラムテストの全体概要を示すフローチャートである。
【図5】テストの具体例を示す説明図である。
【図6】図5に続く説明図である。
【図7】テストデータ生成処理を示すフローチャートである。
【図8】禁則パターン除去処理を示すフローチャートである。
【図9】カラム定義ファイルの一例を示す説明図である。
【図10】他の実施例によるプログラムテストシステムの全体概要を示すブロック図である。
【符号の説明】
【0081】
10…テストプログラム、20…アプリケーションプログラム、21…ユーザインターフェース(UI)層、22…イベントハンドラ層、23…ロジック層、24…データアクセス層、30…データ生成プログラム、40…データベース、50…外部データ、60…カラム定義ファイル、70…データ切替プログラム、100…仮想テーブル、110,120…実テーブル(テストデータ)、111,112,121,122…テスト用テーブル(テストデータ)210…データ処理装置、220…補助記憶装置、221…プログラムデータ、222…データ群、230…内部記憶装置

【特許請求の範囲】
【請求項1】
プログラムをテストするためのテストデータを生成するデータ生成部と、
このデータ生成部によって生成された前記テストデータを記憶し、前記プログラムに供給するデータベースと、を備え、
前記データ生成部は、前記プログラムに入力され得る合計M個のパラメータのうち、任意のN(M≧N>1)個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるものであるテストデータ生成システム。
【請求項2】
前記データ生成部は、外部のデータ群を利用して前記テストデータを生成可能である請求項1に記載のテストデータ生成システム。
【請求項3】
前記データ生成部は、予め指定されている禁則パターンを除外してから、前記テストパターンを生成する請求項1に記載のテストデータ生成システム。
【請求項4】
前記データ生成部は、予め指定されている禁則パターンを構成する各パラメータ同士を結合させてから、前記テストパターンを生成する請求項1に記載のテストデータ生成システム。
【請求項5】
テスト対象のプログラムに入力され得る複数のパラメータのうち、予め指定されている禁則パターンを除去するステップと、
前記禁則パターンが除去されてから、前記プログラムに入力され得る合計M個のパラメータのうち、任意のN(M≧N>1)個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるステップと、
を含むテストデータ生成方法。
【請求項6】
テスト対象のプログラムに入力され得る複数のパラメータのうち、予め指定されている禁則パターンを除去するステップと、
前記禁則パターンが除去されてから、前記プログラムに入力され得る合計M個のパラメータのうち、任意のN(M≧N>1)個のパラメータの組合せについて全てのパターンをそれぞれ網羅するテストデータを生成させるステップと、
をコンピュータに実行させるためのコンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2006−227958(P2006−227958A)
【公開日】平成18年8月31日(2006.8.31)
【国際特許分類】
【出願番号】特願2005−41631(P2005−41631)
【出願日】平成17年2月18日(2005.2.18)
【出願人】(000155469)株式会社野村総合研究所 (1,067)
【Fターム(参考)】