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

Инструменты для обнаружения дублированного кода (Java)

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

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

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

4b9b3361

Ответ 1

Я использую следующие инструменты:

Оба инструмента имеют поддержку обнаружения дублирования кода. Но у обоих из них нет возможности сообщить вам, как реорганизовать ваш код.

JetBrains IntelliJ IDEA Ultimate имеет хороший статический анализ кода с поддержкой дублирования кода, но он не является бесплатным.

Ответ 2

Большинство инструментов, перечисленных в статье Wikipedia по Duplicate Code Tools, обнаруживают дубликаты на разных языках, включая Java.

Ответ 3

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

Ответ 4

Либо Simian или PMD CPD. Первый поддерживает более широкий набор языков, но не является бесплатным для коммерческих проектов.

Ответ 6

См. наш SD Java CloneDR - инструмент для обнаружения точного и близкого пропущенного дублирующего кода в больших Java-системах.

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

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

Он находит 10-20% клонов в большинстве систем Java.