演算に関連するテスト項目を表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 演算関連のテスト項目例 |
今回は、前回記事で出題した電卓プログラムの解答を取り上げました。今回の問題の狙いは以下の通りです。
上記の5項目は、実際のソフトウェア開発でも重要なことです。これを常に意識していると、開発の際にもバグを作り込まなくなります。
筆者が取り上げた以外のバグ、気付き、テスト項目がたくさんあります。テスト項目を追加するなどして、隠れたバグを見つけてください。
前シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.