あなたがワークフローとして説明していることは、私の考えではTDD の精神ではありません。
AmazonのKent Becks本のあらすじはこう言っています:
簡単に言うと、テスト駆動開発は、アプリケーション開発の不安を取り除くことを目的としています。一部の恐怖は健全ですが(多くの場合、プログラマーに「注意!」する良心と見なされます)、著者は、恐怖の副産物には建設的な批判を吸収できない暫定的、不機嫌、非コミュニケーションプログラマーが含まれると考えています。プログラミングチームがTDDを購入すると、すぐに良い結果が得られます。彼らは仕事に伴う恐れを取り除き、彼らに直面する困難な課題に取り組むためのより良い設備を備えています。TDDは暫定的な特性を排除し、プログラマーにコミュニケーションを促し、チームメンバーに批判を求めるように促します。要するに、TDDの背後にある前提は、コードを継続的にテストし、リファクタリングする必要があるということです。
実用的なTDD
正式な自動テスト、特にすべてのクラスのすべてのメソッドの単体テストは、アンチパターンと同じくらい悪いものであり、何もテストしていません。バランスを取る必要があります。すべてのsetXXX/getXXX
メソッドの単体テストを書いていますか、それらもメソッドです!
また、テストは時間とお金の節約に役立ちますが、開発に時間とお金がかかり、コードであるため、メンテナンスに時間とお金がかかることを忘れないでください。メンテナンス不足から萎縮すると、利益よりも負債になります。
このようなすべてのものと同様に、自分以外の誰にも定義できないバランスがあります。いずれのドグマも、おそらく正しいというより間違っています。
適切なメトリックは、ビジネスロジックにとって重要であり、要件の変更に基づいて頻繁に変更されるコードです。これらのことには、自動化された正式なテストが必要です。これは大きな投資回収率になります。
あなたもこの方法で働く多くの専門店を見つけるのに非常に苦労するでしょう。単純な煙テストが実施された後、すべての実用的な目的のために変化しないものをテストするためにお金を費やすことは、ビジネスに意味がありません。.getXXX/.setXXX
メソッドの正式な自動化された単体テストを作成することは、この完全な時間の無駄の代表例です。
プログラムのテストがバグの存在を説得力を持って実証するかもしれないが、バグがないことを実証することはできないと指摘されてから20年になります。このよく知られた発言を熱心に引用した後、ソフトウェアエンジニアはその日の順序に戻り、クリソコスミックな精製を改良し続けた昔の錬金術師のように、テスト戦略を改良し続けます。
- エドガーW.ジクストラ。(1988年に書かれたので、今では45年近くになります。)
この回答も参照してください。