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

ソフトウェアの品質、ソフトウェアテストなどについて学んだことを記録するブログです。

『ソフトウェアテスト技法 練習帳』のデシジョンテーブルもクリアしたよ。

SAKURAKO - Piano Lesson. [Explored]

 『ソフトウェアテスト技法練習帳』のPart2「デシジョンテーブル」を一通り解き終えました。

 パラメタの単純な組み合わせから得られるフルのデシジョンテーブルから始まって、判定の順番がわかっている場合のテーブルの圧縮(簡単化)を学べるのはもちろんのこと、

  • 2.8: デシジョンテーブルの分割
  • 2.9: テスト設計における仕様不良の特定
  • 2.10: デシジョンテーブルテストにおけるfailからの欠陥箇所推定

という一歩進んだ題材も扱っていて、楽しんで解くことができました。

 なお2.1については一つ疑問が残ったので、メモしておきます。
 まあ、以下のツイートに書いたことがほぼすべてで、秋山さんからもリプライいただいているのでですが。

 2.1は、居酒屋のビールの価格がいくらになるかという問題です。
 仕様は以下の通り。

  • 通常、1杯490円で提供されます。
  • 16:00から17:59まではハッピーアワーのため、1杯290円で提供されます。
  • クーポンを使うと、利用時間にかかわらずはじめの1杯のみ100円で提供されます。
  • ハッピーアワーでもクーポンは利用できます。
  • その時点で最も安い価格で提供されます。 1杯目のビールの価格を表すデシジョンテーブルを作成してください。

 この問題を書き写しているだけで、とっても居酒屋に行きたくなってきました。恋しいぜ外食・・・。

 気を取り直して、解説ではまず、「クーポンありなし」「ハッピーアワー内外」の2値×2の4パターンで、フルのテーブルを導出しています。
 ここまではよいのですが、2.1.3の解説で、以下のように説明しています。

ロジックが明らかで、処理される順番が「クーポン利用」「ハッピーアワー」の場合、デシジョンテーブルは簡単化することができます。簡単化とは、結果が同じ動作になる組合わせがある場合、その組合わせを1つだけ残して、結果に影響を与えない条件を任意の値を表すマークである「-(ハイフン)」に置き換えることです。

 切り取ったこの部分だけ見ると妥当だと思うのですが、仕様をよく考えると、これは適切でない簡略化といえそうです。

 確かに今の仕様においては、ハッピーの290円よりクーポンの100円が安いので、クーポンありならハッピーは「結果に影響を与えない条件」になります。この値段設定が変わらないなら、処理される順番を確かめてテーブルを簡略化してもいいでしょう。

 ですが仕様はあくまでも、「最も安い価格」なのです。クーポンが常に優先される仕様ではありません。
 クーポンありでの価格がたとえば100円から300円になると、今度はハッピーの方が安くなります。この時に、プログラムの処理順を変えるでしょうか?
 そうではなく、ハッピーとクーポンのどちらが安いかを比較して、価格を決定するという実装の方が自然です。つまりこの問題においては、「処理される順番」を仮定すること自体が不自然であるように思えます。よってわたしなら、テーブルの簡略化はしません。

 ということで、「価格は変更されうるパラメタだよな」などと仕様の深読みをしていくのも、本書での「練習」の醍醐味と言えます。テスト設計には必ず唯一解があるわけではないので、著者の方々の提示する解答と異なっていたら、自分の解答の方が妥当だとする根拠を主張して議論する方が面白いですよね!

 なお仕様変更からテーブルアップデートについては、2.9でも扱っています。