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

v2.8.1の既知の問題と次バージョンについて

現在の最新バージョンである 2.8.1 の既知の問題点をお知らせします。

・複数のBookが開かれた状態でウインドウ分割のショートカットキーを押すとウインドウ分割が正しく行われない。(既存バグ)
・制約表、結果表などの編集専用のコンテキストメニューが、表示対象外の部分でも表示される。
・A列1行目などを右クリックすると、VBAのエラーが表示される。
・起動ディスクがドライブC 以外の環境で生成するとVBAエラーとなる。(既存バグ)

以上です。これらの問題点については次のバージョンで修正されます。次バージョンではバグフィックスのみで新たな機能追加はしません。

ユーザーズマニュアルは大幅に加筆されます。組み合わせテスト以外のテスト技法にも本ツールは適用可能ですので、本ツールで次のテスト技法のテストケースを生成する方法についての説明を追記します。

・制御パステスト
・状態遷移テスト
・デシジョンテーブルテスト

次のバージョンでは本ツールの名称が変更されます。バージョンはPictMasterからの連続性を考慮して 3.0 となります。

3.0は遅くとも5月初めまでにはリリースします。

状態間の往復がある状態遷移のテストケースをPairwise法(All-pairs法)で生成する

テストを行なっていて、同じ操作を繰り返し行ない続けると不具合が見つかることがあります。例えばある状態でスタートしたタイマが状態の遷移を重ねる際にタイマを停止しないルートがあり、操作の途中でそのタイマがタイムアウトし、おかしな動作となる、といったケースです。このような障害は偶然発見されることが多いと思います。


以前にも紹介しましたが、状態の往復を含む状態遷移のテストケースをPairwise法を用いて生成することができます。今回は少し趣向を変えて、状態遷移の間に条件文があるケースです。このような例は実作業ではよくあると思います。また、あるイベントで状態遷移せずに同じ状態にとどまる例です。これもよくある例でしょう。


今回取り上げる状態遷移図を図1に示します。この状態遷移図は何らかの例を意味するわけではありません。この状態遷移図でS0以外の各状態を最大3回通るルートをすべて網羅したテストケースを生成することにします。

組み合わせテストツール PictMaster を使う-遷移図
図1.状態の往復がある状態遷移図

この状態遷移図のモデルを以下の図2に示します。この例ではパラメータが15個、制約が33個となりました。例によって制約対象が次の制約欄で制約条件となるという、極めて簡単なルールで記入します。


組み合わせテストツール PictMaster を使う-モデル
組み合わせテストツール PictMaster を使う-モデルその1
組み合わせテストツール PictMaster を使う-モデルその2
組み合わせテストツール PictMaster を使う-モデルその3
組み合わせテストツール PictMaster を使う-モデルその4
図2.各状態を最大3回通るモデル

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


表1.各状態を最大3回通る状態遷移テストのテストケース
組み合わせテストツール PictMaster を使う-生成結果

生成したテストケースの各状態の列の間にその状態でどのような動作となるのかを記入する列を入れて完成となるでしょう。


このモデルでは1回のテストケース生成に11分8秒かかりました
生成に使用した環境は以下の通りです。


OS Windows XP Professional Version 2002 SP3
Excel2003 (バージョンによる生成時間に違いはありません)
マシン Intel Xeon E5462 2.8GHz RAM 1GB


パラメータの数(状態遷移数)がおおよそ20を超えるようだと生成時間が非常に長くなり、実用的ではなくなると思います。その意味では、状態遷移の全体ではなく、特定の部分を構成する状態遷移に適用する使い方が良いでしょう。

PictMasterの結果表を使ってデシジョンテーブルを生成する

デシジョンテーブルをPictMasterで生成する方法を前回取り上げましたが、今回は清涼飲料水などの自動販売機に適用する方法を紹介します。この場合、自動販売機のデシジョンテーブルでは制約がごくわずかになり、結果表で各条件の組み合わせに対応するアクションを指定することになります。


条件は、販売中ランプ、売れ切れランプ、投入硬貨、投入金額、商品ボタン、返却ボタンの6つですアクションは、商品ランプ、商品トレイ、返却硬貨の3つです。商品ボタンと返却ボタンが同時に押された場合は何も押されていないものとします。


結果表では結果内容欄が狭いので、結果内容欄にはアクションの組み合わせを示す番号を記入することにします。アクションの番号とアクションの内容を以下に示します。


*1: 商品ランプ・消灯, 商品トレイ・商品出ない, 返却硬貨・投入硬貨返却
*2: 商品ランプ・消灯, 商品トレイ・商品出ない, 返却硬貨・返却金無し
*3: 商品ランプ・消灯, 商品トレイ・商品出ない, 返却硬貨・全額返却
*4: 商品ランプ・点灯, 商品トレイ・商品出ない. 返却硬貨・投入硬貨返却
*5: 商品ランプ・点灯, 商品トレイ・商品出ない, 返却硬貨・返却金無し
*6: 商品ランプ・点灯, 商品トレイ・商品出ない, 返却硬貨・全額返却
*7: 商品ランプ・点灯, 商品トレイ・商品出る, 返却硬貨・返却金無し
*8: 商品ランプ・点灯, 商品トレイ・商品出る, 返却硬貨・おつり返却


