2009-09-22 2 views
14

Я искал в Интернете какое-то время, и мне не удалось найти бесплатные (или дешевые) инструменты/утилиты/модули, которые могут анализировать набор файлов Perl (модулей или скриптов) и дублировать или клонировать флаг или копировать/вставлять код.Как найти код копирования/вставки (дубликат, клонирование) в Perl?

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

+0

Вы можете найти этот узел Perl Monks интересный: http://www.perlmonks.org/index.pl?node_id=667084 – daotoad

+2

Better было бы не копировать-вставить код в первую очередь. Было бы целесообразно пережить ваш старый код в любом случае и (повторно) ознакомиться с ним; если у вас есть миллионы строк кода, вы все равно должны иметь общее представление об этом в своей голове и знать потенциальных кандидатов на переписывание/рефакторинг. – Ether

+0

Связанный вопрос - http://stackoverflow.com/questions/2490884/why-is-copy-and-paste-of-code-dangerous – Oded

ответ

5

Смешной similar question был размещен SO лишь несколько минут назад.

Вот ссылка на некоторые инструменты, которые вы можете использовать FUL.

Code Comparison and Plagirism Detection

+0

Не могли бы вы ссылаться на этот другой вопрос? – innaM

+1

http://stackoverflow.com/questions/1461805/how-can-i-compare-similar-codebases - аналогичный вопрос о C++ – mob

+0

Я оцениваю продукт CodeMatch. Однако, чтобы получить список корпоративных рассылок электронной почты для загрузки программного обеспечения. К счастью, я использовал одноразовый адрес электронной почты. –

4

Что вы подразумеваете под дублирующим кодом? Просто характерные совпадения или семантические соответствия.

Существует несколько инструментов, таких как http://pmd.sourceforge.net/, которые могут обнаруживать повторяющийся код по совпадениям строк, этот инструмент предназначен для java, но исходное соответствие работает в обычном тексте.

Если вы хотите семантическое согласование, как

sub A 
{return 1;} 

соответствовать

sub B 
{ 
    return 1; 
} 

Тогда вам нужно что-то другое :(

+0

Спасибо.Я просто попробовал плагин PMD для Eclipse, и он, похоже, не может сканировать файлы perl (или обычного текста). Возможны варианты Java, JSP, CPP, C, PHP, Ruby, Fortran. Для хихиканья я попробовал пару, и это дает мне пустой отчет о копировании/вставке. –

+0

По умолчанию он ищет блоки длиной около 30 строк. Мы используем его для нашего внутреннего языка, свободно основанного на Javascript, и он отлично подходит для нас. – chollida

+3

Вы можете запустить весь код через perltidy, чтобы сгладить стилистические различия (но не имена подпрограмм). – Schwern

0

семантические Designs делает продукт под названием Clone Dr., который появляется, чтобы иметь возможность анализировать большое количество типов языка для клонированных участков кода. Но, похоже, их бесплатная ознакомительная версия работает только на Java и Cobol.

+0

Я менеджер продукта CloneDR. Он обеспечивает (мы считаем) действительно хорошие результаты в силу сравнения АСТ для программ, которые полностью избавляются от любых проблем форматирования. Он обрабатывает много языков, но Perl в настоящее время не является одним из них. В конце концов, «только Perl может анализировать Perl»: -} [На самом деле, у нас очень хорошие синтаксические анализаторы; мы доберемся до Perl когда-нибудь.] –

+1

Полезно знать. Тем не менее, на Perl может не быть тысячи клиентов. Я попробовал вашу оценочную версию Clone Dr. по старому проекту JAVA на некоторое время назад, и я был впечатлен результатами. Именно этот опыт заставил меня понять, что мне нужно проанализировать весь остальной код (некоторые из которых включают в себя некоторые большие скрипты Perl) для копирования/вставки. –

+0

Вы можете получить оценочные версии для Java, C#, C, C++, COBOL и PHP. Возможно, вам придется спросить на веб-сайте. –

0

Я только что оценил Simian. Он имеет 15-дневный бесплатный период оценки и стоит 100 долларов за одну лицензию пользователя. Он официально не поддерживает Perl, но он рассматривает их как простой текст и анализирует их в любом случае. Это сверхбыстрая утилита! И супер проста в использовании. Отчет, созданный с помощью этого инструмента, был прост и понятен. Я полностью одобряю этот инструмент. Теперь мне просто нужно поговорить с моим боссом и заставить его купить лицензию.

+0

P.S. Я отправил по электронной почте разработчикам Simian и спросил их, намерены ли они поддерживать Perl, и они сразу же написали, что поддержка Perl им никогда не приходила в голову, но они добавили его в список дел. Я даже не платный клиент. Теперь это отличная поддержка. (если только они просто не сдули меня) –

+0

Они? Запрошенные умы хотят знать. Я думаю, что Симиан требует лексического анализа, а Perl - сука для lex, не говоря уже о синтаксическом анализе. –

2

В прошлом я использовал CCFinder, чтобы найти фрагменты кода, которые являются дубликатами. Он работает достаточно хорошо, но имеет .. интересный интерфейс. У него нет встроенной поддержки perl, но у него есть опция открытого текста, которая должна работать как минимум для обнаружения копии и вставки. Существует решение для Windows и Ubuntu - Freeware, но не с открытым исходным кодом.

+0

О, вау ... это отличная утилита! И то, как это наглядно показывает вам, что ваш дублирующий код на графике разброса поразителен! Я думаю, что это самая крутая часть бесплатного программного обеспечения, которое я когда-либо испытывал. Сначала пользовательский интерфейс является немного klunky, но как только вы привыкнете к интерфейсу, это удивительно мощный анализатор дублирования кода. Тем не менее, две гниды. Это не межплатформенная платформа.И это оставляет кучу временных файлов в вашем исходном коде. –

+0

Я смог легко изменить один из файлов python, чтобы распознавать и игнорировать комментарии POD и Perl. Теперь я больше взволнована CCFinder! (Придется удалить все временные файлы вручную и перезапустить, чтобы заставить его работать.) –

+0

Исходный код доступен по лицензии MIT: http://www.ccfinder.net/ccfinderxos.html – hexcoder

Смежные вопросы