テストでバグ発見!(5)電卓プログラムに潜むバグ【出題編】:山浦恒央の“くみこみ”な話(147)(3/3 ページ)
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は電卓プログラムをテーマとする問題の出題編。かなりのステップ数になる電卓プログラムに潜むバグを見つけ出そう。
3.3.3 演算子入力イベント
3.3.3.1 入力処理1モード
演算子(+、−、*、/、%)を入力した場合は、表示エリアの入力情報と入力した演算子を記憶し、入力処理2に遷移する。また、表示エリアをクリアし、(+、−、*、/、%)ボタンを無効化し、「=」ボタンを有効化する。
3.3.3.2 入力待ちモード
繰り返し演算(1回演算した後、続けて演算子(+、−、*、/、%)を入力)した場合は、表示エリアの入力情報と選択した演算子を取得する。さらに、表示エリアをクリアし、入力処理2に遷移する。また、「+、−、*、/、%」ボタンを無効化、「=」ボタンを有効化する。
3.3.4 特殊演算イベント
3.3.4.1 入力待ちモード、入力処理1モード、入力処理2モード
特殊演算を行う場合は、演算結果を表示エリアに表示する。
- 表示エリアが空欄以外で、√を入力する場合は、表示エリアの入力情報から平方根を演算し、表示エリアに表示する。なお、出力が小数第4位以降となる場合は、小数第4位を四捨五入し、3桁で表示する。
- 表示エリアが空欄以外で、+/−を入力する場合は、表示エリアの入力情報から符号を反転し、表示エリアに表示する。
3.3.5 クリアイベント
3.3.5.1 入力待ちモード、入力処理1モード、入力処理2モード
「C」を選択した場合は、表示エリアの文字、表示エリアと演算子の入力情報、ボタンの状態を初期状態に戻す。また、入力待ちモードに遷移する。
3.3.6 演算実行イベント
3.3.6.1入力待ちモード、入力処理2モード
表示エリアが空欄でない状態で、「=」ボタンを選択した場合、下記の演算結果を表示エリアに表示し、入力待ちモードに遷移する。遷移する際、「+、−、*、/、%」ボタンを有効化し、「=」を無効化する。なお、出力結果は、小数となる場合は、小数第4位を四捨五入し、3桁として表示する。
- 通常の演算の場合
- 演算子が「+」の場合
演算結果=入力処理1モードの入力情報+入力処理2モードの入力情報 - 演算子が「−」の場合
演算結果=入力処理1モードの入力情報−入力処理2モードの入力情報 - 演算子が「*」の場合
演算結果=入力処理1モードの入力情報*入力処理2モードの入力情報 - 演算子が「/」の場合
演算結果=入力処理1モードの入力情報/入力処理2モードの入力情報 - 演算子が「%」の場合
演算結果=入力処理1モードの入力情報%入力処理2モードの入力情報
- 演算子が「+」の場合
- 繰り返し演算の場合
- 演算子が「+」の場合
演算結果=入力待ちモードの入力情報+入力処理2モードの入力情報 - 演算子が「−」の場合
演算結果=入力待ちモードの入力情報−入力処理2モードの入力情報 - 演算子が「*」の場合
演算結果=入力待ちモードの入力情報*入力処理2モードの入力情報 - 演算子が「/」の場合
演算結果=入力待ちモードの入力情報/入力処理2モードの入力情報 - 演算子が「%」の場合
演算結果=入力待ちモードの入力情報%入力処理2モードの入力情報
- 演算子が「+」の場合
また、演算結果の最大、最小の処理は以下とする。
- 最大:演算結果>3000の場合
演算結果=3000 - 最小:演算結果<−3000の場合
演算結果=−3000
3.4 制限事項
- テスト項目を記述するのが面倒になることが予想されるため、プログラムに入力できる最大、最小の数値は999.999と−999.999に制限する。また、演算結果の最大、最小は、3000と−3000に制限する
- ソースコードはブラックボックスとして取り扱うこと(厳密な状態遷移ベースのプログラムとなっていないため)
4.終わりに
今回は、一定程度の規模感のある問題を出題するため、電卓のプログラムを題材とした問題を出題しました。現実のプログラム開発に近い、かなりの難問です。あらゆる箇所にバグや気付き事項が隠れています。開発技術者、あるいは、品質保証エンジニアの立場で、ぜひ、自分なりのテスト設計を実施し、バグを探してください。
山浦先生の書籍が発売中です!
前シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- テストでバグ発見!(4)懐かしい「解の公式」のプログラムからバグを探し出せ
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第4回は、多くの読者が中学校の数学で学んであろう、2次方程式の解を求める「解の公式」のプログラムに潜むバグを見つけ出そう。 - テストでバグ発見!(3)単位取得判定プログラムに潜むファイル入力のバグ
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第3回は、大学の単位取得を判定するプログラムから、ファイル入力に潜むバグを見つけ出しましょう。 - テストでバグ発見!(2)自動販売機シミュレーターのバグを見つけろ!
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第2回は、自動販売機シミュレーターのプログラムからバグを見つけ出しましょう。 - テストでバグ発見!(1)まずは成人判定プログラムでチュートリアル
今回から、提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」が始まります。第1回は、チュートリアルとして成人判定プログラムからバグを発見してみましょう。 - ソフトウェア技術者のためのバグ百科事典(21)【総まとめ】バグの特定手順を解説
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第21回は、シリーズの総まとめとして、バグの検出から修正までの「バグ特定手順」の一連の流れを解説します。