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

используйте это форматирование при выборе

to_char(systimestamp,'DD-MON-YYYY')

Например:

выберите to_char (systimestamp, «DD-MON-YYYY») из dual;

299
задан Jason Aller 3 August 2018 в 19:44
поделиться

13 ответов

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

, Например, если Вы интересуетесь неиспользованными классами, все классы могли бы быть оснащены для входа, когда экземпляры создаются. И затем маленький сценарий мог сравнить эти журналы с полным списком классов для нахождения неиспользованных классов.

, Конечно, если Вы идете на уровне метода, необходимо иметь в виду производительность. Например, методы могли только зарегистрировать свое первое использование. Я не знаю, как это лучше всего сделано в Java. Мы сделали это в Smalltalk, который является динамическим языком и таким образом допускает модификацию кода во времени выполнения. Мы оснащаем все методы с регистрирующимся вызовом и удаляем регистрирующийся код после того, как метод был зарегистрирован впервые, таким образом через какое-то время больше потерь производительности не происходит. Возможно, подобная вещь может быть сделана в Java со статическими булевыми флагами...

39
ответ дан akuhn 23 November 2019 в 01:29
поделиться

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

0
ответ дан MattW. 23 November 2019 в 01:29
поделиться

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

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

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

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

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

1
ответ дан Vihung 23 November 2019 в 01:29
поделиться

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

однако, EMMA очень полезен.

1
ответ дан Vladimir Dyuzhev 23 November 2019 в 01:29
поделиться
  • FindBugs превосходен для этого вида вещи.
  • PMD (Детектор Путаницы Проекта) является другим инструментом, который может использоваться.

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

2
ответ дан graveca 23 November 2019 в 01:29
поделиться

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

2
ответ дан Vaibhav 23 November 2019 в 01:29
поделиться

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

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

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

5
ответ дан Peter Lawrey 23 November 2019 в 01:29
поделиться

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

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

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

Однако я использую ИДЕЮ IntelliJ в качестве моего предпочтительного IDE, и это имеет обширные аналитические инструменты для нахождения зависимостей между модулями, неиспользованными методами, неиспользованными участниками, неиспользованными классами, и т.д. Его довольно интеллектуальное также как закрытый метод, который не называют, отмечено неиспользованное, но открытый метод требует более обширного анализа.

12
ответ дан cletus 23 November 2019 в 01:29
поделиться

Мы начали использовать , Находят, что Ошибки помогают определить часть фанка в богатой целью среде нашей кодовой базы для рефакторингов. Я также полагал бы Структура 101 определять пятна в архитектуре Вашей кодовой базы, которые являются слишком сложными, таким образом, Вы знаете, где реальные болота.

13
ответ дан Alan 23 November 2019 в 01:29
поделиться

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

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

15
ответ дан jamesh 23 November 2019 в 01:29
поделиться

Одной вещью, которую я, как было известно, сделал в Eclipse на едином классе, является изменение все его методы к частному, и затем посмотрите, какие жалобы я получаю. Для методов, которые используются, это вызовет ошибки, и я возвращаю их самому низкому уровню доступа, я могу. Для методов, которые не использованы, это вызовет предупреждения о неиспользованных методах, и они могут затем быть удалены. И в качестве награды, Вы часто находите некоторые открытые методы, которые могут и должны быть сделаны частными.

, Но это является очень ручным.

26
ответ дан skiphoppy 23 November 2019 в 01:29
поделиться

Плагин Eclipse, который работает обоснованно хорошо, Неиспользованный Детектор Кода .

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

220
ответ дан Mikezx6r 23 November 2019 в 01:29
поделиться

Перспектива среза Structure101 даст список (и граф зависимостей) любых "сиротских" или "сиротских групп " классов или пакетов, которые не имеют зависимости от «основного» кластера.

5
ответ дан 23 November 2019 в 01:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: