ユニットテストジェネレーターは、レガシーコードの操作に役立ちましたか?


10

テストカバレッジが非常に低い小さな(生成されたものを含めて〜70kLOC)C#(.NET 4.0、一部のSilverlight)コードベースを探しています。コード自体は、ユーザー受け入れテストに合格したという点で機能しますが、脆弱で、一部の領域では十分に分解されていません。通常の容疑者(NMock、NUnit、Silverlightビット用のStatLight)を使用して、レガシーコードの周りに強力な単体テストカバレッジを追加したいと思います。

私の通常のアプローチは、コードの状態に満足するまで、プロジェクト、ユニットテスト、リファクタリングを開始することです。私はこれを何度も行ったことがありますが、うまくいきました。

ただし、今回は、テストジェネレーター(特にPex)を使用してテストフレームワークを作成し、手動で具体化することを考えています。

私の質問は、レガシーコードベースでの作業を開始するときに過去にユニットテストジェネレーターを使用したことがありますか?

私の恐れは、生成されたテストがコードベースの意味のニュアンスを見逃し、コードで意図された動作を明確に表現するテストではなく、カバレッジメトリックのためにテストを行うという恐ろしい状況につながることです。


私は一度PeXを試しましたが、結果はまあまあ、満足のいくものではありませんでした-YMMV。このようなツールがコードとその機能要件を「理解」することを期待しないでください。「意味的ニュアンス」だけを見逃すのではなく、セマンティクス全体を見逃します。さらに、レガシーコードベースから始める場合、通常は最初に単体テストからではなく、システムまたは統合テストから始めます。それは間違いなくPeXが作成された目的ではありません。
Doc Brown

回答:


9

少し違う見方をすることをお勧めします。問題なく既存のアプリケーションに新しい単体テストコードを追加しても、最良の結果が得られない場合があります。コードベースに慣れるためにこれを行っている場合、または本当に時間をかけてテストジェネレータをテストしたい場合は、私のコメントを無視してください。

実用的にするには、すべてのバグリストを確認する必要があります。次に、各バグの単体テストを作成し、その動作を確認します。理想的には、バグに到達したときに、バグごとに新しいコードを追加するだけです。

単体テストコードを追加する時期:

  • 新しい機能を追加する
  • リファクタリングされたコード
  • バグを修正
  • コードが何をするかを学ぶ
  • バグが存在することを証明する

事後に単体テストを追加することの価値を定量化することは困難です。

私は通常、自分が質問者が望んでいることに反する答えを書くことを許可しませんが、これは伝えたい良い教訓だと感じています。


私はそこであなたと100%同意しています-この質問は、ダウンタイムをどのように過ごすのが最善かと私から思いました。私の通常の習慣は、バグを修正するか、機能を追加する過程でテストとリファクタリングを行うことです。私は、何人かの人々がこのエリアでいくつかの戦争の話を共有できるかもしれないと期待していました...
ダンカン・ベイン

1
+1、事実の後の取材のための射撃は通常生産的ではありません。退行を防止する修正されたバグのテストは非常に生産的です。バグの回帰は、関係するすべての人にとって非常にイライラすることがあります。テストは、より優れたコードを作成するのに非常に適しています。テストのボルト締めは通常、標準以下のテストになります。OPの恐怖が生まれ、生成されたテストからの信号対雑音比が邪魔になると思います。テストされていないコードには、非常に分岐の多いビットが含まれている可能性があります。コードのにおいを指摘するツールはおそらくもっと便利です。多分FXCopと同様のツール。
kevpie、2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.