もっとも危険なバグ
- Bug -

夢空間への招待状

結城浩

「バグって何ですか?」

コンピュータを少しでもかじったことのある人で、この質問に答えられない人はいないだろう。 コンピュータの入門書には必ずといっていいほど、バグという言葉の説明がついている。ご承知の通り、 バグとは、プログラムの誤りのことである。コンピュータ関係者はプログラムの誤りに限らず、 機械や計画の欠陥一般にも「バグ」という言葉を使う。

バグ(bug)という言葉はもともと、虫、シラミ、南京虫、ばい菌、微生物という意味をもっている。 ふとんや畳にいつの間にか棲みつき悪さをする南京虫のように、バグはいつの間にかプログラムに住みつき、 プログラマたちを悩ませる。これは一種の比喩、たとえ話のようなものだ。

バグ=虫という連想から、デバッグ(debug)=害虫駆除という言葉もプログラムに対して使うようになった。 もちろんデバッグとはプログラムの誤りを修正することをいうわけだ。デバッグをするためのプログラムを デバッガ(debugger)というのもご承知の通り。

バグに関する言い回しはたくさんある。「バグを見つける」「バグをつぶす」「バグが出た」 「バグのすみか」「バグがいる場所」「バグが発生した」「バグを追い出す」「バグとり」… どの表現もプログラマにとっては自然な言い回しである。 いずれも虫の比喩を念頭においた表現になっていることに注意しておいてほしい。

 * * *

ダイクストラという人をご存じだろうか。ダイクストラは1930年オランダ生まれの計算機科学者で、 現在はテキサス大学にいる。ダイクストラは「構造化プログラミング」の提唱者であり、 現代のプログラマはこの人の名前を忘れてはいけないほど重要な人物である。

その偉大なダイクストラがこんなことを述べている。

「バグと呼ぶな。エラーと呼べ」

つまり、プログラマにとって非常になじみ深い「バグ」という言葉を使わないようにしろと 言っているのである。「バグ」という言葉を使うかわりに「エラー」すなわち「誤り」という 言葉を使うように提案しているのである。

ダイクストラの理由はこうだ。

「バグ」という言い方は、あたかもプログラムの誤りがプログラマの見ていないうちに 自然に入り込んでくるような錯覚を起こしやすい。もちろん、 プログラムの誤りは自然発生するわけでもないし、プログラマがよそ見をしている間にのそのそと プログラム中に忍び込んでくるわけでもない。プログラムの誤りは、 プログラマ自身が作り込んだものなのだ。 「バグ」という言葉はこの厳しい事実を覆いかくしてしまうのである。 …ダイクストラはこのように主張する。

具体的に説明しよう。

あるプログラムのユーザが、そのプログラムを作ったプログラマを責めているとする。

「この機能が動かないんだけど、いったいどうなっているんだ?」

プログラマはこう答える。

「あ、それは新たに発生したバグですね。バグの出そうな場所はだいたい見当がついてますから、 すぐつぶせますよ」

このプログラマの主張はまさにバグという言葉を使って責任の所在を曖昧にするものである。 「新たに発生したバグ」など存在しない。そのプログラムは初めから誤りを含んでいたのである。 そしてその誤りはプログラマが組み入れてしまったものなのである。

すばらしいプログラムを作ったプログラマはそれ相応の賞賛を受ける価値がある。 とすればバグのいるプログラム、もとい、誤りのあるプログラムを作った プログラマもまたそれ相応の責めを負ってしかるべきである。

 * * *

もっとも危険なバグとは、実はプログラム上の誤りではない。 もっとも危険な誤りはプログラマの意識の上の誤りである。 プログラムの誤りはいつの間にか入り込むものだという誤解こそ何よりこわいものなのである。

バグはプログラムの中ではなく、プログラマの頭の中にいたのである。

(Oh!PC、1991年3月30日)