連載
» 2018年07月18日 10時00分 公開

山浦恒央の“くみこみ”な話(108):バグ検出ドリル(8)電卓プログラムのような小さなプログラムにもバグがいる (1/4)

学生プログラミングの課題となるような小さいプログラムでもバグが潜んでいます。「バグ検出ドリル」の第8回では、学生が5分で書けるような電卓プログラムに潜むバグを見つけ出してください!

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

1.はじめに

 本連載では、エンジニアのバグ検出力の向上を目的に、バグ入りの問題を出題し、読者の皆さんに見つけていただきます。今回は、学生が翌週までに作る程度の小規模なプログラムを出題します。どんなバグがあるか考察してください。

2.前回の訂正

 本題に入る前に、前回の記事に2点間違いがありましたので、訂正します。

間違いその1:問題文の実行結果が一致しない

 前回の問題は、外部入力ファイルから、コンソール入力した文字が一致する行数と列番号を出力するプログラムでした(詳細は前回の記事をご覧ください)。問題文の指示に従い、外部入力ファイルとプログラムを作成、実行するとリスト1のような結果になると書きました。

リスト1 リスト1 A君(左)とB君(右)の実行結果

 実際に実行すると、左側のA君の実行結果が以下のリスト2のようになることが分かりました。

リスト2 リスト2 A君(左)とB君(右)の実行結果の訂正版

 このバグの原因は、筆者が実行結果をコピー&ペーストせず、手打ちで入力したことが原因でした。また、内容を再確認しませんでした。実際に試していただいた方にはおわびいたします。

間違いその2:問題文のプログラムが不完全

 前回記事内のリスト2に示した問題文のプログラムにもバグがありました。main関数のブロックの末尾を示す「}」が無く、まるまるコピーし、実行しようとすると、実行エラーとなります。大抵の方は、これに気がついて追加したと思いますが、訂正させていただきます。

 原因は、最終行まで選択せずにコピーしたことです。当時を振り返ると「Visual Studio」のエディターで実行結果を確認してから、マウスで最終行と思われるところまでコピーし、原稿作成用のWordに貼り付けしました。その結果、最終行をコピーできませんでした。また、コピーしたからプログラムは大丈夫だろうと再確認を怠ってしまいました。汗顔の至りです。

訂正:自己採点シート

 ソフトウェア開発では、「仕様記述にバグがある」と同時に、前回の問題のように、「そもそもの問題にバグが含まれている」という観点から問題に取り組んでいただければと思います。

 上記を踏まえまして、自己採点シートも訂正します。気づいた方には、100点を超えていまいますが、得点を差し上げます。また、筆者が気づいていないバグもあると思います。見つけていただいた方は、+5ポイントとします。

問題 内容 配点(点)
ファイル検索の問題 5分以上考えた 50
データファイルの改行コードが異なることが分かった 50
プログラムの最終行に「}」が書いてないことに気が付いた 5
その他のバグを見つけた 5×件数
リスト3 訂正後の自己採点シート
       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.