5.3.2. Методы стратегии «белого ящика»
В основу построения тестов положено знание структуры программы. Именно знание правил интерпретации структурных элементов «альтернативный выбор» и «цикл» определяет количество тестов, необходимых и достаточных для полноценной проверки программы. В рамках данной стратегии применяются следующие методы:
покрытие операторов («все операторы»);
покрытие решений («все пути»);
комбинированное покрытие условий.
Сравним методы на примере фрагмента программы, приведенного ниже.
Пусть надо разработать тесты для проверки следующего фрагмента:
если
(a>1)
и
(b=0)
то x:=x/a все если
(a=2)
и
(x>1)
то x:=x+1 все
if
(a>1) and
(b=0) then x := x
/ a; {end if} if
(a=2) and
(x>1) then x := x
+ 1; {end if}
Метод покрытия операторов.
Число тестов выбирается таким, чтобы каждый оператор был выполнен, по меньшей мере, один раз. В нашем случае достаточно одного теста:
Тест 1. {a=2, b=0, x=6} Эталон: x=4
Метод покрытия решений.
Число тестов выбирается таким, чтобы каждое решение было выполнено, по меньшей мере, один раз. Здесь под решением понимается конкретное значение условия в альтернативной или циклической структуре вне зависимости от сложности условия. В нашем случае требуется два теста, и их можно реализовать одним из двух вариантов:
Вариант 1. Первый тест – для случая, когда оба решения: первое -{(a>1)и(b=0)} и второе -{ (a=2)и(x>1) }, не выполняются, а второй – когда оба они выполняются;
Вариант 2. Первый – для случая, когда первое решение{(a>1)и(b=0)} выполняется, а второе { (a=2)и(x>1) } не выполняется, а во втором случае – наоборот, не выполняется первое и выполняется второе решение.
Приведем тесты для первого варианта.
Тест 1. {a=2, b=0, x=3} Эталон: x=2,5 Оба решения выполняются.
Тест 2. {a=3, b=1, x=1} Эталон: x=1 Оба решения не выполняются.
Метод комбинированного покрытия условий.
Все возможные комбинации условий в каждом решении должны быть выполнены хотя бы один раз.
Приведем вначале возможные комбинации условий для нашего фрагмента:
|
|
первый оператор if |
второй оператор if |
|
|
1) a>1 и b=0 |
5) a=2 и x>1 |
|
|
2) a>1 и b<>0 |
6) a=2 и x<=1 |
|
|
3) a<=1 и b=0 |
7) a<>2 и x>1 |
|
|
4) a<=1 и b<>0 |
8) a<>2 и x<=1 |
Теперь можно предложить и тесты, в которых обеспечивается комбинированное покрытие приведенных условий. Анализ таблицы показывает, что нам можно ограничиться четырьмя тестами:
Тест 1. {a=2, b=0, x=4} Эталон: x=3
Тест 2. {a=2, b=1, x=4} Эталон: x=5
Тест 3. {a=1, b=0, x=2} Эталон: x=2
Тест 4. {a=1, b=1, x=1} Эталон: x=1
В заключение хотелось бы отметить, что и в случае, когда доступен текст программы, при разработке системы тестов удобно воспользоваться следующим приемом:
Как правило, сначала подготавливают тесты по стратегии «черного ящика», а затем, в случае, если первоначального набора тестов недостаточно, он дополняется тестами, построенными на основе знания логической структуры программы. Используемый метод определяет и то, сколько и какие тесты должны быть добавлены.
Детальный пример разработки тестов в процессе проектирования программы приведен в четвертой главе
