組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題 -55ページ目

制御パステスト 通れないパスを除外する

Pairwise法(All-Pairs法)で制御パステストのテストケースを生成する方法を何回か説明してきましたが、今回からは基本に立ち返って、より具体的で分かりやすく説明を行なってみたいと思います。

二つの以上のif文が連続する場合、if文の条件式によっては、通れない制御パスが生まれる場合があります。こうした場合、生成したテストケースに通れない制御パスが含まれないように制約指定を追加する必要があります。

例としてリスト1のプログラムがあるとき、単にプログラムにあわせて制約指定を行なっただけではテストケースに通れないパスが含まれてしまいます。

リスト1.通れないパスが存在するプログラム

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-プログラム



多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-モデル

図1.制御パステストのモデル


表1.生成されたテストケース
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-生成結果

生成されたテストケースで、No.2 は通れない制御パスです。変数 a の値が1より大きくない FALSE の場合、リスト1の4行目のif文では必ず FALSE になります。つまり、テストケースでパラメータ 1if が FALSE の場合、4if が TRUE というパスは存在できないパスです。

このような通れない制御パスが生成されないよう、図2のように制約指定を訂正します。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-訂正モデル

図2.通れないパスを除外する制約指定

このモデルでは制約2が訂正されています。パラメータ 1if が FALSE の場合、4if で FALSE のルートを通るように指定しています。

このモデルでの生成結果を表2に示します。

表2.通れない制御パスを除外したテストケース
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-最終的な生成結果

このテストケースでは通れない FALSE と TRUE の組み合わせが含まれていません。このように単なる条件文の組み合わせだとしても、通れないパスがないか注意する必要があります。

日科技連主催の 第28回 ソフトウェア品質シンポジウム2009 で発表することになりました。

別名SQiP(スキップ)シンポジウムともいいますが、この二日目、9月11日の午後1時30分から、「Pairwise法と制約表による制御パステストのテストケース生成」というテーマで30分間の発表を行なうことが決まりました。

関連情報は以下のサイトを参照してください。
http://www.juse.or.jp/software/60/

プログラムのPDFファイルは以下のURIからダウンロードできます。
http://www.juse.or.jp/software/65/attachs/program_20090615.pdf

この発表では、Pairwise法の組み合わせ生成ツールであるMTGを用いることによって、制御パステストの条件網羅のテストケースを従来よりきわめて容易に生成することができることを実例を用いて発表することにしています。特にPaireise法だけでは難しかった制約の指定が、制約表を用いることによって、簡単に指定できるようになったことを具体的に説明します。

制約表を用いることで簡単なルールに基づいて、ソースリストから制御パステストのテストケースを生成することができるようになりました。そのことから、制約表への記入自体をソフトウェアで自動化することもそれほど難しいことではなくなったように思います。

次の大きなブレークスルーは、ソースリストをもとに制約表を作成し、テストケースを生成する全自動のソフトウェアツールの作成でしょう。これは私たちの手に余る作業であるため、サードパーティの参加を歓迎します。制約表を持つMTGは「オープン・ソフトウェア・ライセンス v. 2.0」のライセンス条項に従いますが、条件次第では完成したツールの有料販売を認める用意があります。その際は、テストケース生成エンジンをPICTではなく、独自開発したものにする必要があります。

シンポジウムの料金は少し値段が高いですが、興味のある人は参加してみてはいかがでしょうか。

制約指定が無視される!?

PICTは制約指定の内容によっては、その制約指定を無視する場合があります。例えばパラメータがA~Fまでの6個あり、いずれも3個の値を持っているモデルがあるものとします。このモデルで図1の制約指定を行なった場合、その制約指定はPICTによって無視されます。この場合の生成結果の一例を表1に示します。

図1.モデルの例
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-モデル

表1.生成結果の例
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-生成結果

