10章バグ狩り

デバッグがソフトウェアのバグを取り除くプロセスならば、

プログラミングはバグを入れるプロセスである。

――エドガー・ダイクストラ

デバッグは、終わりのない季節のようなものです。デバッグに免許は必要ありませんし、何も制限はありません。とらえどころのない厄介な害獣であるバグを根こそぎ壊滅するために、ショットガンを手にソフトウェアの荒野に向かってください。

現実はそんなに甘くありません。バグが増え続け、塊で攻撃してくるコードに、取り組まなければならないのです。

プログラマがコードを書きます。しかし、プログラマは完璧ではないので、プログラマが書くコードも完璧ではありません。したがって、コードは期待通りには動作しません。結果としてバグが発生するのです。

バグによっては単純な誤りであり、見つけるのも修正するのも容易です。そのようなバグであれば幸運です。

しかし、大多数のバグは、探し出すのに数時間の労力を要し、始末に負えず、捕らえにくいものです。このようなバグは奇妙で驚くような動きをします。アルゴリズムは期待通りに動作せずに、単純に見えるソフトウェアが、不可解な動きをするのです。

このことは、何も知らない新米プログラマに限定された話ではありません。先駆者達も同じ苦労をしてきました。著名なコンピュータ科学者であるMaurice Wilkesは、「私ははっきりと覚えています。EDSAC室とパンチ機の間の階段の急勾配に注意しながら、私の残りの人生が自分のプログラムの誤りを見つけるのに費やされることに気づいて強い衝撃を受けた」†1と書いています。

[†1] Maurice Wilkes、Memoirs of a Computer Pioneer(Cambridge, MA: The ...

Get ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.