この記事はTDD Advent Calendar jp 2012( http://atnd.org/events/33846 )の記事です。


TDDでテストを書くときテストファーストで書きますよね。

テストファーストで書くとしたらテストに何を書くのでしょう。
私は「プログラムにさせたいこと、期待すること」を書きます。

プログラムを書くときに、手元にある紙にタスクを書くように、テストコードに「プログラムにさせたいこと、期待すること」を書きます。
そうすると、何をテストに書くか、このプログラムの挙動はなにか、ということを考えます。
すると私はこのプログラム、このクラス、このメソッドに何をさせたかったのか、というのが整理されます。

また、「あれ、このプログラム、振舞が似ているのに内部ロジック違う」とか「このプログラム、やっていることがほぼ同じだ」とかいうのがわかりやすくなります。
そうすると自分の思考が整理されますし、内部の仕様について理解しやすくなります。


「テストコードを書かずに一気にプロダクトコードを書いてしまいたい」とも思うのですが、黄金の三角形を回すことで思考が整理されることやリファクタリングの敷居が下がることはTDDの大きなメリットだと思います。



最後にプログラムが書き上がると、「黄金の三角形を回すためのテストコード」は「内部の機能を保証するためのテストコード」よりも冗長かつ肥大になりがちだと思います。
冗長かつ肥大ということはメンテナンスコストが大きくなるので、そのまま残すのは得策ではないと思います。

いせりさんに聞いたところによると、そういうときは
①テストコードの一部を捨てる
②テストコードをリファクタリングする
のいずれかを行うとよく、①をしてしまう人が多い、と言っていました。


前日:
くりにっき
http://sue445.hatenablog.com/entry/2012/12/01/000002

翌日:
レポート置き場
http://grimrose.blogspot.jp/2012/12/tddadventjp.html?spref=tw