私は、一部の人々がテスト駆動開発の大規模な支持者であることを知っています。私は過去に単体テストを使用しましたが、簡単にテストできる操作、またはおそらく正しいと思われる操作をテストするためだけに使用しました。完全またはほぼ完全なコードカバレッジは、多くの時間がかかるようです。
- テスト駆動開発を使用するプロジェクトは何ですか?特定のサイズを超えるプロジェクトにのみ使用しますか?
- 私はそれを使用する必要がありますか?信じさせて!
私は、一部の人々がテスト駆動開発の大規模な支持者であることを知っています。私は過去に単体テストを使用しましたが、簡単にテストできる操作、またはおそらく正しいと思われる操作をテストするためだけに使用しました。完全またはほぼ完全なコードカバレッジは、多くの時間がかかるようです。
回答:
OK、TDDの利点:
ロバートC.マーティンは元々これらの点を指摘しました-私は私自身の経験からそれらをバックアップできます:
私は、プロダクションで作業している場合でも、コードを再生している場合でも、ほとんどTDDを頻繁に実行します。最近、他の方法でコーディングするのは難しいと感じています。
何?否定的な答えはありません!?
免責事項:単体テストではありません。人々がTDDと言うとき、私は彼らが書くすべてのコードの80-100%のコードを書く前にテストを書いている病気に聞こえるバージョンを意味すると思います。
私は主張します:
それはイネーブラーです。リグレッションの問題をキャッチすることがあなたにとって非常に大きな問題である場合、最初からフルオートTDDが価値があると思われる場合は、最後に書いたコードごとにテストを書くことで、実際の問題を無視することができます。
人々が本当の問題を無視するのに役立ちます。1つのバグを修正すると、さらに2つのポップアップが発生する、もぐらたたきのゲームに変わると、アーキテクチャが爆発します。フォーカス。本当の問題に焦点を当てます。ほくろを打たなければならない前にほくろを見るのはきちんとしていますが、そもそもそこにいるべきではありません。
それは多くの時間を食べる。時々バグを見つけました。あまり多くヒットしなかったので、私が書いたすべての新しいものの前にそれをテストする価値があると思われます。起こりそうな問題をキャッチします。エラーを診断しやすいように処理します。検証。オーバーラップ/ボトルネックの重要なポイントでテストします。しかし、大声で叫ぶために、おそらく最初の場所でそれらを持っていたはずのないもので最後のゲッターとセッターをすべてテストしないでください。
設計の焦点:優れた開発者でさえ、テストに集中しているときにできる限り最高のコードを作成する方法はまったくありません。適切なデザインを作成できる唯一の方法のように思える場合は、上記の「実際の問題に焦点を合わせる」ことをお勧めします。
マクロ設計の失敗:現在の仕事のコードベースには、一度も使用されないインターフェイスと、基本的なDRY原則の大規模な違反があり、テストフレームワークとテスト用に人々が書いていることに気付いたときにようやく理解し始めました一般的な。テストは愚かなアーキテクチャにつながるべきではありません。実際には、20個のファイルをコピーして貼り付けてから、そのうち2個のファイルにのみ重要な変更を加えることに関して、なんとかスケーラブルまたはエンタープライズにふさわしいものはありません。考えは、懸念を分離することであり、懸念を中央に分割することではありません。Cruftと無意味な抽象化は、95%のカバレッジがこれまでにないほど高くなります。
それは本当に人気があり、多くの人が本当にとても気に入っています。それが少なくとも採用する前に、少なくとも技術を推測したり、技術を徹底的に吟味するのに十分な理由ではない場合は、いくつかの妄想を学んでください。