Стратегия «белого ящика», или стратегия тестирования, управляемого логикой программы, позволяет исследовать внутреннюю структуру программы. При данном тестировании программа рассматривается как объект с известной внутренней структурой. Поэтому такой принцип тестирования называется структурным, или «стеклянным ящиком», или «белым ящиком». Тестировщик (как правило, программист) разрабатывает тесты, основываясь на знании исходного кода, к которому он имеет полный доступ. Главной его идей является правильный выбор тестируемого программного пути. Таким образом, тестирование методом «белого ящика» обладает следующими преимуществами:
a) Направленность тестирования. Программист может тестировать программу по частям, разрабатывать специальные тестовые подпрограммы, вызывающие тестируемый модуль и передают ему интересующие данные. Отдельный модуль гораздо легче протестировать именно когда он является открытым.
b) Полный охват кода. Тестировщик всегда может определить, какие именно фрагменты кода работают в каждом тесте. Он может увидеть какие ветви кода остались непротестированными и может подобрать условия, в которых они будут выполнены.
c) Управление потоком. Программист знает, какая функция должна выполняться в программе следующей и каким должно быть её текущее состояние. Чтобы выяснить, правильно ли работает программа, программист может включить в неё отладочные команды, отображающие информацию о ходе выполнения программы.
d) Отслеживание целостных данных. Программисту известно, какая часть программы должна изменять каждый элемент данных. Отслеживая состояния данных (к примеру, с помощью отладчика), можно выявить такие ошибки, как изменение данных не теми модулями, их неверная интерпретация или плохая организация.
e) Внутренние граничные точки. В исходном коде видны те граничные точки программы, которые скрыты при отсутствии такого кода. К примеру, для выполнения некоторого действия можно использовать множество различных алгоритмов, и, не заглянув в код, невозможно определить, какой из этих алгоритмов выбрал программист. Другим типичным примером является проблема переполнения буфера для хранения входных данных. Программист сразу может сказать, при каком количестве данных буфер переполнится, и ему при этом не нужно проводить тысячи тестов.
f) Тестирование, определяемое выбранным алгоритмом. Для тестирования обработки данных, использующей очень сложные вычислительные алгоритмы, могут понадобиться специальные технологии. В качестве классического примера можно привести сортировку данных. Тестировщику нужно знать точно, какие алгоритмы используются, и обратиться к специальной литературе.
Тестирование «белого ящика» можно рассматривать как часть процесса программирования. Программисты регулярно выполняют это тестирование, после написания программы, её модулей и даже отдельных блоков кода.
Существуют четыре стратегии (способа) тестирования методом «белого ящика»:
a) Тестирование базового пути (покрытие решений).
b) Тестирование условий (покрытие условий).
c) Тестирование потоков данных.
d) Тестирование циклов.
Тестирование по принципу “белого ящика” характеризуется степенью, в какой тесты выполняют или покрывают логику (исходный текст) программы. Исчерпывающее тестирование по принципу белого ящика предполагает выполнение каждого пути в программе, но поскольку в программе с циклами выполнение каждого пути обычно нереализуемо, то тестирование всех путей не рассматривается.
Остановимся на рассмотрение каждого из этих способов тестирования “белого ящика”.