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

Ответ

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.

Ответ 18+ 🔞

А, ну вот, опять про эти ваши тесты, блядь. Сидишь такой, думаешь: ну вот починили баг, и слава богу. Ан нет, сука, надо ещё проверить, что починили-то правильно, и заодно не разнесли половину проекта к ебеням. Это ж как с ремонтом в квартире: вроде кран починил, а соседи снизу уже в тазиках плавают, потому что ты им потолок пробил, мудя.

Так вот, есть две штуки, которые постоянно путают, а они, блядь, как небо и земля.

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)

    # Вот это и есть re-test: проверяем, что теперь на минусе — ошибка
    with pytest.raises(ValueError):
        fixed_calculate_discount(100, -10)  # Раньше выдавало 110, а теперь — в рот тебе чих-пых!

# 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. Проверяем крайние случаи, вдруг и их зацепили
    assert fixed_calculate_discount(100, 0) == 100.0
    assert fixed_calculate_discount(100, 100) == 0.0

На практике: Re-test обычно делает тот, кто баг нашёл — быстро ткнул и убедился. А регресс — это уже адская машина, которая должна крутиться в CI/CD после каждого коммита, иначе потом охуеешь искать, кто и когда всё развалил. Пиздец, короче.