Как делают Вас модульный тест Ваш T-SQL

Как делают Вас модульный тест Ваш T-SQL? Какие библиотеки/инструменты Вы используете?

Какой процент Вашего кода покрыт модульными тестами и как Вы измеряете его? Как Вы решаете который модули к модульному тесту сначала?

Вы думаете время и усилие, которое Вы инвестировали в свой ремень безопасности поблочного тестирования, окупился или нет?

Если Вы не используете поблочное тестирование, можно ли объяснить почему нет?

46
задан Brett Veenstra 30 July 2010 в 19:02
поделиться

3 ответа

Как вы проводите модульное тестирование T-SQL? Какие библиотеки/инструменты вы используете?

Посмотрите на TSQLUnit и tSQLt.

Я экспериментировал с использованием нескольких различных фреймворков на разных языках для тестирования T-SQL, таких как junit или nunit. Причина, по которой я пошел по этому пути, заключалась в том, чтобы воспользоваться преимуществами богатых сред тестирования в этих других языках. Если, например, вы используете nunit, то у него есть хорошая командная строка и gui viewer для просмотра состояния ваших тестов, а поскольку вы используете .net для написания тестов, он легко подключается к sql-серверу. JUnit имеет хорошую интеграцию со многими коммерческими и открытыми средами IDE, такими как NetBeans и IDEA, а также делает тестирование T-SQL более похожим на тестирование Java-кода, что очень удобно. Отрицательным моментом является то, что вы не только пишете T-SQL, но и пишете java или .net для тестирования вашего T-SQL.

Я также использовал Ruby с Rake (это как make или ant) и делал системные вызовы sqlcmd для выполнения sql скриптов, которые в свою очередь содержали тесты. Скрипты возвращали значения и строки обратно в Ruby, чтобы пройти или провалить тест. Этот подход мне понравился больше всего, так как он был очень простым и легким для других. Другие вышеупомянутые пути требовали от разработчиков использования .net или java, что, если у вас все DBA-типы, может быть трудно преодолеть, в то время как подход ruby с sql-скриптами, по моему опыту, легче продать. Типы DBA, как правило, открыты и способны легко освоить скриптовые языки, а Ruby имеет низкую кривую обучения, и скрипты легко запускаются по сравнению с классами .net или java.

Какой процент вашего кода покрыт модульными тестами и как вы его измеряете?

Вероятно, только 20%, только потому, что большинство систем баз данных исторически не имели тестов, созданных для них в момент их создания, поэтому я нахожусь в процессе ретро-активного добавления тестов и добавляю их по мере появления новых дефектов и улучшений.

Как вы думаете, окупилось ли время и усилия, которые вы вложили в ваш набор для модульного тестирования?

База данных - это хлеб и масло для большинства предприятий. На мой взгляд, она всегда окупается. Если ваш бизнес терпит хлам и высокий процент отказов для клиента, то тестирование, вероятно, не стоит того, поскольку оно не бесплатное.

Если вы не используете модульное тестирование, можете ли вы объяснить, почему?

Я с удовольствием посмотрю, если кто-нибудь придумает ответ на этот вопрос, который не будет абсурдным. Вроде того, почему вы не пристегиваете своего ребенка в автокресле, когда едете по дороге... "Они стоят слишком дорого"... "Требуется слишком много времени, чтобы пристегнуть ребенка"... "Он в безопасности без него"... "Что может пойти не так, чтобы оправдать это"... "Просто не хватает времени" Все это бред.

Да, я знаю, что это немного экстремально, но действительно, если у вас есть система, и она приносит компании пользу, она должна быть объединена в единое тестирование, чтобы помочь отловить некоторые проблемы до того, как они станут производственными проблемами. Единичное тестирование - это не панацея, но это один из инструментов, с помощью которого мы можем сделать все возможное.

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

21
ответ дан 26 November 2019 в 20:42
поделиться

Для инструмента модульного тестирования я добился наибольшего успеха с DBFit .

Я никогда не находил инструмента для измерения покрытия тестами TSQL.

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

6
ответ дан 26 November 2019 в 20:42
поделиться

Как и обычный код, некоторые вещи в T-SQL нужно тестировать иначе, чем другие. Если вы кодируете много статических вещей (например, триггеров или представлений), обычно тестовая нагрузка меньше.

Наша конкретная система почти полностью написана на T-SQL.

Как выполнить модульное тестирование T-SQL? Какие библиотеки / инструменты вы используете?

Нам известны хорошие результаты, с которыми мы сравниваем. В наших ежемесячных анализах мы сравниваем месяц с месяцем и запускаем на прогоне, чтобы понять влияние изменений кода и данных. Наш основной инструмент - это хранимая процедура, которая будет сравнивать две таблицы / представления / подмножества и определять различия (с параметрами порогов).

Какой процент вашего кода покрывается модульными тестами и как вы его измеряете?

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

Считаете ли вы, что время и усилия, которые вы вложили в систему модульного тестирования, окупились или нет?

Да

Если вы не используете модульное тестирование, можете ли вы объяснить, почему бы и нет?

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

2
ответ дан 26 November 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: