テストでバグ発見!(6)電卓プログラムに潜むバグ【解答編】:山浦恒央の“くみこみ”な話(148)(4/4 ページ)
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、前回出題した電卓プログラム問題の解答編だ。演習問題としては大規模だが、正面からじっくり向き合い、適切にテスト設計すればバグを検出できるはず!
2.4.3 演算関連のテスト
演算に関連するテスト項目を表3に示します。なお、以降は、通常の数式で記載するため、適切に読み替えてください(入力が複雑になる場合は、「・」で省略しました)。
No. | テスト内容 | 入力値 | 期待値/出力結果 | 良 否 |
---|---|---|---|---|
1 | 加算処理を確認する | 10 + 7 = | 17 | 良 |
10 +(-7) = | 3 | 良 | ||
-10 + 7 = | -3 | 良 | ||
-10 + (-7) = | -17 | 良 | ||
999.999 + 999.999 = | 1999.998 | 良 | ||
999.999 + (-999.999) = | 0 | 良 | ||
-999.999 + 999.999 = | 0 | 良 | ||
-999.999 + (-999.999) = | -1999.998 | 良 | ||
0 + 0 = | 0 | 良 | ||
2 | 減算処理を確認する | 10 - 7 = | 3 | 良 |
10 -(-7) = | 17 | 良 | ||
-10 - 7 = | -17 | 良 | ||
-10 -(-7) = | -3 | 良 | ||
999.999 - 999.999 = | 0 | 良 | ||
999.999 -(-999.999) = | 1999.998 | 良 | ||
-999.999 - 999.999 = | -1999.998 | 良 | ||
-999.999 -(-999.999) = | 0 | 良 | ||
0 - 0 = | 0 | 良 | ||
3 | 乗算処理を確認する | 10 * 7 = | 70 | 良 |
10 * (-7) = | -70 | 良 | ||
-10 * 7 = | -70 | 良 | ||
-10 * (-7) = | 70 | 良 | ||
999.999 * 999.999 = | 3000 | 良 | ||
999.999 * (-999.999) = | -3000 | 良 | ||
-999.999 * 999.999 = | -3000 | 良 | ||
-999.999 * (-999.999) = | 3000 | 良 | ||
0 * 0 = | 0 | 良 | ||
4 | 除算処理を確認する | 10 / 7 = | 1.429 | 良 |
10 / (-7) = | -1.429 | 良 | ||
-10 / 7 = | -1.429 | 良 | ||
-10 / (-7) = | 1.429 | 良 | ||
999.999 / 999.999 = | 1 | 良 | ||
999.999 / (-999.999) = | -1 | 良 | ||
-999.999 / 999.999 = | -1 | 良 | ||
-999.999 / (-999.999) = | 1 | 良 | ||
0 / 0 = | エラー発生 | 否 | ||
5 | 剰余処理を確認する | 10 % 7 = | 3 | 良 |
10 % (-7) = | -4 | 良 | ||
-10 % 7 = | 4 | 良 | ||
-10 % (-7) = | -3 | 良 | ||
999.999 % 999.999 = | 0 | 良 | ||
999.999 % (-999.999) = | -0 | 否 | ||
-999.999 % 999.999 = | 0 | 良 | ||
-999.999 % (-999.999) = | -0 | 否 | ||
0 % 0 = | エラー発生 | 否 | ||
6 | 繰り返し演算を確認する | ・10 + 10 = 20 ・20 + 5 |
25 | 良 |
・10 + 10 = 20 ・20 + (-5) |
15 | 良 | ||
・10 + 10 = 20 ・20 - 5 |
15 | 良 | ||
・10 + 10 = 20 ・20 -(-5) = |
25 | 良 | ||
・10 + 10 = 20 ・20 * 5 |
100 | 良 | ||
・10 + 10 = 20 ・20 * (-5) |
-100 | 良 | ||
・10 + 10 = 20 ・20 / 5 |
4 | 良 | ||
・10 + 10 = 20 ・20 / (-5) |
-4 | 良 | ||
7 | √の演算を確認する | √ | 何も起きない | 良 |
√0 | 0 | 良 | ||
√999.999 | 31.623 | 良 | ||
√-999.999 | エラー発生 | 否 | ||
・0 + 0 = 0 ・√0 |
0 | 良 | ||
・100 + 999.999 = 1099.999 ・√1099.999 |
33.166 | 良 | ||
・100 - 999.999 = -899.999 ・√-899.999 |
エラー発生 | 否 | ||
8 | +/-の演算を確認する | +/- | 何も起きない | 良 |
・999.999 ・+/- |
-999.999 | 良 | ||
・-999.999 ・+/- |
999.999 | 良 | ||
・0 + 0 = 0 ・+/- |
-0 | 否 | ||
・100 + 999.999 = 1099.999 ・ +/- |
-1099.999 | 良 | ||
・100 - 999.999 = -899.999 ・+/- |
899.999 | 良 | ||
9 | 最大値でリミットがかかることを確認する | ・999.999 + 999.999 = 1999.998 ・1999.998 + 999.999 = 2999.997 ・2999.997 + 999.999 = |
3000 | 良 |
10 | 最小値でリミットがかかることを確認する | ・-999.999 - 999.999 = -1999.998 ・-1999.998 - 999.999 = -2999.997 ・-2999.997 - 999.999 = |
-3000 | 良 |
11 | 意地悪テスト | 0. + 1 = | 0.のまま計算できる | 否 |
表3 演算関連のテスト項目例 |
3.終わりに
今回は、前回記事で出題した電卓プログラムの解答を取り上げました。今回の問題の狙いは以下の通りです。
- 規模の大きいプログラムに取り組む
- 全ての正常ケースをテストする
- 境界・限界条件をテストする
- 「こんなバグがあるかもしれない」と具体的なバグを想定し、それを検出するテストケースを設計する
- システマチックに、漏れのないテストケースを設計する
上記の5項目は、実際のソフトウェア開発でも重要なことです。これを常に意識していると、開発の際にもバグを作り込まなくなります。
筆者が取り上げた以外のバグ、気付き、テスト項目がたくさんあります。テスト項目を追加するなどして、隠れたバグを見つけてください。
山浦先生の書籍が発売中です!
前シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- テストでバグ発見!(5)電卓プログラムに潜むバグ【出題編】
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は電卓プログラムをテーマとする問題の出題編。かなりのステップ数になる電卓プログラムに潜むバグを見つけ出そう。 - テストでバグ発見!(4)懐かしい「解の公式」のプログラムからバグを探し出せ
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第4回は、多くの読者が中学校の数学で学んであろう、2次方程式の解を求める「解の公式」のプログラムに潜むバグを見つけ出そう。 - テストでバグ発見!(3)単位取得判定プログラムに潜むファイル入力のバグ
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第3回は、大学の単位取得を判定するプログラムから、ファイル入力に潜むバグを見つけ出しましょう。 - テストでバグ発見!(2)自動販売機シミュレーターのバグを見つけろ!
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第2回は、自動販売機シミュレーターのプログラムからバグを見つけ出しましょう。 - テストでバグ発見!(1)まずは成人判定プログラムでチュートリアル
今回から、提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」が始まります。第1回は、チュートリアルとして成人判定プログラムからバグを発見してみましょう。