バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第20回と第21回は、「三角形を判定」するプログラムのテスト項目設計がテーマです。前回の出題編から、今回は解答編になります。
本連載では、エンジニアのバグ検出力の向上を目指し、バグ入りの問題を出題して読者のみなさんに見つけてもらっています。
前回は、テストの演習問題として、三角形判定問題を出題しました。今回は、その解答編です。問題の解答を作成していない方は、まず前回の記事をご参照ください。
ソフトウェアのテストが難しいのは、要求仕様を定義したりプログラムを作成したりする以上に、「検証」という「後戻りの作業」が多くあるためです。バグを見つけられないままリリースすると、顧客のクレーム対応と修正作業に追われます。
限られた時間でバグを確実に見つけねばなりません。やみくもなテストは得策ではありません。効果的にテストをする手法の代表格が、「同値分割」と「境界値分析」です。今回は、これら2つの手法から三角形判定問題のテスト項目を作成します。
テスト技法の双璧である「同値分割」と「境界値分析」を簡単に説明します。どちらも、爆発的に増えるテスト項目をなるべく少なくし、「打率のよいテスト項目」を目指しています。より詳しく知りたい方は、参考文献[1]などのテスト関連の書籍をご覧ください。
同値分割とは、各範囲の代表的なものを1つ選んでテストすることです。例えば、「入場料算出プログラムがあったとします。6歳未満の場合、入場料は無料、7〜12歳は200円、13〜18歳は500円、19歳以上は1000円と表示する」という機能をテストする際、年齢の各範囲から代表的なものを1つ選んでテストすればよいというものです。具体的には、7〜12歳のカテゴリーでは9歳を、13〜18歳の範囲では15歳を1つだけテストすればよいという考え方です。
今回の問題に当てはめますと、正三角形は、辺1〜3 >= 1 かつ辺1〜3 <= 999かつ辺1 = 辺2 = 辺3となる場合です。その中から代表的な値を選択すると、例えば、表1のようになります。
No. | テスト項目 | 辺1 | 辺2 | 辺3 | 期待結果 |
---|---|---|---|---|---|
1 | 正三角形となることをテストする | 100 | 100 | 100 | 正三角形 |
表1 同値分割の例 |
境界値分析では、同値分割で作ったカテゴリーの端をテストします。「バグは境界値、限界値に最も多く存在する」との経験則から出たテスト手法です。例えば、「入場料算出プログラムでは、6歳未満の場合、入場料は無料、7〜12歳は200円、13〜18歳は500円、19歳以上は1000円と表示する」という機能をテストする場合、7〜12歳のカテゴリーでは7歳と12歳を、13〜18歳の範囲では13歳と18歳を選びます。
今回の問題では、正三角形をテストする場合は、表2のようなテスト項目が作成できます。
No. | テスト項目 | 辺1 | 辺2 | 辺3 | 期待結果 |
---|---|---|---|---|---|
1 | 正三角形となることをテストする | 1 | 1 | 1 | 正三角形 |
2 | 正三角形となることをテストする | 999 | 999 | 999 | 正三角形 |
表2 境界値分析の例 |
Copyright © ITmedia, Inc. All Rights Reserved.