第130回: CFD法 その3(同値図 中編)
≡ はじめに
前回は、「CFD法 その2(同値図 前編)」と題し、「同値図」について紹介しました。
今回は、前回の続きですので、前回のnoteを読んでいない方は、読んでからの方がより理解できると思います。前回のポイントを復習します。
<前回のポイント>
・ 数値であっても数値でなくてもOK
・ 連続していてもしていなくてもOK
・ 排他的であってもなくてもOK
・ 補集合を考えざるを得なくなる
図で言えば、キャッチイメージに「小学生か?」と「年齢は?」の2つの大きな四角い枠がありますが、それぞれが同値図です。同値図を線で繋いだ全体の図を「CFD」と呼びます。
・ 「小学生か?」の同値図には、「Yes」と「No」の2つの同値クラスがあります。
・ 「年齢は?」の同値図には、「12歳」と「6歳」と「不明」の3つの同値クラスがあります。
≡ 同値クラスは排他にする
前に、「同値」について詳しく書きました。
同じとみなせる関係を持つ要素について、同値と呼び、その要素のまとまりを同値クラスと呼びます。(JSTQBでは同値クラスのことを同値パーティションと呼びます。)
ベン図を見てみます。こちらは松尾谷徹さんの資料からです。

左のベン図に同値クラス(図では“同値原因の集合”という表現になっています)が4つあることに注意してください。
「¬A && ¬B」、「A && ¬B」、「¬A && B」、「A && B」の4つ(順番は表に合わせました)です。AとBが重なっているところを同値クラスに分ける点がポイントです。
注意) CFD法を知らない人にこのベン図を見せて、同値クラスはどれですか? と質問すると、AとBの2つだけを挙げる人が多いです。上に書いたとおり4つです。
「¬」記号に馴染みがない人がいらっしゃるかもしれません。論理記号の「not」です。プログラム言語では「!」で表すことが多いです。「&&」は「and」の意味です。
4つの同値クラスがあるので、表は4行(見出し行は除く)になり、4つの評価結果が書いてあります。
同じものは同じ結果になるため、4つの同値クラスには4つの結果です。(結果と言わずに、機能や処理と言っても、だいたい合っています)
※ 同じ結果になっても構いませんので、4つ以下の結果と書いた方がより正確です。ただ、本当に同じ結果になるのなら、その原因となっている同値クラスはまとめてしまっても良いかもしれません。
これまでの説明を読んで、当たり前な感じがしたと思います。でも、ベン図をツリー構造で描くと案外複雑です。

AやBの上にある横線はnotを意味します。
クラシフィケーションツリーで、集合AとBの重なり「A ∩ B」を表現しにくいというのはこういうことです。
クラシフィケーションツリーが悪いといっているわけではありません。念のため。
このような構造のことを「ツリー構造」ではなく「ラティス構造」(格子状の構造)といいます。
ガーデニングをされるかたは「ラティス」(斜め格子のフェンスなど)でお馴染みのラティスです。
ちなみに、上にある表についてのCFDは次のようなものとなります。

1枚のベン図が二つの同値図に分かれていますが、プログラミングのときに、順番に判断する(if文を書く)だろうということです。CFDの回の時にわかればOKなので、今は雰囲気だけで大丈夫です。
≣ 終わりに
今回は、「同値図」の続きでした。書いていたらちょっと難しめの話になってしまったので、具体例は次回にします。
難しいけど、ここがCFD法の大切なポイントのひとつなので、先を急がずにゆっくり納得がいくまで読み返してください。
1番大切なことは、「同値クラスは重ならない」というですので、それだけは忘れないでください。
