Emma、Cobertura、Cloverなどのコードカバレッジツールは、コードをインストルメント化し、一連のテストを実行することによって呼び出されるコードの部分を記録します。これは非常に便利で、開発プロセスに不可欠な部分です。これは、テストスイートがコードをどの程度カバーしているかを特定するのに役立ちます。
ただし、これは実際のデッドコードを識別することとは異なります。テストでカバーされる(またはカバーされない)コードのみを識別します。これにより、偽陽性(テストがすべてのシナリオをカバーしない場合)と偽陰性(実際のシナリオで実際に使用されないコードにテストがアクセスする場合)が発生する可能性があります。
死んだコードを本当に特定する最善の方法は、ライブ実行環境でカバレッジツールを使用してコードを計測し、長期間にわたってコードカバレッジを分析することだと思います。
負荷分散された冗長環境で実行している場合(そうでない場合は、なぜそうでないのでしょうか?)、アプリケーションのインスタンスを1つだけインスツルメントし、ロードバランサーをランダムで小さいユーザーはインストルメント化されたインスタンスで実行されます。これを長期間にわたって行うと(実際の使用シナリオ(季節変動など)をすべてカバーしていることを確認するため)、実際の使用状況でアクセスされているコードの領域と部分を正確に確認できるはずです。実際にはアクセスされないため、デッドコードになります。
私はこれが個人的に行われたのを見たことがないので、前述のツールを使用して、テストスイートから呼び出されていないコードを計測および分析する方法を知りませんが、そうであると確信しています。