Я не говорю о инструментах сравнения. Я действительно смотрю, если проект содержит код, который, возможно, был "рефакторинг" из другого проекта. Вполне вероятно, что имена функций, имена переменных и тому подобное будут изменены. Условия могут быть изменены, и т. Д.
tools
comparison
Тамара Вийсман
источник
источник
Ответы:
Когда я преподавал разработку программного обеспечения, я использовал (бесплатный) сервис в Стэнфорде под названием MOSS (показатель сходства программного обеспечения). Это позволило мне очень легко обнаружить плагиат между студенческими проектами. Система также позволяла мне вводить примеры «заведомо хороших» кодов, которые я использовал во время занятий, которые должны были игнорироваться.
Самое замечательное (совершенно побочный вопрос) в результатах, которые мы получили, было то, что мы могли сказать, какие студенты работали вместе - даже если они не копировали код явно, они обсуждали проблемы настолько, что их код был похож. Грустной частью было нахождение странного студента, не имеющего сходства с любым другим кодом. Они обычно не очень хорошо.
источник
Вы можете использовать инструмент PMD, чтобы найти то, что вы ищете. Он предназначен для обнаружения вырезок и вставок в базе кода, но если вы включите исходный исходный проект, это может помочь вам увидеть, откуда был скопирован код.
источник
Самое близкое, что я знаю о том, что вы ищете, это детектив-клон. Это плагин Visual Studio.
источник
Звучит так, будто вы хотите вычислить разницу между двумя абстрактными синтаксическими деревьями (AST), поэтому вас может заинтересовать инструмент Smart Differencer .
Найдено по адресу https://stackoverflow.com/questions/974855/eclipse-abstract-syntax-tree-diff .
источник
Даже если вы не говорите об инструменте сравнения, вы все равно можете использовать его для этого, по крайней мере, до некоторой степени. Например, если я вижу два фрагмента кода, которые похожи друг на друга, я часто вставляю оба в BeyondCompare, чтобы увидеть, сколько нужно будет сделать, чтобы упростить его путем рефакторинга общей функциональности.
С другой стороны, если вы не знаете, где находится подобный код, но вам просто интересно, существует ли где-нибудь такой код ... что вы ищете? Автоматизированный инструмент для обнаружения плагиата? Я не уверен, что такая вещь существует.
источник
Эта статья в Википедии на эту тему также содержит ссылки на несколько инструментов, которые можно использовать для поиска похожего или дублирующего кода. У нас есть внутренний инструмент для этого, поэтому я не знаком с внешними инструментами, упомянутыми в статье.
источник
Что вы действительно хотите сделать, так это посмотреть, есть ли код, клонированный (скопированный) между двумя проектами (оба проекта, состоящие из, возможно, больших наборов файлов). Вы можете сделать это, запустив инструмент обнаружения клонов. В Википедии перечислено множество их.
Чтобы решить, достаточно ли много копий, вам нужно только сопоставить исходные строки, и есть множество точных детекторов клонов исходных строк. Я считаю, что PMD является одним из них. Чего они не будут делать, так это найти код, который отредактирован копированием-вставкой; они найдут стандартный код «копировать-вставить-неизмененный», вероятно, обернутый вокруг материала, отредактированного после копирования.
Если вы хотите увидеть подробности копирования для кода копирования-редактирования, вам нужен детектор клонов, который находит «параметризованные» клоны. Детекторы на основе токенов делают это для правок, которые заменяют только имена переменных или константы.
Детекторы на основе абстрактно-синтаксического дерева (AST) делают это для правок, включающих более крупные фрагменты, такие как выражения, операторы, вставки, удаления и так далее. Последние, как правило, дают лучшие ответы, потому что, в отличие от детекторов токенов, они могут использовать структуру языка исходного кода компьютера в качестве руководства.
Наш инструмент CloneDR является таким детектором.
Я не знаю инструментов, которые действительно находят «эквивалентный» код (обратные условия) и т. Д. Исследователи создали детекторы клонов, которые делают что-то подобное, но комбинаторика делает это очень дорогим для выполнения, а исследовательские прототипы плохо масштабируются.
источник
Мне действительно нравится, как CCFinderX визуализирует сходство, так что вы можете проверить это. Поддерживает довольно много языков, это бесплатно и довольно легко установить (Python 2.6).
источник