テストの本
ここ最近「きちんとテストを書いてみようかな」と思い、まずはどんなものかを把握するために「テスト駆動開発」本を読んだので、その感想というか実際にやってみてどうだった、というのが今回のネタです。
なんと2回連続の技術系ネタです。やったね!
テスト、してますか?
やれ因数分解だの微分積分だののことではありません。
Before
まずやる前(本を読む前)ですが、正直「実装の前にテスト書くん?めんどくさ。」「考えるな。実装しろ。」というものでした。
ええ、こんな感じで。タイピングの音はうるさくない・・・はず。もちろんこのやり方でもメリットはありました。
- 簡単なイメージをつかんでもらうためのモックがすぐできあがる
- 割と動く
でも反面・・・というか、正直メリットに見返らないくらいのデメリットがあります。
- 「これくらいの機能が短期間でできるなら・・・」と思われる
- 機能追加の要望に弱い
手早くできた結果、出来上がった納品物はこんな感じ。
スパゲッティです。私はたらこが好きですが、今回は和風で。何を言いたいかというと、こういうことです。
- 食べ物でいえば「見た目や味は十分だけど、食べにくい」
- 納品物としては「機能としては十分だけど、機能追加や改修がしにくい」
わかりにくかったらすみません。あとスパゲッティが食べにくいかどうかには個人差があります。
After
では本を読んでからはどうなったか。こんな感じになりました。
こう遅くなってるかのように見えるのかというと、Beforeとは逆に「実装するな。考えろ。」になってるからです。
- この機能は何が入ってきて何を返せばいいのか
- 入ってきた値をどう加工するのか
こういうことを考えるようになりました。そして必ず「正しく加工できていることを保証するもの」を作らなければならないので、なおさら遅くなります。
まずはデメリットをあげてみます。
- テストの書き方を学ばないといけない
- 考える時間が多くなる
しかしメリットを見ると、デメリットを背負ってでも得になることが多かったです。
- テストの段階で「設計の違和感」に気がつくことができる
- 開発中に微細な箇所を変更しても問題ないことが担保できる
特に後者のメリットは非常に大きいです。なにせ、開発中の仕様変更に耐えることができるのですから。
スパゲッティとはうって変わって、こんな定食のような感じにになります。さて何が言いたいかというと、要はこれです。
- 食べ物でいえば「見た目や味は十分だし、好きなおかずを好きなように食べられる」
- 納品物でいえば「機能としては十分だし、個々の追加や改修がしやすい」
要するのどういうことだってばよ
もしこの2つの料理で、「明らかに自分のものではない青い髪の毛が入っていたらどうなるか」を考えてもらえればわかりやすいかもしれません。
- スパゲッティに入っていたら、せっかく出来上がったものをすべて捨てて作り直しになります。
- おかずが別々の定食の場合は、髪の毛が入っていた小鉢だけにしか影響がなく、それだけを作り直してもらえばいいだけです。
要は、バグがあったとしても、機能ごとに細かく作り、それに対応したテストを先に作っておけば、想定外の手戻りが最小限で済むかも、ということです。
さいごに
駆け足でテストのことを紹介したので、ちゃんと書きたいことが書けたか微妙ですが、少なくとも「テスト駆動開発って工数が倍かかるんでしょ?コストが見合わなくない?」といった負のイメージが少しでも払拭できたのなら幸いです。
そして最初に紹介したテスト駆動開発の本ですが、この本の冒頭にあるとおり、私としても第3部から読み始めることをお勧めします。