以下に今回の自動販売機のモデルを示します。この場合、組み合わせるパラメータ数に6を設定します。


表1.自動販売機のモデル

組み合わせテストツール PictMaster を使う-モデル

このモデルでは、制約が2つだけになります。結果表で条件の組み合わせに対応するアクションの番号を指定します。


生成結果を以下に示します。


表2.生成結果
組み合わせテストツール PictMaster を使う-生成結果


この生成結果を結果内容をキーとして並べ替えを行ない、結果内容のアクションを表す番号ごとに色を分けて塗りつぶしを行ないます。


表3.アクションごとに色を塗り分ける
組み合わせテストツール PictMaster を使う-塗り分け

同じ色に属する組み合わせについて、結果内容であるアクションに影響を与えることにない条件を「-」で置き換えます。この際、同じ色に属するルールでも、条件が異なる場合についてはすべて「-」に置き換えることはしないように注意しながら置き換えを行ないます。この結果を以下に示します。


表4.アクションに影響を与えない条件を「-」に置き換える
組み合わせテストツール PictMaster を使う-置き換え

こうしてアクションである結果内容の番号に対応する条件の組み合わせ(ルール)を必要最小限残した組み合わせを抽出します。

表5.必要最小限のルールを抽出
組み合わせテストツール PictMaster を使う-表を圧縮

この結果をNo.欄で並べ替え、色分けを亡くした最終結果を以下に示します。

表6.最終結果
組み合わせテストツール PictMaster を使う-最終結果


*1: 商品ランプ・消灯, 商品トレイ・商品出ない, 返却硬貨・投入硬貨返却
*2: 商品ランプ・消灯, 商品トレイ・商品出ない, 返却硬貨・返却金無し
*3: 商品ランプ・消灯, 商品トレイ・商品出ない, 返却硬貨・全額返却
*4: 商品ランプ・点灯, 商品トレイ・商品出ない. 返却硬貨・投入硬貨返却
*5: 商品ランプ・点灯, 商品トレイ・商品出ない, 返却硬貨・返却金無し
*6: 商品ランプ・点灯, 商品トレイ・商品出ない, 返却硬貨・全額返却
*7: 商品ランプ・点灯, 商品トレイ・商品出る, 返却硬貨・返却金無し
*8: 商品ランプ・点灯, 商品トレイ・商品出る, 返却硬貨・おつり返却


今回の結果ではルールが18個となりました。 PictMasterでデシジョンテーブルを作成する方法として、アクションを結果表で指定する方法が最もふさわしい方法だと思われます。

PictMasterでデシジョンテーブルを作成する !?

これまでPictMasterを使用してブラックボックステストの組み合わせテスト状態遷移テスト制御パステスト、のテストケースを生成してきました。今回は重要なテスト技法の1でつである「デシジョンテーブル」をPictMasterで生成してみようという試みです。

一般的に言って、デシジョンテーブルであれば、わざわざPairwise法のツールを用いずとも、人手で比較的簡単に作成できるので今回の試みは多分に遊びの面を含んでいます。ですが、デシジョンテーブルは木構造の組み合わせから成り立っているため、組み合わせが関係する問題にPairwise法を適用して正しい解を得ることができるはずです。そこで実際に正しいデシジョンテーブルを生成することができるか、できるとすればどの程度の手数で可能なのかを試してみたくなりました。このような試みができるのも制約表のおかげです。制約表がなければこのような発想すら湧かないでしょう。

それではデシジョンテーブルの問題として一般に公開されているJaSST'07 Tokyo での「三賢者、テストを語る (DTvsCEGvsCFD)」 のDTの「入場料問題」(28ページ目)を使うことにします。この問題を以下に示します。

組み合わせテストツール PictMaster を使う-問題
図1.デシジョンテーブルを作成する入場料問題

デシジョンテーブルにPictMasterを適用する際は、デシジョンテーブルの各条件がパラメータとなり、条件のとりうる値(YesかNoかなど)がそのままパラメータの値となります。そして組み合わせるパラメータ数を実際のパラメータ数と同じに設定します。これはデシジョンテーブルがパラメータ数のレベルを持つ木構造となっており、そのすべての組み合わせを生成する必要があるためです。その意味では全数組み合わせテストと同じです。

図1の問題では、個人と団体は排他の関係にあるため、パラメータは個人のみとし、その値のYes、Noで個人と団体を表します。その他に必要なパラメータは、一般、小学生、6歳未満、65歳以上、県内在住、で全体で6個のパラメータとなります。いずれも値はYesとNoです。この問題で6歳未満、小学生、一般、65歳以上は、それぞれ排他の関係にあるパラメータであり、同時にはYesとはなりません。

この問題を解くモデル(パラメータと値の並び、制約表および結果表)を以下に示します。

