コラム16. :プログラムのミスを「バグ」という理由
本当に「虫」が原因だった
C言語に限らず、プログラムの誤りのことを、「バグ(BUG)」と言います。バグは、「虫」を意味する言葉ですが、そもそもなぜ、プログラムの誤りのことを、「バグ」と呼ぶようになったのでしょうか?実はこれ、ほんとうに、「虫」でコンピュータが誤動作したことに由来すると言われています。
最初にこの「バグ」を出したコンピュータは、ハーバード大学のコンピュータ「マークII」であると言われています。このマシンは、アメリカ初の電気機械式計算機である「マークI」の後継機で、スイッチ、リレーなどと呼ばれる機械部品で構成される電気式の「機械」であり、モーターによって動いていました。
1947年9月9日、この「マークII」のリレーに蛾が挟まり、動かなくなったというのが世界初の「バグ」であると言われています。しかも、実際に証拠写真も存在しているのです。(図1.)このバグを発見したのはプログラミング言語「COBOL」の開発者であり、ハーバード大学の「マークI」の最初のプログラマーの一人、そしてアメリカ海軍の軍人でもあった女性、グレース・ホッパー氏であると言われています。
そういうこともあり、このときの蛾は不具合の報告書とともに海軍のコンピュータ博物館に保存されています。

デバッグのためのツール
このように、もともとはコンピュータの「外部要因」が原因で起こったのがきっかけの「バグ」でしたが、通常プログラムの「バグ」は、人為的原因、つまりプログラマーのミスで引き起こされます。
おおよそ実用的なプログラムやソフトウェアで、この「バグ」なしで作ることができることができることはできません。そのため、ソフトウェアの開発はたえざる「バグ」との闘いになります。そのため、この「バグ」をとる作業である、「デバッグ(Debug)」を行うことが必須となります。
そういったこともあり、プログラマーがデバッグを行うことが容易になるための様々なツールが発達してきました。そのための代表的なものが、「デバッガ」と呼ばれるものです。
デバッガ
デバッガとは、プログラムのバグの発見や修正を支援するソフトウェアです。動作しているプログラムの状態を調べたり、挙動に介入したりするのがこのデバッガなのです。デバッガには通常、プログラムの実行を特定の位置で中断するブレークポイント機能、一段階ずつ動作を確認しながら実行するステップ実行機能、実行中のメモリやレジスタ、変数などの状態を見るトレース機能があります。
単独のデバッガとして最も有名なものは、GNUプロジェクトによって開発されたフリーのデバッガ、GDBでしょう。ただ、現在プログラミングは、NetBeansやVisualStudioなどのIDE(統合開発環境)の上で行われるのが普通になっており、これらツールはデバッガを内蔵しているのが普通なので、現在、プログラマーはこのデバッガが独立したソフトウェアであるという意識はあまり持たないかもしれません。
このデバッガによって、プログラムのバグの修整はずいぶんと楽になりました。
バグを出しにくいプログラムを心掛ける
このように、現在はプログラマーにとって非常に便利なツールがあるわけですが、だからといってバグが減るわけでも、ましてやバグを自動的に見つけてくれるわけでもありません。
どんなに優秀なツールがあっても、あまりにもバグが多すぎれば、プログラマーはデバッグでけでエネルギーを消耗してしまいます。そのため、大事なのは、「いかにバグを出しにくいプログラムを作るか」という点にあります。
バグを出しにくいプログラムを出す方法には、いくつか方法がありますが、C言語などの特定の言語に限定せず、あえてそのコツを言うとなるのなら、以下の通りになるでしょう。
- コーディングルール(ソースコードを書く際のルール)などを定め、それに忠実に読みやすいコードを書く
- ソースコードの要所には必ずコメントを入れ、後から見てもどんな処理をしているのかわかりやすいようにしておく
- 信頼度が高く、再利用の可能なコードのストックを持ち、簡単に再利用できるように準備しておく
これ以外にも、様々なほうほうがあるでしょうが、こういった点を心掛けながらプログラミングを行えば、比較的バグを出しにくいプログラムができるのではないのでしょうか。