Как вы тестируете свой T-SQL? - PullRequest
44 голосов
/ 04 мая 2010

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

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

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

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

Ответы [ 5 ]

20 голосов
/ 04 мая 2010

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

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

Я экспериментировал с использованием нескольких различных фреймворков на многих языках для тестирования T-SQL, таких как junit или nunit. Причина, по которой я пошел по этому пути, заключалась в том, чтобы воспользоваться преимуществами богатой среды тестирования на этих других языках. Например, если вы используете nunit, у него есть хорошая командная строка и программа просмотра графического интерфейса для просмотра состояния ваших тестов, а поскольку вы используете .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% только потому, что в большинстве систем баз данных исторически не было тестов, созданных для них, поскольку они были созданы, поэтому я нахожусь в процессе ретроспективного активного добавления тестов и добавления тестов по мере появления новых дефектов и улучшений.

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

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

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

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

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

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

5 голосов
/ 04 мая 2010

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

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

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

2 голосов
/ 04 мая 2010

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

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

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

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

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

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

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

Да

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

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

1 голос
/ 07 мая 2019

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

tSQLt 100%

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

Некоторые проекты на 100%, большинство меньше :)

Я написал инструмент для покрытия кода T-SQL, который был спонсирован Redgate и включен в их тестовый продукт sql:

https://github.com/GoEddie/SQLCover

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

Да, 100%, каждый раз, когда я проходил тесты, это помогало нам двигаться быстрее. Каждый раз, когда не было испытаний, это замедляло нас.

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

Мне кажется необъяснимым, что люди не будут тестировать свои модули модульно:)

1 голос
/ 22 декабря 2010

Мы недавно перешли с модуля T-SQL на инфраструктуру модульного тестирования Visual Studio 2010. Самая большая жалоба заключается в том, что нам нужно управлять собственной областью транзакций в рамках тестов, чтобы оставить базу данных «чистой» для следующих тестов. Это то, что модуль T-SQL предоставляет в самом начале.

Наша цель - обеспечить 100% покрытие наших хранимых процедур. Это позволяет нам изменять базовую структуру таблиц и взаимосвязи по мере необходимости, не находясь в состоянии полной блокировки в процессе разработки (у нас есть независимые группы данных и разработки). Мы еще не начали измерять тестовое покрытие. Мы находимся в процессе разработки нашего первого производственного развертывания с этим технологическим стеком. Для нас интерфейс между приложениями и данными - это хранимые процедуры. Сначала мы создаем хранимые процедуры, достаточные для удовлетворения потребностей команды приложения, а затем, когда сигнатура станет достаточно стабильной для непрерывной интеграции, мы создадим наши модульные тесты. Мы хотели сделать TDD, но у нас есть крайний срок, который делает это просто непрактичным вариантом.

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

...