バグ修正と問題の切り分け


すみません、id:Yamashiro0217さんのコメントを勝手に引用

バグの切り分けは非常に大事です。
バグがある箇所を見つけること=バグの修正のほとんどのコスト
だと言っても過言ではないでしょう。

で、バグの切り分けのときも何ステップかかるかってのが僕は大事だと思っています。

少し具体性にかける例ですが、
1000行あるプログラムのどこかにバグがある場合、
1行1行エラーがないかチェックしたり、print文を入れるのは億劫です。
それより、1000行あるプログラムの前半にバグあるか、後半にあるかチェックします。
もし、後半にあるなら、その後半の500行の中の前半の250行にバグがあるか、後半の250行にエラーがあるかをチェックします。

と繰り返していくと、log2 1000 でエラーがある箇所が判断できるはずです。
ここでもオーダーの概念が使えますね。


これって・・・


>1行1行エラーがないかチェックしたり、print文を入れる
=線形探索(シーケンシャルサーチ)

>1000行あるプログラムの前半にバグあるか、後半にあるかチェック
=二分探索(バイナリサーチ) O(log2n)


そのままですね・・・!
すごくおもしろいなぁと思ったので記事として書いちゃいました。