連載
» 2018年12月25日 10時00分 公開

山浦恒央の“くみこみ”な話(113):バグ検出ドリル(13)のたうち回る地獄、煮詰まったバグを解決せよ (1/3)

バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第13回の問題は、筆者の経験を基にして作った「煮詰まったバグ」です。プログラムが思い通りに動かず「のたうち回る地獄」のような状況に対処してください!

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

1.はじめに

 本連載では、エンジニアのバグ検出力の向上を目指し、バグ入りの問題を出題して読者のみなさんに見つけていただいています。過去12回、1年の連載で、少しずつバグを見つけるヒントやコツをつかんでいただけたことでしょう。今回も、気楽な気持ちで取り組んでいただければと思います。

2.プログラミングって楽しい?

 ソフトウェアの開発工程は、大きく「仕様の定義」「設計」「プログラミング」「テスト」に分かれます。その中でも、プログラミングが、一番面白い作業でしょう※1)。プログラミングは、仕様書や設計書を基にして、コンピュータに作業手順を教える工程です。コンパイルエラーを乗り越え、ロジックのバグを修正し、思い通りに実行できた時の喜びは格別ですね。

バグで煮詰まった状態 ※写真はイメージです

 プログラムが想定通り動いた時は、わくわくして楽しくなりますが、思い通りに動かないと、のたうち回る地獄の時間になります。朝から会社の机に張り付き、プログラムの実装ミスやコンパイルエラーで時間を使い果たし、重苦しい気持ちのまま、時間切れでその日の作業を終え、帰宅することも少なくありません。煮詰まった状態ですね。食事をしていても落ち着かず、ベッドに入っても「どうやったらうまく動くのだろう?」と考えることになります。

 煮詰まった状態で、問題を解決するのは簡単ではありません。気分転換したり、他人にバグを説明して知恵を借りたり、プログラムの至るところに標準出力を記述して原因を探すことになります。判明すればバグの原因は非常に単純ですが、煮詰まった人にとっては、簡単ではありません。今回の問題は、筆者の経験を基にして作った「煮詰まったバグ」です。

※1)筆者が初めてプログラミングを経験したのは、高校1年生の1969年です。前年の1968年に「少年ジャンプ」が創刊され、翌1969年は、アポロ11号が月面着陸してアームストロング船長が人類初の足跡を月に刻んだ年です。アポロ11号の打ち上げには、もちろん、コンピュータを使いましたが、今日のような姿勢制御や機器の自動制御のためではなく、人間の操縦の補助として使っていました。

 当時の社会では、コンピュータは一般的ではなく(しかも、「電子頭脳」と呼んでいました)、「プログラミング」という言葉も、知名度はほぼゼロ。そんな時、高校の数学の先生が、プログラマブル電卓(と言っても、今のコンビニのキャッシュレジスターぐらい大きいのですが)を教官室に置き、生徒にプログラミングを自慢げに披露しました。確か、アセンブラのような言語でプログラムを組むのですが、メモリの関係で50ステップ以上は書けなかったように思います。ループも1つだけで、ネストした二重ループは組めません。2年生の中でプログラミングに興味を持ったのは、筆者ともう1人だけ。その1人も、1カ月後には数学教官室に行かなくなりました。唯一人、筆者は教官室に入り浸ってプログラミングに没頭し、うまく動かないと、日本史や英作文の時間にバグの原因を考え、バグを見つけては教官室に飛んでいきました。ついには、「真面目に数学の勉強をしろ」と、先生から出入り禁止を食いましたが、「将来、プログラミングを職業にする」と決意した瞬間でした。

 それ以降、コンピュータが革命的に発達しました。今ではプログラマーが社会の中核を担う職業として認知され、とてもうれしく思います。「自分が考えた通りにプログラムが動く」というワクワク感がプログラミングの原点であり、プログラマーのモチベーションの源であると思います。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.