#はじめに
「テスト駆動開発」という言葉を教えて頂く機会があったので、調べてみました。
様々な記事を参考に、自分なりの解釈・言葉に置き換えました。
間違った認識をしていましたら、ご教授頂けますと幸いです。
テスト駆動開発とは?
- Test-Driven Development: TDD と言います。
- テストファーストな開発方法
- プログラムの実装(コード書き込む)前に、まずテストコードから書いちゃう。
- そのテストコードに合うように実装を進めていく。
~心の声~
斬新というか、すごい工数(手間)がかかりそう。
なんのためにTDDってあるの?
TDDをする目的は?
- コード(設計)を綺麗にすること
- テストと実装を一緒にするので、汚いコードになりにくいようです。
- フィードバックの高速化
- 実装前にテストコードを書いているので、記憶も新しいし、すぐ対応できる。
~心の声~
すごく良いこと尽くしではないか!
他にメリットはあるのかな?
こんなメリットがある!
- 後工程にバグやエラーを持ち越しにくい!
- デバック対応が短くなる!
- 案件(システム要件)についての理解が深くなる!
- 回帰テストができる!
後工程にバグやエラーを持ち越しにくい!
- テスト → 実装 → リファクタリングの流れを細かく繰り返す。
- したがって、バグを見つけやすく、修正することができる。
デバック対応が短くなる!
- バグを見つけて、修正までの間隔が短いので、デバックの時間も短くなります!
案件(システム要件)についての理解が深くなる!
- 必要なシステム要件を細くリストアップし、漏れがなく、かつ仕様を理解することができます!
回帰(リグレッション)テストができる!
- テストファーストでテストコードを作っているので、リグレッションテストにも役立つ!
私のイメージは・・・
①テストファーストではない場合、バグが出そうな箇所のテストコードを書き足す必要がある。
②テストファーストのテストコードは全体を網羅しつつ、細かいところまでテストコードを作っているので、機能の追加やバグの修正をした際に、修正と無関係な部分を壊していないかチェックすることができる。
~心の声~
大きいサービスでは、テストの質次第で、最悪の損失を生む可能性もある・・・
テストは絶対しないといけないし、先にするか後にするかならば、テストファーストで開発していくのもありと思えてきた!!
でもデメリットはやっぱりございます?
デメリットはこんな感じ・・・
- 慣れが必要だヨ・・・
- コーティング時間が伸びちゃうヨ・・・
- そもそもテストできんヨ・・・
- テストコードを保守する必要あるヨ・・・
慣れが必要だヨ・・・
- すごくわかる。慣れが大事だと。
- TDDへの理解も重要みたいだ。
コーティング時間が伸びちゃうヨ・・・
- これは違うなと思いました。
- テストファーストをやめた → バグいっぱい出ました → 修正時間かかる・・・
- 上記流れの方が長くなりそうだし、なんといっても辛い(泣)
そもそもテストできんヨ・・・
- データベース周りは難しい?そもそもできない?
テストコードを保守する必要あるヨ・・・
- リグレッションテストに使うために仕方がないことではあるが・・・
- 通常より保守するコード量が増える。
- そして、大きな変更があった場合には多くのテストを修正しなければならないこともある。
次はTDDの流れと注意点をまとめてみます!
#さいごに
日々勉強中ですので、随時更新します。ご覧いただきありがとうございました!