Я не кажу про різний інструмент. Я дійсно дивлюсь, чи проект містить код, який, можливо, був "перероблений" з іншого проекту. Цілком імовірно, що імена функцій, імена змінних і те, що не буде змінено. Умови можуть бути відмінені тощо.
Я не кажу про різний інструмент. Я дійсно дивлюсь, чи проект містить код, який, можливо, був "перероблений" з іншого проекту. Цілком імовірно, що імена функцій, імена змінних і те, що не буде змінено. Умови можуть бути відмінені тощо.
Відповіді:
Коли я викладав інженерію програмного забезпечення, я користувався (безкоштовним) сервісом в Стенфорді під назвою MOSS (міра подібності програмного забезпечення). Це дозволило мені дуже легко виявити плагіат між студентськими проектами. Система також дозволила мені ввести «відомі добрі» приклади коду, які я використовував під час уроку, які слід було ігнорувати.
Чудова річ (повністю побічна проблема) про результати, які повернулися, полягала в тому, що ми могли сказати, які студенти працювали разом --- навіть якщо вони не копіювали коду, вони обговорювали проблеми достатньо, щоб їх код був подібний. Сумна частина полягала в тому, щоб знайти дивного студента, БЕЗ ПІДХОДНОСТІ до будь-якого іншого коду. Зазвичай вони не так добре робили.
Можливо, ви зможете скористатися інструментом PMD, щоб знайти те, що шукаєте. Він призначений для виявлення вирізання та вставки в базу коду, але якщо ви включите джерело проекту підозрілого походження, це може допомогти вам побачити, куди з нього скопійовано код.
Найближче, що я знаю, до чого ви шукаєте, - це детектив клонів. Це плагін Visual Studio.
Clone Detective - це інтеграція Visual Studio, яка дозволяє аналізувати проекти C # на предмет вихідного коду, який дублюється десь в іншому місці. Наявність дублікатів може легко призвести до невідповідностей і часто є показником для погано врахованого коду.
Схоже, ви хочете обчислити різницю між двома абстрактними деревами синтаксису (AST), тому вас може зацікавити інструмент Smart Differencer .
Знайдено на https://stackoverflow.com/questions/974855/eclipse-abrief-syntax-tree-diff .
Навіть якщо ви не говорите про різний інструмент, ви все одно можете використовувати його для цього, принаймні, певною мірою. Якщо я бачу два розділи коду, які виглядають схоже, я, наприклад, часто вставляю обидва в BeyondCompare, щоб побачити, як багато роботи було б спростити його шляхом рефакторингу загальної функції.
З іншого боку, якщо ви не знаєте, де схожий код, але вам просто цікаво, чи існує десь там, що ви шукаєте? Автоматизований інструмент виявлення плагіату? Я не впевнений, що таке існує.
Ця стаття з Вікіпедії з цього питання також містить посилання на декілька інструментів, за допомогою яких можна знайти аналогічний чи дублюючий код. У нас є внутрішній інструмент для цього, тому я не знайомий із зовнішніми інструментами, згаданими у статті.
Що ви дійсно хочете зробити, це побачити, чи є код клонований (скопійований) в двох проектах (обидва проекти, що складаються з можливо великих наборів файлів). Це можна зробити, запустивши інструмент виявлення клонів. У Вікіпедії перелічено їх різноманітність.
Щоб вирішити, чи є багато копіювання, вам потрібно лише узгодити вихідні лінії, а там є безліч точних детекторів клонів джерела. Я вважаю, що ПМД - одна з них. Що вони не робитимуть - це знайти код, який редагується копією та вставкою; вони знайдуть код-копіювальний-незмінний код копіювання, який, ймовірно, обгорнутий навколо матеріалів, що були відредаговані раніше.
Якщо ви хочете побачити деталі копіювання для копіювання попереднього редагування коду, вам потрібен детектор клонів, який знаходить «параметризовані» клони. Детектори на основі токенів роблять це для редагувань, які замінюють просто імена змінних або констант.
Детектори на основі абстрактно-синтаксичного дерева (AST) роблять це для редагування, пов’язаного з більшими фрагментами, такими як вирази, заяви, вставки, видалення тощо. Ці останні, як правило, дають кращі відповіді, оскільки на відміну від детекторів жетонів, вони можуть використовувати мовну структуру вихідного коду комп'ютера як керівництво.
Наш інструмент CloneDR - такий детектор.
Я не знаю інструментів, які фактично знайдуть «еквівалентний» код (зворотні умови) тощо. Дослідники створили детектори клонів, які роблять щось подібне, але комбінаторика робить це дуже дорогим у виконанні, а дослідні зразки масштабуються погано.