Инструмент для обнаружения копирования / вставки кода в TSQL? - PullRequest
9 голосов
/ 13 декабря 2011

Я работаю в системе SQL Server 2005 с большим количеством вставленного в копию кода, множеством повторных вычислений вместо функций, множеством хранимых процедур, которые отличаются лишь незначительно, а не параметризованы.Также много пакетов служб SSIS, которые очень похожи.

Двигаясь вперед, я хотел бы иметь возможность обнаруживать этот тип «запаха кода».Для этого есть множество инструментов, но я ничего не нашел для SQL.

Какие-либо идеи о продуктах, которые можно использовать, или лучшие рекомендации, касающиеся копирования / вставки кода в TSQL?

Большое спасибо ...

РЕДАКТИРОВАТЬ: Спасибо за все отзывы.Я ковырялся с парой из них, но тот, который выглядит наиболее простым и простым в использовании, кажется, Atomiq.Мне пришлось экспортировать все мои объекты в файлы .sql, затем пришлось использовать командный файл для переименования всех файлов с расширением .sql в .cs, потому что он не использует .sql.Тем не менее, я уже получил хорошую информацию о серьезных проблемах с нашим кодом.

Ответы [ 3 ]

7 голосов
/ 13 декабря 2011

Для этого у вас есть несколько:

  • Atomiq - коммерческий
  • Black Duck Suite - коммерческий (пакет анализа программного обеспечения)
  • CloneDR - коммерческий (Ada, C, C ++, C #, Java, COBOL, Fortran, Python, VB.net, VB6, PHP4 / 5, PLSQL, SQL2011, XML, многие другие)
  • ConQAT (с открытым исходным кодом, поддерживает: ABAP, ADA, Cobol, C / C ++, C #, Java, PL / I, PL / SQL, Python, текст, Transact SQL, Visual Basic, XML)
  • Simian (программное обеспечение)
4 голосов
/ 13 декабря 2011

Вы можете попробовать запустить Simian .Это инструмент, который поддерживает множество языков (включая SQL)

1 голос
/ 13 декабря 2011

Предварительно упакованный инструмент, вероятно, будет самым быстрым / простым способом добраться до него, но способ получить его с максимальным количеством хакерских очков и максимальным удовольствием - это запустить алгоритм расстояния Левенштейна против сохраненногоКод процедуры в базе данных, доступ к которой можно легко получить с помощью:

SELECT OBJECT_NAME(OBJECT_ID) as ProcName, 
       OBJECT_DEFINITION(OBJECT_ID) as ProcCode
FROM sys.procedures

Вот один пример того, кто реализует алгоритм в T-SQL.

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

Я мог бы попробовать это сам, простодля ног!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...