プログラムにバグのないことを証明するのは、一般的に決定不可能問題として知られている。つまり原理的に、自分自身も含めたあらゆるプログラムからバグを検出することは、不可能というわけだ。

しかしそうは言っても、個々のプログラムに対して、バグを減らし、なくす努力は当然必要。そういう作業に、プログラマ自身が行うデバッグ作業と、他人がプログラムの動作や結果からバグを見つけ出す検出作業に大別される。

プログラマ自身のデバッグ能力はそのひとの経験に大きく左右されるが、大抵のプログラマは自分の能力を信じているので、デバッグ作業にそんなに熱心でないのは確か。勘違いや考慮不足等のことも大いにあるわけで、本人のデバッグにあまり期待しないほうがいいだろう。

外部から、バグを検出する方法はいくつもあるが、もっとも大事なのは、テストする前に、入力データをできるだけ多く用意し、しかも、必ず正解を一緒に用意すること。プログラムの実行結果をみながら、適当に入力データをその場で考えたり、出力をみて、その場で検証したりしてはいけない!

入力データは、とくに境界条件のところで厳しく設定する。ありそうもない入力データも仕様書に反しない限り用意すること。

また、入力に使ったテストデータは必ずすべて保存すること。プログラムのテストはその場その場で適当にやるのではなく、プログラマと合意の上、プログラマが立会いのもと、大々的に行う。プログラマの直したとか、絶対に動くとかの言葉を信用せず、いままで使った入力データすべてを再テストする。新しいバグを直したことで古いバグが再発することは大いにあるから。

Comments are closed.

Post Navigation