Ответ
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 после каждого коммита, иначе потом охуеешь искать, кто и когда всё развалил. Пиздец, короче.