Инструменты покрытия кода, такие как Emma, Cobertura и Clover, будут инструктировать ваш код и записывать, какие его части вызываются при выполнении набора тестов. Это очень полезно и должно быть неотъемлемой частью вашего процесса разработки. Это поможет вам определить, насколько хорошо ваш набор тестов покрывает ваш код.
Однако это не то же самое, что идентификация реального мертвого кода. Он только идентифицирует код, который покрывается (или не покрывается) тестами. Это может дать вам ложные срабатывания (если ваши тесты не охватывают все сценарии), а также ложные отрицания (если ваши тесты обращаются к коду, который фактически никогда не используется в сценарии реального мира).
Я полагаю, что наилучшим способом действительно идентифицировать мертвый код было бы снабдить ваш код инструментом покрытия в работающей среде и проанализировать покрытие кода в течение длительного периода времени.
Если вы работаете в избыточной среде с балансировкой нагрузки (а если нет, то почему бы и нет?), То я полагаю, что имеет смысл использовать только один экземпляр вашего приложения и настроить балансировщик нагрузки таким образом, чтобы случайным, но небольшим часть ваших пользователей работает на вашем инструментальном экземпляре. Если вы делаете это в течение длительного периода времени (чтобы убедиться, что вы охватили все реальные сценарии использования - такие сезонные изменения), вы должны быть в состоянии точно увидеть, к каким областям вашего кода обращаются при использовании реального мира и какие части действительно никогда не доступны и, следовательно, мертвый код.
Я лично никогда не видел, чтобы это было сделано, и не знаю, как вышеупомянутые инструменты могут быть использованы для инструментов и анализа кода, который не вызывается из набора тестов, - но я уверен, что это возможно.