Ответ
White Box (или структурное) тестирование применяется в первую очередь на низких (low-level) уровнях, где необходим доступ к исходному коду и внутренней структуре приложения.
Основные уровни:
-
Модульное тестирование (Unit Testing): Проверка отдельных функций, методов или классов. Тестировщик или разработчик пишет тесты, зная реализацию.
# Пример unit-теста для функции сложения def add(a: int, b: int) -> int: return a + b def test_add(): # White-box: мы знаем, что функция просто складывает два числа assert add(2, 3) == 5 assert add(-1, 1) == 0 # Проверка граничного случая assert add(0, 0) == 0 -
Интеграционное тестирование (Integration Testing): Проверка взаимодействия между модулями, классами или системами (например, сервис ↔ база данных, микросервис A ↔ микросервис B). Требует знания интерфейсов и протоколов взаимодействия.
# Пример интеграционного теста (подключение к БД) def test_db_integration(): connection = connect_to_database(config) cursor = connection.cursor() cursor.execute("SELECT 1") result = cursor.fetchone() # White-box: мы знаем, какой запрос отправляем и что ожидаем получить assert result[0] == 1 connection.close() -
Статический анализ кода (Static Code Analysis): Не является уровнем тестирования в прямом смысле, но это ключевая white-box техника. Включает ревью кода, использование линтеров (pylint, ESLint), анализ метрик покрытия (coverage.py, JaCoCo) и поиск уязвимостей (SonarQube).
Важно: На более высоких уровнях (системное, приемочное) преобладает Black Box подход, но элементы White Box (например, анализ логов или глубокое понимание архитектуры) могут использоваться для углубленного исследования дефектов.