Открыть сервисСервис

Вайт-бокс — метод тестирования программного обеспечения

Вайт-бокс (white box testing, «белый ящик») — метод тестирования программного обеспечения, при котором тестировщик располагает полной информацией об архитектуре, исходном коде, внутренней структуре и логике тестируемой системы. В отличие от чёрного ящика, где проверяется только соответствие выходных данных входным, вайт-бокс предполагает проверку корректности внутренних алгоритмов, ветвлений, циклов и обработки исключений. Метод применяется преимущественно на уровне модульного и интеграционного тестирования.

Принцип работы

При выполнении вайт-бокс-тестирования тестировщик (или инструмент) анализирует исходный код и строит тестовые наборы, обеспечивающие определённую степень покрытия кода. Типичные цели:

  • проверка всех исполняемых ветвей условий (if, switch);
  • проверка корректности работы циклов при граничных значениях;
  • проверка обработки исключений и ошибок;
  • верификация внутренних структур данных.

Для оценки качества тестирования используют метрики покрытия кода: покрытие инструкций, ветвлений, условий, путей, функций. Инструменты покрытия (JaCoCo, Istanbul, Coverage.py, gcov) фиксируют, какие участки кода были выполнены в ходе прогона тестов.

Техники тест-дизайна

Основные техники, применяемые в вайт-бокс-тестировании:

ТехникаОписание
Тестирование на основе потоков управленияПостроение графа потока управления (CFG) и выбор тестов, покрывающих все переходы
Тестирование на основе данныхОтслеживание потоков данных от входных параметров до выходных результатов
Покрытие базисных путейВыбор минимального набора линейно независимых путей через CFG
Тестирование границ условийПроверка истинности и ложности каждого условия с последующей комбинацией
Мутационное тестированиеВнесение синтаксических изменений в код (мутантов) и проверка, обнаружат ли тесты каждое изменение

Уровни тестирования

Вайт-бокс применяется на нескольких уровнях тестовой пирамиды:

  1. Модульное (юнит) тестирование — проверка отдельных функций, классов и модулей. Наиболее естественная область применения метода: разработчик, написавший код, тестирует его с известной внутренней структурой. Используются фреймворки JUnit, pytest, Google Test, xUnit.
  2. Интеграционное тестирование — проверка взаимодействия модулей между собой, корректности вызовов API, обмена данными.
  3. Системное тестирование — применяется реже, поскольку на этом уровне доступ к внутренней структуре часто затруднён.

Преимущества и ограничения

Достоинства:

  • высокая степень обнаружения дефектов логики;
  • возможность оптимизации тестового набора на основе метрик покрытия;
  • раннее выявление ошибок на этапе юнит-тестирования, когда стоимость исправления минимальна;
  • объективная количественная оценка полноты тестирования.

Ограничения:

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

Отношение к другим методам

Вайт-бокс дополняет, а не замещает чёрный и серый ящики. Чёрный ящик проверяет соответствие требованиям без знания реализации, серый ящик сочетает доступ к коду с тестированием по внешнему поведению. Практически все зрелые процессы разработки сочетают все три подхода: юнит-тесты пишутся по белому ящику, интеграционные и системные — преимущественно по чёрному.

Автоматизация

Метод активно автоматизирован. CI-системы запускают тесты покрытия на каждом коммите, а отчётность по покрытию интегрируется в платформы код-ревью (SonarQube, Codecov). Пороговые значения покрытия (часто 70–80 %) нередко закрепляются как критерий приёмки изменений.

История

Идея тестирования по внутренней структуре восходит к работам 1960-х годов по верификации программ. Термин «белый ящик» закрепился в 1970-е годы в контексте структурного тестирования (structural testing). В 1979 году Гленфорд Майерс в книге «The Art of Software Testing» систематизировал подходы структурного тестирования, противопоставив их тестированию по функциональным требованиям.

Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru