Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Всё очень плохо со статическим анализом кода  [new]
Vadim999
Member [скрыт]

Откуда:
Сообщений: 107
Здравствуйте, люди добрые!
Помогите чем можете. Сами мы не местные. Вот приходится поддерживать старую БД, полную всяких хранимок и прочих насыщенных SQL кодом штуковин. Копчиком чуял что это обернется болью в заднице, но не знал что на столько.
Печаль моя крайне проста и понятна. В наш век, когда космические корабли бороздят просторы большого театра, а языки имеют строгую типизацию или всякие средства статического анализа кода. То SQL валится в множестве случайных мест буквально при каждом изменении.
Скажите, милостивые господа, поделитесь мудростью житейской, как вы с окаянным SQL справляетесь. С помощью каких средств и магических тулзов? Приведу некоторые кейсы моего батхерта:
1. Удалил/переименовал колонку в таблице - валятся хранимки где был её select.
2. Удалил/переименовал хранимку - валятся хранимки где её вызывали.
3. Поменял тип - валятся cast и convert.
4. А уж про предотвращение ошибок в динамическом SQL я и не мечтаю.
7 июл 15, 11:06    [17860942]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
0-0
Guest
[quot Vadim999]1. Удалил/переименовал колонку в таблице - валятся хранимки где был её select.
2. Удалил/переименовал хранимку - валятся хранимки где её вызывали.
[\quot]

Выражаясь вашим языком:
Откройте для себя чудодейственный View Dependencies
7 июл 15, 11:09    [17860963]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Vadim999, вот на эту штуку посмотрите. Не факт, что решит все ваши проблемы, но, может быть, сможет помочь.

https://www.sql.ru/forum/1045562/sql-refactor-studio-free-addin-for-ssms-2012-2014
7 июл 15, 11:10    [17860974]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim999
1. Удалил/переименовал колонку в таблице - валятся хранимки где был её select.

Тестирование
Vadim999
2. Удалил/переименовал хранимку - валятся хранимки где её вызывали.

Тестирование
Vadim999
3. Поменял тип - валятся cast и convert.

Тестирование
Vadim999
4. А уж про предотвращение ошибок в динамическом SQL я и не мечтаю.

Тестирование

Причем все измененяи и тестирование разумеется происходят на тестовом сервере, а не на промышленном
7 июл 15, 11:12    [17860994]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Хотя, они, конечно, уже выпилили из бесплатной версии основную фишку, и теперь денег за нее хотят...

На Хабре недавно один обзор SSDT проскакивал, возможно, имеет смысл его использовать:

http://habrahabr.ru/company/infopulse/blog/256653/
7 июл 15, 11:19    [17861037]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Vadim999
Member [скрыт]

Откуда:
Сообщений: 107
0-0
Выражаясь вашим языком:
Откройте для себя чудодейственный View Dependencies

Милсдарь, это всё равно что проверенный дедовский метод - поиск строки по всему коду.

Glory
Тестирование

Спасибо, КЭП! Честно говоря слабо себе представляю как это делается в БД. Раньше там тестов не было. Придется клонировать БД для теста, из отдельного приложения заполнять фикстурами, гонять тесты, инрегрировать все это в CI. Но естественно такие юнит и интеграционные тесты нужно наращивать постепенно, разбираясь в функционале и приоритетно писать на новый функционал. На это обычно уходят годы, если бестолковые разработчики сами не бросают эту затею. К тому же не у каждого работодателя найдутся ресурсы на +50% времени на написание тестов.
Вернувшись на грешную землю - сейчас я никак не могу гарантировать отсутствие ошибок. Но могу лишь искать средства и практики по уменьшению их количества.
7 июл 15, 11:28    [17861106]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
0-0
Guest
Проблемы автора решаются банально:
1. Тестирование
2. Проект в Visual Studio, уж ошибки связанные с удалением\переименованием колонок\процедур он отлавливает хорошо.
3. Возможности Managment Studio (View dependencies)
4. Доп. утилиты, например SQL search RedGate и т.п.
7 июл 15, 11:28    [17861109]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
Vadim999, в первом приближении достаточно установить любой поисковый плагин для SSMS. Я использую SQL Search - бесплатно и быстро.
Тестирование - это когда у Вас написаны тесты для 100+ процедур и функций и Вы понимаете - как и что тестировать :) Идеальный вариант.
Еще очень хорошая практика писать представления и функции с привязкой к схеме.
7 июл 15, 11:29    [17861122]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Vadim999
Member [скрыт]

Откуда:
Сообщений: 107
автор
Хотя, они, конечно, уже выпилили из бесплатной версии основную фишку, и теперь денег за нее хотят...

