私は多くの経験を持つ契約プログラマーです。私は、クライアントに雇われて、何らかの形のソフトウェア プロジェクトを自分で、通常は何もないところから行うことに慣れています。これは、ほとんどの場合、白紙の状態であることを意味します。すぐに始められるように、開発したライブラリを持ち込むことができますが、それらは常にオプションです。(そして、契約で適切な IP 条項を取得することに依存します) 多くの場合、ハードウェアプラットフォームを指定または設計することさえできます... したがって、ここでは深刻な自由について話しています。
特定のコードの自動化されたテストを構築するための用途を見ることができます: 自明以上の機能を持つライブラリ、多数の参照を持つコア機能など。そのコードを自動的にテストして、コードを壊していないことがわかるようにすることは、ますます価値があります。
しかし、私の状況では、それ以上のことを正当化するのは難しいと思います. 役に立つとわかったものは採用しますが、やみくもにフォローするつもりはありません。
「メンテナンス」で行うことの多くは、実際には小さな設計変更です。この場合、テストによって何も救われなかったので、テストも変更する必要があります。反復性の高い、スタブ優先の設計アプローチは、私にとって非常にうまく機能します。より大規模なテストで実際にそれほど多くの時間を節約できるとは思えません。
趣味のプロジェクトを正当化するのはさらに困難です... 通常、週末から 1 か月程度の期間のものです。エッジ ケースのバグが問題になることはめったにありません。
このような質問を読んで、最も投票された回答は、その投稿者の経験/意見では、5人未満の人がいる場合、TDDは実際に時間を無駄にしていると言っているようです(TDDの一定レベルの能力/経験を前提としても)。ただし、それはメンテナンスではなく、初期開発時間をカバーしているようです。プロジェクトのライフ サイクル全体で TDD がどのように機能するかは明確ではありません。
TDD は、業界全体の製品の品質を向上させるという価値ある目標に向けた良い一歩になると思います。しかし、理想主義だけでは、もはや私をやる気にさせる効果はありません。
TDD は、大規模なチーム、または信頼できないプログラマーが少なくとも 1 人含まれる任意の規模のチームで良いアプローチになると思います。それは私の質問ではありません。
実績のある唯一の開発者が TDD を採用するのはなぜですか?
単独の開発者や非常に小規模なチームに焦点を当てた TDD で (正式に行われたかどうかにかかわらず) あらゆる種類の指標について聞きたいです。
それができない場合は、あなたの個人的な経験談もいいでしょう。:)
裏付けとなる経験のない意見を述べることは避けてください。これをイデオロギー戦争にしないようにしましょう。また、より大きな雇用オプションの引数をスキップします。 これは単に効率の問題です。