見出し画像

第228回: 「ソフトウェアテストしようぜ」41 CEGTest(11.制約EXCL)

◀前の記事へ 次の記事へ▶


≡ はじめに

前回は、「制約ONE」がテーマでした。

制約ONEはラジオボタンやメニューのように、常にどれか1つが選ばれているという制約でした。

MS Wordのフォントのスタイルとサイズを設定するGUI

例をあげて復習します。
上記は、フォントのスタイルとサイズを設定するGUIです。(12ptまでしか書いていませんが、実際にはもっと大きな値も設定できます)

サイズに制約ONEをかけたところ

文字の大きさは、2つのサイズを同時に取ることができません。文字のサイズという変数(パラメータ、もしくは、クラシフィケーション)は、{8, 9, 10, 10.5, 11, 12, 14, 16, 18, …}の要素(値、もしくは、クラス)を持ち、そのうちのどれか1つが常に選ばれています。制約ONEをかけるとデシジョンテーブルには、すべて「F」の列が現れなくなります。また、サイズは全要素のORですので、どれか一つは「T」であることが決まっていますので、サイズノードは必ず「T」となります。

もう一つのスタイルのほうですが、よく考えると、文字を修飾する機能としては、「斜体」と「太字」の文字修飾を同時にかけることができます。こんな感じです。

斜体+太字の文字修飾をしたところ

また、斜体も太字も行わないこともあります。

したがって、そのままでは、制約ONEは使えなさそうです。ところが、GUIのメニューに一工夫がされています。

MS Wordのフォントのスタイルを設定するメニュー

ご覧の通り、サイズの要素は、{標準, 斜体, 太字, 太字斜体}です。つまり、「太字斜体」という選択肢をつくることで、斜体と太字を同時に選択する操作(コントロールキーを押しながら順番に選ぶ)を回避しています。

以上の分析結果をもとにして、CEGTestでつくった全体の原因結果グラフとデシジョンテーブルを示します。

サイズとスタイルを組み合わせた全体の原因結果グラフ

上の原因結果グラフを見ると、中間ノードである「サイズ」と「スタイル」、結果ノードである「文字修飾」のところはみな「∨」(OR)となっています。

ところで、表の中に小文字の「t」があります。
今は大文字の「T」と同じと考えていて差し支えありません。気になる方は、CEGTestのヘルプなどをお読みください。

自由に組合せが取れる場合はOR」と覚えると良いでしょう。ANDの方は「組み合わせることで特別な何かが起こるとき」に使います。
前回の例では、「右手がグーで左手がチョキという原因のときに、(特別な)かたつむりという結果となる」ときにAND(∧)を使いました。

グーチョキパーの歌(かたつむり)

今回は、「ONE」、「EXCL」、「INCL」、「REQ」、「MASK」の5つの制約のうち「EXCL」について書きます。

はじめは、「INCL」とセットで説明しようと思ったのですが、「EXCL」は一番よく使うので、単独で書くほうが良いと思ったのと、長くなってしまったからです。

制約EXCLは制約ONEで上手くいかなかったときに使うことが多いです。まずは、制約EXCLについて説明し、続いて、前回同様、うっかり間違えやすい落とし穴についても書きます。



≡ 制約EXCLとは

前回と同様に、まずはドリル本に載せたものを示します。

実は、青ドリルと赤ドリルで違う例なんですよ!?
※ Wordのバージョンが新しくなって説明がしにくいGUIに変わっていたため、例を変えました。

青ドリル本より

「箇条書き」と「段落番号」は同時に選ぶことができません。そういう意味で制約ONEに間違えやすいのですが、制約ONEにしてしまうと、「箇条書き」か「段落番号」のどちらかになってしまいます。両方とも選ばないケースを出すために制約EXCLにします。
違いの理解を深まるために、ベン図とベン図に対して同等な表を載せておきます。

制約EXCLのベン図

前回の制約ONEと比較してみます。

制約ONEのベン図

A, B, Cの外側に色がついているかいないかの違いです。表で言えば1行目の全部「F」が許される(A)なのか、制約により適用できない(N/A)のかの違いです。

制約EXCLですが、設定してもしなくても出来上がるデシジョンテーブルが変わらないことが多いです。
というのは、ORのロジックについてTを一つだけ残りをFとしたルールを選んでいるためです。

