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