1

古い Java ベースのアプリケーションを最新のものにして、私が取り組んでいる最新のアプリケーションとインライン化するように依頼されました。

私たちが紹介したいことの 1 つは、新しい機能強化のためのテスト駆動開発です。

コード単体テストのカバレッジは現在非常に低く <20%

アプリケーションに不慣れな人として、このパーセンテージをもっと大きくして、欠陥を導入することなく変更を加える自信を持てるようにしたいと思います。

問題は、このパーセンテージを上げることです。コードの多くは、テスト可能にするためにリファクタリングが必要になります。

このように単体テスト カバレッジが低い場合にリファクタリングすると問題が発生する可能性がありますが、テスト カバレッジを上げるにはリファクタリングを行う必要があります。

これを行おうとするときにリスクを下げる方法はありますか??

4

1 に答える 1

8

これに対するリスクの低いアプローチは、テストとリファクタリングを非常に小さな増分で行うことです。何かを変更する前にできるだけ多くのテストを導入する必要があります (必ずしも簡単ではありません)。その後、リファクタリングをミックスに含めてプロセスを続行します。

自己完結型のコード ブロックを小さな自己完結型のメソッドに抽出する最初のリファクタリングを維持する場合、リスクは低く (リスクがないわけではありませんが、低い)、元のメソッドの両方をできる限りテストできますが、抽出されたメソッドもさらにテストできます。方法を徹底的に。

モッキングもこれに大いに役立ちます-実際のサービスなどの代わりにモックを渡すことができ、非常に役立ちます。コードがテストしたくないサービスを内部的にインスタンス化/呼び出しているという厄介なシナリオが残っていますが、時間の経過とともに、依存性注入を導入することでこれを回避することもできます (実際のサービスの代わりにモックを注入できるようにするため)。 . しかし、これはおそらく長期的な戦略です。

私が過去にこれを行った方法は、それについて実用的であることです. 時間はかかりますが、できます。

この種のことについては、Michael Feather の Working with Legacy Codeを徹底的にお勧めします。これは、あなた (そして私たち全員がいつか経験する) が直面しているまさにその問題に対処するための多くの実用的な戦略を提供します。

于 2013-02-26T15:29:57.427 に答える