テストファースト

なぜ、今さらという気もするけど、社内の勉強会で気になったので書いてみる。この文脈では、テストファースト=TDD。
多くの人がテストファーストについて語る*1時、けなす場合もほめる場合も、以下の三つの何が対象なのかはっきりしない場合が多いように思う。

  1. 製品コードの前にテストコードを書く
  2. 単体テストコードを書く
  3. テスティングフレームワークを使って、テストを自動化する

Kent Beck的なテストファーストは、製品コードの前にテストコードを書くことによって、設計品質を高めることだ。テストコードを書く事により、実際に使う人の視点からより使いやすいインターフェースを設計することができる。また、自然にクラスはテストしやすい構造になる。テストファーストをTDDと言い換えたのは、こういう意図が伝わりにくいと思ったからだろう。
ところで、1が設計品質を向上させるのに対して、2と3は実装の品質を向上させる。製品コードを最初に書かなくても、テスティングフレームワークを使い単体テストコードを書いて、テストを自動化すれば、実装の品質はあがる。テストファ−ストを導入するのに抵抗があるのなら、まずはここから初めてもいいだろう。

*1:オレオレ定義はおいといて