В далёком 2005 году я менял стек технологий с Java на .NET и поначалу в Visual Studio мне очень не хватало возможностей, которыми располагала IntelliJ IDEA. Пробуя различные плагины к студии, я остановился на ReSharper'е и по сей день его использую. Недавно стало интересно, есть ли похожие продукты для работы с SQL Server, а точнее с T-SQL кодом хранимых процедур. Собственно про один такой продукт я и хочу рассказать в этой статье.
Итак, SqlCodeGuard – это бесплатный addin для SQL Server Management Studio для статического анализа T-SQL кода. Ну и плюс пара-тройка других возможностей.
Основные возможности
Поиск потенциальных ошибок в коде
Насколько я понимаю, поддерживается более сотни ситуаций различной направленности от «лучше так не делать» до «а вот тут – гарантированно свалится» и «причина тормозов – вот она».
Поиск зависимостей объектов
Позволяет определить, кто и где используется (какие таблицы использует процедура/функция/представление) и решает обратную задачу – позволяет определить – кто использует тот или иной объект, причем для таблиц и представлений – как (!) используется – выборка данных/вставка/обновление/удаление.
Cписок объектов, которые не были найдены в анализируемой БД
Побочная возможность. Позволяет, например, отслеживать опечатки в наименованиях таблиц, процедур и т.п. Как известно, SQL Server позволяет создать процедуру, которая использует несуществующую процедуру или таблицу или удалить объект, который используется в процедурах/представлениях. Такие ошибки проявятся только на этапе выполнения, так что нахождение их на этапе кодирования – немалый плюс.
Древовидное отображение структуры кода
Полезно для сложных процедур – позволяет быстро просмотреть/понять логику сложного кода а также оценить сложность процедуры/функции/представления в неких единицах сложности «P». Заодно подсчитывает количество стейтментов.
Преимущества продукта...
- Бесплатен :)
- Большой набор правил
- Возможность проверки как отдельного запроса так и всей БД целиком
- Интеграция с Visual Studio и Database Project
- Скорость (БД из 3000 объектов проверяется за 17 секунд, из 30К объектов — 150 секунд)
- Приличный набор набор правил для поиска операторов и конструкций языка, которые объявлены устаревшими и поддержка которых будет убрана (или даже уже убрана) в ближайшее время. Позволит быстро анализировать БД при миграции на новые версии сервера.
И, что представляет особый интерес для групповой разработки в больший компаниях – предоставляется специальное API, которое позволяет использовать возможности проверки кода в своих приложениях. Например, можно встроить проверку SQL кода в свой build-process или реализовать Checkin Policy.
… и его недостатки
- Недостаточная документированность. Впрочем, сам интерфейс довольно прост, но вот описать более подробно правила проверки – было бы неплохо.
- Непонятно как интегрировать SqlCodeGuard и Database Project. Поддержка на сайте заявлена, но непонятно – а как, собственно?
- Некоторые экзотические конструкции языка не распознаются. Также временами спотыкается на ключевых словах в качестве идентификаторов (наименования таблиц, столбцов и т.п.).
Неплохо было бы чтобы была возможность “из коробки” использовать интеграцию с continuous integration, но пока что этого нет.
Краткое резюме
В целом, несмотря на определённые недостатки, SqlCodeGuard вполне пригоден к применению как отдельными разработчиками, так и, вероятно, группами разработчиков для обеспечения единой политики написания кода а также для упрощения анализа существующих БД.
Автор: hTLK