[前へ]   [目次へ]   [次へ]

デバッグとは


デバッグとは、出来たてのプログラムのテストです。
テストなしに完成なんていうわけにはいきませんよね。

プログラムのデバッグとは、大体以下のような感じになります

●意図したとおりに動かない等の"バグ"を探す
   様々な条件で実行したりして異常な動作がないかを探します。
   例えば電卓のプログラムなら1+1とか1-2とか入れてみます。
   
   機能が増えるにつれてどんどん確認する条件が増えていくことが多いので、一番大変です。
   このテストが全て正常に終われば、完成または次の拡張へと進みます。
   
●見つかったバグの原因を探す
   様々な条件で実行した結果異常な動作が見つかった場合は修正が必要です。
   100行以上のプログラムなら多くの場合は1度はこの工程に入ることになります。
   300行以上のプログラムを書いて1度もこの工程に入らなかったらちょっとすごいかもしれません。
   
   さて、異常動作したということはどこかにその原因があるはずです。
   それを探す手助けをしてくれるのが「デバッガ」です。
   普通デバッガにはプログラムを1行ずつ実行する機能(ステップ実行等と呼ばれる)、
   現在のメモリ状態を表示する機能があります。
   これらの機能を使って問題の原因を探すことができます。
   
   デバッガが使えない場合はメモリ状態を見るために
   画面に変数を表示させたり(デバッグプリント等と呼ばれる)、
   ソースコードを凝視(笑)したりして原因を探ります。
   
   デバッガはプログラムによっては使えないケースもあるので、
   デバッガなしでもデバッグできるようにしておくことも無駄ではないと思います。
   
   余談ですが、私は最初デバッガを使わずにプログラムを書いていました。
   後にVisual C++を導入してデバッガをはじめて使ったときは「楽だな〜」とか思いました。

      
●見つかったバグを修正する
   前工程により原因が特定できた場合はその部分を修正します。
   この時ただ単に書き間違えただけなのか、
   そもそもやり方がおかしいのかによって修正量は大きく変わります。
   
   書き間違えなら正しく修正して同じ条件によって再実行します。
   やり方がおかしい場合(コード上は意図したとおりに動いているが結果がおかしい等)は、
   正しいやり方を考え直さなければいけません。
   場合によってはかなり大きな修正を迫られる可能性もあります。
   
   ところで、この「やり方」のことを「アルゴリズム」とか言うらしいです。(ちょっと自信なし)
   検索の仕方とか一般的なものならネット上で探せば既にいいものが公開されているかもしれません。
   
●バグ探しを続ける
   見つかったバグの修正が終わったらバグ探しに戻ります。
   

しかし、世にあるプログラムはデバッグが終わっているはずなのにバグが見つかることがよくあります。
それは実際にやってみると分かりますが、上で言う「条件」を全てテストしようとしたら
永遠に終わらなくなってしまうような程の条件が発生します。

例えば、「ファイルの先頭が正しくてもファイルのどこかが壊れているかもしれない」
この条件を完全にテストするには一体どれだけやればいいのでしょうか?
読み込んだファイルは10KBかもしれないし、10MBかもしれません。
データは「正しいと信じて」動くしかない形式もたくさんあります。

そのため結局は「10〜1000個くらい試して問題なさそうだったらOK」
ぐらいの結論に達することになります。(なりますよね?)

しばしば「2000回に一回ぐらいしか発生しない問題」などがあったりするので、
この手の問題はデバッグ段階で見つからず、世に出て多くの人が使って初めて明らかになったりします。

ちなみに発生条件がとっても複雑で同じように操作しても同じようには発生しないことを「再現性がない」と言います。

他にも極稀に「自分のせいではない」問題が発生する時もありますが・・・
これはどうしようもないケースが多いと思います。
どうしようもなければ注意書きに「これはダメ」みたいな項目が増えます。(笑)
本当に極稀なことなので普通はこれは考えません。
とことん煮詰めていった結果ここに辿り着くことはあっても
最初から「自分のせいではないから」と放置するものではありません。


デバッガとは
デバッガとはその名の通りデバッグを支援するツールです。

デバッガは前項のコンパイラ等と互換性のあるものでなければいけません。
どれぐらい互換性があるのかは・・・私には分かりません。(ずっと Visual C++のデバッガ使ってたので・・・)


[前へ]   [目次へ]   [次へ]

プログラミング講座 総合目次
プログラミング講座 総合目次(サイトメニュー付き)

フレームが無い場合はここ
最終更新 2008/10/17