こんにちは。
最近、「テスト駆動Python」という本を読んで、「弊社の開発チームでは取り入れていませんが、そういえばテスト駆動開発とかもあるなぁ」、と思って、ぼんやりとは知っていたものの、ちゃんと調べたことがなかったので、調べてみました*1。
テスト駆動開発(TDD)とは
テスト駆動開発とは、テストファーストなプログラムの開発手法のことです。プログラムの実装前にテストコードを書き、そのテストコードに適合するように実装とリファクタリングを進めていく方法を指します。
テスト駆動開発には、そこから派生したものもあるようで、BDD*2とかもあるようです*3
テスト自体は、「ちゃんと動くか」を確認し、保証するため*4に行うものですが、それが満たされるようにプログラムの実装を行い、最後にリファクタリングをすることで、「ちゃんと動いて、綺麗なコード」を実現することができます。
実践のサイクル
テスト駆動開発には、「Red -> Green -> Refactor」の3つのステップがあります。それぞれここで紹介していきます。
Red:テストケースの設計
ここでは、求められている機能を満たすためには、どのようなテストが通るべきかを洗い出します。
「Red」というのは、テストが失敗した時の状態のことをさし、テストケースを作成して、実行した時にエラーが起きている状態が正常で、これを確認することから始めます。
ちゃんと書けていれば、実際の機能を書く実装に入ってないので、テストケースは失敗すると思いますが、それを確認することで、テストコードが正常だというテストもできるという感じです。
Green:実装してテストを通す
最初にテストだけを設計して、「Red」になった状態から「Green」な状態にします。
ここでは、実装の綺麗さは問わず、前に設計したテストが通ることだけを考えて、実装します。
Refactor:テストが通る状態を維持してリファクタリング
「Green」の状態で、テストが通った状態になりますが、ここで「Refactor」のフェーズに入ります。ちゃんとコードを綺麗な状態にしていくという感じです*5。
参考
以下の和田さんの動画がわかりやすかったです。動画の中で、ライブコーディングも行なっているのですが、テスト駆動開発の参考としてすごくわかりやすかったです。
特に、テスト駆動で開発する時の機能要件の詳細化のところとかは、テスト駆動で開発することで、機能をブレイクダウンして開発することが自然とできるんだなとなりました。
TDDに関する議論
いろんな記事
この手の開発手法は、議論の火種になりがちですが、調べていく過程でいくつかそういった記事を見かけました。
ケースによって向き不向きはあるような無いような、、、実際にやってみながらかなぁ。
やってみた感想
テスト駆動開発の流れ自体は、普通に自分一人でコードを書く時にも始められるので、今のプロジェクトでも普通にテストは書きますし、先日機能を書いた時にやってみたのですが、テストコードをを最初に書くことで、「テスト書くのめんどくせぇ」みたいな気持ちにもなりにくいですし、仕様の整理がちゃんとできて、問題のスコープを小さく区切ることもできて、コードも書きやすかったです。なんか、脳みそをステップに分解してやることができる気がします。
あと、色々書いて、最後テストが通ると「イェーイ」ってなりますした笑*6。
デメリットとしては、TDDに限らずですが、テストコードのメンテナンスにがっつり時間が取られるところとかぐらいかな、と思うので、普通にほそぼそとやってみようと思います笑。
以下の記事では、ミクシィのTDDの事例ですが、メリットやデメリット、適するプロジェクトとそうでないプロジェクトなどが紹介されていて、とても参考になりました。
他にも以下の記事に紹介されているところをみて、もっとテストコード周りの理解を深めていこうかなと。
それでは。
参考
- テスト駆動開発って何だろう | Developers.IO
- テスト駆動開発(TDD)とは?TDDの進め方をステップ毎に解説! | Qbook+
- テスト駆動開発(TDD) - Qiita
- テスト駆動開発/振る舞い駆動開発を始めるための基礎知識 (1/3):いまさら聞けないTDD/BDD超入門(1) - @IT
- TDD(テスト駆動開発)をするぞという強い気持ちをもって新訳「テスト駆動開発」を読んでいるお話 - Qiita
- テスト駆動開発(TDD)初心者が陥りがちなアンチパターン6選 | tracpath:Works
- テスト駆動開発について僕は誤解していた - 偏見プログラマの語り!
- TDD の基礎体力と、TDD に対する想い - ぐるぐる~
- TDDを現場へ導入した時のなるべく具体的な話 - Qiita
- TDDを現場へ導入した時のなるべく具体的な話 - Qiita