プログラミングのすすめ。デバッグの基本は「二分探索」問題のあるところを見つける方法

徒然草2.0

これは、プログラミング初心者向けの記事です。

…さて、問題です。

100行ほどの「動かないコード」があるとします。

以前は動いていたので…すべてのコードが間違っているわけではありません。

数日前にどこかの箇所のコードを書き換えてファイルを保存したようなので、どこかに誤りがあるようです。

しかし、プログラムが動かない問題のある個所がどこの行にあるかは分かりません。

どうやら、途中までは動いているようなのですが、どこかの行でストップしています…。

それを確かめるにはどうしたらいいでしょうか?

(問題の解き方は1つではありませんが…)

あなたはどう解決しますか?

原始的にして確実な方法があります。

それは「二分探索」を使うこと。二分探索でググるとアルゴリズムの解説が出てきます…まあ、そのアルゴリズムを使うわけですが、使うのはコンピュータではなくて人間というか”あなた”が使います。

100行あるコードの50行目にprint関数などの出力命令をつかって”test!”という文字列を表示させてみてください。

もし文字列が表示されたら50行より上は正常に動いていることになります。

したがって、動かないところは50行から最後までの間にあります。

逆に動かなかった場合は、0から50行の間に、プログラムが動作しない原因があります。

今度は、25行目のところで”test!!”という文字列を出力させてみてください。

表示されたのなら動かない部分は25行目から50行目にあり、表示されないのならばファイルの先頭から25行目の間に誤りがあります。

まあ、口で言ってもわかりませんが手を動かしてみれば当たり前の話です。

…そうやって間違った箇所を絞り込んでいけば、いつか問題のある部分がどこにあるのか1点に絞り込めるはずです。

…これは、プログラミングをやり始めた初心者の人から上級者までデバッグツールが役に立たないシーンで誰もが当たり前に使うテクニックです。別にプログラミングに限った話ではなく、何らかの探し物をするときに使える方法=アルゴリズムです。時系列でもなんの軸でもいいのですが、探す対象が整然と並んでいれば探し物を見つけ出すのに使えます。

こういった方法があることに気づいて自然とできる人もいるのですが、気づけない人もいます…そういう人はどうやって問題のある個所をみつけるのか?わかる人に聞いてみましょう。この「二分探索」という技術で見つけられるのなら時間が少しかかりますが見つけてみましょう。

地味ですが、かなり使えるテクニックです。

コメント

タイトルとURLをコピーしました