テストでバグ発見!(4)懐かしい「解の公式」のプログラムからバグを探し出せ:山浦恒央の“くみこみ”な話(146)(4/4 ページ)
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第4回は、多くの読者が中学校の数学で学んであろう、2次方程式の解を求める「解の公式」のプログラムに潜むバグを見つけ出そう。
付録
QuadraticEquation.pyをダウンロードする際にファイルが開けない、またはセキュリティの観点からWebサイトからファイルをダウンロードして開きたくない場合、下記のソースコードのテキストをコピーして使用してください。なお、プログラミング言語は、Python 3.9.5で動作します(Windows 10環境上で、動作確認済み)。
# # プログラム:解の公式算出プログラム(QuadraticEquation.py) # 作成者:T.Yamaura, Y.Ohmori # import math def main(): # a,b,cを入力する a = input('aの値を入力してください: ') b = input('bの値を入力してください: ') c = input('cの値を入力してください: ') #int型にキャストする a = int(a) b = int(b) c = int(c) #判別式(b2 - 4ac) D = (b * b) - (4 * a * c) #解の公式 if a != 0.0: if D > 0: #D > 0の場合 x1 = (-b + math.sqrt(D)) / 2 * a x2 = (-b - math.sqrt(D)) / (2 * a) print('x1 =', int(x1)) print('x2 =', int(x2)) elif D == 0: #D = 0の場合 x1 = (-b) / (2 * a) print('x1 =', int(x1)) else: #D < 0の場合 print('解なし') else: if b != 0: #1次方程式として解を求める x1 = b / -c print('x1 =', int(x1)) elif b == 0 and c != 0: print('甲斐なし') else: print('算出不可') if __name__ == "__main__": main()
山浦先生の書籍が発売中です!
前シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- テストでバグ発見!(3)単位取得判定プログラムに潜むファイル入力のバグ
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第3回は、大学の単位取得を判定するプログラムから、ファイル入力に潜むバグを見つけ出しましょう。 - テストでバグ発見!(2)自動販売機シミュレーターのバグを見つけろ!
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第2回は、自動販売機シミュレーターのプログラムからバグを見つけ出しましょう。 - テストでバグ発見!(1)まずは成人判定プログラムでチュートリアル
今回から、提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」が始まります。第1回は、チュートリアルとして成人判定プログラムからバグを発見してみましょう。 - ソフトウェア技術者のためのバグ百科事典(21)【総まとめ】バグの特定手順を解説
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第21回は、シリーズの総まとめとして、バグの検出から修正までの「バグ特定手順」の一連の流れを解説します。 - ソフトウェア技術者のためのバグ百科事典(20)みずほ銀行は人ごとではない!? システム刷新のバグ
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第20回は、「IT業界のサグラダファミリア」と呼ばれたみずほ銀行の事例に代表されるシステム刷新のバグを紹介します。