この質問をして、実際にTDDを実践している企業の数を確認したいと思いました。
11年間でプロとしてプログラミングを行ってきたのは、最後の2つの組織だけがTDDに気づいていました(それはほぼ5年前のことで、それ以前はTDDは今日ほど人気がありませんでした)。私は、TDDのセールスピッチに脱線する前に、追跡してあなたの質問に答えます。
私が働いていた最後の会社(人文科学および科学コレクションのオンライン学術出版社)で、TDDを実践する必要があることはわかっていましたが、そこまで到達できませんでした。私たちの防御では、250kのコードベースがあったので、そのサイズのテスト不能なコードベースにテストを追加すると、克服できないと感じました(今ではタイピングをしていると感じています!)。最高の人ですら間違いを犯します。
ほんの少しのTDDを行った人なら誰でも、ブラウンフィールドのテスト不可能なコードへのテストの改修がどれほど苦痛かを知っています...主な原因は暗黙的な依存関係です(コードから結果をアサートするためにすべてのレバーを引くことはできません-モックできません)シナリオ)および単一の責任原則の違反(テストは複雑で、不自然で、セットアップが多すぎて理解しにくい)。
リリース前にプラットフォームをテストするために、 QAチームを一時的に(1人、2人から6人以上に)成長させました。時間的にも経済的にも非常に費用がかかり、一部のリリースでは「テスト」を完了するのに3か月かかります。それでも、私たちは問題を抱えて出荷していることを知っていました。それらは「ブロッカー」や「クリティカル」ではなく、「高優先度」でした。
長年の商業経験があれば、すべての会社が重要なタスクを主張し、それより高い優先度レベルを発明し、おそらくそれよりも高い優先度レベルを発明することを感謝します-特に上から誰かが機能/バグ修正をプッシュしている場合。私は脱線します...
現在の会社(通信、ウェブ、モバイルアプリの開発会社)でTDDを実践していることを報告できて、Jenkins CIと組み合わせて他の静的分析レポートを提供します(テストスイートパスをアサートした後、コードカバレッジが最も役立ちます) 。TDDを使用したプロジェクトは、支払いシステムとグリッドコンピューティングシステムです。
セールスピッチ...
多くの場合、自動化されたテストを非技術的なチームメンバーに正当化するのは困難です。テストを作成すると、開発プロセスにより多くの作業が追加されますが、...今テストに投資する時間は、後でメンテナンスの労力を節約できます。あなたは本当に時間を借りているだけです。製品の使用期間が長くなればなるほど、節約量は大きくなります。これにより、大幅な書き換えを回避できます。
最初にテストするということは、最初に意図をコーディングし、次にその意図をコードが満たしていることを確認することを意味します。これにより、フォーカスが提供され、意図したものだけを実行するコードが抽出されます(肥大化することはありません)。同時に実行可能な仕様とドキュメントです(テストが適切に記述されていて、テストがシステムコードと同じくらい読みやすい/きれいでなければなりません!)。
非プログラマーは(多くの場合)この洞察を持たないため、TDDは彼らにとってあまり価値がなく、以前のリリース日への使い捨てのショートカットと見なされます。
プログラミングは私たちの領域であり、私の考えでは、これは専門家として、TDDのようなベストプラクティスについて助言することを私たちの責任にします。プロジェクトマネージャーが開発時間を短縮するために行われたかどうかを判断するのではなく、管轄外です。同じ方法で、どのフレームワーク、キャッシュソリューション、または検索アルゴリズムを使用するかを教えてくれません。自動テストを採用すべきかどうかを教えてはいけません。
で私の意見(全体的に)ソフトウェア開発業界は、現在お使いのソフトウェアのテストを持つことは当たり前ではないという事実を破られます。
医療、航空、自動車、化粧品、ぬいぐるみ、アルコール飲料など、他の業界でこれを想像してください。私は婚約者に、製品をテストせずにできなかった業界を挙げてもらいました。
おそらく、テストが行われないためにテストが行われないと言うのは不公平かもしれませんが、自動化されたテストを行わない企業では、非常に手動/人間的な(不格好でエラーが発生しやすい)プロセスです。
あなたの質問で私が争う1つのポイント...
彼らは通常、開発をすぐに開始するか、短い設計期間の後に開始することを望んでいました。アジャイルに似ています。
「アジャイル」であることは、テストなしで進行することを規定していません。agilemanifesto.orgにリストされている最初のメンバーは、XPおよびTDDの作成者であるKent Beckです!
TDDに興味がある場合、または単に読んでおらず、熱心なプログラマーである場合(これを読んでいる人は誰ですか?;)
テストに導かれたオブジェクト指向ソフトウェアの成長
クリーンコード-ロバートCマーティン(「ボブおじさん」)シリーズ
これらの2冊の本は互いにほめ合い、多くの感覚を数ページに凝縮します。
この質問をしてくれてありがとう:)