Ответ
Различие основано на уровне знания внутреннего устройства тестируемой системы.
Тестирование "белого ящика" (White-box / Structural Testing)
Тестировщик имеет доступ к исходному коду и внутренней структуре. Тесты проектируются на основе анализа логики, путей выполнения и структуры кода.
- Цель: Проверить корректность внутренней логики, покрыть код (ветви, условия, пути).
- Кто выполняет: Разработчики, инженеры по автоматизации.
- Примеры: Модульное (unit), интеграционное тестирование, анализ покрытия кода.
Пример модульного теста (Python):
def calculate_discount(price, is_member):
if is_member and price > 100: # Ветвь 1
return price * 0.9
elif is_member: # Ветвь 2
return price * 0.95
else: # Ветвь 3
return price
# White-box тест, знающий о внутренних условиях
def test_calculate_discount():
# Проверяем все ветви логики
assert calculate_discount(150, True) == 135 # Ветвь 1
assert calculate_discount(50, True) == 47.5 # Ветвь 2
assert calculate_discount(100, False) == 100 # Ветвь 3
Тестирование "черного ящика" (Black-box / Functional Testing)
Тестировщик не знает внутреннего устройства. Система рассматривается как "черный ящик", тесты строятся на основе спецификаций, требований и интерфейсов.
- Цель: Проверить соответствие функциональным требованиям, корректность работы с точки зрения пользователя.
- Кто выполняет: Тестировщики, аналитики.
- Примеры: Функциональное, приемочное (UAT), системное тестирование.
Пример теста "черного ящика" для API:
# Тестировщик знает только спецификацию API:
# "POST /api/login должен вернуть токен при корректных учетных данных"
POST /api/login HTTP/1.1
Content-Type: application/json
{"username": "test", "password": "secret"}
# Ожидаемый ответ (проверяется только выход):
HTTP/1.1 200 OK
{"token": "some_jwt_token"}
# Внутренняя реализация аутентификации (база данных, хэши) не известна.
| Сводная таблица: | Критерий | Белый ящик | Черный ящик |
|---|---|---|---|
| Знание внутренностей | Да (код, архитектура) | Нет | |
| Уровень тестирования | Низкий (модули, интеграция) | Высокий (система, приемка) | |
| Критерии проектирования тестов | Покрытие кода, пути выполнения | Спецификации, требования, сценарии использования | |
| Основная сильная сторона | Нахождение логических ошибок, оптимизация кода | Проверка соответствия требованиям, пользовательского опыта |