Тестирование в жизненном цикле и Agile

Тестирование — не финальная стадия, а нить, проходящая через весь процесс разработки.

В современной разработке тестирование сопровождает весь жизненный цикл: от обсуждения требований до эксплуатации, а не появляется отдельной фазой в самом конце.

Старая модель и её проблема

В классической «водопадной» схеме тестирование шло отдельной поздней фазой: сначала всё спроектировали, написали, и лишь потом тестировали. Проблема — дефекты находились в самом конце, когда (вспомним урок о стоимости ошибки) исправлять их дороже всего. Если требование было ошибочным, это вскрывалось спустя месяцы.

QA в Agile: с самого начала

В Agile работа идёт короткими итерациями (спринтами), и тестирование встроено в каждую. QA-инженер участвует уже на этапе обсуждения задачи:

  • Уточняет требования. Задаёт «а что если ввести пусто? а отрицательное?» — ловит дыры в постановке до написания кода.
  • Формулирует критерии приёмки. Заранее ясно, что значит «готово».
  • Тестирует внутри спринта. Фичу проверяют сразу, а не копят к релизу.

Часто критерии приёмки записывают в формате примеров поведения — это сближает требование и тест. Идея: «спецификация на примерах» одновременно служит и описанием, и проверкой.

# Критерий приёмки как исполняемая проверка поведения
def can_checkout(cart_total, min_order):
    """Оформление доступно, если сумма не ниже минимальной."""
    return cart_total >= min_order


# Критерии приёмки из обсуждения задачи, сразу как тесты:
assert can_checkout(1000, 500) is True    # выше минимума — можно
assert can_checkout(500, 500) is True     # ровно минимум — можно
assert can_checkout(300, 500) is False    # ниже минимума — нельзя
print("Критерии приёмки выполнены — фича соответствует договорённости")

Вывод:

Критерии приёмки выполнены — фича соответствует договорённости

«Definition of Done» включает тесты

В зрелых командах задача не считается выполненной, пока не покрыта тестами и не прошла проверку. Качество — не отдельный этап, а часть определения «готово». Это и есть встраивание тестирования в процесс.

Итог

  • Тестирование сопровождает весь жизненный цикл, а не финальную фазу.
  • В Agile QA подключается с обсуждения требований и тестирует внутри спринта.
  • Критерии приёмки = договорённость о поведении, выраженная как проверки.
Проверьте себя
1. В чём проблема тестирования отдельной поздней фазой (как в водопаде)?
AТесты получаются слишком быстрыми
BДефекты находятся в самом конце, когда исправлять их дороже всего
CQA становится не нужен
DКод становится короче
2. Чем занимается QA в Agile на этапе обсуждения задачи?
AТолько пишет отчёты после релиза
BУточняет требования, ищет дыры в постановке и формулирует критерии приёмки
CНичего, ждёт готовый код
DПишет документацию пользователю
3. Что означает включение тестов в «Definition of Done»?
AТесты можно не писать
BЗадача не считается готовой, пока не покрыта тестами и не проверена
CТесты пишут после релиза
DГотовность определяет только разработчик
Поддержать проект