2009-07-09 2 views
15

В ближайшем будущем я буду наследовать несколько большой проект. Недавно я делал некоторые небольшие обновления, и заметил, что в некоторых его частях можно использовать некоторые рефакторинги, так как есть методы, которые выполняют одну и ту же операцию с небольшой разницей.Есть ли это: Повторный поиск кода?

Мне было интересно, есть ли инструмент, который возьмет кучу исходного кода и найдет похожие блоки кода, чтобы их можно было идентифицировать для возможного рефакторинга. Было бы здорово, если бы существовал нечеткий поиск, чтобы он мог идентифицировать аналогичную операцию (кроме нескольких патронов кода, повторяющихся дословно).

Я не ожидаю, что программа реорганизует сам код, просто определите потенциальное повторение.

Моя платформа C#, но любое решение будет полезным

+0

Возможный дубликат [Как найти аналогичный фрагмент кода?] (Http://stackoverflow.com/questions/709744/how-to-find-a-similar-code-fragment) –

ответ

8

http://www.codeplex.com/CloneDetectiveVS

«Clone Detective является Визуальная интеграция студии, которая позволяет анализировать C# проектов для исходного кода, который дублируется в другом месте.»

Происходит много, визуально, когда вы бросаете его в проект с большим количеством дублирования кода. Если это в первую очередь сочетается с вашим использованием Clone Detective, это может быть немного подавляющим.

Я действительно рекомендую этот инструмент. Это отлично.

+0

Код, который я наследую в настоящее время .Net 1.1 (очевидно, требует VS .NET), поэтому это не поможет мне в этом проекте, пока мы не обновим его как минимум на 2.0. Но это поможет с каждым другим проектом, в котором я сейчас работаю! Посмотрите, +1 –

+0

Выбранный как ответ, потому что: он интегрируется в мою текущую IDE для большинства проектов; Отличный интерфейс; и его открытым исходным кодом. Simian выглядит красиво, но я планирую использовать его в коммерческой среде, и стоимость является запретительной (для меня) –

+1

Хотя, возможно, это не проблема с сентября 2010 года. Clone Detective, похоже, не поддерживает Visual Studio 2010 – Jafin

5

CPD работает на лексемы уровне, так должно быть хорошо с C#. У него есть некоторые механизмы для факторизации имен переменных и других идентификаторов.

5

Я никогда не использовал его, но Simian может работать для вас

обезьяний (Сходство Analyzer) идентифицирует дублирование в Java, C#, C, C++, COBOL, Ruby, JSP, ASP, HTML , XML, Исходный код Visual Basic, Groovy и даже текстовые файлы. Фактически, simian может использоваться для любых файлов, читаемых пользователем , таких как ini-файлы, развертывания дескрипторов , вы называете это.

+0

Просто отметьте, Я использовал Симиана, и я больше не буду этого делать. Я, конечно, не рекомендовал бы его никому. Я также использовал Clone Detective, и это отличное приложение. – MagicAndi

2

Simian - продукт, который утверждает, что анализирует исходный код на разных языках, включая C#. Я никогда не использовал его, поэтому я не могу ручаться за него. Это бесплатно для некоммерческого использования, и они продадут его вам для коммерческих проектов.

4

Я в настоящее время использую Duplicate Finder. Он работает с любым текстовым файлом, и я очень успешно использовал его в своих проектах на C#. Это командная строка, поэтому я интегрировал ее в свои процессы сборки.

1

Если вы хотите найти дублирующий код в проекте, то, возможно, вам также стоит рассмотреть возможность использования более широких инструментов static code analysis.

Что-то вроде Sonar проверяет дублированный код, стандарты кодирования, модульные тесты, покрытие кода, сложный код, возможные ошибки, комментарии и дизайн и архитектуру.

Вы можете найти list of static code analysis tools on Wikipedia.