В чем разница между Smoke, Sanity, Regression?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между 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 Testing | Sanity Testing | Regression Testing |
|---|---|---|---|
| Основная цель | Проверить стабильность сборки | Проверить корректность конкретного фикса | Проверить отсутствие побочных эффектов |
| Глубина | Поверхностное | Узкое и глубокое (в рамках изменения) | Глубокое и широкое |
| Объем | Широкое (ключевые функции) | Очень узкое (область изменений) | Широкое (критичные и затронутые пути) |
| Когда выполняется | Первым для каждой сборки | После smoke, для проверки фиксов | Перед релизом, после значимых изменений |
| Автоматизация | Часто автоматизировано | Редко автоматизируется | В идеале — максимально автоматизировано |
| Статус | Формальное, часть критерия входа | Часто неформальное, исследовательское | Формальное, часть релизного цикла |
Итог: Smoke — это "включится ли машина?", Sanity — "работает ли починенная фара, и не отвалился ли бампер?", а Regression — "а после ремонта фары вся машина едет так же хорошо, как и раньше?". Эти виды тестирования выстраиваются в цепочку и являются не взаимоисключающими, а взаимодополняющими этапами обеспечения качества продукта.