三角形問題で必要なテストケース数
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のような内部の処理が分かった上でのテストでこれくらいのテストケース数の差が出るという例として興味深いですね。


Comments
tonomuraさん
ご指摘ありがとうございます。確かにJorgensenは彼の書籍で"Worst-Case testing"や"Robust Worst-Case test case"手法だけを示して、三角形問題のテストケースを解説しているわけではないので、他の方の数と単純に比べているように見えるとすれば誤解を生じるかもしれませんね(Jorgensen氏の名誉を棄損する意図はないのですが)。ここは、テスト設計のアプローチの違いによって数の差が出るということを言いたいだけの筈なので、もちろんJorgensenにこだわる必要はないです。
Posted by: 生涯一テスター | 16 August 2011 at 11:33 PM
ちょっと訂正です.(^-^;
>・"Equivalence Class Testing"の章では7個
→これは異常系なので,weak normalの4ケースを加えて11個が適当かも.
>・"Decision Table-Based Testing"の章では9個or11個("We could expand still further..."という記述もあります)
→テスト不可能なケースが3個含まれているので,実質6~8個.まぁ8個ですかね.
さらに,どうもTDDの場合の説明もあったようで,本文は見ていないのですが"tddTriangle.xls"(*)を見てみると書かれているだけでも14個(+12個の単項目テスト)のケースがありました.
本文を見ていないのでこれで十分と考えているのかどうかわかりませんが,Jorgensenの個数としてはこの14個(26個)が適当ではないでしょうか.
(*)www.crcpress.comからダウンロードできるAU7475.zipの中にあり
Posted by: tonomura | 16 August 2011 at 01:17 PM
Paul Jorgensenの文献を見てみたのですが,他の方の数と単純に比べるのは問題があるのではないかと思いました.
他の方は「三角形問題のテストケース数はいくらで良いか?」という議論に基づいていますが,Jorgensenの文献の場合はテスト技法の説明が中心で,「このテスト技法でテストケースを起こすとこうなる」という視点で書かれているからです.
私が見た範囲でも以下の3例有ります.
・同じ"Boundary Value Testing"の章に"Value Analysis Test Case"として13(=15-2)個
・"Equivalence Class Testing"の章では7個
・"Decision Table-Based Testing"の章では9個or11個("We could expand still further..."という記述もあります)
Collardが誇張?するために最も多くなる例を使ったのではないかと邪推します.個人的にはデシジョン表での例が三角形問題を考慮して検討しているので,「Jorgensenは9~11個」とするのが良いのではないかと思います.
尚,私が閲覧したのは"Software Testing: A Craftsman's Approach"の3rd Editionでした.
Posted by: tonomura | 16 August 2011 at 09:05 AM