Как найти неиспользуемый / мертвый код в Java-проектах - PullRequest
292 голосов
/ 02 октября 2008

Какими инструментами вы пользуетесь, чтобы найти неиспользуемый / мертвый код в больших Java-проектах? Наш продукт разрабатывался в течение нескольких лет, и очень трудно вручную обнаружить код, который больше не используется. Однако мы стараемся удалить как можно больше неиспользуемого кода.

Предложения по общим стратегиям / методам (кроме специальных инструментов) также приветствуются.

Редактировать: Обратите внимание, что мы уже используем инструменты покрытия кода (Clover, IntelliJ), но они мало помогают. У мертвого кода все еще есть юнит-тесты, и он отображается как покрытый. Я предполагаю, что идеальный инструмент идентифицирует кластеры кода, у которых очень мало другого кода в зависимости от него, что позволяет проводить ручную проверку документов.

Ответы [ 21 ]

5 голосов
/ 23 февраля 2009

IntelliJ имеет инструменты анализа кода для обнаружения кода, который не используется. Вы должны попытаться сделать как можно больше закрытых полей / методов / классов, и это покажет больше неиспользуемых методов / полей / классов

Я бы также попытался найти дублирующийся код для уменьшения объема кода.

Мое последнее предложение - попытаться найти открытый исходный код, который в случае его использования сделает ваш код проще.

3 голосов
/ 28 июня 2012

DCD не является плагином для какой-то IDE, но может быть запущен из ant или standalone. Он выглядит как статический инструмент и может делать то, что PMD и FindBugs не могут . Я попробую.

P.S. Как упомянуто в комментарии ниже, Проект теперь живет в GitHub .

2 голосов
/ 28 января 2009
  • FindBugs отлично подходит для такого рода вещей.
  • PMD (Project Mess Detector) - еще один инструмент, который можно использовать.

Однако ни один из них не может найти общедоступные статические методы , которые не используются в рабочей области. Если кто-нибудь знает такой инструмент, пожалуйста, дайте мне знать.

2 голосов
/ 02 октября 2008

Существуют инструменты, которые профилируют код и предоставляют данные покрытия кода. Это позволяет увидеть (по мере выполнения кода), сколько из этого вызывается. Вы можете получить любой из этих инструментов, чтобы узнать, сколько у вас есть бесхозный код.

1 голос
/ 06 сентября 2013

Есть проект Java - Детектор мертвого кода (DCD). Для исходного кода это, кажется, не работает хорошо, но для файла .jar - это действительно хорошо. Кроме того, вы можете фильтровать по классу и по методу.

1 голос
/ 02 октября 2008

Инструменты покрытия пользователей, такие как EMMA. Но это не статический инструмент (т. Е. Он требует, чтобы фактически запустить приложение через регрессионное тестирование и через все возможные случаи ошибок, что, ну, в общем, невозможно :))

Тем не менее, EMMA очень полезна.

1 голос
/ 26 ноября 2008

Инструменты покрытия кода, такие как Emma, ​​Cobertura и Clover, будут инструктировать ваш код и записывать, какие его части вызываются при выполнении набора тестов. Это очень полезно и должно быть неотъемлемой частью вашего процесса разработки. Это поможет вам определить, насколько хорошо ваш набор тестов покрывает ваш код.

Однако это не то же самое, что идентификация реального мертвого кода. Он только идентифицирует код, который покрывается (или не покрывается) тестами. Это может дать вам ложные срабатывания (если ваши тесты не охватывают все сценарии), а также ложные отрицания (если ваши тесты обращаются к коду, который фактически никогда не используется в сценарии реального мира).

Я полагаю, что наилучшим способом действительно идентифицировать мертвый код было бы снабдить ваш код инструментом покрытия в работающей среде и проанализировать покрытие кода в течение длительного периода времени.

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

Я лично никогда не видел, чтобы это было сделано, и не знаю, как вышеупомянутые инструменты могут быть использованы для инструментов и анализа кода, который не вызывается из набора тестов, - но я уверен, что это возможно.

1 голос
/ 12 февраля 2017

Netbeans вот плагин для Netbeans детектор мертвого кода .

Было бы лучше, если бы он мог ссылаться и выделять неиспользуемый код. Вы можете голосовать и комментировать здесь: Ошибка 181458 - Найти неиспользуемые публичные классы, методы, поля

0 голосов
/ 13 декабря 2011

Я нашел инструмент покрытия Clover, который инструментирует код и выделяет код, который используется и который не используется. В отличие от Google CodePro Analytics, он также работает для веб-приложений (по моему опыту, и я могу ошибаться насчет Google CodePro).

Единственный недостаток, который я заметил, это то, что он не учитывает интерфейсы Java.

0 голосов
/ 02 марта 2017

Я использую Doxygen для разработки карты вызовов методов, чтобы найти методы, которые никогда не вызывались. На графике вы найдете острова кластеров методов без абонентов. Это не работает для библиотек, так как вам всегда нужно начинать с некоторой главной точки входа.

...