バグ検出ドリル(21)「三角形判定」のテスト項目を設計できますか【解答編】:山浦恒央の“くみこみ”な話(121)(4/4 ページ)
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第20回と第21回は、「三角形を判定」するプログラムのテスト項目設計がテーマです。前回の出題編から、今回は解答編になります。
5.4 2等辺三角形のメッセージが間違っている
No.11のテスト項目をご覧ください。二等辺三角形のメッセージが漢字の「二」になっています。仕様を確認してみましょう。
「3辺の値のうち、2辺が等しい場合は、画面に「2等辺三角形」と出力する。」
そのため、画面には「2等辺三角形」と表示してほしい所が、「二等辺三角形」となっており、仕様と食い違っています。
このバグは、仕様とプログラムのどちらが間違っているか判断するのが迷います。今回の問題では、正三角形の場合は、「三」と漢字で表記していますが、「2等辺」は数値となっており、一貫性がありません。このような場合は、仕様定義者に確認を取り、判断する必要がありそうです。
今回は、仕様に合わせるとして、「2等辺三角形」が正しいこととしました。
メッセージの間違いは、軽微なバグなのですが、ユーザーに「本当に真面目に作っているのか?」と不信感を与えることがあります。特に、ユーザーインタフェースには、注意が必要です。筆者の経験上、メッセージやレイアウトなどは、見る人の嗜好により、何回も修正が入ることが多く、時間を取られます。その場合、外見に時間を浪費し中身がボロボロになりかねません。
5.5 コメントのバグ
テストで見つかるバグではありませんが、プログラムを眺めていると、コメントにおかしい所があります。main関数のコメントをリスト4に示します。
/*********************** * 関数名: main * 機能 : (1)辺1〜3を初期化する。 (2)辺1〜3の値をコンソールからそれぞれ取得する。 (3)三角形を判定する。 * 引数 : 辺の値 * 戻り値: なし ***********************/
リスト4が、main関数のコメントです。引数がないにもかかわらず、引数があることになっています。また、戻り値もなしになっています。
これは、筆者がコメントを作成している時の記述ミスです。コメントは、プログラムを見直す際のヒントになるのですが、コメント自体にもバグがあることに注意してください。コメントのバグは、機能追加や変更を実施する保守フェーズで「誤解の素」になります。
6.自己採点シート
今回の自己採点シートを示します。
問題 | 項目 | 配点(点) |
---|---|---|
三角形判定プログラム | 問題に挑戦した | 25 |
自分のテスト項目とテスト項目例を比較した | 25 | |
半角・全角のどちらを入力するべきか悩んだ | 5 | |
テスト項目から、「0」、「空白」がエラーにならないバグを検出した | 15 | |
テスト項目から、「三角形の成立条件」が機能しないバグを検出した | 15 | |
テスト項目から、2等辺三角形のメッセージが仕様と一致しないことを検出した | 10 | |
main関数のコメントのバグを見つけた | 5 | |
その他のバグを見つけた | 1件当たり+5 | |
表3 自己採点シート |
7.終わりに
テストには、「検証」という「後戻りの作業」が多くあります。今回は、前回の三角形判定問題のテスト項目とバグを示しました。
テスト項目や修正方法が皆さんと完全に同じになることはないと思います。また、筆者が想定できなかったバグもあるでしょう。今回の問題を題材として、自分なりの考察をしていただければと思います。
この問題は、グレンフォード・マイヤーズが書いた「ソフトウェア・テストの技法」の三角形判定問題を参考にしています(参考文献[1])。この問題は、テストの例題によく登場する問題です。一読をお薦めします。
参考文献
[1]ソフトウェア・テストの技法 第2版(グレンフォード・J・マイヤーズ 他、2006年、近代科学社)
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- バグ検出ドリル(20)「三角形判定」のテスト項目を設計できますか【出題編】
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第20回と第21回は、「三角形を判定」するプログラムのテスト項目設計がテーマです。まずは今回の出題編を読んで、じっくり問題に取り組んでみてください。 - バグ検出ドリル(19)たかが1円されど1円……1円足りないバグの恐怖
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第19回の問題は、商品と個数から合計金額を求めるプログラムのバグです。なぜか1円だけ合わない、このバグの原因を突き止めよう! - バグ検出ドリル(18)IoT時代だからこそ重要、単純でも検出が難しい通信系バグ
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第18回の問題は、相互に通信する機器のソフトウェアのバグです。IoT時代を迎えて利用場面が増えている、通信系のバグを見つけ出しましょう! - バグ検出ドリル(17)「よくある単純なバグ」だからこそ見つけにくい
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第17回の問題は、前回と同じ音楽プレーヤーのプログラムから出題します。「よくある単純なバグ」が潜んでいますが、見つけ出せますか? - バグ検出ドリル(16)音楽プレーヤーに潜むバグを見つけ出せ
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第16回の問題は「簡単なバグなのに、なかなか見つからない」バグです。何で見つからないんだ!