テストファーストの良さ

今月からやっとテストファーストを新人達に説明し導入を開始しました。
実はチームとして本格的に採用したのは今回初だったりして。遅すぎ(^^;
というのも、ある程度プログラミングができるようにならないと結構難しいイメージがあったから導入のタイミングを見計らっているうちにこんな時期になってしまったのです。
新人達は「面倒だ」「なんでこんなことをするの?」と最初はやる気0モードでしたが、そこはペアプロをしつつ、半強制で段々とできるようになっています。このあたりは新人相手だからできるってことでしょうか。
で、まだ新人はあまり実感していないようですが、僕としては以下の効果を確実に体感できるようになりました。

  • 入力・出力を明確にすることでメソッドの責務が明確になり、コードが短めになる
  • リファクタリングもがんがんできる
  • テストコード自体がメソッドの使い方を示すことになる
  • 常に前に進んでいる感が持てて、その結果、モチベーションが維持しやすい

まぁ、いずれもアジャイル系の本やWebサイトではウリにされていたものの、あまり実感できなかたのですが、今日は違いました。新人の作成したコードをがんがんリファクタリングしても問題ないし、かつ、メソッドを短く書かせるための指導も自然に出来るのです。これは指導者としては非常にうれしい環境ではないでしょうか。
しかも参考書籍がたくさん出回っているJUnitではなく、PHP4とSimpleTestという超レアな環境でもしっかり効果が確認できました(当たり前なんですが^^;)
ちなみに今後の課題は以下の3つ。

  • どこまでメソッドを細分化していけば良いか?
  • 画面遷移のテストはどうするの?
  • 画面レイアウトのテストはどうするの?

このあたりはよりテストファーストに関する文献を読みあさり、実践を積むことで少しずつノウハウを蓄積していくしかないかなと思います。
(画面周りはどうにもできないかな?という気もしてますが)

ユニットテストによるテストファーストは、テストというよりは設計のための一手法という和田さんの考えに強く納得させられた一日でした。