Почему нельзя пропускать уровни тестирования (unit, integration, system, acceptance)?

«Почему нельзя пропускать уровни тестирования (unit, integration, system, acceptance)?» — вопрос из категории Основы тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Пропуск уровней тестирования нарушает принцип раннего обнаружения дефектов и значительно увеличивает стоимость их исправления. Каждый уровень решает свою задачу:

  • Unit (Модульное): Проверяет корректность работы отдельных функций, методов или классов.
  • Integration (Интеграционное): Проверяет взаимодействие между модулями, компонентами или системами.
  • System (Системное): Проверяет работу системы как единого целого в среде, близкой к production.
  • Acceptance (Приёмочное): Проверяет соответствие системы бизнес-требованиям и ожиданиям пользователя.

Пример риска: Пропуск unit-тестов может привести к тому, что ошибка в базовом методе будет обнаружена только на системном уровне.

def calculate_discount(price, discount):
    # Ошибка: discount ожидается как десятичная дробь (0.1 для 10%), а не процент.
    return price - (price * discount)  # При discount=10 вернёт price - (price * 10) = отрицательное значение

Пропуск уровней ведёт к накоплению дефектов, увеличению рисков и потенциальным критическим сбоям в production.