しかしJUnitの導入を決めておいて、なぜテストファーストを採用しないのかね〓。
そんなに"今までのやり方を変える"のが嫌なんでしょうか。。。
イヤなんでしょうね。JUnitが流行っているからいれたけど、今までの単体テストとどこが違うかがわからないんでしょう。
TDDをする上での障害は2つあって
- 1つは単純に事例が少ないこと
これをやれば効果があるという保証が(日本では)少ないんです。DevelopperSummitで講演がありましたが、雑誌などの事例紹介では載ってないはずです。
Martin Fowler's Bliki (日本語))によれば、バグが超少ないプロジェクトというのがあるので、効果があるのは確かなんですけどね。
つまり成功事例が見つからない⇒自分がやるのは怖い⇒リスクが大きいから止める(今までのやりかたで良いじゃん) となるわけです。
- もう1つは短期的にはコストが増大し、それにともなってリスクが増大すること
TDDをするばあい、テストプログラムを書き、テストをし、コーディングをするというサイクルで開発をするので、テストプログラムを書いたり、テストをしたりというてまがかかります。
その分、一つの機能に時間がかかり短期的にはコストが増えます = リスクが増えます。
TDDの本質的な利点はテストを前提とするという制約によって、各機能が単純化すること。それによってプログラムがわかりやすく、変更しやすくなることです。
しかし品質が上がるというのはデバッグにかかる時間が減るというマイナスが減る効果であって、プラスが増える効果ではありません。
プロジェクトマネジメント上ではリスクの割にリターンが小さい行為とみなされるということです。
XPでもそうですが、自分だけでもTDDやプラクティスを行って効果を見せない限り、他人は変わらないのかもしれません。