生成結果を見ると、制約指定で制約条件が a2, b2, c2, d2 の場合、制約対象が e2, f2 となるという組み合わせがありません。この理由は、制約指定で制約条件として、 a2, b2, c2, d2 という組み合わせを指定していますが、Paiewise(All-Pairs)法で生成する組み合わせは2つのパラメータの組み合わせを最少の数で実現するようになっています。したがって、a2, b2, c2, d2 という4パラメータにわたる組み合わせは、まず生成されることはありません。偶然そうした組み合わせになる可能性は否定できませんが、ゼロに近いでしょう。

したがって、MGT(PICT)での制約指定では、基本的に制約条件で指定するパラメータは2つまでに限定すれば、その制約指定はかならず有効となります。例外として、他の制約指定によって制約対象として3つ以上のパラメータの組み合わせを指定した場合、それらのパラメータについては3つ以上のパラメータについても制約条件で指定することができます。

PICTの特性として、指定された制約条件が必ずしも生成されるわけではありません。今回の例のような制約指定を有効とするには、制約指定そのものを原型シートに記入(図2)して生成を行なうことで可能となります(表2)。このときの生成では制約指定は削除し、環境設定で「原型シートを使用」にチェックを入れます。

図2.原型シートで組み合わせを指定する
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-原型シート


表2.指定した組み合わせを含んだ生成結果
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-生成結果2

制約条件に3パラメータ以上を指定する場合は、その組み合わせが他の制約指定で制約対象に指定されているのでない限り、原型シートであらかじめ組み合わせを指定したほうがよいでしょう。

「実行時エラー」が発生するときがある

MGT 3.0の最新バージョンに限らず、以前のバージョンでも発生するのですが、MGT(PictMaster)を使用している最中に「生成」ボタンや「環境設定」ボタンを押すと、以下のエラーが発生する場合があります。

実行時エラー '75'
指定されたオブジェクトは見つかりません。

また、ローカルのPC上で作成したBookをサーバに上げて、開こうとするとエラーが発生する場合があります。もしこのエラーが発生した場合は、エラーダイアログの「終了」をクリックし、Bookそのものを別名でコピーしてそれを使ってみて下さい。

エラーが発生する原因を調査中ですが、少し時間がかかるかもしれません。

なお、ローカルのPC上で作成したBookを別の環境(他のPCなど)で開き、生成、整形、環境設定のボタンをクリックすると、「'MGT.xls' (PictMaster.xls)が見つかりません。ファイル名およびファイルの保存場所が正しいかどうか確認してください」といったメッセージが表示されて、ボタンが働かない場合は、ボタンとVBA(マクロ)のつながりが切れているためです。このメッセージが表示された場合は、当該ボタンを右クリックし、「マクロの登録…」を選び、表示されるマクロのリストから、ボタンの名称と同じマクロを選択し、OKをクリックすれば問題は解決します。

MTG サブモデルと原型シートを併用して任意のパラメータのみ組み合わせ数3の生成結果を得る

PICT(MTG)にはサブモデルの機能があり、任意のパラメータの組み合わせ数を3とすることができます。ただし、この方法ではサブモデルで指定された3個以上のパラメータは、残りのパラメータとは4パラメータ間の組み合わせとなり、生成されるテストケース数が大幅に増加するという問題があります。

本来、生成したい組み合わせは、指定した3個以上のパラメータのみ組み合わせ数を3とし、残りのパラメータは組み合わせ数を2個とすることです。こうした点から、PICTのサブモデル機能は使いこなすことが難しいという欠点があります。

そこで、本来意図する3個以上のパラメータのみ組み合わせ数を3とすることができないか調べてみました。その結果、何とかできるめどがついたので説明したいと思います。

これから説明する方法は5つのステップで任意のパラメータの組み合わせ数を3とすることを実現しています。手作業で行なうには少し手数がかかりますが、VBAでプログラミングすれば容易にできる方法です。この方法ではサブモデルと原型シートを併用します。順を追って説明します。この説明では、説明のしやすさから、最少テストケース生成での「自動整形を実行」のチェックをはずしています。

