Мы используем инструмент CPD для обнаружения дублирования кода. Инструмент CPD включает пробелы и комментарии. Не могли бы вы сообщить нам, как мы можем избегать пробелов, комментарии, чтобы могли возникнуть правильные случаи двуличности? Предположим, что у нас есть 4 строки дублированного кода и 4 строки комментариев, тогда он возвращает 8 строк вместо 4.Как избежать пробелов и комментариев при дублировании кода Инструмент CPD
ответ
Какой конкретный инструмент для копирования-пасты CPD? Здесь очень много.
Как CPD обнаруживает дубликаты, зависит от примитивных объектов, которые он сравнивает. (Я построил клон-детекторы).
Некоторые из них работают только с источниками; эти довольно много не могут отделить пробел и комментарии от языка программирования что вы думаете, что дали инструмент. Для этого ваш код является просто сырым текстом. И эти инструменты не могут обнаружить, что «кодовый блок A является дубликатом кода B с с регулярными изменениями (например, параметрами)», которые вы действительно хотите знать. (я думаю, этот вид CPD дает ужасные ответы, таким образом, ваш вопрос, но у них есть преимущество в том, что они работают на все).
Некоторые работают с языковыми токенами, для тех языков, которые они знают. Эти инструменты, как правило, очень хороши в игнорировании пробелов. Поскольку они знают, что комментарии являются определенными видами токенов, они обычно могут игнорировать комментарии, тоже, с каким-то переключателем командной строки. (Таким образом, «Какой инструмент CPD?»). Но они не понимают язык структуру, и, таким образом, кажется, что последовательность
} {
клон любой другой такой последовательности. Честно говоря, это глупый клон. Во-вторых, такие детекторы на основе токенов могут обнаруживать только параметры (места , где клоны изменяются систематически) один токен , обычно заменяющий только идентификатор или константу другой константой или идентификатором. Тем не менее это большой шаг вперед в удобстве использования линейных инструментов CPD.
Некоторые очень немногие работают на языке структуры, например, использовать грамматику языка для контроля соответствия (я случайно сделать один из них, CloneDR, увидеть мою биографию). Они не могут ошибиться в инструментах CPD на основе токенов, поэтому вы получите более точные обнаруженные клоны. Кроме того, они могут обнаруживать параметры, состоящие из последовательностей токенов Tokenes, например, когда выражение заменило идентификатор, и т. д. ИМХО (упс, мнение!), они дают гораздо лучшие обнаруженные клоны (вот почему я строю CloneDR).