76 Глава 5. Окрестностное тестирование программ
Непротиворечивость (надежность). Любые два набора тестов , удовлетворяющие
критерию, должны быть одновременно успешными или неуспешными для данной про-
граммы.
Простота проверки—критерий должен “легко” проверяться, например, он должен
быть вычислимым.
Однако, данные свойства недостижимы на практике. Так, структурные критерии не
являются ни надежными, ни вычислимыми. Более того, известно [28], что не существу-
ет полного непротиворечивого критерия, зависящего от набора тестов и программы,
и не существует вычислимого полного непротиворечивого критерия, зависящего от
набора тестов, программы и спецификаций.
Таким образом, на практике приходится заменять данные свойства их “разрешимы-
ми приближениями”. При этом исспользуются следующие подходы.
Исследование полноты и надежности критериев на ограниченном классе программ
и/или ограниченном классе ошибок. Как правило, такому исследованию поддаются
очень узкие классы программ и/или ошибок, которые трудно признать имеющими от-
ношение к реа льной практике программирования [28].
Статистические исследования “реальной” полноты и на дежности критериев—в
промышленных системах или на выбранных из практики реальных программах с ре-
альными ошибками [30 , 31].
Введение числовой эвристической оценки полноты тестирования вместо провер-
ки невычислимого критерия [32, 3 3, 34]. Например, в системах тестирования, основан-
ных на структурных критериях, оператору может выдаваться числовой коэффициент—
“процент проверенной части” программы.
5.2 Постановка проблемы
5.2.1 Анализ структурных критериев
Идея, лежащая в основе структурных критериев, напоминает изучение лабиринта—
необходимо побывать во всех комнатах, пройти все варианты ветвлений и все пути, что-
бы получить полную информацию о структуре лабиринта. Пусть мы провели несколько
тестовых прогонов для тестируемой программы, и во всех них не проходился некоторый
вариант ветвления некоторой команды ветвления. Это означает, что в данных тестовых
прогонах информация о данном ветвлении в программе не была использована. Таким
образом, можно предположить, что структурные критерии являются различными фор-
мализациями следующего неформального критерия выбора тестов :
Неформальный структурный критерий выбора тестов: набор тестов
считается достаточным для тестирования программы, если в процессе
тестовых прогонов на данном наборе в совокупности была использована
вся информация о графе управляющей структуры—блок-схеме—данной
программы.
(5.2)
Различные подходы к формализации фразы—“использована вся информация о гра-
фе. . . ”—приводят к различным структурным критериям—тестированию команд, ветвей,
путей.
Заметим, что критерий 5.2 явно ориентирован на классические императивные язы-
ки. Он неприменим, когда для используемого языка программирования трудно дать