バグのないプログラムを目指しなさい

プログラマである以上、バグのないプログラムを目指すべきだと思う。しかしそうでない人が多い。彼らの言い訳はこうだ。

  • テストはテスターの仕事だから...
  • テスト期間は別途あるので、そのときしっかりテストすれば良い
  • 時間がないから...

そしてコンパイルが通るとすぐコミットされてしまう。1度も実行することなしに...。
結果、テストフェーズでバグが発覚し、コードの山の中からバグの原因を探すはめになる。


逆にモラルが高い(そして技術も高い)プログラマの仕事のサイクルはこうだ

  • コーディングする
  • バグがないか気になり、コーディングを止めテストする
  • このサイクルを繰り返す
  • そして、こまめなテストがしやすい設計を行うようになる
  • テスト効率を上げるためにデバッグ用のログ出力機能を作成する
  • ASSERTをたくさん仕込む
  • 単体テストフレームワークを導入する
  • 耐久テスト自動実行プログラムを作成し徹夜で働かせる

そして開発が終わり、テストフェーズには暇をもてあます結果となる。


ここでモラルのことは置いといて、前者と後者の違いを考察すると

コーディングとテストを分離させない

ということが大事なことだと思う。
そこで提案

  • コーディングとテストは同じ担当者に行わせ、彼に品質の責任まで持たせる(これでコーディング中もテストのことを意識するようになるはず)
  • マネージャは担当者にどのようなテストを行ったか報告をもとめる。
  • テストチームはバグを発見する度に担当者に猛烈に抗議する(ここはプレッシャーが必要と思うので)

これで各個人のモラルに頼ることなく品質のよいソフトウエア開発ができる!(...といいな)