≡ はじめに
前回は、「ペアワイズとの違い」をテーマに「直交表」と「原因結果グラフが生成したデシジョンテーブル」の比較をしました。結論をまとめると以下の通りとなります。
ただし、「ロジックと制約」を網羅する具体的手法については書いていません。今回から数回に分けて書く予定です。
ひょっとしたら以前書いた「デシジョンテーブルの簡単化」を思い出した人がいらっしゃるかもしれません。
はい。結論から言えば、「MC/DCを満たすことがロジックを網羅する鍵」となりますので、同じ話です。前回よりも詳細で丁寧な説明になるように書く予定です。
ということで、今回は、「ロジックと制約を網羅する」の前半にあたる「ロジックを網羅する」のさらに前編です。
さて、先にお断りすると、文字数の関係から今回は、Not関係までとなります。(目安としている4000文字/記事を超えてしまったためです)
ANDとORは次回となります。(ゆっくり・ゆっくり進みます)
≡ ロジックを網羅するとは
前回の最後のほうに書いたことを図にしてみます。
原因結果グラフをつくる目的はビジネス・ルールを図化し、そこから(簡単化した)デシジョンテーブルを作成することです。図にすることで、ビジネス・ルールの理解がしやすくなりますし、ビジネス・ルールの変更があったときに、原因結果グラフを直すだけでデシジョンテーブルが自動的に作り直されるメリットがあります。
デシジョンテーブルを作成する目的は、デシジョンテーブルをテストすることで、ビジネス・ルールが正しく実装されたことをテストして明らかにするためです。
≡ ロジックを網羅する具体例
前回は、以下の原因結果グラフを描きました。
以下のように複数の原因ノードが一つの結果ノードにANDやORのロジックで集約される形のほうが馴染みがあって、わかりやすいと思ったからです。
しかし、もっとシンプルに、原因と結果を線でつないだだけのものも立派な原因結果グラフです。前回の例題は下記の原因結果グラフでも表現できます。
もっとも、例題にある「組み合わせて使用する仕様」について表現されていないといえば、その通りです。
一方で、「太字」、「斜体」、「下線」の3つの機能の”単機能テスト”をモデル化したものとしては、つなげるだけで十分です。
「太字」、「斜体」、「下線」とも同じパターンなので、「太字」の原因結果グラフとデシジョンテーブルでロジックの網羅を確認してみます。
このときにCEGTestが自動生成したデシジョンテーブルは以下のとおりです。
デシジョンテーブルの#1, #2など 、列のことをルールと呼びます。
また、デシジョンテーブル内の「T」は「True(真)」、「F」は「False(偽)」を意味します。
さて、話をデシジョンテーブルに戻します。デシジョンテーブルを再掲します。
ルール1では原因である「太字にチェック」をT(True:真)にしたときに、「太字修飾された文字」という結果がTになるというテストケースを表しています。ルール2は「太字にチェック」をF(False:偽)にしたときに、「太字修飾された文字」という結果がFになるというテストケースです。
上記の原因結果グラフで表しているビジネス・ルール(のロジック部分)は、「原因が真のときの結果は真」、「原因が偽のときの結果は偽」の2つであり、デシジョンテーブルはその2つを網羅しています。
なお、このような1対1の関係にはNotの関係もあります。
ログインしているときに「ユーザーの新規登録」メニューは現れないという仕様のテストです。原因結果グラフはこうなります。
CEGTestツールではNotは線の色と「~」マークで表現します。論理記号のNotは「¬」なのですが、線上に描くと見ずらいためです。
「N」がふにゃっとして「~」になったと思うとわかりやすいと思います。
≡ おわりに
今回は、「ロジックを網羅する」の前編でした。ロジックはシンプルなものです。
ところで、1対1なものにいちいち原因結果グラフを使うのか?というとどうかなとも思うのですが、ユニットテストをつくるときは案外アリです。単純につくっていくことで漏れなくテストケースができていくからです。
次回は、今回の続きとなる「ロジックを網羅する」の後編となります。
残りのANDとORが網羅するものについて確認していきます。原因結果グラフの肝の部分です。
次回の話が腹落ちすると原因結果グラフが使いたくなりますので、分かりやすく書きたいなあと思います。