連載
» 2019年09月11日 10時00分 公開

山浦恒央の“くみこみ”な話(121):バグ検出ドリル(21)「三角形判定」のテスト項目を設計できますか【解答編】 (1/4)

バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第20回と第21回は、「三角形を判定」するプログラムのテスト項目設計がテーマです。前回の出題編から、今回は解答編になります。

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

⇒連載「山浦恒央の“くみこみ”な話」バックナンバー

1.はじめに

出題と解答 ※写真はイメージです

 本連載では、エンジニアのバグ検出力の向上を目指し、バグ入りの問題を出題して読者のみなさんに見つけてもらっています。

 前回は、テストの演習問題として、三角形判定問題を出題しました。今回は、その解答編です。問題の解答を作成していない方は、まず前回の記事をご参照ください。

2.なぜテストが大変なのか

 ソフトウェアのテストが難しいのは、要求仕様を定義したりプログラムを作成したりする以上に、「検証」という「後戻りの作業」が多くあるためです。バグを見つけられないままリリースすると、顧客のクレーム対応と修正作業に追われます。

 限られた時間でバグを確実に見つけねばなりません。やみくもなテストは得策ではありません。効果的にテストをする手法の代表格が、「同値分割」と「境界値分析」です。今回は、これら2つの手法から三角形判定問題のテスト項目を作成します。

3.効果的にテストするには

 テスト技法の双璧である「同値分割」と「境界値分析」を簡単に説明します。どちらも、爆発的に増えるテスト項目をなるべく少なくし、「打率のよいテスト項目」を目指しています。より詳しく知りたい方は、参考文献[1]などのテスト関連の書籍をご覧ください。

3.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 同値分割の例

3.2 境界値分析

 境界値分析では、同値分割で作ったカテゴリーの端をテストします。「バグは境界値、限界値に最も多く存在する」との経験則から出たテスト手法です。例えば、「入場料算出プログラムでは、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 境界値分析の例
       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.