TDDをやっていて学んだこと

最近、TDDを会社でやっているので、学んだことをまとめておく。

学んだこと

  • TDDでは、まずテストを書き実行する。するとエラーになるので、すぐさまテストを通るようにコードを実装する。 テストが通るようになったら、リファクタリングをする。そしてまたテストを書く。このようにしてRed->Green->Refactoring繰り返す。

  • テストを書きRedの状態になったらすぐに、Greenになるようにコードを実装する。その際、コードを一般化して書こうとしないように気をつける。 とにかく一秒でも早くGreenにする。たとえば文字列を返すメソッドで"a"という文字列が返ってくることをテストで期待する場合は、return "a"だけを実装する。 その後、別のテストを追加し、両方のテストが通るように実装を変更する。

  • 設計はrefactoringのフェーズでおこなう。必ずテストがリファクタリングの前後で通っている状態になっているはず。

  • なにか迷ったらすぐにテストを実行する。答えはテスト結果に書いている。とにかく細かくテストを回す。

  • テストを何度も実行するので、テストの実行に時間がかかると効率が落ちる。Scalaだとsbtを起動するのに時間がかかるのでsbtは常に起動しておく。

感想

  • テストが整備されていないコードで途中からTDDをやるのは辛い、テストを書くのに時間がかかってしまう。
  • テンポよくリズムに乗って開発するには、そもそもその言語に習熟している必要がありそう。逆に言語の習熟度が上がるほど効率よく開発できそう。
  • TDDが良いと思ったのは、余計なことを考えずに手を動かせるところ。いつも先に設計を考えてしまってコードを書くのに時間がかかってしまっていたが、先にコードを書いてから設計を考えるほうが短い時間で効率的に実装できる気がする。