デバッグ わかりやすく
継承まで来て、かなり大きなプログラムを作りました(第13回)。でも、作ったプログラムはどこかで必ずずれます。打ち間違い一つ、外れた思い込み一つで十分です。ずれは失敗ではなく、いつでも起きることで、それを落ち着いて見つけて直すのがデバッグです。
止まった場所が最初の手がかり
プログラムがずれると、黙って止まるのではなく、ある場所で止まります。
そして「ここ、この行」とその場所を指します。
その指し示しが、いちばん値打ちのある最初の手がかりです。エラーはまず、どこで止まったかを見せてくれます。
実行を押すと、段階が順に点いていき、ずれた場所でぴたりと止まります。
どこで止まったかが、ひと目でわかります。
次に、その場所に赤い文字が出ます。
その文字を見ると、多くの人がどきっとして身構えますが、じつはそれは私たちの味方なのです。
赤い文字はお説教ではなくヒント
赤い文字は、私たちをしかっているのではありません。
コンピュータが何をわからなかったのかを書いたメモです。
ふつうは二つのことが書いてあります。場所(どこ)と種類(何)です。「これは数ではありません」「そんな名前はありません」といった具合です。
落ち着いて読む方法さえ身につければ、半分は解けたようなものです。
メッセージのかけらを押すと、「どこ」と「何」が別々に光って分かれます。
メッセージを「どこ」と「何」に分けて読むと、こわかった文字が急に親切に見えてきます。
けれども、メッセージが指す場所が、いつも本当の原因とはかぎりません。
長いプログラムなら、原因をどうやって素早く絞り込むのでしょうか。
範囲を半分ずつ絞る
バグがどこにあるかわからないときは、最初から全部読まずに真ん中を見ます。
ここまでは大丈夫か。そうならバグは後ろ半分に、そうでなければ前半分にあります。そしてまた半分に分けます。
こうして半分ずつ絞れば、長い行の並びでも、すぐに犯人が見つかります。
「真ん中を確かめる」を押すたびに、大丈夫か問題かによって範囲が半分になります。
何回か押すと、範囲が一か所まで絞り込まれました。
全体を見なくても、犯人をぴたりと当てたのです。
原因が見つかったので直す番ですが、直すときに陥りやすい落とし穴が一つあります。
一度に一つだけ変えて確かめる
原因らしきものが見えたからといって、まとめて全部いじってはいけません。
五か所を同時に変えると、直っても、どれが効いたのかわかりません。
新しい問題が起きても、何のせいかわかりません。
だから一つだけ変えて、実行して、確かめます。
候補を一つだけ変えて「確かめる」を押すと、原因がはっきりします。いくつも変えると、何が効いたのかがぼやけます。
一つずつ変えたので、何が本当の原因だったのかがはっきりしました。
犯人を正確に突き止め、直しました。
ではもう終わりでしょうか。まだ一歩残っています。「直ったと思う」と「直った」は違うからです。
直したら、必ずもう一度動かして確かめる
直したつもりだけでは終わりません。
もう一度実行して、最後まで通るのを自分の目で見て、はじめて終わりです。
ついでに、ちゃんと動いていたほかの場所が壊れていないかも確かめます。
この「直して、もう一度確かめる」ひと回りが、当て推量と本当の修正を分ける線なのです。
「もう一度実行」を押すと、直したプログラムが最後まで緑で通ります。
これで私たちは、作ることも(第1〜13回)、ずれたときに見つけて直すこともできます(第14回)。
では、私たちが書いたこの文字は、どうやって機械が実際に動かすものになるのでしょうか。
次のレッスンでは、その文が機械の仕事になるまでの道をたどってみます。