なお、最少テストケース生成の機能を用いて組み合わせを生成しているため、この記事で掲載している生成結果の内容とは異なる結果となることがあることをお断りしておきます。

まずは簡単なケースの場合です。パラメータA~Gがあり、それぞれ3つの値を持っているものとします。このうち、サブモデルでパラメータA, B, C, D のみ組み合わせ数を3とします。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-モデル
1.モデル

(1)パラメータA, B, C, D をサブモデルで組み合わせ数を3と指定して生成します。
 生成結果の数は85前後となります。

(2)生成された結果について、パラメータにExcelのフィルタ機能を使用して、サブモデルで指定しなかったパラメータのうち、任意のパラメータで任意の値でフィルタをかけます。その結果表示される値の数は28程度になります。こうすることで、パラメータ A, B, C, D の組み合わせ数が3となっている結果が得られます。

(3)MTGに新規ワークシートを作成し、それをモデルのワークシートの右隣に置きます。これが原型シートののワークシートとなります。前項の結果、表示されているパラメータ A, B, C, D をコピーし、MTGの原型シートにペーストします。

表1.原型シート
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-原型シート

(4)MTGの環境設定で原型シートにチェックを入れます。サブモデルで、3パラメータの組み合わせとしない任意のパラメータ2つについて組み合わせ数を2とします。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-サブモデル
図2.組み合わせ数2のパラメータをサブモデルで指定する

(5)原型シートとサブモデルを併用して生成を行ないます。生成結果の数は33程度になりますこの値は、3パラメータの組み合わせ生成数が3×3×3=27ですから、ほぼ等しい生成結果となります

表2.最終的な生成結果
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-生成結果

この結果にフィルタをかけて、パラメータA, B, C, D のうち2つについて任意の値を指定した場合、残りの2つのパラメータについては全ての値が組み合わせされていることが分かります。ここではパラメータAとBにフィルタをかけています。

表3.フィルタで3パラメータの組み合わせを確認する
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-3パラメータの組み合わせ





このようにして任意の3個以上のパラメータについて組み合わせ数を3とすることができます。ただし、この例の場合は、全てのパラメータの値の個数が同じという特殊な場合でした。そうではない一般的な場合は、少し手順が異なります

パラメータごとに値の数が異なる一般的な場合の手順を例をもとに説明します。パラメータはA~Gがあり、それぞれ図3に示す値を持っているものとします。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-新モデル
図3.一般的なモデルの例

.パラメータA, B, C, D をサブモデルで組み合わせ数を3と指定して生成します。
 生成結果の数は120前後となります。サブモデルで指定したパラメータの値の個数が最も多い上位3つのパラメータの値の個数を積算します。この例では、パラメータA、B、C(Dでもよい)で値の個数を積算した値は24です。この値はこの後の手順で参考とします。

.生成された結果について、パラメータにExcelのフィルタ機能を使用して、サブモデルで指定しなかったパラメータのうち、最も値の個数が多いパラメータについて任意の値でフィルタをかけます。この例ではパラメータ E が該当します。その結果、表示される組み合わせの数は24です。

表4.生成結果にフィルタをかける
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-新生成結果

.MTGに新規ワークシートを作成し、それをモデルのワークシートの右隣に置きます。これが原型シートののワークシートとなります。前項の結果表示されているパラメータ A, B, C, D をコピーし、MTGの原型シートにペーストします。

表5.原型シート
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-新原型シート

.MTGの環境設定で原型シートにチェックを入れます。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-原型シートをチェックする
図4.「原型シートを使用」にチェックを入れる

.次にサブモデルで、3パラメータの組み合わせとしない残りの任意のパラメータのペアについて組み合わせ数を2とします。このとき、2つのパラメータの値の個数を積算した値と、組み合わせ数を3とするパラメータで最も多くの値の個数を持つパラメータの値の個数とをさらに積算した値が、
組み合わせ数を3とするパラメータのうち、最も多くの値の個数を持つ上位3つのパラメータの値の個数を積算した値以上で最も少ない値となるパラメータであるパラメータのペアを求めます(*1)。この例のモデルでは、パラメータ F, G, B の組み合わせが、3×2×4=24 となり、1項で求めた値と同じ値となり最も最適な組み合わせです。
 そこで、サブモデルに3パラメータの組み合わせとしないパラメータを、先ほどの組み合わせから F と G を組み合わせ数2で指定します。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-新モデル2
