プログラミングをする上でバグの発生は避けることが非常に困難な現象です。ほとんどの場合においてバグは発生したならば直す必要があります。バグが直ったことを確かめるためにはバグが再現する条件を見つける必要があります。バグが再現しなくなってようやく、ある条件において発生していた意図しない動作は発生しなくなった、と言えます。そのためバグの発見時の記録には、バグが再現するための条件、バグが直った場合の動作、がわかるための手がかりとなることが求められます。Matt Doar著のバグレポートの使い方には次の様にあります。
- バグの再現方法(できるだけ詐しく)と発生頻度
- 本来の仕様(バグがない場合の望ましい動作。こうあるべき、という自分の意見でかまわない)
- 実際の動作(完全でなくても、自分の記録した範囲で詳しく書く)
なぜバグが起きるのか、どうすれば直ったと言えるのかに必要な情報がまとまっています。テスト駆動開発という手法ではこれを元に自動テストを書き、それを適宜通すことで再発を防ぐ方法が唱えられています。これは3ステップで、まず、バグが再現する操作を再現して、本来の仕様ならばテストが通るテスト関数を作り、それが常にレッド(テストが通らない状態)であることを確認。次いで、無理やりにでも直して常にグリーン(テストが通る状態)であることを確認。最後に、リファクタリングでコードをきれいにし、かつ常にグリーンであることを確認する。といった具合です。これを繰り返すとバグらないきれいなコードが残ります。