« 三角形問題の種類と使われ方 | Main | 三角形問題ではKent Beckにも見落としがあった! »

05 June 2011

三角形問題で必要なテストケース数

Myersは「ソフトウェア・テストの技法」で自己診断テストの採点用チェックリストを示しています。このリストには「xxxのテストケースをもっているか」という13の項目と、「期待出力結果を書いているか」という項目の合計14項目が書かれています。13項目の中には3つの整数値の入力順序を変える(permutation)ものが含まれているので別々に数えると、Myersのチェックリストに合格するには最低22個のテストケースが必要になります。
では、Myersの三角形問題の正解のテストケース数は22個なのでしょうか?

ソフトウェアテスト・ヒストリー(ソフトウェアテストPRESS Vol.8)のコラム「三角形問題の正解」で、米国のテスト・コンサルタントRoss Collardの"Exercise: Analyzing the Triangle Problem"を紹介しました。Collardは三角形問題のテストケース数について次のように書いています。

  • Paul Jorgensenは185個のテストケースを示している。
  • 私は4個で十分だと主張できる。
  • Kent Beckは彼の三角形問題のインプリメンテーションに対しては6個のテストケースで十分だと言い、Bob Binderの65個のテストケースと比べている。

  4人の専門家に依頼して、4から185の範囲の4つの異なる解答をもらって4人分のコンサルタント料を払うなんて悪い冗談だよね。

この4人のテストケースがどのようなものか調べてみました。

Paul Jorgensen
  "Software Testing: A Craftsman's Approach"のBoundary Value Testingの章で三角形問題に対するテストケースが掲載されています。この章で示されている"Worst-Case testing"手法でテストケースを作成すると次の数になります(minは下限値、maxは上限値、nomは中間値、+は1大きい、-は1小さい)。
 ・Worst-Case test case
  3辺の min, min+, nom, max-, max を全て組み合わせた125個(=5の3乗)
 ・Robust Worst-Case test case
  3辺の min-, min, min+, nom, max-, max, max+ を全て組み合わせた343個(=7の3乗)
Collardは185個と書いていますが、私がJorgensenの本を調べた範囲では125個、または343個でした。

Ross Collard
  正三角形(3,3,3)、二等辺三角形(3,3,2)、不等辺三角形(3,4,5)、不正値(3,3,?)の4個のテストケース

Robert Binder
  "Testing Object-Oriented Systems: Models, Patterns, and Tools"も最初の章(Chapter 1 A Small Challenge)は三角形問題で始まります。ここで次のように、Myersのテストケース+α(最大値の入力を確認するもの)からなるテスト(Basic Test Case)と、オブジェクト指向の特性を考慮したテスト要件にもとづくテストとして65個のテストケースを示しています。
・Basic Test Caseとして33個
・Test Requirements for Bugs Related to Encapslation and Persistenceとして29個
・Test Requirements Related to Inheritance and Polymorphismとして3個

Kent Beck
  「テスト駆動開発入門(TDD: Test-Driven Development By Example)」で、正三角形(2,2,2)、二等辺三角形(1,2,2)、不等辺三角形(2,3,4)、三角形ではない(1,2,3)、負の値(-1,2,2)、文字列(a,b,c)の6個のテストケースを示しています。

この状況に対してCollardは前述の論文で次のように続けています。

正しい解答は何だろう?全ての環境にあてはまるような解答がただひとつあるわけではなく、それぞれの状況(context)に応じて最も適切な解答が存在するというのが解答である。

Jorgensenのような文字通りのブラックボックステスト技法とBeckのような内部の処理が分かった上でのテストでこれくらいのテストケース数の差が出るという例として興味深いですね。

|

« 三角形問題の種類と使われ方 | Main | 三角形問題ではKent Beckにも見落としがあった! »