В чем разница между Re-test и Regression Testing?

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

Ответ

Re-test (повторное тестирование) — проверка исправленного дефекта для подтверждения его устранения. Regression Testing (регрессионное тестирование) — проверка того, что изменения не нарушили существующий функционал.

Сравнение:

Критерий Re-test Regression Testing
Цель Подтвердить фикс конкретного бага Обнаружить новые баги в старом функционале
Объем Узкий (только исправленный кейс) Широкий (затронутые и смежные области)
Тест-кейсы Те же, что выявили баг Набор существующих тестов (регрессионная пачка)
Автоматизация Часто ручное Высокий приоритет автоматизации
Когда выполнять Сразу после фикса бага После любых изменений (фиксы, новая функциональность)

Пример на Python с pytest:

# Исходная функция с багом
def calculate_discount(price, discount_percent):
    # БАГ: не проверяет отрицательную скидку
    return price * (1 - discount_percent / 100)

# Re-test после фикса
def test_fixed_discount_calculation():
    """Re-test: проверяем исправленный баг с отрицательной скидкой"""
    # Фикс: добавили валидацию
    def fixed_calculate_discount(price, discount_percent):
        if discount_percent < 0:
            raise ValueError("Discount cannot be negative")
        return price * (1 - discount_percent / 100)

    with pytest.raises(ValueError):
        fixed_calculate_discount(100, -10)  # Теперь должно вызывать ошибку

# Regression test suite
def test_regression_after_discount_fix():
    """Regression: проверяем, не сломал ли фикс другой функционал"""
    # 1. Проверяем корректные скидки
    assert fixed_calculate_discount(100, 20) == 80.0
    # 2. Проверяем связанный функционал — итоговая цена в корзине
    cart_total = fixed_calculate_discount(200, 15) + 50  # + доставка
    assert cart_total == 220.0
    # 3. Проверяем edge cases
    assert fixed_calculate_discount(100, 0) == 100.0
    assert fixed_calculate_discount(100, 100) == 0.0

Практика: Re-test обычно выполняет разработчик или тестировщик, обнаруживший баг. Regression testing часто автоматизирован и запускается в CI/CD.