Как найти неиспользуемый / мертвый код в java-проектах


Answers

Плагин Eclipse, который работает достаточно хорошо, - это неиспользуемый кодовый детектор .

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

Question

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

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

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




Теоретически вы не можете детерминистически найти неиспользуемый код. Это математическое доказательство этого (ну, это частный случай более общей теоремы). Если вам интересно, найдите проблему с остановкой.

Это может проявляться в коде Java во многих отношениях:

  • Загрузка классов на основе ввода пользователем, файлов конфигурации, записей в базе данных и т. Д .;
  • Загрузка внешнего кода;
  • Передача деревьев объектов в сторонние библиотеки;
  • и т.п.

Это говорит о том, что я использую IDEA IntelliJ в качестве моей IDE-выборки и имеет обширные инструменты анализа для зависимостей findign между модулями, неиспользуемыми методами, неиспользуемыми членами, неиспользуемыми классами и т. Д. Его вполне интеллигентный тоже как частный метод, который не называется помечен как неиспользуемый, но публичный метод требует более тщательного анализа.




Я удивлен, что ProGuard здесь не упоминается. Это одна из самых зрелых продуктов.

ProGuard - это бесплатный инструмент сжатия файлов Java, оптимизатор, obfuscator и preverifier. Он обнаруживает и удаляет неиспользуемые классы, поля, методы и атрибуты. Он оптимизирует байт-код и удаляет неиспользуемые инструкции. Он переименовывает остальные классы, поля и методы, используя короткие бессмысленные имена. Наконец, он предопределяет обработанный код для Java 6 или для Java Micro Edition.

Некоторые виды использования ProGuard:

  • Создание более компактного кода, для небольших архивов кода, более быстрая передача по сетям, более быстрая загрузка и меньшие следы памяти.
  • Сделать программы и библиотеки сложнее перепроектировать.
  • Отобразить мертвый код, чтобы его можно было удалить из исходного кода.
  • Retargeting и preverifying существующие файлы классов для Java 6 или выше, чтобы в полной мере использовать их более быструю загрузку классов.






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

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




Используйте инструмент для тестирования, чтобы управлять своей кодовой базой, а затем запускать приложение, а не тесты.

Emma и Eclemma предоставят вам хорошие отчеты о том, какой процент от того, какие классы запускаются для любого запуска кода.




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

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

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




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

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




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

PS Проект выглядит мертвым сейчас. Теперь есть плагин PMD, но я его не использовал.




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

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