« [イベント] わんくま東京#59 | トップページ | [NEWS] Visual Studio と NUnit が統合される »

2011年6月 8日 (水)

[ブログ紹介] 三角形問題で必要なテストケース数

辰巳敬三氏 (高度情報通信人材育成支援センター (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で使った資料から。

Wankuma_tokyo59_p15 品質保証を考えると、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 に戻るというような仕様にするならば、 テストケースはもうひとつ増えます。)

どちらも、 テスト (あるいはテストケース) という言葉を使ってはいますが、 こうして考えてみるとかなり異質のものであるということが分かるかと思います。

|

« [イベント] わんくま東京#59 | トップページ | [NEWS] Visual Studio と NUnit が統合される »

ブログ紹介」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: [ブログ紹介] 三角形問題で必要なテストケース数:

« [イベント] わんくま東京#59 | トップページ | [NEWS] Visual Studio と NUnit が統合される »