Подтвердить что ты не робот

Как я могу обнаружить мертвый код в корпоративном Java-проекте (Java + JSP + Javascript)?

Кто-нибудь знает инструмент для обнаружения мертвого кода в проекте Java EE?

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

Спасибо.

4b9b3361

Ответ 1

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

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

Понятно, что это очень хрупко, но я не думаю, что вы найдете что-нибудь автоматическое.

Ответ 2

Я предлагаю использовать флаг JVM -verbose:class (http://java.dzone.com/articles/how-use-verbose-options-java). Это позволит регистрировать информацию о классах, загружаемых JVM, например.

[Loaded java.lang.Object from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar]
[Loaded java.io.Serializable from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar]
[Loaded java.lang.Comparable from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar]
[Loaded java.lang.CharSequence from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar]

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

Конечно, это решение предоставит вам только информацию о неиспользуемых классах, но вам не нужно использовать внешнюю библиотеку.