現在参画中のプロジェクトでテストを行っている事もあり、テストへの見識を深めるために読んだ本の一部で、「テスト駆動開発」という言葉を知ったので、アウトプットしたいと思います。
初めての自動テスト
――Webシステムのための自動テスト基礎
- Jonathan Rasmusson 著、玉川 紘子 訳
- 2017年09月 発行
- 288ページ
- ISBN978-4-87311-816-1
- 原書: The Way of the Web Tester
自動テストについて書いてある本は、そんなに種類も多くない中で、イラストや章ごとに簡潔にまとめた内容は、読みやすく、イメージもしやすく、頭に入りやすいため、自分のような初心者にとってはありがたい一冊でした。「テストの考え方」を学べる一冊となっています。
<お勧めするエンジニア>・・・Web系エンジニア(特にRubyエンジニア)、テスター、エンジニア初心者☝☝☝スクリプトのソース例がその都度載っていて、Rspecを採用して書いているので、Ruby(Rails)を使う方にはより身近に感じ、参考にしやすい一冊ではないかと思います。絵やコードが沢山載っていて、分かりやすく、読みやすさも★★★★★です。
★「テスト駆動開発」とは・・・・通常は開発した後に行われるユニットテストを、順番を逆にして、テストを書いてから開発を行うこと
★なぜそんなことをするのか?
- 通常の手順を踏むよりテストストレスが減る
- 本当にテストしたいことをフォーカスしやすい
- 実際に開発するときに読みやすいコードを生み出せるようになる
- 保守しやすいシンプルさを保つ
★テスト駆動開発(別名「TDD」)のサイクル
1.失敗するテストを書く
→コードを書いてない状態からテストだけ書き始めるため、答えを出すことを考えない。代わりにコードの設計について考えます。コードのAPIを考えて具体化するため、ある意味「開発設計者」となることが必要です。どんな変数名にするか、クラス、メソッドは?返り値は?などを考えるからです。
2.テストを成功させる
→今度は具体的な答えを出すためにテストを通すことに専念します。あくまで「テストの良し悪し」を気にせず、テストが通りさえすれば何してもOKです。理由は、過剰な作りこみでオーバーエンジニアリングを避けるためです。あまり細かく作り込まず、必要だと思う機能のテストをすることを考えます。
3.リファクタリングする
→もっとも重要な段階です。テストと実装の両方を見直し、全体の設計を改善するという観点から必要な調整を加えます。2.を細分化するのではなく、テストコードの中で余分な部分をまとめたり、省いたりして、より美しい形でテストを通すことを考えます。
サイクルなので、1.→ 2.→ 3.→ 1.→ 2.→ 3.→・・・・と一つ一つのテストを通していく形になります。
何もない状態からテストをするなんて・・・と思われる方もいるかもしれませんが、この本によれば、「テストファースト」の習慣が身についてしまうと、テストを通すことで小さな満足感を得られ、テストの成功を積み重ねて(開発自体)ゴールに近づいていくので、楽しくなるそうです。
本自体はもっと色々な事が載っているのでぜひ読んでみて下さい!
以上です。