Чем отличаются смоук, санити и регрессионное тестирование? Когда какое проводится?
Короткий ответ
- Смоук — быстрая проверка, что сборка вообще живая
- Смоук гоняется на каждую сборку, часто автоматизирован
- Санити — узкая проверка конкретного изменения или фикса
- Регресс — проверка, что старое не сломалось от нового
- Регресс широкий и длинный, основной кандидат на автоматизацию
- Порядок: смоук, потом новая функциональность, потом регресс
Смоук отвечает «можно ли тестировать сборку», санити — «работает ли конкретное изменение», регресс — «не сломалось ли всё остальное».
Как сказать вслух
пример ответаСмоук — это короткий набор проверок критичных функций: приложение открывается, логин работает, главный сценарий проходит. Если смоук падает, сборку возвращают без дальнейшего тестирования. Санити — точечная проверка конкретного изменения или фикса, без охвата всей системы. А регресс — это широкая проверка, что новые изменения не сломали существующую функциональность. Регресс самый объёмный, поэтому его в первую очередь автоматизируют.
Подробный ответ
Основной ответ
Эти три вида отличаются целью и глубиной. Смоук-тестирование (smoke) — поверхностная проверка самых критичных функций сборки: ставится ли она, открывается ли, работают ли ключевые сценарии. Выполняется на каждую сборку, часто автоматизировано и встроено в CI как гейт: красный смоук означает, что тестировать дальше бессмысленно. Санити (sanity) — узконаправленная проверка разумности конкретного изменения: после фикса или небольшой доработки проверяется затронутая область, без полного прохода. Регрессионное тестирование — проверка того, что изменения не сломали ранее работавшую функциональность; выполняется перед релизом или регулярно, охватывает широкий набор сценариев и является главным кандидатом на автоматизацию, потому что повторяется из релиза в релиз. Терминологию команды трактуют по-разному, поэтому на проекте важнее договориться о составе наборов, чем спорить об определениях.
Ключевые моменты
- Смоук как гейт CI. Автоматический смоук после каждого деплоя на стенд быстро отсекает сломанные сборки.
- Санити — про глубину, не ширину. Проверяется одна область, но внимательно; обычно вручную после точечного изменения.
- Регресс и анализ влияния. Полный регресс дорог, поэтому состав выбирают по анализу затронутых областей и рискам.
- Подтверждающее тестирование отдельно. Re-testing — проверка самого фикса; регресс — проверка окружающей функциональности.
Практический контекст
Один из самых частых вопросов на интервью любого уровня, потому что термины путают. Интервьюер может дать ситуацию: «пришла сборка с одним фиксом за день до релиза — что будете гонять?» Ожидаемый ответ: смоук, подтверждение фикса, санити вокруг изменения и регресс по затронутой области, с объяснением почему не полный регресс.
Частые ошибки
- Считают смоук и санити синонимами и не могут развести их по цели
- Говорят «прогоню полный регресс» на любое изменение, не упоминая анализ влияния
- Путают регресс с повторной проверкой самого фикса (re-testing)