第228回: 「ソフトウェアテストしようぜ」41 CEGTest(11.制約EXCL)
◀前の記事へ 次の記事へ▶
≡ はじめに
前回は、「制約ONE」がテーマでした。
制約ONEはラジオボタンやメニューのように、常にどれか1つが選ばれているという制約でした。
例をあげて復習します。
上記は、フォントのスタイルとサイズを設定するGUIです。(12ptまでしか書いていませんが、実際にはもっと大きな値も設定できます)
文字の大きさは、2つのサイズを同時に取ることができません。文字のサイズという変数(パラメータ、もしくは、クラシフィケーション)は、{8, 9, 10, 10.5, 11, 12, 14, 16, 18, …}の要素(値、もしくは、クラス)を持ち、そのうちのどれか1つが常に選ばれています。制約ONEをかけるとデシジョンテーブルには、すべて「F」の列が現れなくなります。また、サイズは全要素のORですので、どれか一つは「T」であることが決まっていますので、サイズノードは必ず「T」となります。
もう一つのスタイルのほうですが、よく考えると、文字を修飾する機能としては、「斜体」と「太字」の文字修飾を同時にかけることができます。こんな感じです。
また、斜体も太字も行わないこともあります。
したがって、そのままでは、制約ONEは使えなさそうです。ところが、GUIのメニューに一工夫がされています。
ご覧の通り、サイズの要素は、{標準, 斜体, 太字, 太字斜体}です。つまり、「太字斜体」という選択肢をつくることで、斜体と太字を同時に選択する操作(コントロールキーを押しながら順番に選ぶ)を回避しています。
以上の分析結果をもとにして、CEGTestでつくった全体の原因結果グラフとデシジョンテーブルを示します。
上の原因結果グラフを見ると、中間ノードである「サイズ」と「スタイル」、結果ノードである「文字修飾」のところはみな「∨」(OR)となっています。
「自由に組合せが取れる場合はOR」と覚えると良いでしょう。ANDの方は「組み合わせることで特別な何かが起こるとき」に使います。
前回の例では、「右手がグーで左手がチョキという原因のときに、(特別な)かたつむりという結果となる」ときにAND(∧)を使いました。
今回は、「ONE」、「EXCL」、「INCL」、「REQ」、「MASK」の5つの制約のうち「EXCL」について書きます。
制約EXCLは制約ONEで上手くいかなかったときに使うことが多いです。まずは、制約EXCLについて説明し、続いて、前回同様、うっかり間違えやすい落とし穴についても書きます。
≡ 制約EXCLとは
前回と同様に、まずはドリル本に載せたものを示します。
「箇条書き」と「段落番号」は同時に選ぶことができません。そういう意味で制約ONEに間違えやすいのですが、制約ONEにしてしまうと、「箇条書き」か「段落番号」のどちらかになってしまいます。両方とも選ばないケースを出すために制約EXCLにします。
違いの理解を深まるために、ベン図とベン図に対して同等な表を載せておきます。
前回の制約ONEと比較してみます。
A, B, Cの外側に色がついているかいないかの違いです。表で言えば1行目の全部「F」が許される(A)なのか、制約により適用できない(N/A)のかの違いです。
制約EXCLのイメージを持ってもらうために、もう一つ例をあげます。
アンケートを取ってみました。
上のアンケート結果で、注目してほしいことは、「クラッシュナッツ」の人気が高いということではなく、「トッピング不要」という人が37.5%もいたということです。(もっとも16票ですから統計的な議論はできませんが……。)
アンケート結果から、トッピングが要らない人の要求にも応える必要があることがわかりました。
試しに、前回の制約ONEでつくってみます。
結果ノードである最後の行の「アイスのトッピング」は全部「T」(トッピングあり)となってしまっています。
このようなときにCEGTestでは、全部つくり直す必要はありません。制約の種類のみを変更することができるからです。
具体的には、制約ONEのノード上でマウスの右ボタンを押すと、下図のようなメニューが現れるので「[EXCL]制約に変更」を選びます。
アイスのトッピングが無しのケース(#4列)が現れました。
■ 制約EXCLの注意点
制約EXCLのEXCLは「exclusive」からきています。発音は、「iksklúːsiv | eksklúːsiv」ですから、「イクスクルーシヴ、エクスクルースィヴ」のどちらでもOKです。「exclusive」は日本語で言えば、「排他的」です。
「排他的」というとXOR(排他的論理和)という論理演算子を思い浮かべる人がいるかもしれまん。
ところが「EXCL」と「XOR」はちょっと違います。以下は3つの信号(A, B, C)を受けて、XORの演算結果を出力(Q)する真理値表です。
違いが分かりにくいと思いますのでベン図込みで描きます。
ベン図の中央に着目してください。上図のようにA, B, Cが3つとも「T」のときにEXCLはその組合せは制約を受けますので、出現しません。EXCLの定義が、「1つだけTと、すべてがF以外の組合せは取れない」だからです。
XORのほうは、「A XOR B XOR C」から「(A XOR B) XOR C」となります。
この式に3つの値がすべてTの場合を代入します。すると、「(T XOR T) XOR T」は「F XOR T」→「T」となります。
上に引用した「XOR gate」のページの最後の行の出力が1(T)となっている点に注目してください。
■ 制約EXCLの使いどころ
前回の制約ONEの説明の中に、
と書きました。この逆がほしいときに、EXCLを使います。つまり、
≡ おわりに
今回は、「制約EXCL」の説明でした。
えっ? コーヒーとの組合せ(仕様の下記部分)が気になります??
答えを載せておきますね。
コーヒーの方は制約ONEであることに注意してください。コーヒーがF(コーヒーが付かない)シフォンケーキセットはありませんから。
ところで、「+200円は図にありません。試しに追加してみてください。
さて、ここまで読んで、「制約、案外簡単だな」という感想だといいなあと思います。実際、制約MASK以外は、そんなに難しくないと思うのですが、「慣れていないので、自信を持てない」ということはあるかもしれません。
次回は、「INCL」を書く予定です。制約は全部で5種類なので、残りは3つです。