Встречается на 50% собеседований по QA

Что такое регрессивное тестирование

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

Как это работает

Программный продукт — это сложная система, где модули и компоненты связаны между собой. Одно исправление может затронуть участок кода, который используется другими функциями. Например, если в интернет-магазине исправить баг с изменением количества товара в корзине, это может сломать изменение цвета товара, если оба действия обращаются к одному и тому же методу или переменной. Такие непреднамеренные побочные эффекты называются регрессиями.

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

Пример

Рассмотрим простой пример на Python. Допустим, есть функция, которая рассчитывает стоимость заказа с учётом скидки:

python
def calculate_total(price, quantity, discount=0):
    subtotal = price * quantity
    return subtotal - (subtotal * discount / 100)

После исправления бага, связанного с округлением, код меняется:

python
def calculate_total(price, quantity, discount=0):
    subtotal = price * quantity
    return round(subtotal - (subtotal * discount / 100), 2)

Регрессионное тестирование проверит, что функция по-прежнему корректно считает стоимость для разных комбинаций цены, количества и скидки, а также что другие функции, использующие calculate_total (например, расчёт налогов или доставки), не сломались.

Отличие от подтверждающего тестирования

Подтверждающее тестирование (или повторное тестирование) проверяет, что конкретный баг действительно исправлен. Регрессионное тестирование идёт дальше: оно проверяет, что исправление не нарушило работу других частей продукта. Например, если баг был в форме регистрации, подтверждающее тестирование проверит, что форма теперь отправляет данные, а регрессионное — что после исправления не сломалась, скажем, валидация пароля или восстановление пароля.

Подводные камни

  • Регрессионное тестирование может быть трудоёмким, особенно если выполняется вручную. Автоматизация помогает сократить время, но требует первоначальных затрат на написание и поддержку тестов.
  • Необходимо тщательно выбирать набор регрессионных тестов: он должен покрывать критический функционал, но не быть избыточным, иначе время прогона растёт.
  • Регрессии могут возникать не только после исправлений, но и после изменения конфигурации, обновления библиотек или операционной системы.

Когда использовать

Регрессионное тестирование обязательно проводится:

  • после каждого исправления дефекта;
  • при добавлении нового функционала;
  • перед релизом продукта;
  • при интеграции с новыми версиями сторонних сервисов.

Коротко

  • Регрессионное тестирование проверяет, что изменения в коде не сломали существующий функционал.
  • Оно отличается от подтверждающего тестирования: последнее проверяет сам баг, а регрессионное — его побочные эффекты.
  • Регрессии возникают из-за связанности кода: одно изменение может повлиять на другие части системы.
  • Для эффективности регрессионное тестирование часто автоматизируют, но критично правильно выбрать набор тестов.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы