以下、図面に基づいて本発明の実施の形態を説明する。図1は、本発明の実施の形態におけるテストデータ生成システムの構成例を示す図である。図1において、テストデータ生成装置10は、LAN(Local Area Network)又はインターネット等のネットワークを介して1以上のユーザ端末20に通信可能に接続されている。
テストデータ生成装置10は、プログラムのブラックボックステストに利用される、プログラムの入力変数に対する入力用のテストデータを生成するコンピュータである。ユーザ端末20は、テストデータ生成装置10に対するユーザインタフェースとして機能する端末である。なお、テストデータ生成装置10が、ディスプレイ等の表示装置や、マウス及びキーボート等の入力装置を備え、ユーザによって直接操作可能とされてもよい。
図2は、本発明の実施の形態におけるテストデータ生成装置のハードウェア構成例を示す図である。図2のテストデータ生成装置10は、それぞれバスBで相互に接続されているドライブ装置100、補助記憶装置102、メモリ装置103、CPU104、及びインタフェース装置105等を有する。
テストデータ生成装置10での処理を実現するプログラムは、CD−ROM等の記録媒体101によって提供される。プログラムを記憶した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従ってテストデータ生成装置10に係る機能を実行する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。
図3は、本発明の実施の形態におけるテストデータ生成装置の機能構成例を示す図である。図3において、テストデータ生成装置10は、設計モデル抽出部11、設計モデル分析部12、テスト項目抽出部13、条件抽出部14、変数分類部15、値候補生成部16、及び組み合わせ生成部17等を有する。これら各部は、テストデータ生成装置10にインストールされた1以上のプログラムが、CPU104に実行させる処理により実現される。テストデータ生成装置10は、また、値候補記憶部111を利用する。値候補記憶部111は、メモリ装置103若しくは補助記憶装置102、又はテストデータ生成装置10にネットワークを介して接続される記憶装置等を用いて実現可能である。
設計モデル抽出部11は、ユーザ端末20から設計書データを受信し、設計書データから設計モデルを抽出する。設計書データとは、ソフトウェアの設計書を示すデータをいう。また、設計モデルとは、ソフトウェアの仕様に関する情報をいう。例えば、設計モデルには、入力変数に関する制約等が含まれている。設計モデル分析部12は、設計モデルを分析し、設計モデルに含まれる1以上のビジネスロジックのそれぞれを、テスト対象として抽出する。ビジネスロジックとは、例えば、ソフトウェアが有する機能群のうちの一つの機能、又はソフトウェアがコンピュータに実行させる複数の処理手順のうちの一つの処理手順に対応する概念、又は当該処理手順をコンピュータに実行させるプログラムに対応する概念等である。また、設計モデル内には、ビジネスロジックごとに、当該ビジネスロジックに対する入力変数や、各入力変数に対する制約等が定義されている。
テスト項目抽出部13は、各テスト対象(各ビジネスロジック)からテスト項目の一覧(以下、「テスト項目一覧」という。)を抽出する。テスト項目一覧は、各テスト対象に含まれる入力変数に関する制約等に基づいて抽出される。条件抽出部14は、テスト項目ごとに、当該テスト項目において着目される入力変数に対するテストデータを生成するための条件式(以下、「テストデータ生成条件」という。)を設計モデルから抽出する。
変数分類部15は、テスト項目ごとに、当該テスト項目に関するテストデータ生成条件を解析し、当該テスト項目に関する入力変数を、依存関係の有無に基づいて分類する。分類の結果生成されるグループを、以下、「変数集合」という。変数分類部15は、また、各テストデータ生成条件を、当該テストデータ生成条件に関係する入力変数が属する変数集合に振り分ける(関連付ける)。
値候補生成部16は、変数集合ごとに、当該変数集合に振り分けられたテストデータ生成条件に基づいて、当該変数集合に属する各入力変数のテストデータの候補(以下、「値候補」という。)を生成する。なお、値候補生成部16は、変数集合の特徴(変数集合に含まれる入力変数間の依存関係の有無)に基づいて、値候補の生成方法を切り替える。値候補記憶部111は、値候補生成部16によって生成された値候補を記憶する。
組み合わせ生成部17は、各入力変数の値候補の組み合わせに関して1通り以上の組みをテストデータとして生成する。組み合わせ生成部17は、生成されたテストデータを含むテストモデルを生成し、当該テストモデルの内容をテストケース表としてユーザ端末20に出力する。
以下、テストデータ生成装置10が実行する処理手順について説明する。図4は、テストデータ生成装置が実行する処理手順の一例を説明するためのフローチャートである。
ユーザ端末20に対するユーザによる指示入力に応じ、ユーザ端末20は、ソフトウェアの設計書データを、テストデータ生成装置10に送信する。当該設計書データは、テストデータ生成装置10において設計モデル抽出部11によって受信される。設計モデル抽出部11は、図5に示されるような設計モデルのデータ構造の定義に基づいて設計書データを分析して、図6に示されるような設計モデルを抽出する(S100)。
図5は、設計モデルのデータ構造の定義の一例を示す図である。図5では、設計モデルのデータ構造が、BNF(Backus-Naur Form)によって定義されている。
図5によれば、本実施の形態において、設計モデルは、1以上のビジネスロジックを含む。ビジネスロジックは、ビジネスロジックID、1以上の入力変数、1以上の入力制約、及び1以上のドメイン定義等を含む。入力変数とは、ビジネスロジックに対して入力される変数である。入力制約とは、入力変数に関する制約情報である。ドメイン定義とは、ビジネスロジックの振る舞いごと(出力結果ごと)に、当該振る舞いを引き起こすために入力変数が満たすべき条件の定義である。
なお、入力変数、入力制約、及びドメイン定義より下層の構造に関する説明については省略する。
図6は、設計モデルの一例を示す図である。図6に示されるように、本実施の形態では、設計モデルに二つのビジネスロジックが含まれている。一つは、「夫婦型保険の加入判定処理」であり、もう一つは、「夫婦型保険の料金計算処理」である。「夫婦型保険の加入判定処理」は、夫婦型保険への加入の可否を判定する処理(ビジネスロジック)である。「夫婦型保険の料金計算処理」は、「夫婦型保険の加入判定処理」において加入が可能であると判定された場合に、加入対象の夫婦型保険の料金を計算する処理(ビジネスロジック)である。なお、本実施の形態において、「夫婦型保険の料金計算処理」に関するテストデータの生成の説明については、便宜上、省略される。
「夫婦型保険の加入判定処理」には、夫年齢、妻年齢、プラン名、又は備考を変数IDとする4つの入力変数が有る。夫年齢は、夫の年齢が入力される整数型の変数である。妻年齢は、妻の年齢が入力される整数型の入力変数である。プラン名は、夫婦型保険に属する複数のプランのうち、加入対象とするプランのプラン名が入力される列挙型の入力変数である。備考は、任意の文字列が入力される文字列型の変数である。なお、夫年齢、妻年齢、及びプラン名については、入力が必須とされている。一方、備考については、入力は必須とされていない。
入力制約としては、それぞれ制約(1)、制約(2)、制約(3)、制約(4)を入力制約IDとする4つの入力制約が有る。制約(1)は、式(1)を含む。式(1)は、夫年齢が18歳以上であることを示す。制約(2)は、式(2)を含む。式(2)は、妻年齢が16歳以上であることを示す。なお、制約(1)及び制約(2)の少なくともいずれか一方に違反した場合、「年齢不正」のエラーメッセージが表示される。制約(3)は、式(3)を含む。式(3)は、備考の長さが10文字以下であることを示す。制約(4)は、式(4)を含む。式(4)は、備考の各文字が、全角の漢字又は全角のカタカナであることを示す。なお、制約(3)及び制約(4)の少なくともいずれか一方に違反した場合、「備考不正」のエラーメッセージが表示される。
ドメイン定義としては、それぞれドメイン1、ドメイン2をドメインIDとする2つのドメイン定義が有る。ドメイン1は、式(5)を含む。式(5)は、夫年齢と妻年齢との差が20歳以下であることを示す。式(5)が満たされる場合、加入は可能であると判定され、「夫婦型保険の料金計算処理」を起動させるためのボタンが表示される。ドメイン2は、式(6)を含む。式(6)は、夫年齢と妻年齢との差が20歳を超えることを示す。式(6)が満たされる場合、加入はできないと判定され、個人型保険へのリンクが表示される。
上記の式(5)及び式(6)から明らかなように、本実施の形態において、夫年齢と妻年齢とが、相互に依存関係を有する入力変数の一例である。すなわち、式(5)又は式(6)を満たすために、夫年齢の値と妻年齢との値は、他方の値に依存する。
なお、設計モデルは、例えば、特許文献2に示されるように、表形式のデータによって与えられてもよい。
続いて、設計モデル分析部12は、設計モデルを分析し、設計モデルに含まれる各ビジネスロジックを、それぞれテスト対象として抽出する(S110)。すなわち、本実施の形態において、1つのビジネスロジックは、1つのテスト対象となる。続くステップS120〜S180は、テスト対象ごと(ビジネスロジックごと)に実行される。以下、処理対象とされているテスト対象を、「着目テスト対象」という。
ステップS120において、テスト項目抽出部13は、着目テスト対象からテスト項目一覧を抽出する。具体的には、テスト項目抽出部13は、着目テスト対象に含まれる、各入力制約、各ドメイン定義に対するテスト項目をそれぞれ生成する。例えば、着目テスト対象に、入力制約がn個、ドメイン定義がm個含まれる場合、an+bm件のテスト項目が抽出される。係数a及びbは、1つの設計要素(入力制約又はドメイン定義等)に関して複数の観点から複数件のテスト項目が生成されてもよいことを示す。本実施の形態では、a=1、b=1であるとする。
図7は、テスト項目一覧の抽出例を示す図である。図7には、テスト項目IDが1〜6の6個のテスト項目を含むテスト項目一覧が抽出された例が示されている。各テスト項目は、テスト項目ID、着目設計要素、及びテスト項目内容等を含む。テスト項目IDは、各テスト項目の識別情報である。着目設計要素は、当該テスト項目の抽出元となった設計要素(入力制約又はドメイン定義)である。テスト項目内容は、テスト項目の内容を示す情報である。
図7において、テスト項目IDが1であるテスト項目(以下、「テスト項目1」といい、他のテスト項目も同様の命名規則に従う。)は、図6に示される設計モデルの入力制約の制約(1)に基づいて抽出されたテスト項目である。テスト項目2、テスト項目3、テスト項目4は、それぞれ、制約(2)、制約(3)、制約(4)に基づいて抽出されたテスト項目である。テスト項目5は、ドメイン定義のドメイン1に基づいて抽出されたテスト項目である。テスト項目6は、ドメイン2に基づいて抽出されたテスト項目である。
続くステップS130〜S180は、ステップS120において抽出されたテスト項目ごとに実行される。以下、処理対象とされているテスト項目を「着目テスト項目」という。
ステップS130において、条件抽出部14は、着目テスト項目に対応するテストデータの生成条件(以下、「テストデータ生成条件」という。)を抽出する(S130)。具体的には、着目テスト項目が、入力制約に基づいて抽出されたテスト項目1〜4のいずれかである場合、着目テスト項目の入力制約に加え、他の全ての入力制約の式も取得され、テストデータ生成条件が生成される。したがって、テスト項目1〜4に関しては、それぞれ制約(1)〜制約(4)のそれぞれの式を含むテストデータ生成条件が生成される。一方、着目テスト項目が、ドメイン定義に基づいて抽出されたテスト項目5又は6である場合、当該テスト項目において着目されているドメイン定義に加え、全ての入力制約の式も取得され、テストデータ生成条件が生成される。したがって、例えば、テスト項目5に関しては、図8に示されるようなテストデータ生成条件が生成される。
図8は、一つのテスト項目に関するテストデータ生成条件の一例を示す図である。図8に示されるようにテスト項目5に関しては、式(1)〜式(5)の5つのテストデータ生成条件が生成される。式(1)〜式(4)は、制約(1)〜制約(4)に関するテストデータ生成条件であり、式(5)は、ドメイン1に関するテストデータ生成条件である。
なお、テスト項目6に関しては、式(5)の代わりにドメイン2に関する式(6)を含むテストデータ生成条件が生成される。ドメイン定義に基づくテスト項目に関して全ての入力制約のそれぞれに関するテストデータ生成条件が生成されるのは、全ての入力制約が満たされていないと、ドメイン定義に関するテストを正しく実行することができないからである。
続いて、変数分類部15は、各テストデータ生成条件を解析し、各テストデータ生成条件に関する入力変数を、依存関係の有無に基づいて変数集合に分類し、各テストデータ生成条件を各変数集合に振り分ける(S140)。
図9は、テストデータ生成条件が各変数集合に振り分けられた例を示す図である。図9には、図8に示したテストデータ生成条件が、変数集合1〜3の3つの変数集合に振り分けられた例が示されている。
変数集合1は、夫年齢及び妻年齢を含む変数集合である。すなわち、夫年齢と妻年齢とは相互に依存関係を有するため、同じ変数集合に含まれる。変数集合2は、プラン名を含む変数集合である。変数集合3は、備考を含む変数集合である。プラン名及び備考のそれぞれは、他の入力変数と依存関係を有さないため、それぞれ単独で変数集合を形成する。
各変数集合には、当該変数集合に含まれる入力変数に関する式を含むテストデータ生成条件が振り分けられる。したがって、変数集合1には式(1)、式(2)、及び式(5)が振り分けられ、変数集合3には式(3)及び式(4)が振り分けられている。なお、プラン名に関する式は無いため、変数集合2に振り分けられるテストデータ生成条件は無い。
続くステップS150〜S170は、変数集合ごとに実行される。以下、処理対象とされている変数集合を、「着目変数集合」という。
ステップS150において、値候補生成部16は、着目変数集合に2以上の入力変数が含まれているか否かを判定する。例えば、着目変数集合が変数集合1であれば、2以上の入力変数が含まれていると判定される。着目変数集合が変数集合2又は3であれば、2以上の入力変数は含まれていないと判定される。
着目変数集合に2以上の変数集合が含まれていない場合(S150でNO)、値候補生成部16は、着目変数集合に含まれる1つの入力変数に関する値候補を、例えば、特許文献1又は特許文献2に記載された手法を用いて生成する(S160)。値候補生成部16は、生成された値候補を、当該値候補の特徴を示す情報に関連付けて、値候補記憶部111に記憶する。
一方、着目変数集合に2以上の変数集合が含まれている場合(S150でYES)、値候補生成部16は、着目変数集合に含まれる入力変数に関する値候補を、ドメインテスト技法を用いて生成する(S170)。値候補生成部16は、生成された値候補を、当該値候補の特徴を示す情報に関連付けて、値候補記憶部111に記憶する。なお、ステップS170の詳細については後述される。
変数集合1〜3に関して、ステップS150〜S170が実行されると、値候補記憶部111には、図10に示されるような値候補が記憶される。
図10は、変数集合ごとの値候補の生成例を示す図である。図10には、変数集合1に含まれる夫年齢及び妻年齢の組に関して、inポイント、outポイント、onポイント、並びに2つの正常値のoffポイント及び2つの異常値のoffポイントの7通りの値候補が生成され、変数集合2に含まれるプラン名に関して、2つの正常値及び1つの異常値を含む3通りの値候補が生成され、変数集合3に含まれる備考に関して4つの正常値及び4つの異常値を含む8通りの値候補が生成された例が示されている。
本実施の形態において、変数集合2及び変数集合3については、ステップS160において正常値及び異常値が値候補として生成されるため、これらの入力変数の値候補の特徴には、「正常値」又は「異常値」が含まれている。また、変数集合1については、ステップS170において、正常値及び異常値が値候補として生成されるため、これらの入力変数の値候補の特徴には「正常値」又は「異常値」が含まれている。
また、変数集合1の値候補については、(inポイント)、(outポイント)、(onポイント)、又は(offポイント)が特徴に含まれている。「onポイント」は、当該値候補が、onポイントであることを示す。onポイントとは、入力制約又はドメイン定義に基づいて求まる同値クラスの境界上の値である。「outポイント」は、当該値候補が、outポイントであることを示す。outポイントとは、同値クラス外の値である。「inポイント」は、当該値候補が、inポイントであることを示す。inポイントは、同値クラス内の値である。「offポイント」は、当該値候補が、offポイントであることを示す。offポイントとは、onポイントがのる境界を、変数ごとにプラス側およびマイナス側にずらして得られる境界近傍の値である。但し、式(5)のように、onポイントが一つである場合、onポイントからプラス側及びマイナス側のそれぞれに1ずれた値がoffポイントとなる。
また、変数集合1のinポイント若しくはoutポイントの値候補及び変数集合3の値候補については、(境界値分析)又は(同値分割)が特徴に含まれている。「境界値分析」は、境界値分析に基づく値候補であることを示す。「同値分割」は、同値分割に基づく値候補であることを示す。
続いて、組み合わせ生成部17は、着目テスト項目に関して生成された値候補を組み合わせてテストケースを生成する(S180)。具体的には、組み合わせ生成部17は、着目テスト項目に関する変数集合のうち、テスト項目の着目設計要素の式が属している変数集合の異常値の値候補ごとに、その他の各変数集合から1つの正常値の値候補を選択して、テストデータを生成する。例えば、着目テスト項目がテスト項目5であれば、その着目設計要素がドメイン1であり、ドメイン1の式(5)は変数集合1の条件であるため、図10における、変数集合1の3通りの異常値の値候補ごとに、変数集合2及び変数集合3のそれぞれから1つの正常値の値候補が選択されて、値候補の組み合わせがテストデータとして生成される。したがって、この場合、3通りの組み合わせが生成される。
テストケースの生成の結果、全ての入力変数に対して具体値が割り当てられる。組み合わせ生成部17は、生成された組み合わせごとにテストケースを生成する。
ステップS130〜ステップS180が全てのテスト項目について実行され、更に、ステップS120〜ステップS180が全てのテスト対象(ビジネスロジック)について実行されると、組み合わせ生成部17は、ステップS180において生成されたテストケースに基づいてテストモデルを生成し、生成されたテストモデルの内容をテストケース表として、ユーザ端末20に送信する(S190)。
図11は、テストモデルの一例を示す図である。図11に示されるように、テストモデルは、テスト対象ごとに、テスト項目を含む。また、テスト項目ごとに、1以上のテストケースが含まれる。1つのテスト項目に対応するテストケースは、ステップS180において生成される。
1つのテストケースは、テストケースID、入力変数ごとの具体値、期待結果、及びテストケース特徴を含む。テストケースIDは、テストケースごとの識別情報である。入力変数ごとの具体値は、ステップS180において生成される値候補の組み合わせである。1つのテスト項目に対して複数のテストケースが生成されるのは、当該組み合わせが複数有るためである。期待結果は、テストによって期待される結果である。期待結果の内容は、設計モデルの入力制約又はドメイン定義に基づいて生成される。すなわち、入力制約に基づくテスト項目に関するテストケースの期待結果は、当該入力制約の「結果」に基づいて生成される。ドメイン定義に基づくテスト項目に関するテストケースの期待結果は、当該ドメイン定義の「結果」に基づいて生成される。テストケース特徴は、テストケースの特徴である。テストケース特徴の内容は、当該テストケースにおいて選択された値候補に関して値候補記憶部111に記憶されている特徴に基づいて生成される。
テストモデルの内容を示すテストケース表は、例えば、特許文献2に記載された手法を用いて生成されてもよい。
なお、上記において説明したテストモデルの構造を厳密に定義すると、例えば、図12に示されるようになる。
図12は、テストモデルのデータ構造の定義の一例を示す図である。図12では、テストモデルのデータ構造がBNFによって定義されている。
続いて、ステップS140の詳細について説明する。図13は、入力変数の分類処理の処理手順の一例を説明するためのフローチャートである。
ステップS200において、変数分類部15は、ステップS130において条件抽出部14によって抽出されたテストデータ生成条件を条件抽出部14から取得する。続くステップS210〜S260は、テストデータ生成条件ごとに実行される。以下、処理対象とされているテストデータ生成条件を、「着目条件」という。
ステップS210において、変数分類部15は、着目条件が扱う入力変数x1〜xn(nは、着目条件が扱う入力変数の個数)を特定する。続いて、変数分類部15は、x1〜xnの全てを含む変数集合Aが生成済みであるか否かを判定する(S220)。変数集合Aが生成済みでない場合(S220でNO)、変数分類部15は、変数集合Aを生成し、着目条件を、変数集合Aに振り分ける(S230)。続いて、変数分類部15は、変数集合Aの部分集合となる変数集合Bが生成済みであるか否かを判定する(S240)。変数集合Bが生成されている場合(S240でYES)、変数分類部15は、変数集合Bに振り分けられているテストデータ生成条件を、変数集合Aに振り分け、変数集合Bを削除する(S250)。
一方、x1〜xnの全てを含む変数集合Aが生成済みである場合(S220でYES)、変数分類部15は、着目条件を変数集合Aに振り分ける(S260)。
全てのテストデータ生成条件に関してステップS210〜S260が実行されると、変数分類部15は、設計モデルに含まれる入力変数の中で、既に生成されたいずれの変数集合にも含まれていない入力変数の有無を判定する(S270)。該当する入力変数が1以上有る場合(S270でYES)、変数分類部15は、該当する入力変数ごとに、変数集合を生成する(S280)。例えば、本実施の形態において、プラン名は、いずれのテストデータ生成条件にも含まれない。したがって、プラン名が属する変数集合は、ステップS230では生成されず、ステップS280において生成される。
図8に示したテストデータ生成条件を、図13の処理手順に当てはめて説明する。まず、式(1)が着目条件とされる。式(1)が扱う入力変数は、夫年齢であることが特定される(S210)。夫年齢を含む変数集合は生成されていないため(S220でNO)、夫年齢を含む変数集合が生成され、当該変数集合に式(1)が振り分けられる(S230)。当該変数集合の部分集合となる変数集合は生成されていない。したがって、式(2)が着目条件とされる。式(2)〜式(4)についても、同様の手順で、それぞれの変数集合が生成される。
式(5)が着目条件とされた場合、式(5)が扱う入力変数は、夫年齢及び妻年齢であることが特定される(S210)。夫年齢及び妻年齢の双方を含む変数集合は生成されていないため(S220でNO)、夫年齢及び妻年齢の双方を含む変数集合(以下、「変数集合(5)」という。)が生成され、変数集合5に式(5)が振り分けられる(S230)。変数集合(5)の部分集合となる変数集合としては、式(1)に関して生成された変数集合(以下、「変数集合(1)」という。)と式(2)に関して生成された変数集合(以下、「変数集合(2)」という。)とが有る(S240でYES)。そこで、式(1)と式(2)とが、変数集合(5)に統合され、変数集合(1)及び変数集合(2)は削除される(S250)。その結果、図9に示したような変数集合が生成される。
続いて、図4のステップS170の詳細について説明する。図14は、ドメインテスト技法を用いた値候補の生成処理の処理手順の一例を説明するためのフローチャートである。
ステップS300において、値候補生成部16は、1以上のテストデータ生成条件を読み込む。ここで読み込まれるテストデータ生成条件(以下、「着目条件」という。)は、図4のステップS170の時点の着目変数集合に振り分けられたテストデータ生成条件である。続いて、値候補生成部16は、着目条件が属する着目変数集合に含まれている入力変数のデータ型に基づいて処理を分岐させる(S310)。
着目変数集合に含まれている各入力変数の全てが整数型である場合、値候補生成部16は、着目条件に関するinポイント、outポイント、onポイント、及びoffポイントを当該各入力変数の値候補として求める(S320)。
なお、本実施の形態において、テスト項目5が着目テスト項目であり、図9の変数集合1(夫年齢、妻年齢)が着目変数集合である場合に、ステップS320が実行される。
一方、着目変数集合に含まれている各入力変数の全てが文字列型である場合、値候補生成部16は、着目条件の中で当該入力変数の文字列長に関するテストデータ生成条件を抽出する(S330)。続いて、値候補生成部16は、抽出されたテストデータ生成条件に基づいて、inポイント、outポイント、onポイント、及びoffポイントを求める(S340)。続いて、値候補生成部16は、inポイント、outポイント、onポイント、及びoffポイントごとに、文字列長以外の着目条件も満たすような文字列を値候補として生成する(S350)。なお、例えば、「string1の長さ>=string2の長さ」といったような入力制約を有する入力変数(ここでは、string1及びstring2)が有る場合に、ステップS350が実行される。なお、着目条件の中に、文字列長に関するテストデータ生成条件が無い場合、ステップS340は実行されなくてよい。
また、着目変数集合に含まれている各入力変数の全てが実数型、列挙型、日付型、又は時刻型等、整数型及び文字列型のいずれでもない場合、値候補生成部16は、着目条件の境界値を、整数型に変換する(S360)。例えば、実数型であれば当該境界値に10n(nは、当該境界値の小数点以下の桁数)を乗ずることにより整数型に変換することができる。また、列挙型であれば、列挙される値を列挙の順序関係を保持したまま、整数に置換してもよい。例えば、列挙される値が{社長、部長、課長、係長、社員}であれば、これらは、{5、4、3、2、1}に置換されてもよい。その上で、着目条件の境界値が、置換後の整数に置き換えられればよい。また、日付型や時刻型については、UNIX(登録商標)時刻等のシステム時刻に変換してもよい。例えば、日本標準時の「2001−09−09 10:46:40」という値は、「1000000000」というUNIX(登録商標)時刻に変換されてもよい。
続いて、値候補生成部16は、境界値が整数型に変換された着目条件に基づいて、inポイント、outポイント、onポイント、及びoffポイントを求める(S370)。続いて、値候補生成部16は、求められたinポイント、outポイント、onポイント、及びoffポイントを、ステップS360とは逆の変換を行うことにより、元のデータ型に復元する。復元後の値が、値候補である。
ステップS320、S350、又はS380に続いて、値候補生成部16は、生成された値候補を、値候補記憶部111に記憶する(S390)。
なお、着目変数集合に属する各入力変数のデータ型が相互に異なる場合は、ステップS310の前において、ステップS360において説明したように、全ての着目条件の境界値が整数型に変換されてもよい。この場合、ステップS320の実行後に、各値候補に関して、ステップS380と同様の逆変換が行われればよい。
続いて、ステップS320、ステップS340、及びステップS370の詳細について説明する。
図15は、値候補の生成処理の処理手順の一例を説明するためのフローチャートである。
ステップS510において、値候補生成部16は、着目条件のinポイントを求めて値候補とし、当該値候補に、特徴として「正常値(同値分割)」を付与する。続いて、値候補生成部16は、着目条件のoutポイントを求めて値候補とし、当該値候補に、特徴として「異常値(同値分割)」を付与する(S520)。続いて、値候補生成部16は、着目条件のonポイントを求めて値候補とし、当該値候補に、特徴として「正常値(境界値分析)」又は「異常値(境界値分析)」を付与する(S530)。続いて、値候補生成部16は、着目条件のoffポイントを求めて値候補とし、当該値候補に、特徴として「異常値(境界値分析)」又は「正常値(境界値分析)」を付与する(S540)。
ステップS530及びステップS540に関して、付与される特徴が「正常値」又は「異常値」のいずれか一方に固定されないのは、onポイント及びoffポイントについては、着目条件によって、正常値又は異常値のいずれかに変化するからである。したがって、onポイント又はoffポイントが、全ての着目条件を満たす場合、当該onポイント又は当該offポイントは正常値とされ、onポイント又はoffポイントが、いずれかの着目条件を満たさない場合、当該onポイント又は当該offポイントは異常値とされればよい。
なお、ステップS530及びステップS540では、公知の方法を用いてonポイント又はoffポイントが求められてもよい。例えば、特許文献3に記載された方法が用いられてもよい。特許文献3に記載された方法によれば、onポイントが正常値であるか若しくは異常値であるか、offポイントが正常値であるか若しくは異常値であるかについても得ることができる。
続いて、ステップS510の詳細について説明する。図16は、inポイントの値候補の生成処理の処理手順の一例を説明するためのフローチャートである。
ステップS600において、値候補生成部16は、1以上のテストデータ生成条件を読み込む(S600)。ここで読み込まれるテストデータ生成条件は、図15のステップS510の時点における着目条件である。
続いて、値候補生成部16は、inポイントを求めるための制約式を生成する(S610)。具体的には、着目条件を構成する式E1〜Em(mは、着目条件の個数)が取得され、「E1 and E2 and … and Em」というような、正常値(ドメイン内に収まる値)を得るための制約式が生成される。例えば、着目変数集合が、図9の変数集合1である場合、「夫年齢>=18 and 妻年齢>=16 and |夫年齢−妻年齢|<=20」という制約式が生成される。
続いて、値候補生成部16は、公知の制約ソルバを用いて制約式の解を得て、任意の1つの解を、inポイントの値候補として生成する(S620)。なお、着目変数集合に複数の入力変数が属する場合、複数の入力変数に関してinポイントの値候補が生成される。
続いて、ステップS520の詳細について説明する。図17は、outポイントの値候補の生成処理の処理手順の一例を説明するためのフローチャートである。
ステップS700において、値候補生成部16は、1以上のテストデータ生成条件を読み込む(S700)。ここで読み込まれるテストデータ生成条件は、図15のステップS520の時点における着目条件である。
続いて、値候補生成部16は、outポイントを求めるための制約式を生成する(S710)。具体的には、着目条件を構成する式E1〜Em(mは、着目条件の個数)が取得され、「Not(E1 and E2 and … and Em)」というような、異常値(ドメイン外となる値)を得るための制約式が生成される。例えば、着目変数集合が、図9の変数集合1である場合、「Not(夫年齢>=18 and 妻年齢>=16 and |夫年齢−妻年齢|<=20)」という制約式が生成される。
続いて、値候補生成部16は、公知の制約ソルバを用いて制約式の解を得て、任意の1つの解を、outポイントの値候補として生成する(S720)。なお、着目変数集合に複数の入力変数が属する場合、複数の入力変数に関してoutポイントの値候補が生成される。
続いて、図4のステップS180の詳細について説明する。図18は、テストケースの生成処理の処理手順の一例を説明するためのフローチャートである。
ステップS400において、組み合わせ生成部17は、1以上のテストデータ生成条件を読み込む。ここで読み込まれるテストデータ生成条件は、図4のステップS180の時点の着目テスト項目に関する全てのテストデータ生成条件である。例えば、テスト項目5が着目テスト項目である場合、図8に示される式(1)〜式(5)が読み込まれる。
続いて、組み合わせ生成部17は、着目テスト項目に関する各変数集合に関して生成された全ての値候補を値候補記憶部111から取得する(S410)。続いて、組み合わせ生成部17は、ステップS400において読み込まれたテストデータ生成条件のうち、着目テスト項目において着目されているテストデータ生成条件を取得する(S420)。着目テスト項目において着目されているテストデータ生成条件とは、着目テスト項目の生成の元となったテストデータ生成条件をいう。例えば、テスト項目5において着目されているテストデータ生成条件は、式(5)である。以下、ステップS420において取得されたテストデータ生成条件を、「着目条件」という。
続いて、組み合わせ生成部17は、着目条件が扱う1以上の入力変数(以下、当該1以上の入力変数をまとめて「変数x」という。)が属する変数集合の値候補を、ステップS410において取得された値候補の中から取得する(S430)。例えば、着目条件が式(5)であれば、変数集合1の値候補(図10参照)が取得される。続いて、組み合わせ生成部17は、ステップS430において取得された値候補の中から、異常値である全ての値候補を選択する(S440)。異常値であるか否かは、値候補の特徴に「異常値」が含まれているか否かに基づいて特定可能である。
続いて、組み合わせ生成部17は、変数x以外の残りの入力変数(以下、「変数y1〜ym」という。mは、変数x以外の入力変数の個数である。)のそれぞれが属する変数集合の値候補を、ステップS410において取得された値候補の中から取得する(S450)。続いて、組み合わせ生成部17は、ステップS450において取得された値候補の中から、変数y1〜ymのそれぞれごとに、全ての正常値の値候補を選択する(S460)。但し、境界値である正常値は極力除かれる。変数xに関するテストデータを生成する際に、変数y1〜ymに関して境界値が選択された場合、バグ発生時にどの入力変数に起因したバグかの原因の切り分けが困難になってしまうからである。なお、境界値であることは、値候補の特徴に「境界値分析」が含まれていることに基づいて特定可能である。また、組み合わせ生成部17は、設計モデル(図6)において、入力が必須とされていない入力変数の値候補は、空欄とする。
続いて、組み合わせ生成部17は、変数xに関してステップS440において選択された1以上の異常値の値候補ごとに、当該値候補と、変数y1〜ymのそれぞれに関して、ステップS460において選択された全ての正常値の値候補の中のいずれか一つとの組み合わせをテストケースとして生成する(S470)。この際、変数xが複数の場合、変数xごとに値候補の組み合わせが生成されるが、変数y1〜ymについては、変数y1〜ymのそれぞれに関して選択された正常値のうち、変数y1〜ymごとにできるだけ多くの正常値が利用されるように、値候補が選択される。すなわち、変数y1〜ymのそれぞれについては、生成される各組み合わせに関して選択される値候補の重複数が最小になるように、各組み合わせに対する値候補が選択される。
例えば、着目テスト項目がテスト項目5であり、着目条件が式(5)である場合、変数xは、夫年齢及び妻年齢である。また、変数y1〜ymは、プラン名及び備考である。したがって、夫年齢及び妻年齢に関しては、図10に示される7通りの値候補のうち、3通りの異常値の値候補が選択される。プラン名に関しては、図10に示される3通りの値候補のうちの全部の正常値である2つの正常値の値候補(「とくとく」、「よくばり」)のそれぞれが、夫年齢及び妻年齢に関する3通りの異常値のうちの最初の2番目までの異常値に対して選択され、夫年齢及び妻年齢に関する3番目の異常値に対しては、2つの正常値のうちのいずれか一方が選択される。すなわち、プラン名の正常値の数は、夫年齢及び妻年齢の異常値の数よりも少ないため、夫年齢及び妻年齢の各異常値に対して選択されるプラン名の正常値には、重複が発生するが、その重複数が最小になるように(この場合では、1になるように)、プラン名の正常値が選択される。
一方、備考に関しては、4通りの正常値が有るが、境界値を除く正常値(同値分割代表値)は、2通りである。したがって、当該2通りの正常値の値候補(「アイウエオ」、「田山海村空」)のそれぞれが、夫年齢及び妻年齢に関する3通りの異常値のうちの最初の2番目までの異常値に対して選択され、夫年齢及び妻年齢に関する3番目の異常値に対しては、当該2通りの正常値のうちのいずれか一方が選択される。
したがって、これらの入力変数の値候補の全ての組み合わせは、3通りとなる。斯かる3通りの組み合わせが、図11において、テスト項目5に対するテストケース5−1〜5−3として示されている。図11に示されるテストケース5−1〜5−3において、プラン名及び備考に関しては、境界値を除く全ての正常値が使用されている。
また、例えば、仮に、備考に関して、夫年齢及び妻年齢に関する3通りの異常値より多い4通りの正常値が有る場合、必ず網羅しなければならないのは夫年齢及び妻年齢の3通りの異常値であるため、備考に関しては3通りの正常値だけが使われ(重複数が0)、4つ目は使われない。
なお、図18の処理は、テスト項目ごとに実行される。各テスト項目は、入力制約又はドメイン定義の式ごとに生成される。したがって、図18の処理は、入力制約又はドメイン定義の各式について、当該式(着目条件)が扱う(当該式に関連する)入力変数(変数x)が属する第一の変数集合に関連付けられたいずれかの式を満たさない(すなわち、異常値の)値候補ごとに、前記第一の変数集合以外の第二の変数集合のそれぞれから、当該第二の変数集合に関連付けられた全ての条件式を満たす(すなわち、正常値の)値候補を1つずつ選択して、値候補の組み合わせを生成する処理に相当する。更に、前記第二のグループごとに、当該第二のグループに関連付けられた全ての条件式を満たす全ての前記候補の中で、前記各組み合わせに関して選択される前記候補の重複数が最小になるように、正常値が選択される。
上述したように、本実施の形態によれば、設計モデルからテストデータ生成条件が抽出され、テストデータ生成条件に基づいて、入力変数間の相互依存関係の有無が判定され、当該判定結果に基づいて、入力変数が変数集合に分類される。変数集合ごとに候補値が生成される際、一つの入力変数のみが属する変数集合と、相互に依存関係を有する複数の変数が属する変数集合とでは、相互に異なる方法によって値候補が生成される。
また、本実施の形態によれば、テスト項目ごとにテストデータを生成する際に、当該テスト項目の生成元となったテストデータ生成条件(図18における着目条件)が扱う入力変数(図18における変数x)に関しては、値候補の中から異常値の値候補が網羅的に選択され、当該入力変数以外の入力変数(図18における変数y1〜ym)に関しては、なるべく多くの正常値の値候補が選択されて、当該異常値の値候補ごとに、値候補の組み合わせが生成される。
その結果、相互に依存関係の有る入力変数、依存関係を有さない入力変数を含んだ複数の入力変数に関して、各入力変数のそれぞれが仕様に違反し、かつ、仕様に合致する値を多く取り入れた異常系のテストデータを生成することができる。
したがって、例えば、プログラムに対し異常なテストデータを入力した際に、入力チェックが正しく動作することを確認するテストにおいて、適切で、かつ、少ないテスト件数で仕様を網羅できるような異常系のテストデータを得ることができる。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。