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

制約指定で意図しない制約が生まれる(その2)

複数の制約指定の相互作用により、「隠れた制約」が生ずる場合があります。私はこれを「間接制約」と呼んでいます。具体的な例で見てみましょう。いま図1のモデルがある場合、生成結果は表1となります。

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

図1.間接制約のあるモデルの例

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

この生成結果によると、b3とc2およびb3とc3の組み合わせが含まれていません。制約表では、この組み合わせを除外するような直接的な制約指定は見当たりません。このb3とc2およびb3とc3の組み合わせが現れないのは間接制約によるものです

間接制約の仕組みとはどのようなものでしょうか。制約表を見てもらうと、制約1により、パラメータAがa1の場合、パラメータBにはb3が含まれません。一方、制約2ではb3が含まれますが、今度はパラメータCのc2とc3が含まれていません。そのため、b3とc2およびb3とc3の組み合わせが現れないのです。ここで注意してもらいたいことがあります。仮にb3とc2およびb3とc3の組み合わせを網羅しようとするなら、パラメータAにダミーの値が必要となります。ダミーの値があれば、その値とb3とc2およびb3とc3の組み合わせが生成されることになります。

こうした間接制約は、この例だけでなく、さまざまな制約指定で発生しています。では、間接制約は不都合なものでしょうか。答えはNOです。間接制約が数多く生じても問題となることはありません。それはなぜでしょうか。

モデルを考えるとき(要因分析という)、私たちはどのパラメータとどのパラメータが組み合わせ可能か常に考えることになります。その際に、モデルによっては、あるパラメータとあるパラメータとの組み合わせが意味をなさない(組み合わせが不可能)場合がありえます。その場合、パラメータの値にダミーの値「-」などを追加して、そのダミーの値と組み合わせるようにすることがしばしばあります。

そうした検討を経た結果、定義されたモデルで発生した間接制約は、発生しても問題のないものです。では、図1のモデルの要因分析で、b3とc2およびb3とc3の組み合わせはパラメータAとは組み合わせ不可だが必要な組み合わせだとした場合は、パラメータAにダミーの値を追加して、b3とc2およびb3とc3の組み合わせが網羅されるようにします。そのようにしたモデルと生成結果を図2表2に示します。
図2.ダミーの値を用いて組み合わせを網羅したモデル


表2.ダミーの値を用いた生成結果
制約3でダミーの値と組み合わせ可能な値を定義します。この結果、表3のようにパラメータAがダミーの値を含むことでb3とc2およびb3とc3の組み合わせが網羅されるようになりました。

富士ゼロックスのHAYST法によるシステムでは、キーワードとして「NULL」の値が扱えるので、
 NULL-b3-c2
 NULL-b3-c3

という指定が可能です。また富士通のATAFというシステムでは、キーワードとして「空白」の値が扱えるので、
 空白-b3-c2
 空白-b3-c3
 
という指定が可能です。MTGもダミーの値を用いることで同等のことが行なえます

制約指定で意図しない制約が生まれる!?

前回は、制約指定により、組み合わせられない組み合わせのリスト、「除外する組み合わせのリスト」を取り上げました。今回は、制約指定の結果、意図しない制約が生まれる例を紹介します。

例として次のモデルがあるとします。

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

このモデルの「除外する組み合わせのリスト」を次に示します。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-除外組み合わせ

この除外組み合わせのリストでは、制約1がNo.1とNo.2に対応し、制約2がNo.3~No.6に対応し、制約3がNo.7~No.14に対応します。これらの除外する組み合わせのうち、No.1~No.6の組み合わせの結果、新たにNo.15とNo.16の除外する組み合わせが生じます。この2つの組み合わせは、パラメータAとパラメータBの値がこの値をとる場合、パラメータEの値のすべてが除外する値に該当します。つまりこの値の組み合わせは組み合わせ不可能ということになります。

このモデルの生成結果を示します。
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-生成結果

この生成結果を見ると、パラメータAとパラメータBの値が1と2、2と2の組み合わせが含まれていないことが分かります。この意図しない制約を制約4として追記した制約表と、その生成結果は次のとおりとなります。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-制約を追記

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

生成結果は意図しない制約を追記する前とまったく同じです。

「意図しない制約」とはいえ、これはPairwise法の仕様どおりの結果ですから特に問題となるものではありません。

無視される制約指定と組み合わせ可能な値の制限(続き)

前回の記事で、矛盾した制約指定において、無視される制約指定と組み合わせ可能な値の制限があることを話題にしました。その後、よく考えてみたら、PICTがなぜワーニングを表示しないのか、その理由が分かりましたので再び話題にしたいと思います。

これはPICTが、というよりは制約指定が可能なPairwise法のツールなら共通の制限事項であると考えられます。

前回のモデルと生成結果を再掲します。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-モデル
図1.矛盾した制約指定の例

