第229回: 「ソフトウェアテストしようぜ」42 CEGTest(12.制約INCL)
◀前の記事へ 次の記事へ▶
≡ はじめに
前回は、「制約EXCL」がテーマでした。
制約EXCLは、「制約ONEにすべてがFalseのケースを追加したもの」でした。言い換えると、「制約EXCLで結ばれた原因ノードは排他的であり同時に”存在する”ことができない。ただし、“すべてが存在しない”ことは可能である」というものでした。
文章だと複雑に見えますので、前回提示した、シフォンケーキセットの例を再掲します。制約ONEと制約EXCLの両方がある原因結果グラフですので、両者の違いを理解し、使い分けられるようになりましょう。
また前回は、EXCLとXORとの違いについても説明しました。3つのノードが全てTrueのときに「EXCLではN/A」、「XORではA」になるという違いです。
ところで、EXCLとXORとの違いについての説明はしましたが、EXCLの方を「制約ONEの特殊ケース(全部Falseが存在する)」ということだけを覚えていれば十分です。
さて、今回は、5つの制約である、「ONE」、「EXCL」、「INCL」、「REQ」、「MASK」のうち「INCL」について書きます。
制約INCLは、「指定したノードを包含する」という制約です。
(といわれても、、、という感じだと思いますが、ぉぃぉぃ分かります。)
まずは、制約INCLについて説明し、続いて、うっかり間違えやすい落とし穴について書きます。
≡ 制約INCLとは
前回と同様に、まずはドリル本に載せたものを示します。
下図はイベントの来場目的のアンケートシートです。複数の来場目的にチェックすることができますが、[その他]の選択肢があることから、一つもチェックしないことは許されないという仕様とします。このような制約を制約INCLでは取り扱います。
原因結果グラフを示します。
こうすることで、1つも選択されることがないことを制約条件とすることができます。
「ベン図」と「ベン図に対して同等な意味を持つ表」を載せておきます。
比較のために、制約ONEのベン図を再掲します。ベン図の黄色い範囲の違いに注目してください。あと、表の「制約結果: A」の違いにも注目してください。
見比べると「全部FのケースがN/A(適用不可)」である点が共通しています。そういう意味で「制約INCLは制約ONEの複数版」と考えるのがよいでしょう。
制約ONEは「必ず1つだけがTの状態(+全部Fのケースは存在しない)」でしたが、制約INCLは「少なくとも1つはTの状態のものがある(+全部Fのケースは存在しない)」の違いです。
制約INCLのイメージを持ってもらうために、もう一つ例をあげます。
以下のような原因結果グラフとなります。
ここで、制約INCLを制約ONEに変えても(ORで既に一つずつTのものになっているために)、CEGTestツールは全く同じデシジョンテーブルを生成します。ちょっと直感から外れるかもしれませんね。
■ 制約INCLの注意点
制約INCLのINCLは「inclusive」からきています。日本語で言えば、「包含的」です。
定義は上記の通りなのですが、CEGTestで、部分的に制約INCLを書けると、「なんでそうなるの?」と思うかもしれません。
実際にやってみましょう。
これは、まだ説明をしていないカバレッジ表を見ると意味が分かります。
ここでは、「味玉」と「メンマ」と「チャーシュー」に制約INCLをかけました。
OR演算子からつくられたカバレッジ表にある論理式4から7の行についてはどれも、「味玉がF」と「メンマがF」と「チャーシューがF」の組合せなので、それらの行(網羅)が現れなくなったということです。
論理式4は制約INCLによってテストできません。(下表参照)
ところが、論理式3をコピペして、「ほうれん草」のところを「F」から「T」に変えることで、制約INCLを保ったまま「ほうれん草」がTのテストをすることができます。(下表を参照してください)
実は上記に変更してテストをしたとしても、チャーシューのTが結果に影響しているのか、ほうれん草のTが結果に影響しているのかはわかりません。
したがって、敗者復活したテストケースは他のテストケースよりも優先度は下がったテストとなります。しかしながら、元のデシジョンテーブルのルール4のように、全部をTとするテストよりは、ほうれん草のTを確認しているように思います。
以上のことから、制約INCLを一部の要素にだけ指定するときには、自分が意図した結果になっているかデシジョンテーブルと、カバレッジ表を慎重に確認するようにします。
■ 制約INCLの使いどころ
ソフトウェアテストの場合には、制約INCLを使うことでテストを削減できることはほとんどありません。
しかしながら、組合せのモデルとして考えた場合、制約INCLを適切に付与した原因結果グラフは、プログラマーに対して実装の参考になる情報を提供することになります。
≡ おわりに
今回は、「制約INCL」の説明でした。
結論としては、「カバレッジ表を読めるようになるまでは、制約INCLは使用しない」ことをお勧めします。注意に書いたリスクがあるからです。
次回は、「REQ」を書く予定です。制約は全部で5種類なので、残りは、「REQ」と「MASK」2つです。
結論を先に書けば、「REQ」は、操作の順序を指定するときに使うものです。制約EXCLの次によく使います。
◀前の記事へ 次の記事へ▶
この記事が気に入ったらサポートをしてみませんか?