学生プログラミングの課題となるような小さいプログラムでもバグが潜んでいます。「バグ検出ドリル」の第8回では、学生が5分で書けるような電卓プログラムに潜むバグを見つけ出してください!
本連載では、エンジニアのバグ検出力の向上を目的に、バグ入りの問題を出題し、読者の皆さんに見つけていただきます。今回は、学生が翌週までに作る程度の小規模なプログラムを出題します。どんなバグがあるか考察してください。
本題に入る前に、前回の記事に2点間違いがありましたので、訂正します。
前回の問題は、外部入力ファイルから、コンソール入力した文字が一致する行数と列番号を出力するプログラムでした(詳細は前回の記事をご覧ください)。問題文の指示に従い、外部入力ファイルとプログラムを作成、実行するとリスト1のような結果になると書きました。
実際に実行すると、左側のA君の実行結果が以下のリスト2のようになることが分かりました。
このバグの原因は、筆者が実行結果をコピー&ペーストせず、手打ちで入力したことが原因でした。また、内容を再確認しませんでした。実際に試していただいた方にはおわびいたします。
前回記事内のリスト2に示した問題文のプログラムにもバグがありました。main関数のブロックの末尾を示す「}」が無く、まるまるコピーし、実行しようとすると、実行エラーとなります。大抵の方は、これに気がついて追加したと思いますが、訂正させていただきます。
原因は、最終行まで選択せずにコピーしたことです。当時を振り返ると「Visual Studio」のエディターで実行結果を確認してから、マウスで最終行と思われるところまでコピーし、原稿作成用のWordに貼り付けしました。その結果、最終行をコピーできませんでした。また、コピーしたからプログラムは大丈夫だろうと再確認を怠ってしまいました。汗顔の至りです。
ソフトウェア開発では、「仕様記述にバグがある」と同時に、前回の問題のように、「そもそもの問題にバグが含まれている」という観点から問題に取り組んでいただければと思います。
上記を踏まえまして、自己採点シートも訂正します。気づいた方には、100点を超えていまいますが、得点を差し上げます。また、筆者が気づいていないバグもあると思います。見つけていただいた方は、+5ポイントとします。
問題 | 内容 | 配点(点) |
---|---|---|
ファイル検索の問題 | 5分以上考えた | 50 |
データファイルの改行コードが異なることが分かった | 50 | |
プログラムの最終行に「}」が書いてないことに気が付いた | 5 | |
その他のバグを見つけた | 5×件数 | |
リスト3 訂正後の自己採点シート |
Copyright © ITmedia, Inc. All Rights Reserved.