Как обнаружить дублирование кода во время разработки? [закрытый]

Путаница возникает из-за множества уровней абстракции, смешанных вместе в концепции «указатель». Программистов не смущают обычные ссылки в Java / Python, но указатели отличаются тем, что они раскрывают характеристики базовой архитектуры памяти.

Хорошим принципом является четкое разделение слоев абстракции, а указатели этого не делают.

75
задан David Dibben 10 October 2008 в 14:34
поделиться

3 ответа

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

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

CCFinder, выше, работает путем сравнения языков токены, поэтому он не чувствителен к пустому пространству изменения. Он может обнаруживать клоны, которые являются вариантами исходного кода, если есть только один токен изменения (например, изменить переменную X на Y в клон).

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

Наш детектор клонов CloneDR делает это для Java, C #, C ++, COBOL, VB.net, VB6, Fortran и других других языков. Его можно увидеть по адресу: http://www.semdesigns.com/Products/Clone/index.html

Помимо поддержки нескольких языков, механизм CloneDR может обрабатывать различные стили кодирования ввода, включая ASCII, ISO -8859-1, UTF8, UTF16, EBCDIC, ряд кодировок Microsoft и (японский) Shift-JIS.

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

ИЗМЕНИТЬ Февраль 2014 г .: Теперь обрабатывает весь C ++ 14.

2
ответ дан 24 November 2019 в 11:43
поделиться

Same (http://sourceforge.net/projects/same/) is extremely plain, but it works on text lines instead of tokens, which is useful if you're using a language that isn't supported by one of the fancier clone finders.

1
ответ дан 24 November 2019 в 11:43
поделиться

Существует также Simian , который поддерживает Java, C #, C ++, C, Objective-C, JavaScript ...

Он поддерживается Hudson ] (например, CPD).

Если вы не являетесь проектом с открытым исходным кодом, вы должны заплатить за Simian.

0
ответ дан 24 November 2019 в 11:43
поделиться
Другие вопросы по тегам:

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