究極のデバッグ
- ELIZA -

夢空間への招待状

結城浩

 究極のデバッグをはじめるのに必須なものはたった二つだ。プログラマであるあなたと「イライザ」役をする友人。この二つがあれば準備はOKだ。

 * * *

 「イライザ」役の人間がやることについて説明しよう。イライザの仕事は、プログラマの説明を聞いてあげることである。イライザはプログラマの説明を一つ一つ丁寧に聞く。聞いているうちに不審な点や不明確な点に気がついたらそれを指摘し、プログラマに再度説明してもらう。イライザの仕事はこれだけである。

 プログラマは、イライザにプログラムの内容を丁寧に説明する。説明しているうちに、ひとりでにバグが見つかってくるのである。少なくとも、プログラムのどこにバグがいるかの見当はつく。不思議なことだ。

 究極のデバッグとは、プログラマがイライザにプログラムの内容を説明することに他ならない。本当にこれだけでバグが見つかるのである。

 イライザがプログラマに代わって問題を解いてあげるのではないことに注意。問題を解くのはあくまでプログラマである。イライザはプログラマの話の聞き役にすぎない。

 * * *

 イライザによってバグを見つけるにはコツがある。プログラマは、イライザから質問されたことは、どんなことでも説明しなくてはならない。「そこは今回のバグとは関係がないから」とか「そこには絶対バグはないから」とか言って説明を省いてはいけない。どんなにささいなことでもイライザにわかるように説明する。こうしないとイライザの恩恵にはあずかれない。

 また、イライザ役になるのは、そのプログラムについてあまり知らない人の方がいい。そのプログラムについて詳しく知っているイライザは、ものわかりがよすぎて役に立たないのだ。プログラマにとってわかりきったことを聞き返してくれるぐらいがよい。

 もちろん時には、バグがなかなか見つからないこともある。こんなとき、熟練したイライザは簡単な質問を発する。説明してくれたプログラムの適当な部分を指さして「これは何?」と聞く。あるいは、説明の中でプログラマが口ごもった部分を指摘して「そこを詳しく」と頼む。プログラマがここは絶対大丈夫、という顔をした部分をとりあげて「本当にそう?」と質問する。イライザはプログラムの内容を理解する必要はない。イライザはプログラムの内容がすみずみまで明確に説明されたかどうかに注意を払うのだ。

 * * *

 考えてみれば、プログラミングとは、コンピュータに対する説明に他ならない。プログラマは、コンピュータにやってもらいたい仕事を、プログラムという名の説明書にまとめる。プログラムのバグとは、その説明書の誤りのことだ。バグのあるプログラムとはプログラマの意図に反する説明書のことなのである。

 説明書たるプログラムが論旨一貫していなくてもコンピュータは文句を言わない。どんな理不尽な要求でも、プログラムになっていればそれを実行してしまうのがコンピュータだ。イライザ役の人間に説明をすると、その理不尽な部分が浮き彫りになってくる。コンピュータが警告を出さないような、深い矛盾点が発見されるのだ。

 * * *

 「イライザ」は 1960 年代の人工知能の研究で生まれた有名な対話プログラムの名前である。そこからプログラマの聞き役の名前として私が拝借させていただいた。経験のあるプログラマは、名前は違うだろうが「イライザとの対話」に相当することを行なっているだろう。バグで困ったとき、友人に「話を聞いてくれないか」と頼んでいるはずだ。それはまさに「イライザになってくれないか」と頼んでいるのである。

 * * *

 私はこんな経験をしたことがある。プログラマである私がイライザ役の友人に説明しはじめて、ものの十秒もたたないうちにバグが見つかってしまった。その間、イライザがやった仕事は3回あいづちを打っただけなのに。

 あなたがバグで悩んでいるプログラマなら、この「イライザとの対話」をぜひやってもらいたい。本当におもしろいようにバグが見つかることを保証しよう。

(Oh!PC、1992年4月30日)