ソフトウェアテスト勉強会~やってみよう!デシジョンテーブル&状態遷移~ | 仙台ソフトウェアテスト勉強会のブログ

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

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

本日はソフトウェアテスト勉強会~やってみよう!デシジョンテーブル&状態遷移~編。
今回はJSTQBの第4章の中のデシジョンテーブル&デシジョンテーブについて勉強してみました。
シラバスだけだとちょっとしか書いてないですからね~
やっぱり実際にやってみないとということで!!


今回のおやつも鯛きちの季節限定「ハムマヨたい焼き」。
20個購入して、後ろのカップルがムッとしたらしいです。
そして今日も誕生日近い人がいました。おめでとうございます♪


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


さて、それではまずはデシジョンテーブル!聞いてみると知っている人は意外に少なかった。。。
ということで、現代の理想の結婚相手をデシジョンテーブルにしてみました。
近頃は三高じゃなくて、三低なんですってね。


仙台テスト勉強会のブログ




簡単に説明したところで早速、いつものように問題を!手を動かすのです!
********************************************************
S市杜王町のとある美術展の入場料金は2000円であるが、以下のような割引がある。

クーポンを持参している人は10%割引である。

平日の場合は誰でも20%割引である。学生は学割で30%割引である。

クーポンを持参した学生は40%割引である。
この美術館の料金確認システムをデシジョンテーブルを使って考えてください。
********************************************************


最初の問題なので、結構苦戦していました。
見てみてると場合分けが足りなかったり、ロジックがおかしかったり。
2*2*2の場合分けでも思ったより大変なんですよね。


その後、ちょっとしたコツをお伝えしました。


・コツ1 ○/×を使う。

普通はY/NやT/Fなのですが、パッと見ると区別がつかないんですよね。見やすいところがいいですね。Y/NやT/F使うときは色を使うと区別がつきます。
・コツ2 条件部を機械的に書く。

これは綺麗に書いておくと見直しやレビューのときに楽なんですよねぇ。


さて、実際にデシジョンテーブルに書き起こしてみると・・・
問題に書かれていないところが見えて来ました。
正直、自然言語だとモレ・ヌケを見つけるのは難しいです
これを全部埋めた人は、↑の部分は自分の判断で割引率を決めたことになります。
実際の仕事のときはしっかり確認してくださいね。m(__)m


で、以下の仕様を付け加えました。
「ただし、割引が重複した場合は割引き率の高いものを優先する。」


さて、ここからザ・ハンドを使って圧縮をしていきます!!
圧縮は「この条件に寄らない」ところを一緒にしていきます。

でもこの圧縮には要注意です。
テストの目的によって、圧縮するかしないかを考えないといけないです。
もしバグを出すことが目的であれば、全ての組み合わせを実施する必要があります。
圧縮した箇所にバグが潜んでいることもありますね。
もちろん仕様の整理のときに使うのであれば、圧縮して分かりやすくしておきましょう。


圧縮した表を得る技法としてはCFDというものがあります。
自分もまだモノにしていないので、いつか勉強会でやってみたいと思っています!

CFDだと以下のサイトが参考になると思います。
◇組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題
<http://ameblo.jp/pictmaster/entry-10893573420.html >
◇ソフトウェアテストの勉強室
<http://softest.cocolog-nifty.com/blog/cat8095885/index.html >


そしてデシジョンの問題②
********************************************************
東京のとある美術展の入場料金は2000円であるが、以下のような割引がある。

クーポンを持参している人は10%割引である。平日の場合は誰でも20%割引である。

学生は学割で30%割引である。65歳以上のシニアの人はシニア割で50%割引である。

また特別招待券を持っている人は無料である。

ただし、割引が重複した場合は割引き率の高いものを優先する。
この美術館の料金確認システムの仕様をデシジョンテーブルを使って考えてください。
********************************************************

この問題の狙いはY/Nだけじゃなくて、同値分割できる場合は単語を書いてもいいんだよということを伝えたかったのです。
しかーし、各条件に関連がない&&問題の割引率が小さい方から綺麗に増えていったために、ほとんどの人が綺麗な圧縮した図を一発で書いていました。
なるほど!勉強になりました。



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


さて続きまして状態遷移。
JSTQBの説明では「現在の条件や前の条件、システムの状態により、システムは全く異なる動作をする。この場合システムの動作は状態遷移図で表現できる。」とあります。
また「状態遷移表は状態と入力の関係を示し、不正な可能性のある遷移を明確にすることができる。」ともあります。

状態遷移テストをするためには、図と表が必要なんですね。この二つはセットです。
状態遷移図はエンジニアが分かりやすく、状態やイベントを出すときには効果的だと思います。一方、状態遷移表の方は、洗い出した状態、イベントの組み合わせのときに問題ないかを見るのに適していると思います。あとは状態遷移は遷移イベントが連続したときに不具合が起こることがありますので、気を付けてください!