表1.モデルの組み合わせ生成結果
多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-生成結果

この制約指定は明らかにパラメータCの値が矛盾した制約指定ですから、本来ならPICTがワーニングメッセージを表示すべき場合に当たるように思われます。しかし、制約をサポートする上でどのように制約を実現しているのかが分かるとPICTがワーニングメッセージを表示できない理由が理解できます。

PICT(PICTに限らず制約をサポートするPairwise法のツール)は、組み合わせを生成する前に、制約指定により組み合わせから除外する組み合わせのリストを作成します。組み合わせを生成する際に、その組み合わせが除外する組み合わせに該当するかチェックを行ないます。該当すればその組み合わせは除かれます。

制約表の記述を制約式で表したものと、除外する組み合わせのリスト、可能な組み合わせのリストを示します。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-除外する組み合わせ

最初の制約式によりNo.1とNo.2の「除外する組み合わせ」が得られます。2つめの制約式により、No.3とNo.4の「除外する組み合わせ」が得られます。最終的に生成される組み合わせの焦点となる部分を「可能な組み合わせ」に示します。

除外する組み合わせ」のリストから、パラメータBの値がb2の場合、組み合わせ可能なパラメータAの値はa2以外の値となります。a2の値を採用すると、No.1とNo.2からパラメータCの値はc1とのみ組み合わせ可能ですが、この組み合わせはNo.3の組み合わせに該当するため組み合わせ不可能です。

このため、パラメータBの値がb2の場合に組み合わせ可能な値は、a1-b2-c2とa3-b2-c2の2つとなります。この例では、「可能な組み合わせ」のNo.1とNo.5が該当します。

この組み合わせの処理自体は、なんら特別な処理ではなく、そのためPICTはワーニングメッセージを表示することができないのです。

無視される制約指定と組み合わせ可能な値の制限

相互に矛盾する制約指定を行なった場合、エラー/ワーニングメッセージが表示されず、一方の制約指定が無視され、組み合わせられる値が制限される場合があります。


図1のモデルでは、制約1制約2は、制約対象の値が異なっており、相互に矛盾した制約指定です。


多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-モデル
図1.矛盾した制約指定の例

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

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-生成結果
表1.モデルの組み合わせ生成結果


この組み合わせ結果を見ると、制約2はNo.3のテストケースに反映されています。しかし、制約1はどのテストケースにも反映されていません。制約1の制約条件である、a2とb2との組み合わせが含まれていません。No.5~No.7でa2に対して組み合わされているのは、b2を除いたb1とb3のみです。


これは、a2とb2の組み合わせを認めてしまうと、制約2のb2のときはc2と組み合わせる、という制約指定に違反するからです。このように相互に矛盾する制約指定の場合は、最も単純な組み合わせが優先されます。この例では、制約1が成立せず、制約2のみが成立するようになります。


こうした場合、制約1は、より単純な制約2がある以上、無意味な制約指定となります。このような場合、何らかのワーニングメッセージが表示されればよいと思うのですが、PICTでは何も表示されません。


複雑な制約指定を行なった場合は、知らないうちに今回のような制約指定をしてしまう可能性がありますので、注意が必要です。

テスト設計仕様書とテストケース仕様書を同時に表示して効率よくテストする

テストを実施する際に参照するテスト用ドキュメントは、テスト設計仕様書とテストケース仕様書となります。MTGでテスト用ドキュメントを統合したため、テスト設計仕様書とテストケース仕様書、そして組み合わせテストのモデル、これらがそれぞれ異なるワークシートに記述されていることになります。

テスト作業で参照するテスト設計仕様書とテストケース仕様書が異なるワークシートに記述されているため、そのままではテスト実施中にたびたび2つのワークシートの切り替えを行なわなければなりません。これでは煩雑な作業となり、テスト内容も理解しづらいものとなってしまいます。あるいはテスト設計仕様書を紙にプリントアウトして使用することになります。

そこでこうした問題を解決するExcelのちょっとしたTipsがありますので紹介します。ご存知の方も多いとは思いますが。

テストドキュメントのBookを開き、テスト設計仕様書のワークシートを表示します。次にExcelのウインドウメニューから「新しいウインドウを開く」を選択します。こうすることで、同じ内容のウインドウが2つあることになります。次にウインドウメニューから「整列...」を選択し、続いて「上下に整列」をチェックしてOKをクリックします。

こうすることで、画面上下に2つのウインドウが表示されます。ここで下のウインドウから、テストを行なうテストケース仕様書のワークシートのタブをクリックし、その内容を表示させます。このようにした例を以下に示します。

多種類テストケース生成ツール MTG (Multi type Test case Generation tool)-整列
図1.テスト設計仕様書とテストケース仕様書を1つの画面に表示する

こうすることによって、テスト実施中にたびたび2つのワークシートの切り替えを行なう必要がなくなり、紙にプリントアウトする必要もなくなります。