Уровни: модульное, интеграционное, системное, приёмочное

От одной функции до всей системы глазами заказчика — четыре уровня проверки.

Уровни тестирования — это масштаб проверяемого: от отдельного модуля (unit) через связки (integration) и всю систему (system) до приёмки заказчиком (acceptance).

Четыре уровня по нарастанию масштаба

УровеньОбъект проверкиВопрос
Модульное (unit)Одна функция или класс в изоляцииПравильно ли работает кирпичик?
Интеграционное (integration)Взаимодействие нескольких модулейПравильно ли они стыкуются?
Системное (system)Готовая система целикомСоответствует ли система требованиям?
Приёмочное (acceptance)Система глазами заказчика/пользователяПринимает ли заказчик результат?

Модульное

Проверяет наименьшую единицу — функцию, метод — отдельно от остального. Зависимости заменяют заглушками. Быстрое и точное.

Интеграционное

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

# Два модуля: расчёт цены и расчёт бонусов
def price_with_tax(price):
    return round(price * 1.2, 2)          # модуль 1: +20% налог

def bonus(price_paid):
    return int(price_paid // 100)         # модуль 2: 1 бонус за каждые 100

# Интеграционная проверка: связка двух модулей вместе
def checkout(price):
    paid = price_with_tax(price)
    return paid, bonus(paid)

paid, pts = checkout(1000)
assert paid == 1200.0          # цена с налогом
assert pts == 12               # бонусы с уже оплаченной суммы
print(f"Интеграция ок: оплачено {paid}, начислено {pts} бонусов")

Вывод:

Интеграция ок: оплачено 1200.0, начислено 12 бонусов

Системное и приёмочное

Системное проверяет всё приложение целиком против требований — функциональность, производительность, поведение в реальных сценариях. Приёмочное (acceptance) отвечает на вопрос «готов ли продукт к сдаче»: его часто проводит заказчик или формулирует в виде пользовательских сценариев (UAT). Приёмочное — это уже валидация: то ли мы построили.

Итог

  • Unit — отдельный кирпичик; integration — стыки модулей.
  • System — вся система против требований; acceptance — приёмка заказчиком.
  • Много багов прячется на границах между модулями — отсюда важность интеграционного уровня.
Проверьте себя
1. Что проверяет модульное (unit) тестирование?
AВсю систему целиком
BОтдельную функцию или класс в изоляции
CРеакцию заказчика
DСкорость сети
2. На что нацелено интеграционное тестирование?
AНа отдельную функцию
BНа правильность стыковки нескольких модулей между собой
CНа красоту интерфейса
DНа орфографию в коде
3. Приёмочное тестирование (acceptance) отвечает на вопрос:
AБыстро ли работает функция?
BПринимает ли заказчик результат и решает ли продукт его задачу?
CСколько строк в модуле?
DКакой язык использован?
Поддержать проект