早速問題にいきます。
********************************************************
ストップウォッチ(商品名:ザ・ワールド)は以下の仕様となっています。
このときこのストップウォッチの状態遷移図と状態遷移表を作ってください。

<仕様>
・ストップウォッチには[S]ボタンと[R]ボタンの2つのボタンがある。
・初期表示では00:00が表示されている。
・[S]ボタンを押下すると計測を開始する。
・計測中に[S]ボタンを押下すると計測を一時停止し,計測結果時間を表示する。
・結果表示中に[S]ボタンを押下すると計測を再開する。
・結果表示中に[R]ボタンを押下すると
計測結果時間をリセットし、00:00を表示する。
********************************************************

最初は原作に忠実に止めてから9秒経つと動き出す仕様にしたのですが、知らない人にとってはあまりに不思議な仕様なので止めました(笑
9秒しか一時停止できないストップウォッチって一体・・・
<http://thespwfoundation.web.fc2.com/stand-za.htm#theworld >


このストップウォッチは[S]ボタンで計測を開始したり、計測を止めたりしています。
これはソフトウェアの“状態”によるものなんですよね。

その後、カバレッジの考え方を説明しました。
◇ノード網羅
1つの状態のみを全て網羅する ※イベントは問わない
◇リンク網羅(0スイッチカバレッジ)
2つの状態と1つイベントの組み合わせを網羅する
◇1スイッチカバレッジ
3つの状態と2つのイベントの組み合わせを網羅する



さて、続いて本日のメインイベント!!
テスト界隈で話題になった通称"マリオチャート"です。


今回は状態遷移図をUMLのルールを参考にしながらの演習です。
テスト(設計)もモデリングなので、UMLくらい使えなきゃですね!

お題はTEF道のワークショップから借りていますが、少し変更してます。
********************************************************
スーパーマリオブラザーズ©任天堂におけるマリオの状態遷移図を作成してください。

<仕様>
・ゲームスタート時はチビマリオ。
・チビマリオはキノコを取るとスーパーマリオ。
・スーパーマリオがファイヤフラワーを取るとファイヤマリオ。
・スターを取ると、無敵マリオ。(時間が来ると元のマリオの状態に戻る)
・スーパーマリオとファイヤーマリオは、敵に当たるとチビマリオ。
・チビマリオは敵に当たると死亡。
・どのマリオも穴に落ちると死亡。
・どのマリオも制限時間が過ぎるとタイムアップで死亡。
・死亡した場合は残りマリオが居る場合はチビマリオでリスタート、いない場合はゲームオーバー。
・新しいステージは前ステージクリア時のマリオと同じ状態で開始。ただし無敵マリオは普通の状態に戻る。
********************************************************


今回は参加者の中に一人マリオをプレイしたことが無い人が居ました。ゴメンナサイm(_ _)m

でも、このお題はやっぱり面白くて、色々出ますね~
やりこんだ人とちょっと知っている人の差も出ているようです。

youtubeの最速マリオクリアを見ながら状態遷移図を書いていきます。

個人的には今回初参加の女性の方の図が本当に綺麗でビックリしました!!


自分が書いた例は以下のようになっています。



仙台テスト勉強会のブログ


ポイントは階層化、遷移の条件、Historyですね。
ただし、まだ上手く表せていないところがあると思います。
・新しいステージは前ステージクリア時のマリオと同じ状態で開始。ただし無敵マリオは普通の状態に戻る。
この条件を状態遷移図に表現するのが難しいですね。

もし良い書き方があれば教えてくださいm(_ _)m

そうそう参加者から他の人の状態遷移図も見たいというリクエストあったので、公開できそうな分は公開していきたいと思います。

また演習ではできなかったですが、表にしてみました。


仙台テスト勉強会のブログ



この場合は顔マークのところが仕様で気になるところですね。
・チビマリオがファイアフラワーを取ったらどうなるのか?
・無敵状態のマリオがスターを取ったらどうなるのか?

やっぱり状態遷移図では気付かないところが、状態遷移表で気づくんだなぁと思った次第。こうやって状態遷移図と状態遷移表を交互に行ったり来たりしながら、作り上げていくんだと思っています。


といったところで本日の勉強会も終わりです。
平日の夜に本当にどうもありがとうございます。
みんな真剣に取り組んでくれるので本当に嬉しいです。


次回の12月の勉強会ですが、前回の鈴木三紀夫さんに続いて、今回もスゴイ人をゲストに呼んでいます。なんと!HAYST法、テスト技法ドリルの著者である秋山さんです。
デシジョンテーブルのところでも気になった人がいると思いますが、現場のソフトウェアはパラメータが多すぎて表を書いても、大きくなりすぎて使えないことが多いです。
全部の組み合わせやりますか?そういう訳にはいかないですよね。
ということで、テスト技法の使いどころと組み合わせのテスト技法を演習を通して実施してもらう予定です。


いやー 楽しみですねぇー やってて良かった勉強会っ!!

それでは来月もお待ちしておりますm(__)m