検索
連載

テストでバグ発見!(6)電卓プログラムに潜むバグ【解答編】山浦恒央の“くみこみ”な話(148)(4/4 ページ)

提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、前回出題した電卓プログラム問題の解答編だ。演習問題としては大規模だが、正面からじっくり向き合い、適切にテスト設計すればバグを検出できるはず!

Share
Tweet
LINE
Hatena
前のページへ |       
※本記事はアフィリエイトプログラムによる収益を得ています

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.終わりに

 今回は、前回記事で出題した電卓プログラムの解答を取り上げました。今回の問題の狙いは以下の通りです。

  1. 規模の大きいプログラムに取り組む
  2. 全ての正常ケースをテストする
  3. 境界・限界条件をテストする
  4. 「こんなバグがあるかもしれない」と具体的なバグを想定し、それを検出するテストケースを設計する
  5. システマチックに、漏れのないテストケースを設計する

 上記の5項目は、実際のソフトウェア開発でも重要なことです。これを常に意識していると、開発の際にもバグを作り込まなくなります。

 筆者が取り上げた以外のバグ、気付き、テスト項目がたくさんあります。テスト項目を追加するなどして、隠れたバグを見つけてください。

山浦先生の書籍が発売中です!

 前シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。

 前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。

 両書とも興味のある方は、Amazon.comや書店でチェックしてください!

【 筆者紹介 】
山浦 恒央(やまうら つねお)

東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)


1977年、日立ソフトウェアエンジニアリングに入社、2006年より、東海大学情報理工学部ソフトウェア開発工学科助教授、2007年より、同大学大学院組込み技術研究科准教授、2016年より非常勤講師。

主な著書・訳書は、「Advances in Computers」 (Academic Press社、共著)、「ピープルウエア 第2版」「ソフトウェアテスト技法」「実践的プログラムテスト入門」「デスマーチ 第2版」「ソフトウエア開発プロフェッショナル」(以上、日経BP社、共訳)、「ソフトウエア開発 55の真実と10のウソ」「初めて学ぶソフトウエアメトリクス」(以上、日経BP社、翻訳)。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る