ソフトウェアテスト勉強会~デシジョンテーブルを自動で書いてみよう!(原因結果グラフ編)~ | 仙台ソフトウェアテスト勉強会のブログ

仙台ソフトウェアテスト勉強会のブログ

2012年から立ち上げた仙台ソフトウェアテスト勉強会のことなどを綴っていきます。

今月のテーマはデシジョンテーブルを自動で書いてみよう!ということで、CEGTestというツールを用いて、デシジョンテーブルを自動的に書いてみました。


場所は今回も楽天さんをお借りました。いつもありがとうございます!
今回は14名の方が参加してくれました。


仙台ソフトウェアテスト勉強会のブログ


最初にいつものポジショニングマップを使い、デシジョンテーブルと原因結果グラフを確認しました。
http://www.hayst.com/Pages/positioning.aspx テスト技法ポジショニングマップ

参加者の中にデシジョンテーブルを知らない人は居なかったのですが、まずはデシジョンテーブルを書いてみました。


***************************************************
[ニート(厚生労働省の定義)]
・15歳~34歳、未婚であって家事・通学をしていない人
・学籍はあるが、実際は学校に行っていない人
・既婚者で家事をしていない人
出典)ソフトウェアテストの勉強室
***************************************************

これ実は自分でデシジョンテーブル書くと2の5乗で32通りでますので結構大変です。


続きまして、原因結果グラフの説明です。

英語ではCause-Effect Graph(CEG)。電子回路で使われていたブールグラフをテストに応用し、ブールグラフから単純な規則を使ってデシジョンテーブルを作成するというアイディアが生まれた。このソフトウェアテストの世界で利用するブールグラフのことを原因結果グラフという。
ソフトウェア技法ドリルより



さて、それでは説明もそこそこに早速書いていきましょ~
最初の問題はログインの問題です。
今回はCEGTestはZIP版を使用しました。

※質問で出ていた大文字'F'と小文字'f'の違いは以下のリンク先で解説が載っています。

CEGTest画面について

***************************************************
[ログイン]
ユーザIDとパスワードの両方が正しいときに
ログインに成功する
出典)ソフトウェアテスト技法ドリル
***************************************************


その後は再度ニート問題に挑戦!!
少しヒントを出すとすんなり描けてる人が居ました。
今日は梅ちゃんがツールの使い方のサポートしてくれたおかげでかなり助かりました。



続いてオフサイド問題
***************************************************
[オフサイド]
オフサイドというルールは、「オフサイドポジションにいる選手に対して、

パスを出す事を禁止する」というものである。

ここで「オフサイドポジション」とは以下の条件を全て満たした位置の事を指す。
・相手陣内にいる
・ボールより前にいる
・相手の2番目に後ろの選手よりゴールラインに近い位置にいる
出典)ソフトウェアテストの勉強室
***************************************************



ここで5つの制約について説明。


仙台ソフトウェアテスト勉強会のブログ


通常のデシジョンだと表現できない制約がこの原因結果グラフ(CEGTest)では表現できます。これを覚えることでありえないテストケースを除外することができるんです!!
たとえば、19歳以下かつ20歳以上って言う人は居ないですよね?
これはどちらか一方を必ず選ぶということでONE制約になります。
制約をつけた場合は19歳以下と20歳以上が同時にTrueになることがなくなります。
うーん いいね!!


全ての制約を扱うことができないけど、まずはONE制約から。
***************************************************
[チケット] ※ONE制約を使う
杜王町の美術展の入場料には以下のような割引がある。
18歳以下は学割で10%割引である。
65歳以上のシニアの人はシニア割で20%割引である。
19歳以上、64歳以下は特に割引はない。
またクーポンを持参している人は10%割引である。
ただし、割引が重複した場合は合算した割引率を適用する。
***************************************************



仙台ソフトウェアテスト勉強会のブログ

[2013/08/28 秋山さんの指摘により追記]

この問題ですが、実は年齢の割引とクーポンの割引には論理的な関係がなく、

単純に足し合わせたものが結果になっています。これを要因の加法性というようです。

この場合は原因結果グラフで考えた場合、それぞれが独立になりますので、以下のグラフになります。

この問題に関してはオリジナルで作りましたが、原因結果グラフの演習としては少し良くなかったです。

(全てを分かって問題を出していれば、カッコよかったのですがw)


仙台ソフトウェアテスト勉強会のブログ


続いて、EXCL制約を使った問題。
***************************************************
[インストールの仕様] ※EXCL制約を使う
Administratorまたは、Power Userがログインしている場合に、
ディスク容量があれば、インストールを開始することができる。
出典)ソフトウェアテストの勉強室
***************************************************


ここで参加者からEXCL制約の場合には自分で[その他]というノードをおくと
ONE制約と同じになりますよね?という質問を受けました。
そうです。ONE制約にその他を追加し、その他がTrueのときと、EXCL制約で全ての原因がFalseは同じことをあらわしています。


もう一問を残してここで時間切れ。

そうは言っても2時間で結構テンポ良くできたと思います。


以下のまとめと自分の感想を述べました。


・仕様を整理することで、仕様バグを見つけることができる

・網羅度の高いデシジョンテーブルを自動で作ることができる

・ツールが使えない状況だと、このテスト技法を選ばないほうが良い

・バリバリの開発者だとコード書いたほうが早いかもしれないが、新人の開発者などが仕様の整理するために使える

・中間ノードを考えることで粒度をそろえることができ、メソッドを作るときのインプットにできる


今回参考させていただいたソフトウェア技法ドリルの著者の秋山さん、何かあったら聞いてくださいと応援してくれたソフトウェアテストの勉強室の加瀬さん、どうもありがとうございました。


最後はビアバッシュをしながら今日も色々な話をしました。
今月も本当に楽しい勉強会でした!!

10月には記念すべき20回目になる予定です。(○´ω`○)ゞ
これからもよろしくお願いします!


今回参加してくれたmokkyさんがブログを書いてくれました!

嬉しいですね。いつもありがとうございます♪

http://mokky14.hatenablog.com/entry/2013/08/27/003504