[ブログ紹介] 三角形問題で必要なテストケース数
辰巳敬三氏 (高度情報通信人材育成支援センター (CeFIL)) のブログより。
A Lifelong Software Tester (生涯一テスター): 三角形問題で必要なテストケース数
05 June 2011
ソフトウェアテスト・ヒストリー (ソフトウェアテスト 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人分のコンサルタント料を払うなんて悪い冗談だよね。
引用された Collard 氏の文章は、 2004年にフロリダで開催された第3回 WTST (Workshop on the Teaching of Software Testing) で発表されたものです。 また、 辰巳氏のソフトウェアテスト・ヒストリーは、 おそらくそのダイジェスト版に当たるであろうライトニングトークの資料 (JaSST '10 Tokyo) が公開されています。
辰巳氏は言及しておられませんが、 これは品質保証のテストと、 実装のための (外部設計を表現するものとしての) テストケースの違いだと思います。 品質保証のテストをするには、 65個とか185個とかの多くのテストケースが必要であり、 実装を定めるためだけなら4個とか6個とかの少ないテストケースで済むということです。
私がいつも使う FizzBuzz で説明してみます。
※ 画像は、 わんくま東京勉強会#59で使った資料から。
品質保証を考えると、3の倍数・5の倍数・15の倍数・それ以外という4つの同値クラスの代表値 (クラスごとに1つ挙げて4個、 2つ挙げれば8個) だけでなく、 結果が変化するところ (4P2 = 12個; ただしクラス代表値を兼ねないなら倍の24個) もテストケースに挙げるでしょう。 また、 処理できる限界値の前後 (左図の例では 1 と Interger.MaxValue と Interger.MaxValue + 1 の3個; この例では0はありえない) もテストケースとして考えなければなりません。 こうして、 20個程度のテストケースが必要だということになります。
では、 TDD ではどうでしょう。 FizzBuzz のメソッドの仕様 (外部設計) は、 次の4項目で表されます。
・ 3の倍数 (かつ、 5の倍数でない) を与えたときは、 "Fizz"
・ 5の倍数 (かつ、 3の倍数でない) を与えたときは、 "Buzz"
・ 3の倍数、 かつ、 5の倍数を与えたときは、 "Fizz Buzz"
・ それ以外 (3の倍数でなく、 かつ、 5の倍数でない) を与えたときは、 その数字
それぞれの仕様の例示をテストケースとして表現するには、 4つの項目をそれぞれ 「明白な実装」 とした場合には4個のテストケース (たとえば 3, 5, 15, 1) があればよく、 すべてを 「三角測量」 したとしても8個 (たとえば、 3, 6, 5, 10, 15, 30, 1, 2) です。 そして、 TDD 三原則を守るならば、 8個より多く書くことはありません。 (Interger.MaxValue + 1 のときは仕様にありませんが、 このとき例外が出るのではなく 1 に戻るというような仕様にするならば、 テストケースはもうひとつ増えます。)
どちらも、 テスト (あるいはテストケース) という言葉を使ってはいますが、 こうして考えてみるとかなり異質のものであるということが分かるかと思います。
| 固定リンク
「ブログ紹介」カテゴリの記事
- [ブログ紹介] Writing Unit Tests in F#(2011.11.09)
- [ブログ紹介] VS と連携 *しない* NUnit の使い方(2011.08.01)
- [ブログ紹介] 三角形問題で必要なテストケース数(2011.06.08)
- [ブログ紹介] CppUnit を Visual Studio C++ 2010 でビルドするには(2011.06.06)
- [ブログ紹介] TDDBC ポータル (Hiki)(2011.03.11)
この記事へのコメントは終了しました。
コメント