【07】不具合にテストを書いて立ち向かう

和田 卓人

 テストを行っている品質保証チームや、実際にシステムを使っている不具合が報告されたとき、あなたはどう思いますか? 悲しんだり、恥ずかしいと思い、不具合修正にすぐに着手したいと気がはやるというのが人情というものです。しかし、焦っているときに行う作業はしばしば視野が狭く、1 つの不具合修正が 3 つの新たな不具合を生んでしまうということになりがちです。

 テスト駆動開発(TDD:Test Driven Development)とは、プログラマが自分の不安を克服し、自分が書くコードに自信を持ちながら一歩一歩進んでいくための手法です。しかし不具合の発生とは、端的に言えばこれまでの「自信」を揺らがせる事態です。テスト駆動開発者は不具合にどう立ち向かうのでしょうか?

 やはりテストを書いて立ち向かってゆくのです。私はテスト駆動開発を数年間実践してくる中で、心がけているひとつの「掟」があります。それは、「不具合の修正時には必ず先に不具合を再現する自動テストを書いてから修正する」というものです。これはもちろん私の発案ではなく、XP(eXtreme Programming)や TDD の先達から学び、それを実践するうちに私にも身についてきたものです。不具合修正時のテストは、次のような手順で行います。

  1. 手元で不具合を再現させる。
  2. コードを注意深く調べ、不具合を発生させている最小の部分を絞り込む。
  3. 最小レベルで不具合を再現させ、不具合が修正されたら通るような自動テストコードを書く。
  4. 3 で書いたテストコードを実行し、落ちることを確認する
  5. 不具合を修正する。
  6. 3 で書いたテストコードが通ることを確認する。
  7. 既存のすべてのテストを実行し、不具合修正が他の部分を壊していないことを確認する。

 こう書くと面倒に感じるかもしれませんが、不具合修正時のテストには、さまざまなメリットがあります。

 「テストを書いている時間は無い」と言われたり、不具合修正時にテストを書くことをひどく遠回りに感じることがあるかもしれません。しかし、患部の絞り込み、修正中の確認、他の部分への影響の確認、再発防止などを考えると、不具合修正にテストを書いて立ち向かうのは合理的で効率的な手法なのです。テストを友として自信を持ちながらコードを書く。それがテスト駆動開発を身につけたプログラマの仕事のやり方です。