На Хабре недавно один обзор SSDT проскакивал, возможно, имеет смысл его использовать:

Спасибо, посмотрю, но похоже тут нужна Visual Studio. А так хочется разрабатывать на SQL не зависимо от IDE. Хранить исходники в файлах в Git репозитории и редактировать в Vim, а какой-нибудь SqlLinter бы проверял за тобой все ошибки. Ах мечты-мечты :)
7 июл 15, 11:33    [17861159]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim999
Спасибо, КЭП!

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


Vadim999
К тому же не у каждого работодателя найдутся ресурсы на +50% времени на написание тестов.

Зато они сразу найдутся при остановке промышленного сервера. Верно ведь ?
7 июл 15, 11:37    [17861199]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Vadim999, Ну так вы ж заикнулись про "космические корабли бороздят просторы большого театра, а языки имеют строгую типизацию или всякие средства статического анализа кода".

Средства статического анализа практически всегда идут либо приложением к IDE, либо отдельной утилитой.

Отдельных утилит для View Dependencies в SQL я не знаю, а приложений к Visual Studio или Management Studio тут несколько привели.
7 июл 15, 11:39    [17861213]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2395
Vadim999
1. Удалил/переименовал колонку в таблице - валятся хранимки где был её select.
2. Удалил/переименовал хранимку - валятся хранимки где её вызывали.
3. Поменял тип - валятся cast и convert.

1. "не делайте так" (С) С. Джобс
2. "не делайте так" (С) С. Джобс
3. "не делайте так" (С) С. Джобс

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

тем более у SQL есть бонус, что в процедуру можно добавлять новые переменные, и старый ее вызов (со старым набором) не ломается
7 июл 15, 14:47    [17862801]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
eny
Member

Откуда: москва
Сообщений: 292
Vadim999
Здравствуйте, люди добрые!
1. Удалил/переименовал колонку в таблице - валятся хранимки где был её select.
2. Удалил/переименовал хранимку - валятся хранимки где её вызывали.
3. Поменял тип - валятся cast и convert.
4. А уж про предотвращение ошибок в динамическом SQL я и не мечтаю.


Удалять что-то из работающей и полной всякими данными СУБД - плохая идея, особенно если полностью не разобрался с сущностями этой БД и где какие данные используются.
А когда разберешься всякое желание что-либо удалять отпадет само... вопщем за 15 лет работы никогда с такой проблемой не сталкивался в полный рост

а динамический SQL - это хак и крайний случай и нужно его всячески избегать
7 июл 15, 15:27    [17863026]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
StarikNavy
Vadim999
1. Удалил/переименовал колонку в таблице - валятся хранимки где был её select.
2. Удалил/переименовал хранимку - валятся хранимки где её вызывали.
3. Поменял тип - валятся cast и convert.

1. "не делайте так" (С) С. Джобс
2. "не делайте так" (С) С. Джобс
3. "не делайте так" (С) С. Джобс
+100
Какое воспаленное сознание может решить удалить что-то в базе, в которой нифига не понимаешь?
7 июл 15, 23:54    [17865204]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Vadim999
Member [скрыт]

Откуда:
Сообщений: 107
В общем порешили на том, что пока по быстрому могу написать регрессионные тесты на всё что попадется под руку, а для всего нового функционала буду писать интеграционные.
Вот еще вопрос в тему. Не хочу открывать новый топик. Есть ли у MS что-то типа SQL в памяти? Потому что на каждый test case очень долго получается по много раз клонировать БД, очищать, заливать фикстуры, гонять тест. Без IO диска всё было бы гораздо быстрее. Сейчас единственная идея тестовую базу размещать на RAM диске.
Раньше просто у меня было приложение где вся логика внутри, а БД лишь хранилище с доступом через ORM. Можно было для тестов БД заменить на sqlite в памяти.
8 июл 15, 08:39    [17865565]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4962
Mind
+100
Какое воспаленное сознание может решить удалить что-то в базе, в которой нифига не понимаешь?

Только смелым покоряются моря!
Ничего не мешает реализовать функционал который хочет ТС, тем более, что появились языки которые позволят сделать это быстро и качественно и дешево. В конце концов даже та же MSSMS в редакторе подчеркнет красным ошибку при отсутствии например такого столбца в таблице.
8 июл 15, 12:38    [17867050]     Ответить | Цитировать Сообщить модератору
 Re: Всё очень плохо со статическим анализом кода  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim999
Потому что на каждый test case очень долго получается по много раз клонировать БД, очищать, заливать фикстуры, гонять тест.

Сделать копию начальных файлов базы и подключать их каждый нужный раз
8 июл 15, 18:19    [17868949]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить