見出し画像

第132回: CFD法 その4(同値図 後編)

≡ はじめに

前回は、「CFD法 その3(同値図 中編)」と題し、「同値図」についてベン図との関係など、紹介しました。
今回は、前回の続きですので、前回および前々回のnoteを読んでいない方は、読んでからの方がより理解できると思います。

古畑任三郎の再放送を観ていたら、玉置浩二がゲストの回でした。コメディ編ですし、西園寺刑事が主役の回でしたので、物足りないと言えば物足りないのですが、割と好きな話です。

ストーリーの舞台は、日本に戻る国際線の機内です。ある意味、密室です。犯人を見かけたという少年を西園寺刑事が連れて乗客全員の顔の確認をしてもらいますが、少年は「ボクが見た人は居ない」と言います。西園寺刑事が古畑任三郎に相談します。

古畑さん。
乗客全員の面通しをしたのですが、犯人が見つかりません。
いったい犯人は、どこに消えてしまったのでしょうか??

すると、

んー。
乗客に居ないのなら乗務員は調べてみた?
それが論理ってものでしょう?

と古畑任三郎がこたえます。これが同値分割です。

古畑任三郎はテスターとしてもそこそこいい仕事をするのではないでしょうか? ←なんで上から目線!?


≡ 容疑者の同値図

それでは、容疑者を見つけるため、同値図を描いてみましょう。

まず、全体を飛行機の搭乗者とします。全体を表す四角形を描いて名前をつけるだけです。

キャプチャ

古畑任三郎は、これを「乗客」と「乗務員」に分けました。
こんな同値図になります。

画像2

西園寺刑事は「乗務員」について面通しをしていませんでした。

常識的に乗客に犯人がいると考えるのは自然なことです。ただし、テストでの抜け漏れ防止には常識を疑うところが大切かもしれません。

さて、前回、前々回と補集合の話を書きましたからこういう同値図を思い浮かべた方がいらっしゃると思います。

画像3

飛行機の中に乗客と乗務員以外が乗っているとは思いにくいですが、グレムリンがいるかもしれません。

画像4

もっと言うと、補集合には、離陸前に機内に入って仕掛けをした人が当てはまるかもしれません。そういう意味では、補集合付きで同値図を描いておいて、検討後に消すようにしたほうがベターです。

例えば、「性別」について、男女の2通りと思いきや、規格(ISO 5218)では以下の4通りです。

0 = not known(不明)
1 = male(男性)
2 = female(女性)
9 = not applicable(適用不能)

余談ですが、『なぜ急に“グレムリン”?』と思った方は、この回の古畑任三郎を観ましょう。ネタバレしても良い人は「古畑任三郎 玉置浩二 グレムリン」でググると少し分かります。

さて、今回の同値図としては、これで良いと思います。これというのは、こちらです。

図形が全部、四角形なのが気になる人がいらっしゃるかもしれません。全体を表す外枠は四角であることがほとんどですが、中の集合を表す図形は楕円形でもいいです。単に描きやすいから四角にしているだけです。大きさも適当です。要素の数に合わせて変えても良いと思います。

画像5

繰り返しになりますが、補集合がないことが明らかな場合は補集合を描く必要はありません。例えばエアコンのモードが、冷房、暖房、除湿、送風の4つであることが明確なら以下の同値図のようにして補集合は描きません。(後で自動が見つかったら加えたら良いです)
なんなら、同値図の代わりにエアコンのリモコンの写真を貼り付けても良いです。CFDの記法(ノーテーション)はとても緩いものです。ノーテーションが緩いと、人には優しいのですがツール化が困難となります。

画像6

さて、「飛行機の搭乗者」の同値図を詳細化することが出来ます。例えば乗客をファーストクラス、ビジネスクラス、エコノミークラスに分けたり、乗務員を客室乗務員と航空従事者(コックピットクルー: 操縦士(機長・副操縦士)・航空機関士・航空通信士)に分けることができます。同値図を描くときにはこのように徐々に細かく分割していくのがコツです。クラシフィケーションツリーやテスト観点ツリーを描くときと同じ要領です。

要領を忘れてしまった人は、区分原理を復習しましょう。こちらにも易しく書いています。

画像7

こんな感じになります。容疑者を絞り込むための図としては細かすぎますね。

このように、徐々に細かく分割していくことを松尾谷徹さんは「ズームイン」と呼びました。(分ける粒度を粗くする方は「ズームアウト」と言います)

ズームインとズームアウトは、「具体化」と「抽象化・概念化」の比喩だと思いますが、「テストしたいところにピントを合わせるフォーカスの方が適当なのでは?」というご意見を読んだような気もします。

どこまでズームインするのかについては、要求や仕様書もしくはコードから適切に判断する必要があります。

大切なことは、クラシフィケーション(=分類)を階層的に続けて、クラス(=パラメータ)を見つけることだと思います。
言うは易く行うは難しで、同値分割で頭を使うところですね。

ズームイン・ズームアウトの粒度は、テストの粒度に直結します。粒度が粗ければバグの見落としにつながりますし、粒度が細かすぎれば無駄なテストが増えます。したがって慎重に検討します。容疑者の絞り込みが目的でしたら、乗客について座席の1階と2階で分けたり、子供と大人で分けても良いかもしれません。← 分類の軸を見つけることも大切です。

同値図の作り方とズームイン、ズームアウトについて説明しました。次は、ソフトウェアテストの例です。


≡ 五十日と一六日

次の仕様のテストを考えてみます。

<仕様>
この装置は、五十日には駐車代の10%割引券、一六日には20%引きの商品クーポン券が出る。

※ どちらの券も当日のみ有効のものとする

簡単そうですが、言葉の意味が分からないかもしれません。Wikipediaを引用します。

■ 五十日(ごとおび)
毎月5日・10日・15日・20日・25日と、30日または月末日のことである。

■ 一六日(いちろくび)
日付の下1桁の数字が1と6の日であるが、31日は含めない。

五十日の月末の定義が曖昧ですよね。月末には、28, 29, 30, 31と4パターンあります。今回は、単純に「毎月5日、10日、15日、20日、25日、月末日を五十日とする」という仕様とします。

五十日は、お給料日や振り込み期日のことが多いので道路が混みがちです。そこで、駐車代の割引券を出すことで客を呼び込もうというアイデアです。(私も前職の給料日は25日で現職は10日です)
一六日は、(週休1日が普通の明治時代は)お休みの会社もあったそうです。
給与が入ってお財布の紐が緩いことが期待できるので“商品クーポン券”を発行して購買意欲を高めようということです。

自分で考えたい人がいるといけないので、こちらの同値図の解答例は次回に掲載します。

余裕がある人は、数直線とクラシフィケーションツリーでも表現してみてください。違いと使いどころがよくわかると思うので。


≡ おわりに

同値図についてはこれで終わりです。次回はCFD(Cause Flow Diagram)の描きかたについて説明します。有効系と無効系の説明もする予定です。

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