TDD is really dead ?
株式会社ファクトリアル 末並晃
Twitter: @a_suenami
Github: a-suenami
id: a_suenami
http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html
TDD is dead
新卒の方々がTDDを誤解するとよくないので、
ここ数日の議論を見て
僕なりの見解を述べておきます。
http://ja.wikipedia.org/wiki/テスト駆動開発
“テスト駆動開発 (てすとくどうかいはつ、test-driven
development; TDD) とは、プログラム開発手法の一種で、
プログラムに必要な各機能について、最初にテストを書き(こ
れをテストファーストと言う)、そのテストが動作する必要
最低限な実装をとりあえず行った後、コードを洗練させる、
という短い工程を繰り返すスタイルである。多くのアジャイ
ルソフトウェア開発手法、例えばエクストリーム・プログラ
ミングにおいて強く推奨されている。近年はビヘイビア駆動
開発へと発展を遂げている。”
http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html
TDD is dead
DHH said
• TDD原理主義者はユニットテスト偏重になり
がち
• テストファーストはしばしば設計を悪化させ
る
• より上位のテストを使って開発を進めるほう
がよい場合が多い
TDD is Fun
http://solnic.eu/2014/04/23/tdd-is-fun.html
Solnic said
• TDDには多くのガイドラインがあり、必ずしもモッ
クの使用を促すものではない
• 期待する振る舞いをテストとして記述し、それをパス
させなさい
• ユニットテストだけがTDDではない
• ユニットテストを書くタイミング、モックを使うタイ
ミングを学ぶべきである
Test-first is evil ?
• アーキテクチャが複雑化し設計が悪化するのは本当にテストファー
ストが原因なのか?
• テストファーストはテストと実装の密結合を防ぐためのよいア
プローチ手段であり、多くの場合設計を支援する(私見)
• テストがよい設計へ導いてくれないのであれば、何がその役割を
担うのか
• フレームワークの規約 ?
• ドメイン駆動設計 ?
Conclusion
• 振る舞いをテストコードとして記述し、自動化することはコード
変更の信頼性を高め、健全なコードを維持することに寄与する
• ユニットテストだけでなく、より上位のテストでもそれは可能
だし、意味がある
• ハードウェアスペックの向上、テスティングツールの普及によ
り以前より簡単になった
• テストファーストのアプローチは実装とテストを疎結合にし、プ
ロダクトコード/テストコード双方のメンテナンス性に寄与する
(私見)
Conclusion
• TDDは銀の弾丸ではない
• テストがよりよい設計に導いているか、開発を駆動し
ているか常に意識しよう
• テストはよくない設計に気づく機会を与え、変更への
恐怖を和らげるが、実際にコードを改善し続けるには
設計スキルやリファクタリングスキルが必須
• TDDは楽しいが、楽しむためには学び続ける必要がある
TDD is not dead, just reborn.

Tdd is really dead ?