Я хочу начать с того, что все, что я делаю, - это SQL Server, вот примеры, которые я привожу. В целом, однако, это относится к любой форме кода независимо от системы.
Давайте начнем с того, что немного разберемся с этим.
Обновления
У вас есть система, и вы собираетесь обновить ее полностью или частично. Например, обновление экземпляра с SQL Server 2012 до 2014 года. На этом этапе тестирование необходимо. К сожалению, тестирование каждой части даже небольшого приложения, вероятно, не будет возможным. В этот момент я бы сделал то, что я бы назвал «рабочим» тестом. Является ли основная система работоспособной. Выполните ваши общие задачи начала до конца. Не проверяйте каждый вариант, только основной путь.
При обновлении SQL Server также требуется некоторое чтение . По сути, вы хотите прочитать Backward Compatibility
запись для новой версии ( здесь - 2014 ) и убедиться, что у вас ничего нет ни в одном из списков (критические изменения, изменения поведения и т. Д.).
Код приложения
Здесь мы смотрим на новый / изменяющийся код приложения (потому что, конечно, все существующее уже было проверено, верно?). В этом случае все должно быть проверено. У вас должны быть заранее настроены тестовые наборы, которые должны пройти по крайней мере через большинство ваших уязвимых функций. Желательно, чтобы в этот момент у вас был кто-то другой, чтобы сделать аналогичную проверку. Этот код будет на месте, вероятно, довольно долго, и будет использоваться большим количеством людей. Вы хотите убедиться, что это работает и работает хорошо.
Одна из вещей, которая может действительно помочь с этим, состоит в том, чтобы генерировать набор, unit tests
который легко повторяется. Стив Джонс рекомендует использовать tSQLt для тестирования вашего кода TSQL (боюсь, только SQL Server). Но, выполнив это, вы можете быстро выполнить фиксированный набор тестов, и это действительно поможет в регрессионном тестировании (тестирование всего, скажем, перед обновлением).
Особенности / Конфигурации
Даже больше, чем изменения кода приложения, вы хотите тщательно протестировать новые функции и изменения конфигурации. Например, если вы решили начать работать с индексами columnstoreв первый раз вам нужно будет протестировать каждый фрагмент кода, который касается затронутых таблиц. Используйте созданные вами модульные тесты для тестирования вашего приложения. Эти функции, вероятно, являются новыми для вас (и, возможно, новыми в платформе) и, вероятно, будут иметь некоторые ошибки, которые вы не ожидали. Что касается изменений конфигурации, вы говорите о чем-то, что может повлиять на всю вашу систему, возможно, значительно. Основное правило - проверять и проверять внимательно. Существуют некоторые изменения, которые вы на самом деле не увидите, пока не войдете в активную систему (возможно, только в свою производственную систему), но это не повод, чтобы сначала не попробовать их в тестовой среде.
Специальные запросы, которые ссылаются / влияют на данные пользователя
Когда у вас есть код, который влияет на ваши пользовательские данные, вам, как правило, нужно его протестировать, даже, возможно, особенно, потому что это так Ad Hoc
. Теперь, если вам говорят, что вы выполняете один и тот же кусок кода снова и снова, только с разными параметрами, вам, вероятно, не нужно беспокоиться о тестировании каждый раз.
Например, вам нужно удалять одну или несколько объявлений из таблицы AdList каждый квартал.
DELETE FROM AdList WHERE AdName IN ('January 2015 Ads','February 2015 Ads','March 2015 Ads')
В этот момент вы уже протестировали код (вы просто меняете фиксированные строки) и, вероятно, достаточно безопасно просто выполняете код (при условии, что у вас есть хорошие резервные копии на всякий случай).
Один простой способ проверить DELETE
, UPDATE
или INSERT
, чтобы изменить их к SELECT , и запустить их, а затем подтвердить , что количество и тип строк вы ожидаете возвращаются.
Вы можете подумать, что вам не нужно проверять SELECT
s, потому что они на самом деле не изменяют никаких данных. Однако вы запускаете код по какой-то причине, верно? Допустим, вы проводите исследование для своего менеджера, который, в свою очередь, передаст эти данные своему менеджеру и так далее. Вы проверяете, чтобы убедиться, что вы не получаете неправильные данные (или блокируете других от сбора их данных).
Специальные запросы, которые ссылаются на системные данные
Возможно, это единственное исключение из правила «проверить все». Вы выполняете информационные запросы на системные данные. Здесь важно получить ожидаемые данные. Если запрос является чем-то простым (запрашивающим системное представление), то вы, вероятно, в порядке, если вы проверили, что на самом деле означает представление / столбцы. Если запрос сложный (скажем, просмотр 3 или 4 системных представлений с вычислениями по возвращаемым столбцам), вы можете запустить несколько тестов, чтобы убедиться, что вы вернете ожидаемые данные.
Резюме
Подводя итог, да, вы хотите проверить все. Если это достаточно важно для вас, чтобы написать и запустить его, тогда это достаточно важно для вас, чтобы протестировать. Это не означает, что вам придется тратить огромное количество времени на тестирование каждой ветви каждой строки кода. Но некоторый уровень тестирования должен быть сделан.
Автоматизированное модульное тестирование - ваш друг здесь. С появлением DevOps
и Continuous Integration
вы увидите все больше и больше приложений и методов быстрого и простого тестирования вашего кода. Конечно, для этого требуется хорошая тестовая среда и данные, но это совсем другое обсуждение.