図5.組み合わせ数2のパラメータをサブモデルで指定する

.サブモデルと原型シートを併用して組み合わせを生成します。この例での生成結果は30前後となります。このとき生成された件数が、組み合わせ数を3とするパラメータが持つそれぞれの値の個数が最も多い上位3つのパラメータの、それぞれの値の個数をかけた数(3パラメータの組み合わせ数で最も多い値)以上で最も少ない件数である必要があります。そうでない場合、つまり項で求めた値より少ない件数となった場合は、サブモデルで指定したパラメータが誤っていることになります。このときの生成結果には、3パラメータ間の組み合わせの一部が含まれていないことになります。

表6.最終的な生成結果
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-神聖性結果2

この結果にフィルタをかけてみると、パラメータA, B, C, D のうち2つについて任意の値を指定した場合、残りの2つのパラメータについては全ての値が組み合わせされていることが分かります。この例では、パラメータAとBにフィルタをかけています。

表7.フィルタで3パラメータの組み合わせを確認する
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-新3パラメータの組み合わせ

*1: 適切なパラメータが見当たらない場合は、1項の最初の段階で、条件に合うようにダミーのパラメータを定義しておきます。この検討は本来は1項の段階で行なっておきます。ダミーのパラメータを追加しても生成されるテストケース数が必要以上に増加することはありません。

ここまでPICT(MTG)で任意のパラメータの組み合わせ数のみを3とする方法を説明してきました。ここではなぜこうした方法で任意の3つ以上のパラメータについて組み合わせ数を3とすることができるのか説明します。ここでの説明はたぶんに推測を含んでいることを断っておきます。また間違いが含まれている可能性もあります。実際に試してみることをお勧めします。

まず最初に組み合わせ数を3としたい3つ以上のパラメータについてサブモデルで組み合わせ数を3として生成結果を得ることは、説明する必要はないでしょう。そして生成結果に、組み合わせ数を3としないパラメータで最も多くの数の値を持つパラメータでフィルタをかけるのは、生成結果の中から、3パラメータの組み合わせ数が3となる必要最小限の生成結果を抽出するためです。
次にそうして得られた生成結果を原型シートとするのは、最終的な生成結果が組み合わせ数3を含むものとするためのものです。

ただし、PICTの原型シートの機能は、組み合わせ数3の組み合わせを含んでいると、そのままでは組み合わせ数3の生成結果が保証されません。具体的には、原型シートと組み合わせる他のパラメータが持つ値の数が少ないと、その少ない値の個数のパラメータとの組み合わせでは、原型シートの3パラメータ間の組み合わせ数を3とした生成結果が保証されず、2パラメータ間の組み合わせが網羅されるように生成されるため、組み合わせ数3の組み合わせのうち、生成結果に含まれないものが多数発生してしまいます。

こうした不都合が発生しないようにするには、組み合わせ数3の生成数以上で最も少ない生成数を残りのパラメータで生成する必要があります。

これには、残りのパラメータのうち2個のパラメータの値の個数を積算した値と、組み合わせ数3のパラメータのうち、最も多くの値の個数を持つパラメータが持つ値の個数を積算した値(3パラメータの組み合わせ数)が、組み合わせ数を3とするパラメータが持つそれぞれの値の個数が最も多い上位3つのパラメータの、それぞれの値の個数をかけた数(3パラメータの組み合わせ数で最も多い値)以上で最も少ない値とすることで、原型シート上の生成結果が削除されることを防ぐことができます。

こうして生成された結果は、任意の3個以上のパラメータについてのみ、それぞれ組み合わせるパラメータ数が3となります。