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

Nスイッチテストを有益なテスト技法とするために

Nスイッチテスト技法がテストの現場ではほとんど使われていないのではないかという指摘を先日行ないました。Googleのヒット件数からの推測ですから、必ずそうだとは言い切れませんが約50件というヒット件数の少なさから考えてあながち間違いだともいえないと思います。

可能な状態遷移の経路を網羅するというNスイッチテストの考え方自体には意義があると思います。Nスイッチテスト技法には何らかの改良が必要でしょう。

Nスイッチテスト技法を有益なテスト技法とするために次の改良案が考えられます。

(1) すべての経由状態を同じN回網羅するのではなく、問題がありそうな経由状態に限定してより深い状態遷移の網羅を行なう。
(2) 状態遷移とともに内部データの値など、状態遷移に影響を与える要因と組み合わせた状態遷移の網羅を行なう。
(3) 大きな状態遷移図からサブとなる状態遷移を抽出する手法を開発する。

改良案の(1)を実現するためには、行列の積の計算や組み合わせテストツールを用いた方法では無理なようです。人間が手作業でNスイッチテストのテストケースを作成するのと同じ手順をツールで行なわせる方法が有望です。

改良案の(2)は難しい問題です。変数の値と組み合わせて状態遷移を網羅する必要があり、なかなかうまい方法が浮かんできません。

改良案の(3)は閉じた状態遷移と開いた状態遷移の問題が関係してきます。およそほとんどの状態遷移図は始状態と終状態が同じという閉じた状態遷移です。大きな状態遷移図からサブとなる状態遷移を抽出するとそれは始状態と終状態が異なる開いた状態遷移となります。このことがNスイッチテスト技法に何らかの制約を与える可能性があります。

いずれにせよ現状ままのNスイッチテスト技法ではあまり効果的なテストを行なうことが難しいことは明らかです。Nスイッチテストの基本的な考え方にはいいところがあるのですからよりよい改良を加える価値は十分あると思います。

組み合わせテストツールを使用してNスイッチカバレッジのテストケースを生成する

Nスイッチテストのテストケースの作成を行列式の積によって求める方法が広く知られていますが、組み合わせテストツールを用いる方法はあまり知られていないようです。今回はその方法を紹介します。

その前に現状の行列式の積を求める方法を説明します。この説明では前回紹介したnswitchというRubyで書かれたツールを使用します。例として図1の状態遷移図を用いることにします。この状態遷移図は、s0→s1とs2→s0で2つのイベントが関係しています。この場合は、よく知られているstateMatrixというツールは使えません。

1


この状態遷移図から状態×状態の形式で図2に示すnswitchの入力を作成します。

2


この入力でnswitchを実行すると図3の結果が得られます。

3


これは2回のイベント発生で遷移するすべての経路を網羅した1スイッチカバレッジを満たしています。なお見やすくするために出力結果を整形しています。この出力結果をもとにテストケースを作成することになります。

次に組み合わせテストケースを用いてNスイッチカバレッジのテストケースを生成する方法を説明します。この説明で使用するツールはPictMasterです。図4にPictMasterのモデルを示します。

4


パラメータと値はNスイッチのNに合わせて定義します。パラメータは現状態とイベント、そして次状態の繰り返しとなります。値は状態とイベントを洗い出したものです。制約指定で状態ごとに遷移が可能なイベントと次状態の組み合わせを指定します。NスイッチのNに合わせて、同じ制約指定をパラメータをずらしながらコピー&ペーストで繰り返し指定します。「組み合わせるパラメータ数」にはNに+2した値を指定します。例えば2スイッチカバレッジのテストケースが必要なら「組み合わせるパラメータ数」には4を指定することになります。

生成結果は次の通りとなります。

5


この結果はnswitchが出力した図3の結果と等価です。Nスイッチカバレッジのテストケースを組み合わせテストツールを用いて生成する方法には、テストでそのまま使えるテストケースが得られるという利点があります。行列式の積による方法では計算結果からテストケースの形式に変換する作業が必要ですが、組み合わせテストツールを用いた場合はその必要はありません。

組み合わせテストツールを用いる方法には注意すべき点があります。この方法では多数の制約指定が必要となるため、サイズの大きな状態遷移図ではテストケースの生成に長時間かかる傾向があります。状態が9個、イベントが6個あるモデルをPictMasterで2スイッチカバレッジのテストケースを生成するのに1分から1分30秒もかかってしまいました。組み合わせ生成エンジンにPICTを使用する場合、2スイッチテスト以上に限れば状態×イベントの数が50程度が実用的に使用できる限界のようです。同じモデルで制約の処理が高速な組み合わせ生成エンジンであるCIT-BACHを使用しているQumiasで試したところ、1秒以内で結果が生成されました。

ただし、Qumiasを使って50個を超える制約を指定するのは大変な作業でした。OR指定とAND指定の使い分けに細心の注意が必要とされるうえに、それまでに入力した制約指定の集まりを一括してコピー&ペーストするということができません。制約指定に1時間以上もかかってしまいました。組み合わせ生成エンジンにCIT-BACHを使用したNスイッチテスト専用のツールを用意する方が現実的なようです。CIT-BACHの使い方は分かっているので時間ができたら挑戦してみたいと考えています。

Nスイッチテスト専用のツールを考えた場合、PictMasterの制約表のように制約を指定するユーザインタフェースは不要となります。パラメータと値の並び欄も不要です。必要なのは現状態とイベントおよび次状態を指定する3つの列が複数行からなる状態遷移表とNスイッチのNを記入する欄だけです。制約指定はこの状態遷移表が記入されていれば自動的にツール内部で生成し指定可能です。パラメータと値の並び欄についても、状態遷移表の記入内容からツール内部で生成することができます。

