私は最近、TDD について読んでいますが、TDD が提唱されているのは、テストが容易で結合の少ないコードになると思われるためです (およびその他の理由)。
ローマ数字の変換と数字から英語へのコンバーターを除いて、実用的な例をあまり見つけることができませんでした。
これらの 2 つの例を観察することで、TDD の典型的な赤-緑-リファクタリング サイクルと、TDD のルールの適用を観察しました。しかし、これは通常、パターンを観察してコードに実装し、その後でテストを作成する場合、時間の大きな無駄のように思えました。または、コードのスタブを作成し、単体テストを作成してから実装を作成することもできますが、これはおそらく TDD である可能性がありますが、この継続的なケースバイケースのリファクタリングではありません。
TDD は、適切なアーキテクチャを設計するのではなく、コードに飛び込んで帰納的に実装を構築するように開発者を駆り立てているようです。これまでの私の意見では、TDD の利点は適切なアーキテクチャ設計によって実現できるというものですが、誰もがこれをうまくできるわけではないことは確かです。
そこで、2 つの質問があります。
- TDD を使用しても、最初に設計することはほとんどできないということを理解するのは正しいですか (TDD のルールを参照してください)。
- コーディングを開始する前に適切な設計を行うことでは得られないもので、TDD によって得られるものはありますか?