В чем разница между тестированием белого, серого и черного ящика?

«В чем разница между тестированием белого, серого и черного ящика?» — вопрос из категории Основы тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Эти подходы различаются уровнем знания тестировщиком внутреннего устройства тестируемой системы (SUT).

Подход Знание внутренней структуры Уровень тестирования Примеры техник/видов тестирования
Белый ящик (White-box) Полное. Доступен исходный код, архитектура, базы данных. Низкий (модули, компоненты). Модульное тестирование, анализ покрытия кода (statement, branch), статический анализ. Тестировщик знает, как работает система.
Серый ящик (Gray-box) Частичное. Известны архитектура, схемы БД, логи, но нет прямого доступа к коду. Средний (интеграция, система). Интеграционное тестирование, тестирование API, тестирование на основе моделей. Тестировщик знает, что делает система и частично как.
Черный ящик (Black-box) Отсутствует. Система рассматривается как «черный ящик» с известными входами и ожидаемыми выходами. Высокий (система, приемка). Функциональное, нефункциональное (нагрузочное, UX), приемочное тестирование. Тестировщик знает только что должна делать система.

Практический пример для веб-приложения:

  • Белый ящик: Разработчик пишет юнит-тест для функции расчёта скидки, проверяя все ветви условия if-else.
  • Серый ящик: QA-инженер тестирует интеграцию сервиса оплаты с основным приложением через API, анализируя логи и ответы промежуточных сервисов.
  • Черный ящик: QA-инженер проверяет сценарий «Пользователь добавляет товар в корзину и оформляет заказ» через UI, не вникая в реализацию бизнес-логики.