Nスイッチテスト技法はほとんど使われていない?

状態遷移テストの1テスト技法であるNスイッチテストは、巷間言われているほど使われていないようです。「"状態遷移"」、「"Nスイッチ"」、「テスト」の3つのキーワードでGoogle検索してみたところ、約50件しかヒットしませんでした。「”デシジョンテーブル”」、「テスト」で検索した場合が約6,000件、「"組み合わせテスト"」、「ソフト」で検索した場合が約5,090件ですからその差は歴然です。

どうしてこのような差が出るのでしょうか。考えられる理由として以下が挙げられるようです。

(1) 1スイッチテスト以上になるとテストケース数が大幅に増加するためコスト面から実施しづらい。
(2) Nスイッチテストのテストケース作成に使える実用的なツールがない。
(3) そもそも通常の状態遷移テスト(0スイッチテストと同じ)で十分と考えている。

これらのうち(1)については、本当にそう言えるのか疑わしいと思います。状態遷移テストはテストケースあたりのテスト実施時間がかなり短時間であるという特徴 があります。テスト対象が何かにもよりますが、状態遷移テストなら1日当たり100~200件のテストケースを消化することも不可能ではありません。仮に Nスイッチテストによってテストケースが3倍4倍に増えたとしても思ったほどコストは増えないものです。

理由の(2)については、あまり 説得力があるとは思えません。前にも述べましたが1スイッチテストであればツールを使わずに、行列式の積を取るという方法ではなく、各状態ごとに遷移ルー トを追う方法で手作業でテストケースを作成することが可能です。それほど難しいことではありません。やる気さえあればあまり時間をかけずに作成できてしま います。

理由の(3)については裏返せば、Nスイッチテストを行なってもより多く障害が検出できると期待することができない、と考えられているのかもしれません。Nスイッチテストでは、N+1回の状態遷移の経路をすべて網羅するテストを行ないますが、1スイッチテストでは高々2回の状態遷移の経路を網羅するだけであり、そのようなテストで何らかの障害を検出することができると期待することはできないということです。

一般的な状態遷移テストでは、現状態→イベント→次状態のテストケースを使用しますが、結合テストがまがりなりにも行なわれていれば、この方法による総合テストで障害が見つかることはほとんど期待できないでしょう。

障害を見つけ出すには、怪しそうな部分に的を絞って即興でテストを行なうエラー推測などの手法によるテストが必要となります。これには内部データの条件も勘案して境界値分析の手法を適用したり、状態遷移とならないループするイベントを使って何度もループさせるなど、様々な例外的な条件でのテストが有効です。こうしたテストで発見される障害は、単に3つや4つの状態間の遷移を網羅するNスイッチテストのテストケースをそのまま実行しただけでは決して発見することができない性質のものです。

以上から現時点でNスイッチテストがあまり使われていないのは、やはり使ってもより多く障害を発見することができるという見込みが得られないと考えられているためだと思われます。

Nスイッチテスト技法を有益なテスト技法とするためには、何かもう一工夫が必要となるようです。

状態遷移のNスイッチテストのテストケースを生成するツール nswitch

状態遷移テスト技法のひとつにNスイッチテストがあります。これはN+1回の状態遷移の経路をすべて網羅するテストを行なうというものです。このN+1回の状態遷移の経路をすべて網羅するテストケースを作成する方法は以下の通りです。

(1) 状態×状態のマトリクス表を作成し、表中のます目に状態の遷移を起こすイベントを記入する。
(2) マトリクス表を行列式と見なし、その行列式の積をとる。
(3) 得られた結果をもとに、テストで使用できるテストケースを作成する。

1スイッチテストのテストケースは、行列式の計算という方法ではなく状態遷移図をもとに各状態からの遷移ルートを洗い出すという手作業で作成してもそれほど時間はかかりませんが、2スイッチテスト以上になると、時間がかかるうえに間違いも起きやすくなります。そうした場合はツールを使用することになります。

Nスイッチテストのテストケース作成に用いるツールとしては、stateMatrixというツールがよく知られています。ただし、このツールではある状態遷移に2つ以上のイベントが関係する場合には使えません。ある状態遷移に2つ以上のイベントが関係するというのは実際にはよくあることなのでこれでは困ってしまいます。このようなケースでは、それぞれのイベントごとに行列式の積の計算を行なえばいいのですが、ちょっと面倒です。

こうしたケースでも正しい結果が得られるツールはないかと探したところありました。nswitchというツールがそれです。このツールはRubyで書かれており、動作にはRubyのインストールが必要ですが、EXE形式のファイルも提供されているのでRubyのインストールまでは行ないたくない場合はそれを使用することができます。nswitchは次のサイトからダウンロードすることができます。

Ruby/Programming/nswitch
http://wikiwiki.jp/hastalavista/?Ruby%2FProgramming%2Fnswitch

PictMaster 5.7をリリースしました

PictMaster 5.7をリリースしました。主な変更点は以下の通りです。

【機能改善】
・コントロールキーを押しながら制約表を右クリックするとExcelのショートカットメニューが表示されるようにしました。

【バグ修正】
・使用するPCの環境によってはVBAのコンパイルエラーとなる場合がある問題に対処しました。

PictMaster 5.7は次のサイトからダウンロードすることができます。

http://sourceforge.jp/projects/pictmaster/