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