В чем разница между регрессионным и smoke-тестированием?

«В чем разница между регрессионным и smoke-тестированием?» — вопрос из категории Основы тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Smoke-тестирование (Дымовое тестирование) — это поверхностная проверка основных, критически важных функций приложения после каждой новой сборки. Его цель — быстро определить, "пригодна ли сборка для дальнейшего, более глубокого тестирования".

Регрессионное тестирование — это глубокое и детальное тестирование, направленное на проверку того, что последние изменения не нарушили существующую функциональность.

Ключевые отличия:

Аспект Smoke-тестирование Регрессионное тестирование
Глубина Поверхностное, проверяет "идёт ли дым" (работает ли вообще) Глубокое, проверяет корректность работы
Цель Валидация стабильности сборки для начала тестирования Валидация отсутствия регрессий после изменений
Объем Минимальный набор ключевых сценариев (5-10% от полного набора) Обширный набор тестов, покрывающий затронутые области или всю систему
Время выполнения Минуты или десятки минут Часы или дни
Когда выполняется Сразу после каждой сборки После smoke-тестов, перед релизом, после значительных изменений

Пример на псевдокоде:

# Smoke-тест: Быстрая проверка, что система "жива" и базовые функции доступны.
def smoke_test():
    assert app.start() == True           # Приложение запускается
    assert user_can_login() == True      # Критичный путь: вход
    assert main_page_loads() == True     # Главная страница открывается

# Регрессионный тест: Детальная проверка функциональности после фикса бага в корзине.
def regression_test_after_cart_fix():
    smoke_test()  # Сначала убедимся, что система стабильна
    # Затем глубокая проверка затронутого функционала:
    assert add_item_to_cart() == True
    assert update_item_quantity() == True
    assert apply_promo_code() == True
    assert checkout_flow() == True
    # И проверка смежных областей:
    assert search_functionality() == True  # Не сломалась ли поисковая выдача?

Smoke-тест — это чек-лист для сборки, регрессионный тест — полная диагностика системы.