組み合わせテストツール PictMaster を使う-モデル
図2.入場料問題のモデル

パラメータの県内在住と個人(団体)は、組み合わせに制約を持ちません。それ以外の6歳未満、小学生、一般、65歳以上は、それぞれ排他の関係となるよう、制約1~4で指定しています。制約5と6で、小学生でもなく一般でもない場合は、6歳未満か65歳以上のいずれかであることを指定しています(制約対象がOR指定となります)。

こうして生成した組み合わせを以下に示します。

表1.生成された組み合わせ
組み合わせテストツール PictMaster を使う-生成した組み合わせ

生成された組み合わせは16通りとなりました。アクション(入場料)を結果表で決定しています。徹底したテストが必要な場合は、この組み合わせでテストを行なうことになります。それほど徹底したテストが必要でない場合は、16通りの組み合わせの中からアクション(入場料)に影響を与えない組み合わせを削除し、テストケース数を削減することになります。

整形」ボタンで生成結果の「結果内容」を第一優先のパラメータとして並べ替えを行います。こうすることで組み合わせが入場料ごとに並び、入場料に影響を与えない組み合わせを見つけやすくなります。

入場料に影響を与えない組み合わせをそれぞれ異なる色で塗りつぶした組み合わせを以下に示します。

表2.アクション(入場料)に影響を与えない組み合わせ
組み合わせテストツール PictMaster を使う-結果に影響を与えない組み合わせ

異なる色で塗りつぶした組み合わせについて、各色ごとに1つを残してあとは削除します。この際、入場料に影響を与えないパラメータについてはそうであることを示す意味で「-」を記入します。このパラメータの値はYesでもNoでも結果に影響を与えません。

最終的に決定したデシジョンテーブルを以下に示します。

表3.テストケースを削減したデシジョンテーブル
組み合わせテストツール PictMaster を使う-削減した組み合わせ

この組み合わせはJaSST'07 Tokyo での「三賢者、テストを語る (DTvsCEGvsCFD)」の34ページ目の組み合わせと実質的に同じ組み合わせです。

従来の方法では、テスト対象からいきなりデシジョンテーブル作成となり、デシジョンテーブル作成の過程が明らかではありませんが、PictMasterを使用することで「モデル」の形でデシジョンテーブル作成の根拠を明らかな形で残すことができます。

今回の問題ではPictMasterの使い方に慣れた人なら人手で解くよりPictMasterで解いたほうが早く解けるかもしれません。より複雑なデシジョンテーブルではどうなるか興味深いところです。

それでは、また。

PictMasterで「通常」の条件網羅の制御パステストケースを生成する

これまで取り上げてきた制御パスのテストケース生成は、Pairwise法によるものでした。この方法では2パラメータ間の組み合わせが網羅されるため、2つの要因の組み合わせで発生する障害を検出することができます。その代りにテストケース数は通常の条件網羅の場合より多くなります。どのくらい多くなるかはプログラムの制御構造に依存します。

特に重要と見なすコンポーネントについてはPairwise法によるテストケースを生成することにするが、そうでないコンポーネントについては通常の条件網羅の制御パステストとしたい、と思うかもしれません。今回はその方法を紹介します。

PICTは組み合わせるパラメータ数を指定することができますので、組み合わせ数に1を指定し、条件分岐の制御パスを制約表で指定することにより、通常の条件網羅のテストケースを生成することができます。制約表でパラメータの値を指定することにより、値によっては制御構造上通れないパスを除外します。人手で条件網羅の正しい制御パスを抽出するよりも制約表で指定するほうが早くて間違いも少なく生成することができると思います。
2009年02月07日の記事 でPictMasterのプロシージャを例としてPairwise法による条件網羅のテストケースを生成しました。今回は、このプロシージャの通常の条件網羅によるテストケースを生成してみました。先日との違いは組み合わせるパラメータ数に2ではなく1を指定したことだけです。

生成した「通常」の条件網羅のテストケースを以下に示します。

組み合わせテストツール PictMaster を使う-通常の条件網羅

図1.「通常」の条件網羅のテストケース

今回のテストケース数は10個となりました。Pairwise法による場合が15個でしたから減少分は3分の1ということになります。このプロシージャは組み合わせ数が少ない構造なので、一般的にはもっと減少分は多くなるはずです。

今回生成した通常のテストケースはそのすべてが、先日のPairwise法によるテストケースの中に含まれています。そこで先日示したテストケースのうち、通常の方法で生成したテストケースだけを以下に示します。test data number の列は、そのパスを通るテストデータの番号です

組み合わせテストツール PictMaster を使う-パスが一致するテストケース

図2.制御パスを通るテストデータの番号

興味深いことに、テストケース数が減少した通常のテストケースでもすべてのテストデータがいずれかのパスを通るようになっています。

このように組み合わせるパラメータ数に1を指定することで、テストケース数が少ない通常の条件網羅のテストケースを生成することができます。


All-Pairs法よりも、Pairwise法という呼び方が本場米国では、より一般的に使われているようですので、今後は Pairwise法という呼び方を使うことにします。