対象者
初心者にTDDは難しい!!
でも要求が綺麗に満たせて、思い描いたテストが思いのままに成功する感覚を味わいたい!!
という人に向けて、私が個人的によく使う方法を紹介します。
利点
この手法ではTDDの以下の欠点が解決されます。
- 考えすぎによる作業の遅延
- 想像した内容と、テストで実装される内容の乖離
- それなりの経験が要求される、テストの想定という大きな作業による消耗
TDD振り返り
前提としてTDDの大まかな流れを説明します。
TDDとは
- 実装後の動作を思い浮かべる
- 実装後の動作をすれば成功するであろうテストを実装する
- 実際の処理を実装する
- テストを実行しながら、動作をテストする
色々と省略はしていますが、TDDとはこのような手順です。
初心者に優しいTDD手法とは
では今回の主題である初心者に優しいTDD開発とは?
TDDで一番辛いのは、実装後の動作をテストに落とし込める段階まで明確に思い浮かべる、という作業だと思います。
相当な経験があるか、相当小さく明確な動作出なければ明確に思い浮かべるのは意外と難しいものです。
私も最初にTDDを実践した時、
確かに明確に実装はできるけど、実務に耐えるほど熟練するには難しすぎるのではないか?
と思いました。
オレオレTDDとはTDDをもう少し現実的な実用レベルに落とし込んだ、初心者でも実践しやすく、TDDの良さである部分をある程度取り入れたものです。
初心者に優しいTDDの手順
- ある程度の基本となる部分を実装してしまう
- 一区切りついたら、現状までのテストを書く
- テストが動くことを確認する
- 追加したい新機能の動作を思い浮かべる
- 実装後の動作をすれば成功するであろう、新機能のテストを実装する
- 実際の新機能を実装する
- テストを実行しながら、動作をテストする
まず最初の部分を実装してしまい、後で動くことを保証するテストを実装します。
その後本来のTDDのような流れに移ることによって、TDDで想像しなければならない問題を限りなく小さくすることができます。
TDDで問題を想像する上で、基本となる実装の部分がネックになり、細かい処理の部分を想像するのが難しくなります。
この手法では、1番の心配である基本の部分は通常の開発のように実装してしまうという大胆な手法です!
まとめ
この手法では現実的な部分に視点を置いているので、あまり綺麗でないという指摘もあるかもしれません。
ですが、経験をさほど必要としない上で、それなりな利益を得られると考えると十分に実用たり得るのではないかと思います。
実際にこういう手法がもう存在しそうですが、そんなことは気にしません。
せっかくなのでそれっぽい名前も考えてみました。
AFTDD(Additional Function Test Driven Development)
日本語で追加機能テスト駆動開発と名付けました!
今日からみなさん使ってくださいね!