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

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

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

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

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

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

Разница между Smoke, Regression и Sanity Testing

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

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

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

  • Цель: Быстро определить, есть ли в новой версии приложения катастрофические дефекты, которые делают его непригодным для дальнейшего тестирования (например, приложение не запускается, критическая функция не работает).
  • Объем: Очень узкий. Обычно покрывает около 10-20% основных сценариев ("happy paths") для центральных модулей системы.
  • Когда выполняется: После каждой новой сборки, перед началом любых других типов тестирования (регрессионного, функционального).
  • Пример сценария для веб-приложения:
    // Пример логики для Smoke Test: проверка базовой функциональности
    describe('Smoke Tests для главной страницы', () => {
        it('Приложение должно успешно загружаться', () => {
            cy.visit('/');
            cy.get('.app-container').should('be.visible');
        });
    
        it('Пользователь может выполнить базовый вход в систему', () => {
            cy.login('test-user', 'valid-password');
            cy.url().should('include', '/dashboard');
        });
    });
    
  • Аналогия: Проверка, что автомобиль заводится, фары включаются и колеса есть, перед его глубокой диагностикой.

Sanity Testing (Санитарное тестирование, "здравомыслие")

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

  • Цель: Проверить рациональность и корректность конкретного изменения, а не общую стабильность сборки.
  • Объем: Очень узкий и фокусированный. Охватывает только область, непосредственно связанную с изменением.
  • Когда выполняется: После получения сборки, где были внесены целевые изменения, часто после Smoke тестирования и перед полным Regression.
  • Пример сценария:
    # Пример Sanity Test для исправленного функционала калькуляции скидки
    def test_sanity_fixed_discount_calculation():
        # Известно, что было исправлено вычисление скидки для суммы > 1000
        result = calculate_discount(1500)
        # Sanity проверяет только этот конкретный исправленный сценарий
        assert result == 300  # Ожидаемая скидка 20% от 1500
    
  • Ключевое отличие от Smoke: Smoke проверяет "жив ли" основной продукт, Sanity проверяет "работает ли конкретное исправление или нововведение правильно".

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

Regression Testing — это широкое и глубокое тестирование, целью которого является проверка того, что новые изменения (код, фиксы, функциональность) не повредили или не "регрессировали" существующие, уже работающие функции системы. Это гарантия того, что старое продолжает работать вместе с новым.

  • Цель: Обнаружить непреднамеренные дефекты в ранее стабильных областях системы, вызванные последними изменениями.
  • Объем: Очень широкий. Может охватывать все приложение или его значительную часть. Часто выполняется с использованием подготовленного набора регрессионных тестов (Regression Test Suite).
  • Когда выполняется: После Smoke и Sanity тестирования, обычно перед выпуском версии в production. Также может выполняться циклически (например, ежедневно или еженедельно).
  • Пример: Полный запуск автоматизированного тестового набора для модуля "Пользовательский профиль", включающего тесты на создание, редактирование, удаление, изменение пароля, а также интеграцию с другими модулями, после того как в этом модуле была добавлена новая функция "двухфакторная аутентификация".
  • Аналогия: После замены двигателя в автомобиле вы проверяете не только новый двигатель, но и то, что все остальные системы (электрика, тормоза, климат-контроль) продолжают работать как прежде.

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

КритерийSmoke TestingSanity TestingRegression Testing
Основная цельПроверить стабильность сборкиПроверить корректность конкретного измененияПроверить отсутствие регресса в существующих функциях
ОбъемМинимальный, поверхностныйУзкий и глубокий на одной областиМаксимальный, глубокий на многих областях
Когда выполняетсяПервым, после каждой сборкиПосле изменений в конкретной функциональностиПосле значительных изменений, перед релизом
АвтоматизацияЧасто автоматизируетсяЧасто выполняется ручными тестамиИдеальный кандидат для полной автоматизации (регрессионный набор)

Вывод

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