Методы тестирования программного обеспечения. Степанченко И.В. - 44 стр.

UptoLike

Составители: 

46
имеет команд, реализующих решения со многими исходами. Наиболее
полное покрытие тестами в этом случае осуществляется таким образом,
чтобы выполнялись все возможные результаты каждого простого решения.
Два предыдущих теста критерия покрытия решений не выполняют этого;
они недостаточны для выполнения результата ложь решения H и результа-
та истина решения K. Набор тестов для критерия
покрытия условий такой
программы также является неполным; два теста (которые случайно удов-
летворяют также и критерию покрытия решений/условий) не вызывают
выполнения результата ложь решения I и результата истина решения K.
Причина этого заключается в том, что, как показано на рис. 4, результаты
условий в выражениях и и или могут скрывать и блокировать
действие других
условий. Например, если условие и есть ложь, то никакое из последующих ус-
ловий в выражении не будет выполнено. Аналогично если условие или есть
истина, то никакое из последующих условий не будет выполнено. Следова-
тельно, критерии покрытия условий и покрытия решений/условий недоста-
точно чувствительны к ошибкам в логических
выражениях.
3.1.5. Комбинаторное покрытие условий
Критерием, который решает эти и некоторые другие проблемы, являет-
ся комбинаторное покрытие условий. Он требует создания такого числа тес-
тов, чтобы все возможные комбинации результатов условия в каждом
решении и все точки входа выполнялись, по крайней мере, один раз.
По этому критерию для программы на
рис. 3 должны быть покрыты
тестами следующие восемь комбинаций:
1. А > 1, B = 0.
2. A > 1, В 0.
3. A 1, В = 0. 4. A l, В 0.
5. A = 2, X > 1.
6. A = 2, X l.
7. А 2, Х > 1. 8. A 2, X l.
Заметим, что комбинации 5–8 представляют собой значения второго опе-
ратора if. Поскольку Х может быть изменено до выполнения этого оператора
,
значения, необходимые для его проверки, следует восстановить, исходя из ло-
гики программы с тем, чтобы найти соответствующие входные значения.
Для того чтобы протестировать эти комбинации, необязательно ис-
пользовать все восемь тестов. Фактически они могут быть покрыты че-
тырьмя тестами. Приведем входные значения тестов и комбинации, кото-
рые они покрывают:
A = 2, B = 0, X = 4 покрывает
1, 5;
A = 2, В = 1, Х = 1 покрывает 2, 6;
A = 1, B = 0, Х = 2 покрывает 3, 7;
A = 1, B = 1, Х = 1 покрывает 4, 8.
То, что четырем тестам соответствуют четыре различных пути на
рис. 3, является случайным совпадением. На самом деле представленные
имеет команд, реализующих решения со многими исходами. Наиболее
полное покрытие тестами в этом случае осуществляется таким образом,
чтобы выполнялись все возможные результаты каждого простого решения.
Два предыдущих теста критерия покрытия решений не выполняют этого;
они недостаточны для выполнения результата ложь решения H и результа-
та истина решения K. Набор тестов для критерия покрытия условий такой
программы также является неполным; два теста (которые случайно удов-
летворяют также и критерию покрытия решений/условий) не вызывают
выполнения результата ложь решения I и результата истина решения K.
     Причина этого заключается в том, что, как показано на рис. 4, результаты
условий в выражениях и и или могут скрывать и блокировать действие других
условий. Например, если условие и есть ложь, то никакое из последующих ус-
ловий в выражении не будет выполнено. Аналогично если условие или есть
истина, то никакое из последующих условий не будет выполнено. Следова-
тельно, критерии покрытия условий и покрытия решений/условий недоста-
точно чувствительны к ошибкам в логических выражениях.
                 3.1.5. Комбинаторное покрытие условий
     Критерием, который решает эти и некоторые другие проблемы, являет-
ся комбинаторное покрытие условий. Он требует создания такого числа тес-
тов, чтобы все возможные комбинации результатов условия в каждом
решении и все точки входа выполнялись, по крайней мере, один раз.
     По этому критерию для программы на рис. 3 должны быть покрыты
тестами следующие восемь комбинаций:
            1. А > 1, B = 0.         2. A > 1, В ≠ 0.
            3. A ≤ 1, В = 0.         4. A ≤ l, В ≠ 0.
            5. A = 2, X > 1.         6. A = 2, X ≤ l.
            7. А ≠ 2, Х > 1.         8. A ≠ 2, X ≤ l.
     Заметим, что комбинации 5–8 представляют собой значения второго опе-
ратора if. Поскольку Х может быть изменено до выполнения этого оператора,
значения, необходимые для его проверки, следует восстановить, исходя из ло-
гики программы с тем, чтобы найти соответствующие входные значения.
     Для того чтобы протестировать эти комбинации, необязательно ис-
пользовать все восемь тестов. Фактически они могут быть покрыты че-
тырьмя тестами. Приведем входные значения тестов и комбинации, кото-
рые они покрывают:
     A = 2, B = 0, X = 4     покрывает 1, 5;
     A = 2, В = 1, Х = 1     покрывает 2, 6;
     A = 1, B = 0, Х = 2     покрывает 3, 7;
     A = 1, B = 1, Х = 1     покрывает 4, 8.
     То, что четырем тестам соответствуют четыре различных пути на
рис. 3, является случайным совпадением. На самом деле представленные
                                     46