← Назад к вопросам

В чем разница между Smoke, Sanity, Regression?

1.6 Junior🔥 301 комментариев
#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между Smoke, Sanity и Regression тестированием

В контексте контроля качества программного обеспечения (QA) Smoke, Sanity и Regression — это три фундаментальных типа тестирования, которые различаются по своей цели, глубине, объему и моменту выполнения в жизненном цикле разработки. Их часто путают, но понимание различий критически важно для эффективного построения процесса тестирования.

1. Smoke Testing (Дымовое тестирование)

Цель: Проверить, достаточно ли стабильна новая сборка (build) для начала более глубокого тестирования. Основная задача — подтвердить, что "пожара" (критических дефектов, блокирующих дальнейшую работу) нет.

  • Когда выполняется: Сразу после получения новой сборки от разработчиков (например, ежедневной или после интеграции крупного функционала).
  • Глубина и объем: Очень поверхностное и широкое тестирование. Проверяется минимальный набор ключевых функций, обеспечивающих работоспособность системы в целом (например: "Приложение запускается?", "Пользователь может войти в систему?", "Открывается главная страница?").
  • Частота: Выполняется для каждой новой сборки.
  • Альтернативное название: Build Verification Testing (BVT) — тестирование проверки сборки.
# Пример сценария Smoke-теста для веб-приложения:
Feature: Smoke Test для главной функциональности приложения

  Scenario: Базовая проверка доступности и авторизации
    Given Пользователь открыл главную страницу приложения
    Then Страница загрузилась без ошибок
    And Кнопка "Войти" отображается и кликабельна

    When Пользователь вводит валидные учетные данные и нажимает "Войти"
    Then Происходит успешный переход в личный кабинет
    And Имя пользователя отображается в правом верхнем углу

2. Sanity Testing (Санитарное/здравомысленное тестирование)

Цель: Проверить, что конкретные изменения (баг-фиксы, новый небольшой функционал) работают как ожидалось, не сломав при этом смежную логику. Это "проверка здравомыслия" конкретного участка кода.

  • Когда выполняется: После получения сборки, в которой были исправлены конкретные дефекты или добавлен узкий функционал. Часто выполняется после smoke-тестов и перед глубоким регрессом.
  • Глубина и объем: Узкое и глубокое тестирование. Фокус — на конкретном изменении и непосредственно связанных с ним модулях. Не покрывает весь продукт.
  • Ключевой нюанс: Sanity-тестирование часто является неформальным, недокументированным и выполняется тестировщиком на основе своего понимания изменений. Оно проверяет "логичность" работы исправления.
// Пример логики Sanity-теста после фикса бага с кнопкой "Добавить в корзину":
// Было: Кнопка неактивна для товара, которого нет на складе.
// Фикс: Реализовано корректное отображение статуса.
// Sanity-проверка:
test('Проверка отображения кнопки "Добавить в корзину" для товара со статусом "Нет в наличии"', () => {
  const productPage = openProductPage('product-with-zero-stock');
  const addToCartButton = productPage.getAddToCartButton();

  // Глубокая проверка именно фикса:
  expect(addToCartButton.isDisabled()).toBe(true);
  expect(addToCartButton.getText()).toContain('Нет в наличии');
  expect(productPage).toShowMessage('Товар ожидается');
});

3. Regression Testing (Регрессионное тестирование)

Цель: Убедиться, что последние изменения в коде (новый функционал, исправления багов) не оказали негативного влияния на уже существующую, ранее рабочую функциональность. Это проверка на отсутствие регрессий (откатов).

  • Когда выполняется: После внесения значительных изменений в код (релиз новой версии, интеграция большого модуля), а также перед выпуском продукта в прод (релиз-кандидатом). Выполняется после успешных smoke- и sanity-проверок.
  • Глубина и объем: Широкое и глубокое тестирование. Покрывает значительную часть критически важной функциональности продукта, а также области, наиболее подверженные влиянию изменений (зоны риска).
  • Особенность: Часто автоматизируется, так как требует регулярного повторного выполнения одних и тех же проверок. Набор регрессионных тестов (регрессионная тест-сьюта) постепенно растет вместе с продуктом.
# Пример фрагмента автоматизированного регрессионного тест-сьюта (Pytest):
class TestRegressionCheckoutFlow:
    """Регрессионные проверки критичного пути оформления заказа."""

    @pytest.mark.regression
    @pytest.mark.critical
    def test_guest_checkout_with_new_card(self, setup_browser):
        # Проверяем, что новая функциональность оплаты не сломала старый флоу
        browser.open_cart()
        browser.select_guest_checkout()
        browser.fill_shipping_address()  # Старая, стабильная функция
        browser.select_payment_method("NEW_CREDIT_CARD")  # Новый метод оплаты
        browser.fill_card_details()       # Новый функционал
        browser.place_order()
        assert browser.is_order_confirmation_displayed()  # Ожидаемый результат

    @pytest.mark.regression
    def test_existing_user_full_flow(self, auth_user):
        # Проверяем полный флоу для существующего пользователя
        # Этот тест выполняется при каждом регрессионном прогоне
        # ...

Сравнение в таблице

КритерийSmoke TestingSanity TestingRegression Testing
Основная цельПроверить стабильность сборкиПроверить корректность конкретного фиксаПроверить отсутствие побочных эффектов
ГлубинаПоверхностноеУзкое и глубокое (в рамках изменения)Глубокое и широкое
ОбъемШирокое (ключевые функции)Очень узкое (область изменений)Широкое (критичные и затронутые пути)
Когда выполняетсяПервым для каждой сборкиПосле smoke, для проверки фиксовПеред релизом, после значимых изменений
АвтоматизацияЧасто автоматизированоРедко автоматизируетсяВ идеале — максимально автоматизировано
СтатусФормальное, часть критерия входаЧасто неформальное, исследовательскоеФормальное, часть релизного цикла

Итог: Smoke — это "включится ли машина?", Sanity — "работает ли починенная фара, и не отвалился ли бампер?", а Regression — "а после ремонта фары вся машина едет так же хорошо, как и раньше?". Эти виды тестирования выстраиваются в цепочку и являются не взаимоисключающими, а взаимодополняющими этапами обеспечения качества продукта.