Подтвердить что ты не робот

Как вы unit test ваш T-SQL

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

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

Да

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

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

Ответ 4

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

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

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

Ответ 5

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

TSQLt 100%

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

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

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

https://github.com/GoEddie/SQLCover

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

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

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

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