(57)【特許請求の範囲】
【請求項１】
複数のパラメータと、そのパラメータに入れられる１つ以上の変数値をもち、該パラメータに入れられる変数値の組み合わせに応じて、システムのテスト・ケースを、コンピュータの処理により生成する方法であって、
テスト済のテスト・ケースを含むテスト・ケースの集合を、前記コンピュータが読み出し可能に、記憶手段に保持するステップと、
下記のステップ(a)乃至(c)を含むループを、前記パラメータと前記変数値の組み合わせが全てのパラメータに対して揃うまで実行するステップと、
(a) 前記パラメータと前記変数値の組み合わせを、変数値が格納されたパラメータを次第に増やすように生成するステップ
(b) 前記発生された範囲の前記パラメータと前記変数値の組み合わせに部分的に一致するパラメータと変数値の組み合わせをもつテスト・ケースを前記テスト済のテスト・ケースを含むテスト・ケースの集合において見出して集合変数に格納するステップ
(c) 前記集合変数が空集合になったことに応答して、ループの一回前の前記の集合変数に含まれるテスト・ケースを候補集合に追加するステップ、
前記パラメータと前記変数値の組み合わせが全てのパラメータに対して揃ったことに応答して、該揃った前記パラメータと前記変数値の組み合わせにより生成したテスト・ケースを前記候補集合に追加するステップと、
前記パラメータと前記変数値の異なる複数の組み合わせに対して前記候補集合に前記テスト・ケースが蓄積された段階で、まだ出現していないケースを含む数に関連するスコアの高さに従い、前記候補集合から前記テスト・ケースを選んで出力するステップであって、前記テスト済のテスト・ケースを含むテスト・ケースの集合に属する前記テスト・ケースの前記スコアは割り増しして計算される、ステップとを有する、
テスト・ケース生成方法。
【請求項２】
前記パラメータと前記変数値の異なる複数の組み合わせは、ペアワイズ法で生成される
、請求項１に記載の方法。
【請求項３】
前記テスト・ケースの前記スコアは、前記テスト・ケースに基づき生成されるペアのうち、まだ今まで出現していないペアの数によって決定される、請求項２に記載の方法。
【請求項４】
前記スコアの割り増しは、前記スコアに、1より大きい数を掛けることよって行われる、請求項１に記載の方法。
【請求項５】
複数のパラメータと、そのパラメータに入れられる１つ以上の変数値をもち、該パラメータに入れられる変数値の組み合わせに応じて、システムのテスト・ケースを、コンピュータの処理により生成するプログラムであって、
前記コンピュータに、
テスト済のテスト・ケースを含むテスト・ケースの集合を、前記コンピュータが読み出し可能に、記憶手段に保持するステップと、
下記のステップ(a)乃至(c)を含むループを、前記パラメータと前記変数値の組み合わせが全てのパラメータに対して揃うまで実行するステップと、
(a) 前記パラメータと前記変数値の組み合わせを、変数値が格納されたパラメータを次第に増やすように生成するステップ
(b) 前記発生された範囲の前記パラメータと前記変数値の組み合わせに部分的に一致するパラメータと変数値の組み合わせをもつテスト・ケースを前記テスト済のテスト・ケースを含むテスト・ケースの集合において見出して集合変数に格納するステップ
(c) 前記集合変数が空集合になったことに応答して、ループの一回前の前記の集合変数に含まれるテスト・ケースを候補集合に追加するステップ、
前記パラメータと前記変数値の組み合わせが全てのパラメータに対して揃ったことに応答して、該揃った前記パラメータと前記変数値の組み合わせにより生成したテスト・ケースを前記候補集合に追加するステップと、
前記パラメータと前記変数値の異なる複数の組み合わせに対して前記候補集合に前記テスト・ケースが蓄積された段階で、まだ出現していないケースを含む数に関連するスコアの高さに従い、前記候補集合から前記テスト・ケースを選んで出力するステップであって、前記テスト済のテスト・ケースを含むテスト・ケースの集合に属する前記テスト・ケースの前記スコアは割り増しして計算される、ステップを実行させる、
テスト・ケース生成プログラム。
【請求項６】
前記パラメータと前記変数値の異なる複数の組み合わせは、ペアワイズ法で生成される、請求項５に記載のプログラム。
【請求項７】
前記テスト・ケースの前記スコアは、前記テスト・ケースに基づき生成されるペアのうち、まだ今まで出現していないペアの数によって決定される、請求項６に記載のプログラム。
【請求項８】
前記スコアの割り増しは、前記スコアに、1より大きい数を掛けることよって行われる、請求項５に記載のプログラム。
【請求項９】
複数のパラメータと、そのパラメータに入れられる１つ以上の変数値をもち、該パラメータに入れられる変数値の組み合わせに応じて、システムのテスト・ケースを、コンピュータの処理により生成するシステムであって、
テスト済のテスト・ケースを含むテスト・ケースの集合を、前記コンピュータが読み出し可能に、記憶手段に保持する手段と、
下記のステップ(a)乃至(c)を含むループを、前記パラメータと前記変数値の組み合わせが全てのパラメータに対して揃うまで実行する手段と、
(a) 前記パラメータと前記変数値の組み合わせを、変数値が格納されたパラメータを次第に増やすように生成するステップ
(b) 前記発生された範囲の前記パラメータと前記変数値の組み合わせに部分的に一致するパラメータと変数値の組み合わせをもつテスト・ケースを前記テスト済のテスト・ケースを含むテスト・ケースの集合において見出して集合変数に格納するステップ
(c) 前記集合変数が空集合になったことに応答して、ループの一回前の前記の集合変数に含まれるテスト・ケースを候補集合に追加するステップ、
前記パラメータと前記変数値の組み合わせが全てのパラメータに対して揃ったことに応答して、該揃った前記パラメータと前記変数値の組み合わせにより生成したテスト・ケースを前記候補集合に追加する手段と、
前記パラメータと前記変数値の異なる複数の組み合わせに対して前記候補集合に前記テスト・ケースが蓄積された段階で、まだ出現していないケースを含む数に関連するスコアの高さに従い、前記候補集合から前記テスト・ケースを選んで出力するステップであって、前記テスト済のテスト・ケースを含むテスト・ケースの集合に属する前記テスト・ケースの前記スコアは割り増しして計算される、手段を有する、
テスト・ケース生成システム。
【請求項１０】
前記パラメータと前記変数値の異なる複数の組み合わせは、ペアワイズ法で生成される
、請求項９に記載のシステム。
【請求項１１】
前記テスト・ケースの前記スコアは、前記テスト・ケースに基づき生成されるペアのうち、まだ今まで出現していないペアの数によって決定される、請求項１０に記載のシステム。
【請求項１２】
前記スコアの割り増しは、前記スコアに、1より大きい数を掛けることよって行われる、請求項９に記載のシステム。
【請求項１３】
複数のパラメータと、そのパラメータに入れられる１つ以上の変数値をもち、該パラメータに入れられる変数値の組み合わせに応じて、システムのテスト・ケースを、コンピュータの処理により生成する方法であって、
テスト済のテスト・ケースを含むテスト・ケースの集合を、前記コンピュータが読み出し可能に、記憶手段に保持するステップと、
前記パラメータと前記変数値の組み合わせを生成するステップと、
前記パラメータと前記変数値の組み合わせをもつテスト・ケースを前記テスト済のテスト・ケースを含むテスト・ケースの集合において見出して集合変数に格納するステップと、
前記パラメータと前記変数値の組み合わせにより生成したテスト・ケースを前記候補集合に追加するステップと、
前記パラメータと前記変数値の異なる複数の組み合わせに対して前記候補集合に前記テスト・ケースが蓄積された段階で、まだ出現していないケースを含む数に関連するスコアの高さに従い、前記候補集合から前記テスト・ケースを選んで出力するステップであって、前記テスト済のテスト・ケースを含むテスト・ケースの集合に属する前記テスト・ケースの前記スコアは割り増しして計算される、ステップとを有する、
テスト・ケース生成方法。
【請求項１４】
前記パラメータと前記変数値の異なる複数の組み合わせは、ペアワイズ法で生成される、請求項１３に記載の方法。
【請求項１５】
前記テスト・ケースの前記スコアは、前記テスト・ケースに基づき生成されるペアのうち、まだ今まで出現していないペアの数によって決定される、請求項１４に記載の方法。
【請求項１６】
前記スコアの割り増しは、前記スコアに、1より大きい数を掛けることよって行われる、請求項１３記載の方法。
【請求項１７】
複数のパラメータと、そのパラメータに入れられる１つ以上の変数値をもち、該パラメータに入れられる変数値の組み合わせに応じて、システムのテスト・ケースを、コンピュータの処理により生成するプログラムであって、
前記コンピュータに、
テスト済のテスト・ケースを含むテスト・ケースの集合を、前記コンピュータが読み出し可能に、記憶手段に保持するステップと、
前記パラメータと前記変数値の組み合わせを生成するステップと、
前記パラメータと前記変数値の組み合わせをもつテスト・ケースを前記テスト済のテスト・ケースを含むテスト・ケースの集合において見出して集合変数に格納するステップと、
前記パラメータと前記変数値の組み合わせにより生成したテスト・ケースを前記候補集合に追加するステップと、
前記パラメータと前記変数値の異なる複数の組み合わせに対して前記候補集合に前記テスト・ケースが蓄積された段階で、まだ出現していないケースを含む数に関連するスコアの高さに従い、前記候補集合から前記テスト・ケースを選んで出力するステップであって、前記テスト済のテスト・ケースを含むテスト・ケースの集合に属する前記テスト・ケースの前記スコアは割り増しして計算される、ステップを実行させる、
テスト・ケース生成プログラム。
【請求項１８】
前記パラメータと前記変数値の異なる複数の組み合わせは、ペアワイズ法で生成される、請求項１７に記載のプログラム。
【請求項１９】
前記テスト・ケースの前記スコアは、前記テスト・ケースに基づき生成されるペアのうち、まだ今まで出現していないペアの数によって決定される、請求項１８に記載のプログラム。
【請求項２０】
前記スコアの割り増しは、前記スコアに、1より大きい数を掛けることよって行われる、請求項１７記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コンピュータ・システムなどのテストを行うためのテスト・ケースの生成方法、プログラム及びシステムに関するものである。
【背景技術】
【０００２】
コンピュータ・システムや制御装置は、設定可能なさまざまなパラメータをもち、それらのパラメータの組み合わせによって、挙動が変化する。例えば、コンピュータ・システムにおけるパラメータとして、導入するオペレーティング・システムの種類、使用するウェブ・ブラウザの種類、ネットワーク・カードの種類、主記憶容量、ハードディスク容量、ＣＰＵの種類やコアの数などがある。
【０００３】
そのようなシステムや装置のテストでは、パラメータの組み合わせを網羅するように設計することが望ましい。しかし、全てのパラメータの組み合わせをテストしようとすると、テスト・ケースの数が、パラメータの数に対して、指数的に増加するので、処理時間的に許容できなくなってしまう。そこで、なるべく少ない数で効率的なテストを行うためのテスト・ケースの集合を生成する手法が従来より提案されている。
【０００４】
１つの例として、ペアワイズ(pair-wise)、すなわち対でのテストが知られている。ペアワイズ・テストでは、任意の２つのパラメータに対して、取りえる全ての値のペアを網羅するように、テスト・ケースの集合が作成される。これは、多くのバグは、少数のパラメータの組み合わせによって発現するという知見に基づいている。
【０００５】
例えば、テスト項目としてn個のパラメータがあった場合、ペアワイズ・テストでは、そのn個から２個を選ぶのは、nC2という場合の数となる。そして、選んだ２個のパラメータk1、k2の各々にそれぞれm1、m2とおりの場合があるとすると、ペアの数は、
nC2×m1×m2となる。
【０００６】
ところで、この分野の従来技術の特許文献として、以下のものが知られている。
【０００７】
特開２００３−２５６２０６号公報は、ソフトウェアシステムのプログラムモジュールごとの品質情報を設定する工程と、前記品質情報から前記プログラムモジュールの不具合検出工数を予測する工程と、前記モジュールと前記ソフトウェアシステムの仕様書から抽出される仕様項目との対応関係を表すモジュール・仕様項目対応関係情報を作成する工程２２と、前記不具合検出工数と前記モジュール・仕様項目対応関係情報とから仕様項目不具合検出工数を予測する工程と、前記仕様項目不具合検出工数に基づいて、前記ソフトウェアシステムのテストに利用可能なテストリソースを配分するテスト計画を作成する工程とを備えた、テスト計画の作成を支援する方法を開示する。
【０００８】
特表２００７−５３５７２３号公報は、相互に関連するシステムコンポーネント間のリンケージを判断するための「自動多次元追跡可能性行列」システム、相互に関連するシステムコンポーネントの１つ又はそれよりも多くにおける変更を識別するための手段、「自動多次元追跡可能性行列」を適用するための手段、変更によって影響を受ける場合がある相互に関連するシステムコンポーネントに関連した試験シナリオの全て又はその部分集合を実行するための手段、及び実行された試験シナリオの結果を評価するための手段を含む試験ツールを開示する。
【０００９】
特願２００３−４０６４７８号公報は、ペアワイズ・パーティシパントを有するバスを監視する方法において、バス上の第１および第２のパーティシパントの間のトランザクション中に問題を検出すること、および、どのパーティシパントがこの問題について故障しているか、または、この問題がシステミックなバス問題を含むかどうかを決定することを開示する。
【００１０】
特表２０１０−５３２８９４号公報は、タイムスロットサンプルにコンテンツの複数小片が割り当てられて、その割り当てられたコンテンツの効果が測定され、システム及び方法により、コンテンツの各小片をコンテンツの他の複数小片と比較して実験コンテンツ小片又は対照コンテンツ小片として識別するペアワイズによるコンテンツ相関性データが受け取られ、コンテンツ相関性データを使用して、タイムスロットサンプルに実験又は対照コンテンツの複数小片がアルゴリズム的に割り当てられ、特定のタイムスロットサンプルに割り当てられた付加的なコンテンツの複数小片は、その特定のタイムスロットサンプルに既に割り当てられていた実験コンテンツの複数小片に対して規定される、同一でない関連する実験コンテンツの複数小片を除外することを開示する。
【００１１】
Cohen et al., The ATEG System: An Approach to Testing Based on Combinational Design. '97は、ペアワイズ・テストを、Greedyに生成する方法を開示する。
【００１２】
以上のように、従来技術では、ペアワイズ法を含む、さまざまなテスト方法が知られており、実用レベルにある。
【００１３】
ところで本願発明者らは、上記のようなテストを開始する前に、テスト・ケースの集合を既に持っているという状況に遭遇した。既存のテスト・ケースの集合は、今まで手作業などで妥当性を検証したテスト・ケースを含むものであった。そこで、本願発明者らは、既存のテスト・ケースの集合を利用しつつ、この結果も含めて妥当なサイズのテスト・ケースの集合を得ることができれば有利であると考えた。
【００１４】
しかし、上記従来のテスト方法は、テスト・ケースの集合を得る際に、既存のテスト・ケースの集合を活用して、テスト・ケースを生成する技法を示唆するものではなかった。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２００３−２５６２０６号公報
【特許文献２】特表２００７−５３５７２３号公報
【特許文献３】特願２００３−４０６４７８号公報
【特許文献４】特表２０１０−５３２８９４号公報
【非特許文献】
【００１６】
【非特許文献１】Cohen et al., The ATEG System: An Approach to Testing Based on Combinational Design. '97
【発明の概要】
【発明が解決しようとする課題】
【００１７】
従って、本発明の目的は、入力として与えられた既存のテスト・ケースの集合と一致するものを多く含み、且つ、例えばペアワイズのような目的の性質をみたす、なるべく小さいサイズの集合を、高速に生成する技法を提供することにある。
【課題を解決するための手段】
【００１８】
出力テスト・ケースの集合が目的の性質を満たすようになるまで、順次テストケースを生成して出力テスト・ケースの集合に追加していく手法は既に知られている。そこで本発明に従うシステムは、従来手法によって生成されるテストケースに加えて、既存の入力テスト・ケースの集合に含まれるテストケースを候補として利用することにより、既存の入力テスト・ケースの集合と一致するものをなるべく多く含み、かつサイズの小さな出力テスト・ケースの集合を生成する。
【００１９】
本発明は、入力テスト・ケースの集合から利用する候補は、以下のようにして決定する。
１．いくつかのパラメータに対して、テストケース候補が持っているべき値を決定する。
２．入力テスト・ケースの集合に含まれるテストケースのうち、上記で決定した値を持っているものを候補とする。
【００２０】
従来手法によって生成されたひとつ又は複数のテストケース候補と、入力テスト・ケースの集合から選択されたひとつまたは複数のテスト・ケース候補のうち、最もスコアが高いものを出力テスト・ケースの集合に追加する。この処理を、出力テスト・ケースの集合が目的の性質を満たすまで繰り返す。ここで、テスト・ケースのスコアとは例えば、ペアワイズ法を想定すると、テスト・ケースに含まれるパラメータと変数の組み合わせからなるペアのうち、まだ出現していないペアの数である。これを従来手法におけるスコアと呼ぶことにする。
【００２１】
本発明に従うシステムによれば、スコアは、以下のように計算される。
− 従来手法によって生成されたテストケース候補に対しては、従来手法におけるスコアを利用する。
− 入力テスト・ケースの集合から選択されたテストケース候補に対しては、従来手法におけるスコアに1より大きいの定数をかけたものを利用する。
【００２２】
このとき、定数を大きくすればするほど、既存の入力テスト・ケースの集合と一致するテストケースをより多く含むようになるが、出力テスト・ケースの集合のサイズがより大きくなる可能性があるので、定数の値は妥当に選ぶ必要がある。
【発明の効果】
【００２３】
この発明によれば、既存の入力テスト・ケースの集合のデータを含めることによって、既存の入力テスト・ケースの集合となるべく整合性を保ちつつ、可能な限り小さいサイズのテスト・ケースの集合を高速に生成することが可能となる。
【図面の簡単な説明】
【００２４】
【図１】本発明を実施するための一例のハードウェア構成のブロック図である。
【図２】従来の典型的なテスト・ケース生成処理のフローチャートを示す図である。
【図３】従来の技法において、候補を生成して追加する処理のフローチャートを示す図である。
【図４】従来の技法において、候補のうちスコアが最大のものを選ぶ処理のフローチャートを示す図である。
【図５】本発明を実施するための機能構成のブロック図である。
【図６】本発明の処理全体のフローチャートを示す図である。
【図７】本発明において、候補を生成して追加する処理のフローチャートを示す図である。
【図８】本発明において、テスト・ケースのスコアを取得する処理のフローチャートを示す図である。
【発明を実施するための形態】
【００２５】
以下、図面に基づき、この発明の実施例を説明する。特に断わらない限り、同一の参照番号は、図面を通して、同一の対象を指すものとする。尚、以下で説明するのは、本発明の一実施形態であり、この発明を、この実施例で説明する内容に限定する意図はないことを理解されたい。
【００２６】
図１を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータ・ハードウェアのブロック図が示されている。図１において、システム・パス１０２には、ＣＰＵ１０４と、主記憶（ＲＡＭ）１０６と、ハードディスク・ドライブ（ＨＤＤ）１０８と、キーボード１１０と、マウス１１２と、ディスプレイ１１４が接続されている。ＣＰＵ１０４は、好適には、３２ビットまたは６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のPentium（商標）  ４、Core(商標)2 Duo、Xeon(商標)、AMD社のAthlon（商標）などを使用することができる。主記憶１０６は、好適には、４ＧＢ以上の容量をもつものである。ハードディスク・ドライブ１０８は、大量のデータを格納できるように、例えば、５００ＧＢ以上の容量をもつものであることが望ましい。
【００２７】
ハードディスク・ドライブ１０８には、個々に図示しないが、オペレーティング・システムが、予め格納されている。オペレーティング・システムは、Linux(商標)、マイクロソフト社のWindows XP(商標)、Windows(商標)7、アップルコンピュータのMac OS（商標）などの、ＣＰＵ１０４に適合する任意のものでよい。
【００２８】
ハードディスク・ドライブ１０８はさらに、既存のテスト結果の集合、テストのため組み合わせるパラメータの集合、及び本発明の処理のための処理ルーチンなどが格納されている。これらのパラメータや処理ルーチンの詳細は、図５を参照して後で説明する。
【００２９】
キーボード１１０及びマウス１１２は、オペレーティング・システムまたは、ハードディスク・ドライブ１０８から主記憶１０６にロードされ、ディスプレイ１１４に表示されたプログラム（図示しない）を起動したり、文字を打ち込んだりするために使用される。
【００３０】
ディスプレイ１１４は、好適には液晶ディスプレイであり、例えば、ＸＧＡ（１０２４×７６８の解像度）、またはＵＸＧＡ（１６００×１２００の解像度）などの任意の解像度のものを使用することができる。ディスプレイ１１４は、図示しないが、本発明の処理を開始するための操作ウインドウや、テスト結果等を表示するために使用される。
【００３１】
そこで、本発明の処理について説明する前に、本発明の処理の理解を助けるために、従来より、ペアワイズのテスト・ケースを自動的に生成するための方法として知られているGreedyなアルゴリズムについて図２乃至図４のフローチャートを参照して説明する。その後、本発明の処理が、このGreedyなアルゴリズムの改良として説明される。
【００３２】
図２は、従来のGreedyなペアワイズ・テスト・アルゴリズムのメインの処理のフローチャートである。図２のステップ２０２では、outという集合変数に、空集合がセットされる。
【００３３】
ステップ２０４では、outが、テスト・パラメータのペアワイズのすべてのペアを網羅したかどうかが判断される。
【００３４】
そうでないなら、ステップ２０６に進んで、そこで、Candidatesという集合変数に、空集合がセットされる。
【００３５】
次のステップ２０８では、Candidatesの要素の数がNより小さいかどうかが判断され、そうでないなら、ステップ２１０で候補が１つ生成され、Candidatesに追加される。ステップ２１０の処理は、図３のフローチャートを参照して、後でより詳細に説明する。
【００３６】
ステップ２０８とステップ２１０のループの繰り返しで、Candidatesの要素の数がNに達すると、処理はステップ２０８からステップ２１２に進み、そこで、Candidatesのうちスコアが最も高いものが選ばれる。ここでスコアとは、テスト・ケースのスコアであり、例えば、そのテスト・ケースによってカバーされるペアのうち、新しくカバーされるペアの数、すなわち、今までのテスト・ケースでカバーされていないペアの数である。ステップ２１２の処理は、図４のフローチャートを参照して、後でより詳細に説明する。
【００３７】
ステップ２１４では、ステップ２１２で選ばれた候補がoutに追加される。そうして処理はステップ２０４に戻る。
【００３８】
ステップ２０４からステップ２１４を回るうちに、outには候補が蓄積される。ステップ２０４ですべてのペアが網羅されたと判断されると、処理は終了する。こうしてoutに蓄積された候補が利用される。
【００３９】
次に、図３のフローチャートを参照して、ステップ２１０の、候補を生成してCandidatesに追加する処理を説明する。
【００４０】
図３において、ステップ３０２では、paramsという集合変数に、空集合がセットされる。次のステップ３０４では、パラメータの数が、全パラメータ数よりも小さいかどうか判断される。もしそうなら、ステップ３０６に進み、ヒューリステックと乱数を利用して、パラメータとその値が１つ決定される。次のステップ３０８では、決定したパラメータとその値がparamsに追加され、ステップ３０４の判断に戻る。
【００４１】
ステップ３０４からステップ３０８までが回って、ステップ３０４での判断が否定的になると、パラメータがすべて埋まったことになるので、ステップ３１０に進んでそこで、設定したパラメータ、すなわちparamsの組み合わせでテスト・ケースが生成され、ステップ３１２で、生成したテスト・ケースがCandidatesに追加されて、処理は戻る。
【００４２】
次に、図４のフローチャートを参照して、ステップ２１２の、Candidatesに含まれるテスト・ケースのうちスコアが最も高いものを選ぶ処理について説明する。
【００４３】
ステップ４０２では、scoreという変数に、十分に大きい絶対値の負の値として-∞がセットされる。
【００４４】
次のステップ４０４からステップ４１２までは、Candidatesに含まれるテスト・ケースである要素cすべてに亘って順次行われる処理である。
【００４５】
ステップ４０６では、cのスコアがscoreより大きいかどうかの判断が行われる。ここでスコアとは、そのテスト・ケースに基づき生成されるペアによって新規にカバーされるペアの数である。
【００４６】
そうして、cのスコアがscoreより大きいなら、ステップ４０８で、cのスコアがscoreにセットされる。ステップ４１０では、cがretに格納される。
【００４７】
もし、cのスコアがscoreより大きくないなら、ステップ４０８とステップ４１０は、単にスキップされる。こうして、Candidatesの要素cすべてに亘って、ステップ４０４からステップ４１２までが完了すると、retを返して、図４のフローチャートの処理は終わる。
【００４８】
以上の説明を前提として、本発明の説明を行う。先ず、図５の機能構成のブロック図を参照して、本発明を実行するための処理ルーチン等について説明する。これらの処理ルーチンはC、C++、Java(R)などの既存のプログラム言語で予め作成されて、実行可能な形式でハードディスク・ドライブ１０８に保存され、オペレーティング・システムの動作で主記憶１０６にロードされて実行される。
【００４９】
図５において、メイン・ルーチン５０２は、本発明の全体の動作を統合するためのプログラムであり、図示しないが、ディスプレイ１１４に操作ウインドウを表示したり、ユーザの操作を受け付けて処理を開始したりする機能を有する。
【００５０】
入力ルーチン５０４は、ハードディスク・ドライブ１０８に保存されている、テストのパラメータ／候補値を含むファイル５０６や、既存の入力テスト・ケースの集合を含むファイル５０８から、メイン・ルーチン５０２からの指示に従い、適宜データを読み取る機能を有する。
【００５１】
ここで、テストのパラメータ／候補値とは、例えば、以下のようなものである。実際のケースは、もっと多くのパラメータを含むが、便宜上、簡単なケースで説明する。
OS = {Windows XP, 2003Server, AIX, Linux}
Browser = {FireFox, IE, Opera}
Level = {L1, L2, L3, L4}
Restriction = {true, false}
【００５２】
また、既存の入力テスト・ケースの集合の要素、すなわちテスト・ケースとは、例えば、次のように、各パラメータに、候補値としての変数値を１つずつ埋めたものである。
テスト・ケース１
OS => Windows XP
Browser => IE
Level => L1
Restriction => true
------------------------------
テスト・ケース２
OS => AIX
Browser => FireFox
Level => L1
Restriction => false
------------------------------
テスト・ケース３
OS => Linux
Browser => IE
Level => L3
Restriction => false
------------------------------
... ...
【００５３】
候補追加ルーチン５１０は、従来技術として説明した図３のフローチャートに対応する処理を実行するが、その一部が、本発明に従い変更されている。候補追加ルーチン５１０については、図７のフローチャートを参照して、後で説明する。
【００５４】
候補選択ルーチン５１２は、従来技術として説明した図４のフローチャートに対応する処理を実行するが、Candidatesの要素cのスコアを取得する処理が、本発明に従い変更されている。
【００５５】
スコア取得ルーチン５１４は、候補選択ルーチン５１２によって呼び出される、スコアを取得する処理を実行するものであり、図８のフローチャートを参照して、後で説明する。
【００５６】
出力ルーチン５１６は、結果として得られたテスト・ケースの集合を、好適にはファイルとして、ハードディスク・ドライブ１０８に書き込む。
【００５７】
次に、メイン・ルーチン５０２の処理を、図６のフローチャートを参照して説明する。図６のフローチャートの処理は、従来技術の図２のフローチャートの処理の一部を変更したものであり、改めて図６のフローチャートに基づき説明する。なお、図６において、太線で囲まれているステップ６１０とステップ６１２は、特に従来技術の図２のフローチャートとの差異を示すものである。
【００５８】
図６において、メイン・ルーチン５０２は、ステップ６０２で、outという集合変数に、空集合をセットする。
【００５９】
ステップ６０４では、メイン・ルーチン５０２は、outが、テスト・パラメータのペアワイズのすべてのペアを網羅したかどうかを判断する。ここでの判定は例えば、予めすべてのペアからなる集合変数をコンピュータ・システム的に用意しておいて、ステップ６１４で選ばれたテスト・ケースによって生成されるペアに該当する要素を、その集合から除去していくことにより達成される。このような処理によれば、ステップ６０４の判断は、その集合が空集合になったことに基づき、ペアワイズのすべてのペアを網羅したと判断するように行われる。
【００６０】
そうでないなら、メイン・ルーチン５０２は、ステップ６０６に進んで、そこで、Candidatesという集合変数に、空集合をセットする。
【００６１】
次のステップ６０８では、メイン・ルーチン５０２は、Candidatesの要素の数がNより小さいかどうかを判断し、そうでないなら、ステップ６１０で候補を１つ生成し、Candidatesに追加する。ステップ６１０の処理は、候補追加ルーチン５１０を呼び出すことによって実行される。候補追加ルーチン５１０は、図７のフローチャートを参照して、後でより詳細に説明する。ステップ６１０は、図２のステップ２１０に対応するが、ステップ２１２に対するステップ６１２の違いは、既存のテスト・ケースの集合５０８に含まれているテスト・ケースが考慮され、条件に応じて取り込まれることである。
【００６２】
ステップ６０８とステップ６１０のループの繰り返しで、Candidatesの要素の数がNに達すると、処理はステップ６０８からステップ６１２に進み、そこで、Candidatesのうちスコアが最も高いものが選ばれる。ここでスコアとは、そのテスト・ケースに基づき生成されるペアによって新規にカバーされるペアの数である。ステップ６１２の処理は、候補選択ルーチン５１２を呼び出すことによって行われる。候補選択ルーチン５１２の処理内容は、図４のフローチャートで説明したのと実質的に同じであるが、図４のフローチャートのステップ４０６における、Candidatesの要素であるテスト・ケースcのスコアを取得する処理が異なっている。
【００６３】
既に述べたように、テスト・ケースのスコアとは、本発明では、スコアを取得する処理は、図８のフローチャートに示される、スコア取得ルーチン５１４により実行される。すなわち、図８において、スコア取得ルーチン５１４は、ステップ８０２で、その値を、テスト・ケースに基づき生成されるペアによって新規にカバーされるペアの数として取得し、変数scoreに格納する。そして、スコア取得ルーチン５１４は、次のステップ８０４で、テスト・ケースが、既存のテスト・ケースの集合５０８から取得されたものかどうかを判断し、もしそうなら、scoreに、a ＞ 1である定数aを掛けて、scoreの値を増加させる。テスト・ケースが、既存のテスト・ケースの集合５０８から取得されたものでないなら、scoreの値はそのままである。このように、テスト・ケースが既存のテスト・ケースの集合５０８から取得されたものである場合にscoreの値を増加させることは、図４のフローチャートで示される、最大スコアのテスト・ケースを選ぶ処理で、テスト・ケースが既存のテスト・ケースの集合５０８から取得されたテスト・ケースを勝ち残りやすくする。
【００６４】
ステップ６１４では、メイン・ルーチン５０２は、ステップ６１２で選ばれた候補をoutに追加する。メイン・ルーチン５０２はさらに、outに追加したテスト・ケースから生成されるペアを、ステップ６０４での判断に使用される集合変数から取り去る。そうして処理はステップ６０４に戻る。尚ここで、outに追加したテスト・ケースが次のようなものであったとする。
OS => AIX
Browser => FireFox
Level => L1
Restriction => false
すると、これに基づき集合変数から要素を取り去るために使用されるペアは、以下の６通りである。
- OS=AIX, Browser=FireFox
- OS=AIX, Level=L1
- OS=AIX, Restriction=false
- Browser=FireFox, Level=L1
- Browser=FireFox, Restriction=false
- Level=L1, Restriction=false
【００６５】
ステップ６０４からステップ６１４を回るうちに、outには候補が蓄積される。ステップ６０４でまだ選ばれていないペアがもうないと、ステップ６０４での判断が否定的になって、処理は終了する。こうして、最終的にoutに蓄積された候補が利用される。
【００６６】
次に、図７のフローチャートを参照して、図６のステップ６１０に対応する、候補追加ルーチン５１０の処理について説明する。
【００６７】
候補追加ルーチン５１０は、図７のステップ７０２で、paramsという集合変数を空集合にセットし、ステップ７０４で、S'という集合変数を空集合にセットする。
【００６８】
ステップ７０６では、候補追加ルーチン５１０は、パラメータの数 < 全パラメータの数がとうかを判断し、もしそうなら、ステップ７０８に進み、ヒューリステックと乱数を利用して、パラメータとその値を１つ決定する。次のステップ７１０では、候補追加ルーチン５１０は、決定したパラメータとその値をparamsに追加する。すなわち、ここでparamsに追加されるのは、OS=Windows XPのようなデータである。
【００６９】
ここでヒューリステックとは例えば、生成するテストケースが目的の性質を満たしやすくする（スコアをより大きくする）ためのものであり、例えばペアワイズの場合は以下のようなものが考えられる。
- その時点で生成されたテストケース（out）でまだカバーされていないペアの中にもっとも多く出現するものを選ぶ。
- 選択したパラメータ・値を、既に選択されているパラメータ・値（params）と組み合わせたときにできるペアのうち、outでまだカバーされていないものの数がもっとも多いものを選ぶ。
【００７０】
例えば、まだカバーされていないペアとして以下のようなものがあった場合、
・ OS=Windows XP, Browser=Firefox
・ OS=Windows XP, Network=modem
・ OS=Windows XP, Level=L1
・ OS=AIX, Level=L2
・ Browser=IE, Level=L2
params が空なら、一つ目のヒューリスティクスに従い OS=WindowsXP を選択する(先頭の3つのペアに含まれるため)。
params が{OS=AIX, Browser=IE} であった場合には、二つ目のヒューリスティクスに従い Level=L2を選択する（paramsと組み合わせて、最後の2つのペアを新たにカバーするため）。変数決定には、ヒューリスティクス以外に、乱数も適宜使用される。
【００７１】
次のステップ７１２で、候補追加ルーチン５１０は、Sという集合変数に、既存のテスト・ケースの集合のうち、paramsにセットされているパラメータと変数を含むものをセットする。paramsにセットされているパラメータがまだ全てのパラメータをカバーしていない場合は、ここでは、パラメータにセットされている変数に部分一致する既存のテスト・ケースの集合のテスト・ケースが選ばれる。
【００７２】
例えば、簡単のためパラメータがOS、Browser、Level、Restrictionの４つだとして、
paramsが、{OS = Windows XP}と{Browser = Opera}を含むとき、ここまでのパラメータと変数の組み合わせに一致するパラメータと変数の組み合わせをもつ既存のテスト・ケースの集合のテスト・ケースが選ばれる。
【００７３】
そうして、Sという集合変数に既存のテスト・ケースの集合からテスト・ケースがセットされると、候補追加ルーチン５１０は、ステップ７１４で、Sが空で且つ、S'が空でないかどうかを判断する。ステップ７０６からステップ７１８までの最初のループでは、ステップ７０４でS'に空集合がセットされていることにより、ステップ７１４での判断は必ず否定的になる。ステップ７１８でS' = Sとセットされることにより、ステップ７０６からステップ７１８までの２回目以降のループでは、Sが空で且つ、S'が空でない場合がありえ、その場合はステップ７１４の判断が肯定的になるので、処理はステップ７１６に進む。このとき、S'には、既存のテスト・ケースの集合のうち、paramsにセットされているパラメータと変数を含むものがなくなった場合の直前の、テスト・ケースの集合から選択されたテスト・ケースが格納されている。
【００７４】
すると、候補追加ルーチン５１０は、ステップ７１６で、S'のうち、スコアが最も高いテスト・ケースをCandidatesに追加する。このことは、図４のフローチャートに処理において、CandidatesをS'に読み替えて実行した処理に対応する。
【００７５】
ここで、テスト・ケースのスコアについて説明を補足する。例えば、前に述べたテスト・ケース１をここで再掲する。
OS => Windows XP
Browser => IE
Level => L1
Restriction => true
【００７６】
これから組み合わせによって得られるペアは、下記の６とおりである。
- OS=Windows XP, Browser=IE
- OS=Windows XP, Level=L1
- OS=WindowsXP, Restriction=true
- Browser=IE, Level=L1
- Browser=IE, Restriction=true
- Level=L1, Restriction=true
すると、こうして得られたペアは、既に現れてたものと、まだ現れていないものに分かれる。このとき、まだ現れていないペアの個数をもって、スコアと呼ぶことにする。ペアが既に現れたかどうかの判定は、例えば、ステップ６０４に関連して言及した、ペアの集合を使って行うことができる。すなわち、あるペアがこの集合にまだ含まれていれば、そのペアはまだ現れておらず、一方、あるペアがこの集合に見つからなければ、そのペアは既に現れて、この集合から取り去れたということを意味する。
【００７７】
こうして、ステップ７１８でS' = Sとセットした後、ステップ７０６の判断に戻って、候補追加ルーチン５１０が、パラメータの数が、全パラメータの数に達したと判断すると、候補追加ルーチン５１０は、ステップ７２０で、paramsに従いテスト・ケースを生成し、ステップ７２２で、生成したテスト・ケースをCandidatesに追加し、図６のフローチャートのステップ６１２に戻る。
【００７８】
図７のフローチャートに示す候補追加ルーチン５１０の処理を要約すると、ステップ７１６で、所定の条件を満たす、既存のテスト・ケースの集合からテスト・ケースがCandidatesに追加され、また、ステップ７２２で、paramsのパラメータと値に従い生成されたテスト・ケースがCandidatesに追加され、すなわち、ステップ６１２に戻ったときは、Candidatesは、既存のテスト・ケースの集合から追加されたテスト・ケースと、paramsのパラメータと値に従い生成されたテスト・ケースの両方を含むことになる。
【００７９】
そのCandidatesの集合要素としてのテスト・ケースは、ステップ６１２で、スコアの高さで選別されるが、その際、図８のフローチャートから見て取れるように、既存のテスト・ケースの集合から追加されたテスト・ケースの方がスコアが高くなるように操作されるので、そのような操作がない場合よりも、既存のテスト・ケースの集合から追加されたテスト・ケースが優先的に、出力ルーチン５１６によって出力されることになる。
【００８０】
以上、テスト・ケースのパラメータの組み合わせを与える方法として、上記実施例では、ペアワイズ方法を用いるようにしたが、本発明はこれには限定されず、従来から知られている任意の組み合わせテスト技法を使用することができる。例えば、パラメータと変数のペアではなく、パラメータと変数の三つ組みを用いてもよい。
【００８１】
さらに本発明は、コンピュータの特定のハードウェア、ソフトウェアに限定されず、また、スタンドアロンやネットワーク環境のどちらであるかにもかかわらず、任意のプラットフォーム上で実施可能であることをこの分野の当業者なら理解するであろう。
【符号の説明】
【００８２】
１０２  システム・パス
１０４  ＣＰＵ
１０６  主記憶
１０８  ハードディスク・ドライブ
１１０  キーボード
１１２  マウス
１１４  ディスプレイ
５０２  メイン・ルーチン
５０４  入力ルーチン
５０６  パラメータ／候補値のファイル
５０８  既存のテスト・ケースの集合
５１０  候補追加ルーチン
５１２  候補選択ルーチン
５１４  スコア取得ルーチン
５１６  出力ルーチン
【図１】
0005669630.tif 000002
【図２】
0005669630.tif 000003
【図３】
0005669630.tif 000004
【図４】
0005669630.tif 000005
【図５】
0005669630.tif 000006
【図６】
0005669630.tif 000007
【図７】
0005669630.tif 000008
【図８】
0005669630.tif 000009