テスト駆動開発って知ってますか?
ぼくも最近まで知りませんでした。ただ、今関わっているプロジェクトがこのテスト駆動開発という開発方針を取り入れているので、現在勉強しながらやっている次第です。
とはいえ、ちょっと触ってみた程度ですが、テスト駆動開発って慣れてくると結構いいです。今日はテスト駆動開発についての簡単な紹介と、実際にやってみて良かった点を説明しようと思います。
1. テスト駆動開発って何ですか??
初めにテスト駆動開発の説明をします。一般的な開発と比べて一番違う点は、「テストコードを初めに書く。」ことです。
一般的な開発の場合は「実装 ➡︎ テスト」という順序になると思います。この場合のテストは、「実装が想定した動作をさせた時に正しく動くかどうかを確認するもの」という立場になります。
一方でテスト駆動開発では「テスト ➡︎ 実装」という流れで開発が行われます。この場合のテストコードは「実装されるコードがどのような状況で使われ、結果としてどのようなものを返すかを確認するもの」という扱いになります。つまり、実装をする際はこのテストコードを元に記述されることになります。
従ってテスト駆動開発の時のテストコードは、テストとしての役割だけではなく、設計書としての役割も担うことになります。
2. テスト駆動開発の何が良いの?
テスト駆動開発の最大のポイントは、「テストコードを先に書くこと」です。これに尽きます。
じゃあ何がそんなに良いのか?テストコードを先に書くことで、実際にどういった引数が渡ってきてどのような戻り値を返すべきなのかを事前にイメージ出来ることです。テストコードを書いた段階で、一度実際のケースを想定するので、かなり頭の中をクリアにすることが出来ます。
それに、実装してすぐにテストを実行出来るのも魅力です。ある程度の機能を実装しを待たなくて良いので、問題箇所の特定や修正がかなりしやすいです。
3. ポイントは「テストを意識すること」
普通の開発手順だと、実装しながらテストを意識することはあまりありません。とにかく書いて、あとはそれに合わせたテストコードを書きます。そして、実装に変更が加わったらそれに合わせてまたテストを修正して…の流れだと思います。
ところが、テストコードを意識するとその順番が逆になります。実装の修正の前にテストコードを見直すようになります。仕様変更に合わせて、まずはそれが実際に使われる場面を想定し、それに基づいてテストコードを直し、その後に実装部分の修正になります。
このように、テストコードを意識することでその実装が使われる場面をまずは想定することになります。あとは、そのテストコードに合わせて実装を直せば良いので、手直しもスムーズです。実装を修正したら即テストにかけて問題がないか確認も出来ます。
初めは慣れてなかったので、実装を書いてしまいがちでしたが、慣れてくるとテストコードの修正や変更がまず念頭に置かれるようになります。これが実に心地よい!
ちなみにテストはjunitとかjmockitなんかもガンガン使って書きます。ないとやってられないです。あとは、Springフレームワークにも助けてもらってます。
次回はちょこっとコードを書きながら、雰囲気を伝えるようなこともやってみたいと思います。