ただし、大きく複雑なデシジョンテーブルの時には効いてくることがありますし、組合せモデルとしての原因結果グラフに表現しておくと、プログラミング中のプログラマーが原因結果グラフから制約があることを思い出し、制約仕様の実装漏れを防ぐことができますので、「制約EXCLなんて設定する必要なんてあるのかな?」と思わずに設定しておくことをお勧めします。

制約EXCLのイメージを持ってもらうために、もう一つ例をあげます。

その喫茶店では、アールグレイのシフォンケーキを頼むと、バニラアイスがついてきます。
バニラアイスには、お好みに応じて、以下の3種類のトッピングから1つを選ぶことができます。

トッピング種類: 抹茶パウダー、キャラメルシロップ、クラッシュナッツ

なお、+200円で、シフォンケーキセットとして、普通のドリップコーヒーか、エスプレッソをつけることができます。

※ 実際にはもっとトッピングの種類はありましたし、シフォンケーキもチョコレートシフォンケーキがあり、そちらにはバニラアイスではなく、生クリームが添えられていました。30年近く前にハマっていたお店なのですが、当時も老夫婦が切り盛りしていらしたので、もう店じまいしてしまっているかもしれません。

アンケートを取ってみました。

上のアンケート結果で、注目してほしいことは、「クラッシュナッツ」の人気が高いということではなく、「トッピング不要」という人が37.5%もいたということです。(もっとも16票ですから統計的な議論はできませんが……。)

アンケート結果から、トッピングが要らない人の要求にも応える必要があることがわかりました。

試しに、前回の制約ONEでつくってみます。

アイスのトッピング制約ONE

結果ノードである最後の行の「アイスのトッピング」は全部「T」(トッピングあり)となってしまっています。

このようなときにCEGTestでは、全部つくり直す必要はありません。制約の種類のみを変更することができるからです。
具体的には、制約ONEのノード上でマウスの右ボタンを押すと、下図のようなメニューが現れるので「[EXCL]制約に変更」を選びます。

制約の種類の変更

アイスのトッピングが無しのケース(#4列)が現れました。

制約EXCLに変更した結果



■ 制約EXCLの注意点

制約EXCLのEXCLは「exclusive」からきています。発音は、「iksklúːsiv | eksklúːsiv」ですから、「イクスクルーシヴ、エクスクルースィヴ」のどちらでもOKです。「exclusive」は日本語で言えば、「排他的」です。

「排他的」というとXOR(排他的論理和)という論理演算子を思い浮かべる人がいるかもしれまん。
ところが「EXCL」と「XOR」はちょっと違います。以下は3つの信号(A, B, C)を受けて、XORの演算結果を出力(Q)する真理値表です。

EDUCBAの「XOR gate」のページより

違いが分かりにくいと思いますのでベン図込みで描きます。

EXCLとXORの違い

ベン図の中央に着目してください。上図のように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の説明の中に、

親ノードに「状態F」が欲しいときには、制約ONEは使いません。

と書きました。この逆がほしいときに、EXCLを使います。つまり、

兄弟ノードが1つしか選べず、親ノードに「状態F」が欲しいときには、制約EXCLを使います。


≡  おわりに

今回は、「制約EXCL」の説明でした。

えっ? コーヒーとの組合せ(仕様の下記部分)が気になります??

なお、+200円で、シフォンケーキセットとして、普通のドリップコーヒーか、エスプレッソを付けることができます。

シフォンケーキセットの仕様の抜粋

答えを載せておきますね。
コーヒーの方は制約ONEであることに注意してください。コーヒーがF(コーヒーが付かない)シフォンケーキセットはありませんから。

ところで、「+200円は図にありません。試しに追加してみてください。

シフォンケーキセットの原因結果グラフとデシジョンテーブル


さて、ここまで読んで、「制約、案外簡単だな」という感想だといいなあと思います。実際、制約MASK以外は、そんなに難しくないと思うのですが、「慣れていないので、自信を持てない」ということはあるかもしれません。

「自信」を持つためには、「経験の有無」が重要な要素の一つとなります。
そして、「経験」っていうやつは、「はじめの数回は失敗するもの」に決まっています。
だから、CEGTestに自信を持つためには失敗を経験するのが一番です。

ところで、誰でも、失敗はしたくないと思うものです。そこで、経験の代わりに「ものがたり」を読んでいただいています。要は疑似体験というわけです。

次回は、「INCL」を書く予定です。制約は全部で5種類なので、残りは3つです。

◀前の記事へ 次の記事へ▶


この記事が気に入ったらサポートをしてみませんか?