書籍購入:設計、コンストラクション、テスト――次はデバッグ。『デバッグの理論と実践』

バグというか欠陥というか、ともかくそういった代物とプログラマの戦いは遥か太古の頃から連綿と続いている訳でありまして、したがって先人たちはソレを撲滅する……のは無理そうなので、せめて勢力を著しく減らした上で封じ込めよう――予防しようと、さまざまな策を練ってきたのであります。

一つの方向としては、構造化プログラミングから始まる「プログラムの構造」に注目した策。プログラム自体の素性・スタイルといった「質」を向上させることで、プログラムの中身を理解しやすいものにして、欠陥を作りこむ可能性を少なくしよう、という発想です。そこから発展して、現在ではシステム分析・設計という一分野が形成されています。

プログラム自体の質に注目する別の考えとして、システム設計よりもソースコード寄りのもの――コンストラクションの質を向上しよう、という考えもあります。有名なところでは『Code Complete』や『プログラミング作法』など、優れた書籍が存在します。

この2つとは別の方向として、既に存在するプログラムやソースコードの質を計測する、という考え方もあります。

プログラムの質をチェックするとは、すなわちソフトウェア・テストのことです。古典である『ソフトウェア・テストの技法』は現在でも十二分に通用する書籍であり――あまりにもソフトウェア・テストの本質をえぐり出しているが為に、本書を過去の遺物と化すに十分な後継の本が出なかった、ともいえます。もちろん他にも優れた本が出ています。

具体的なテスト手法やツールについては、テスト・ファーストのような考え方、各種テスト・フレームワークやモックの登場、柔軟で単体テストをしやすい最近のプログラミング言語など、著しい発展が見られると言ってよいでしょう。

プログラムではなくソースコードの質をチェックする――静的解析の分野も注目が集まっています。C言語用のツールともなれば商用からオープンソースまで揃っています。IPAまでもが公開しているのですから*1

このように、欠陥そのものを少なくする方法や効果的に欠陥を発見する方法について、さまざまな探求が行われてきましたし、これからも行われていくでしょう。

ですが、欠陥が少なくなることはあっても、欠陥が根絶されることはありません。なぜなら、プログラムを作る人も、プログラムを検査する人も、共にミスを犯す人間であるからです。サポート用の各種ツールにしても、それらを作ったのは人間ですし、使うのも人間なのです。

では、欠陥はどこかで発生するものとして、実際に欠陥による障害に直面した時にどうすればよいのでしょうか? この「デバッグ」という分野について、今まで十分な探求が行われてきたとは言いがたいでしょう。

たとえば、これまでもデバッグについて書かれた本は出版されてきましたが、その多くはツールの本であるか、テクニックの本であるか、または特定の局面(例えばC言語のような特定の言語でのデバッグについて、など)に注目したものでした。デバッグの本質そのものに深く切り込んだ、系統的に書かれた本は皆無でした。プログラマデバッグについて自身の経験によって学ぶか、あるいは伝承によって知恵を得るしかありませんでした。

この未知の領域である「デバッグ」を私たちの手の届くところに引き寄せ、黒魔術ではなくソフトウェア工学寄りにしてしまおう、という試みが本書『デバッグの理論と実践』です。

デバッグの理論と実践 ―なぜプログラムはうまく動かないのか

デバッグの理論と実践 ―なぜプログラムはうまく動かないのか

デバッグにはある種のコツがあります。その具体的な内容はともかく、コツが存在すること自体は肯定する人が多いかと思います。一筋縄ではいかない難しい欠陥であるほど、コツが重要となってきます。

従来は、それらのコツは経験から学ぶか、仲間内で伝承に近い形で学ぶしかありませんでした。本書では、そのコツを観察して系統的なものにまとめた上で、さらに科学的なアプローチを試みています。これによって、未だ発展途上ではあるものの、デバッグを黒魔術ではなく教育可能なカリキュラムとして扱える代物に飼いならすことに成功しているといえます。

今までは欠陥の予防に重点が置かれがちでした。今後は、本書のような「欠陥の治療」についても脚光を浴びるのではないかと思います。

*1:もっとも構造体は未サポートですが。