Шаг 1: Модульное тестирование
Разделите ваше программное обеспечение на компоненты (которые могут быть чем угодно, от отдельных функций до целых программ) и тщательно протестируйте эти компоненты, особенно в том, что касается API и поведения, котороеОстальную часть приложения можно увидеть.(Не забывайте также проверять режимы сбоев, но остерегайтесь слишком осторожного связывания с точным характером сбоя; часто достаточно просто проверить наличие правильного класса исключения, а не его точного сообщения.) Создатьуверен, что эти тесты пройдены;вы оттачиваете их в спецификации того, что должен делать компонент .(Здесь помогает автоматизированный запуск теста, как и система CI.) Это важно из-за…
Шаг 2: Интеграционное тестирование
Проверка работоспособности композиций компонентов, составляющих приложение (это интеграция тестирование).В идеале вы будете находить ошибки только в спецификациях вещей на данный момент (ха!), И где бы вы ни указывали, что компонент неправильный, несмотря на прохождение его модульных тестов, это говорит вам о наличии ошибки.Всякий раз, когда вещи не работают вместе, несмотря на то, что вам об этом говорят, у вас, вероятно, есть ошибка в ваших спецификациях с предыдущего шага, поэтому вы обычно исправляете эти вещи, добавляя больше деталей в свои модульные тесты и исправляя компоненты, пока они не работают.1011 *
Обратите внимание, что для хорошей интеграции вы хотите сохранить этот этап так, чтобы сама интеграция была достаточно простой, чтобы она находилась в классе программ «Очевидно, что нет ошибок» вместо более крупного класса «Нет очевидных ошибок».Инфраструктура интеграции, такая как Spring или язык сценариев, может очень помочь здесь (хотя с последним вы должны остерегаться создания компонентов потихоньку; если вы создаете компонент, то признавайте его и убедитесь, что у него есть надлежащий контракт на использование и модульные тестычтобы убедиться, что он соответствует своему контракту).
Где вы можете, вы можете создавать компоненты, составляя другие вместе;эти компоненты более высокого уровня должны быть проверены модулем, как описано в шаге 1 выше.Это может звучать как дополнительная работа - возможно, так и есть - но у нее есть преимущество в том, что вы можете использовать автоматические тесты для больших частей программы.(Увы, все интеграционные тесты труднее выполнить с помощью автоматизированного инструмента тестирования; такие вещи, как правило, работают лучше при выполнении юнит-тестов, где вы можете макетировать все несущественные части.) Но это не спасает вас от…
Шаг 3: Приемочное тестирование
Именно здесь тестируется приложение в целом, чтобы увидеть, действительно ли оно выполняет то, что ему нужно.Это может быть автоматизировано, но обычно это не так.Это уровень, на котором вы привлекаете пользователей, чтобы они могли видеть, соответствуют ли они ожиданиям, хотя сначала вам может понадобиться использовать внутренние тестеры.Насколько просто все это, зависит от характера приложения.
Обратите также внимание, что пользовательские интерфейсы тратят больше времени на этом шаге, чем другие, именно потому, что то, что делает для хорошего пользовательского интерфейса, трудно или невозможно закрепитьв алгоритмах (в конце концов, это гораздо больше относится к человеческой психологии).
Последнее замечание: То, что я здесь написал, звучит так, будто тестирование подразумевает трудоемкий процесс, который занимает много временив конце проекта. Это не так! Часто вы можете выполнить части приложения раньше других, выполнить интеграцию этих частей (с имитациями для других битов) и протестировать, насколько приемлемо это субприложение на самом деле.является.Конечно, при этом старайтесь не дать пользователям поверить, что все сделано;Одним из способов является появление всплывающих диалоговых окон, в которых говорится что-то вроде «волшебства здесь происходит»Глупо, но эффективно.: -)