連載
» 2019年02月22日 10時00分 公開

山浦恒央の“くみこみ”な話(115):バグ検出ドリル(15)なぜ「山田三郎」が「まだまだ天田三郎」に化けるのか (1/3)

バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第15回の問題は、「思った通りに動いてくれないプログラム」のバグです。少しはプログラマーに忖度してくれよ!

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

1.はじめに

 本連載では、エンジニアのバグ検出力の向上を目指し、バグ入りの問題を出題して読者のみなさんに見つけていただいています。少しずつ、バグを見つける「嗅覚」が鋭くなっているでしょう。今回も、気楽に取り組んでいただければと思います。

2.思い通りに動作しない……

 コンピュータは、人間が一生かかっても終わらない処理を一瞬で実行します。ただし、思い通りの動作を教え込むのは簡単ではありません。プログラムを記述し、実行すると仕様通り動かないことがよくありますね。コンピュータは、プログラマーの意図を忖度できず、あくまで指示の通りしか実行できません※1)

バケツ ※写真はイメージです

※1)コンピュータのことを全く知らない人から「バグって何ですか?」と聞かれることがあります。そんな時は、「まず、コンピュータのプログラムですが、お料理のレシピみたいなものなんです。『鍋に水を2リットル入れてください』『ガスレンジに火を点け、水を95℃に熱してください』『塩を小さじ1杯入れてください』『カレー粉を大さじ3杯入れてください』みたいな感じですね。こんな『命令』が、例えば、携帯電話機の中には500万行も書いてあります。文庫本に換算すると1000冊になります」と言うと、相手は、「えっ、プログラムを作るのってものすごく大変なんですね」と「同情」してくれます。

 そこで続けて、「そのレシピで、『カレー粉を大さじ3杯入れる』と書かなきゃならないのに、『バケツで3杯』と間違うのがバグです。ささいな誤植ですが、コンピュータはこの通り、バケツ3杯のカレー粉を入れます。で、カレー粉が鍋からあふれて引火し、大事故になるんです。1文字間違えるだけで、何十億円もの損害が出ます。これが、コンピュータのバグです」と説明すると、大抵は理解してもらえます。

 プログラマーの最大の悩みは、「思った通りにプログラムが動いてくれない」ことでしょう。プログラマーは、仕様に基づいてプログラムを作成しますが、実機で動かすと、「正しく動かない」ことが少なくありません※2)。プログラマーにとって、プログラミングは楽しい時間ですが、バグに正面からぶつかった時は非常に苦しい時間ですね。落ち着いて原因を分析すると、非常に単純なミスが原因のケースが少なくないのですが、冷静でなかったり、バグが盲点に入ると、なかなか原因が分からず、七転八倒して苦しみます。

※2)筆者が新人プログラマーだった頃、教官役の上司には2つの口癖がありました。1つは、「プログラムが動かないと、プログラマーが動かねばならない」で、もう1つは、「プログラムは、考えた通りに動くのではなく、作った通りに動く」でした。40年たった今でも、この2つは、「永遠の真実」ですね。

 筆者は、学生のプログラミング実習を後ろから見る機会があるのですが、思い通りの実行結果とならず、苦労している学生を何度も見ています。モニターに映っているソースコードを見ると、「変数を初期化せずに結果を出力している」が原因だったりします。読者の皆さんも、簡単なバグでてこずった経験をお持ちでしょう。

 バグの原因を見つける場合、標準出力やデバッガなど、あらゆる手段で情報を収集し、冷静に判断する必要があります。今回は、問題文の情報からA君が宿題で書いたプログラムが正しく動作しない原因を推察してください。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.