ソフトウェアの品質を学びまくる2.0

ソフトウェアの品質、テストなどについて学んだことを記録するブログです。旧ブログからゆっくり移行中です。http://blog.livedoor.jp/prjmng/

今度はCFD法に手を出してみる - その1

 第4回「ソフトウェアテスト技法ドリル」勉強会のテーマは、CFD(Cause Flow Diagram)法。以前の記事で触れた原因結果グラフと同じく、デシジョンテーブルを導くための方法です。

www.kzsuzuki.com こういう、絵を描く分析が苦手なわたしですが、CEGTestを開発したNiftyの加瀬(@softest)さんが、CFDを描くためのWebアプリケーションも開発中であらせられる!(しかも見た目がカッコヨイ)ので、絶賛期待中です。

 ともあれ、勉強してみます。

フローチャートとCFD

 秋山(@akiyama924)さんの『ソフトウェアテスト技法ドリル』によると、CFD法の提唱者である松尾谷氏は、フローで論理を表すことができるようにとこの方法を発想したそうです(参考資料=PDF)。実際CFDは、本質的にはフローチャートと同じもののように思えます。違うのは、OR条件の表現。
 これまであまり意識したことがありませんでしたが、フローチャートって、菱形で表される条件文をひたすらANDで結んでいくものなんですね。たとえば閏年の判定だと、対象の年Yが、
「【4で割り切れる】が真」かつ「【100で割り切れる】が真」かつ「【400で割り切れる】が偽」
なら平年。
 このように、フローチャートはANDをベースにする表現方法なので、ORは直感的に表現しづらい。
 この点で、CFDのいいところは、ORで結ばれた命題を直感的に表現することができ、かつそれを「ズームアウト」してブラックボックス化することができることでしょうか。

宿題を解いてみる

 では、宿題を取り組んでみることにします。
政党とは、政治団体のうち、所属する国会議員(衆議院議員又は参議院議員)を5人以上有するものであるか、近い国政選挙で全国を通して2%以上の得票(選挙区・比例代表区いずれか)を得たもの [Wikipedia一部抜粋]
 原因結果グラフで考えたときと同様、ここでも命題を抽出することにします。
  • Effect:政党である
  • A:政治団体である
  • B:所属する国会議員を5人以上有する
  • C:近い国政選挙で全国を通して2%以上の得票を得ている
で、Effect⇔A∧(B∨C) となります。CFDもメインの流れはAND条件なので、ORを消すために
  • D:議員・選挙の要件を満たしている ⇔ B∨C
と置き換えましょう。それで書いたCFDは以下です*1。Excelでお絵かきすると、たくさんの方々からバカにされそうですが・・・。

1-1_5f16daf7

 このCFDから、ルートを洗いだしていくと、次のようなデシジョンテーブルになりました。

1-2_178b0b2c

 CFDではORで結ばれる命題が対等な関係のように表現されますが、実際には「B:所属する国会議員5人以上」が偽と判定されて初めて、「C:国政選挙で2%以上の得票」が評価されているというところは注意点でしょう。
 以前の記事に書いたように、原因結果グラフから作るカバレッジ表では、A∨BについてAとBの両方が真になるような真偽パターンは省略されますが、CFDでもAが真になった時点でBは評価されないので、同じことになるのですね。

行き詰まり、CEGに走る

 さて、ここで行き詰まります(よく行き詰まるブログだ)。
 Cの「国政選挙で2%以上」をさらに、
  • E:選挙区で2%以上
  • F:比例代表区で2%以上
のOR条件として表現したい。とすると、
Effect⇔A∧(B∨(E∨F))
という入れ子の論理式になります。それはそのまま、CFDのノードが入れ子になるということ・・・。
 これはちょっと、描く気がしません。
 この点では、CEGが優れていると思います。入れ子構造は、単純にツリーが左側に広がっていくだけだからです。CEGTestで描くと、こんな感じでしょうか。ノード名は適当です。

1-3_994d648e

 CFDで直感的に表現される処理の流れは、CEGにおけるREQ制約に相当するということで、「政治団体である」ことが真になった後で評価されるノードにはすべてREQ制約を付けることになります。その煩雑さが、今度はCEG側の弱点のように思います。『ドリル』の図3.3「Myersの三角形問題」も、かなり入り組んでいます。
 うーむ、どうすればいいんだ・・・。
 ということで結論は、「出題された宿題は、入れ子をどう表現していいかわからず、答えられませんでした」。劣等生すぎ。
 
 「その2」はコチラです。

www.kzsuzuki.com

*1:申し訳ありません、この解答は間違っているようなので、「その2」もご覧ください。(2011/4/4追記)