поиск дубликата исходного кода - PullRequest
4 голосов
/ 18 января 2011

Я анализирую устаревший код. Это около 80.000 строк старого кода plsql. На первый взгляд, в источнике есть некоторое дублирование, которое нужно удалить. Вместо того, чтобы выполнять руководство diff и просматривать каждый файл, должен быть какой-то инструмент / командная строка, сконфигурированная для обнаружения дублирующих строк исходного кода.

Моя цель состоит в том, чтобы сделать обоснованное предположение о минимальном размере переписанного источника и о том, сколько фактических знаний содержится в этой программе. Я написал несколько базовых статических анализаторов кода, чтобы найти количество управляющих операторов IF ELSE FOR и т. Д. И функций в каждом файле. Но дублированный код все еще должен быть удален из моей статистики.

Ответы [ 4 ]

3 голосов
/ 18 января 2011

Вы смотрели на Simian - анализатор сходства ?(Только что проверил, и он больше не бесплатный, но доступен для ознакомления в течение 15 дней.)

Simian (Similarity Analyzer) определяет дублирование в Java, C #, C, C ++, COBOLRuby, JSP, ASP, HTML, XML, Visual Basic, исходный код Groovy и даже обычные текстовые файлы.Фактически, simian можно использовать с любыми читаемыми человеком файлами, такими как ini-файлы, дескрипторы развертывания, вы называете это.

Я использовал его на практике, и он хорошо работает.

0 голосов
/ 28 декабря 2012

Как насчет этого:

http://sourceforge.net/projects/sddforeclipse/

Это с открытым исходным кодом, и, как говорят, используется коммерческим программным обеспечением. Кстати, это плагин для Eclipse.

0 голосов
/ 18 января 2011

Вы должны будете попросить / позаимствовать / украсть / написать синтаксический анализатор plsql и сравнить результирующие абстрактные синтаксические деревья. С размером базы кода, которая у вас есть, это может быть полезно. Когда вы закончите, у парсера будут другие возможности.

0 голосов
/ 18 января 2011

Сонар имеет обнаружение дублирования и утверждает, что поддерживает PL / SQL, хотя я никогда не использовал его для этого.

...