移行の経験
長年、私は自分のコードの単体テストを書くのに十分な時間がないという誤解を受けていました。私がテストを書いたとき、それらは肥大化した、重いものであり、それが必要だとわかったときにのみユニットテストを書くべきだと考えるように促しました。
最近、テスト駆動開発を使用するように勧められましたが、完全な啓示であることがわかりました。ユニットテストを書かない時間はないと確信しています。
私の経験では、テストを念頭に置いて開発することで、よりクリーンなインターフェース、より焦点を絞ったクラスとモジュール、そして一般的にテスト可能なコードがよりソリッドになります。
ユニットテストがないレガシーコードを操作し、手動で何かをテストする必要があるたびに、「このコードにすでにユニットテストがある場合、これは非常に高速になる」と考え続けます。結合テストの高いコードに単体テスト機能を追加しようとするたびに、「分離された方法で記述されていれば、これは非常に簡単になる」と考え続けます。
私がサポートする2つの実験ステーションの比較と対照。1つはしばらく前から存在し、多くのレガシーコードがありますが、もう1つは比較的新しいものです。
古いラボに機能を追加する場合、多くの場合、ラボに降りて、必要な機能の意味と、他の機能に影響を与えずにその機能を追加する方法を理解するために多くの時間を費やします。コードは、単にオフラインテストを許可するように設定されていないため、ほとんどすべてをオンラインで開発する必要があります。オフラインで開発しようとした場合、合理的なものよりも多くのモックオブジェクトが作成されます。
新しいラボでは、通常、デスクでオフラインで開発し、すぐに必要なもののみをモックアウトし、その後ラボで短時間を費やして、拾わない残りの問題を解決することで、機能を追加できます-ライン。
私のアドバイス
あなたがうまくスタートを切っているように、あなたがいることを確認する必要があり、任意の時間は、あなたの開発ワークフローに大きな変更を加えることしようとしているようで、誰もがその意思決定に関与している、そして理想的にすることをほとんどの人がそれに買ってきました。あなたの質問から、あなたはこれが正しいようです。人々がそのアイデアに熱意を持っていない場合、失敗するか、悪意を生むかの運命にあります。
説得力のあるビジネスケースを提示できない限り、システム全体の単体テストと仕様の徹底的な実装はお勧めしません。上で述べたように、システムがテストを念頭に置いて設計されていない場合、システムの自動テストを作成するのは非常に困難です。
代わりに、私は小さく始めてボーイスカウトルールを使用することをお勧めします:
キャンプ場は、見つけたときよりも常にきれいにしておきます。
このコードベースに何かを実装しているときに、既存の動作をテストし、古い動作から新しい動作に移行するために必要な特定のテストを特定できる場合、仕様の変更を文書化し、ユニットテストの実装を開始しましたシステム。
触れないモジュールは単体テストを取得しませんが、触れていない場合は、使用中に既に完全にテストされており、変更する必要がないか、使用されていない可能性があります。
あなたが避けたいのは、開発者の努力の全量を浪費することです。これは、決して必要とされないテストを書くことです(YAGNIは、本番コード* 8 'と同じようにテストコードでも同様に動作します)。結局のところ、テストは役に立たないと考えています。
概要
小規模から始めて、テストの信頼性を段階的に高め、テストがチームにとって最も有益なタイミングと場所でテストを開発することでビジネス価値を獲得します。