Конспект лекций по предмету "Программирование"


Покрытие условий

Лучшим критерием по сравнению с предыдущим является покрытие условий. В этом случае записывают число тестов, достаточное для того, чтобы все возможные результаты каждого условия в решении выполнялись, по крайней мере, один раз. Поскольку, как и при покрытии решений, это покрытие не всегда приводит к выполнению каждого оператора, к критерию требуется дополнение, которое заключается в том, что каждой точке входа в программу или подпрограмму, а также ON-еди­ни­цам должно быть передано управление при вызове, по крайней мере, один раз. Например, оператор цикла в языке Фортран
DO К=0 ТО 50 WHILE (J+K<QUEST);
или его аналог на языке Си
for(K=0; K<=50 && J+K<QUEST; K++)
содержит два условия: К меньше или равно 50 и J+K меньше, чем QUEST. Следовательно, здесь требуются тесты для ситуаций K£50, K>50 (т.е. выполнение последней итерации цикла), J+K<QUEST и J+K³QUEST.
Программа (рис. 6.5) имеет четыре условия: А > 1, В = 0, А = 2 и X > 1. Следовательно, требуется достаточное число тестов, такое, чтобы реализовать ситуации, где A > 1, A £ 1, B = 0 и B ¹ 0 в точке a и A = 2, A ¹ 2 и X > 1 в точке b. Тесты, удовлетворяющие критерию покрытия условий, и соответствующие им пути:
1. A = 2, В = 0, Х = 4 – ace.
2. А = 1, B = 1, Х = 1 – abd.
Заметим, что хотя аналогичное число тестов для этого примера уже было создано, покрытие условий обычно лучше покрытия решений, поскольку оно может (но не всегда) вызвать выполнение решений в условиях, не реализуемых при перекрытии решений. Например, рассмотренные выше операторы представляют собой двузначный переход (либо выполняется тело цикла, либо выход из цикла). Если использовать тестирование решений, то достаточно выполнить цикл при изменении K от 0 до 51 без проверки случая, когда второе условие ложно. Однако при критерии покрытия условий необходим тест, который реализовал бы результат «ложь» условия J+K<QUEST.
Хотя применение критерия покрытия условий на первый взгляд удовлетворяет критерию покрытия решений, это не всегда так. Если тестируется решение IF (A&B), то при критерии покрытия условий требовались бы два теста — A есть истина, B есть ложь и A есть ложь, B есть истина. Но в этом случае не выполнялось бы THEN-пред­ло­же­ние оператора IF. Тесты критерия покрытия условий для ранее рассмотренного примера покрывают результаты всех решений, но это только случайное совпадение. Например, два альтернативных теста
1. A = 1, В = 0, Х = 3
2. А = 2, В = 1, Х = 1
покрывают результаты всех условий, но только два из четырех результатов решений (они оба покрывают путь abe и, следовательно, не выполняют результат истина первого решения и результат ложь второго решения).
6.4.1.4 Покрытие решений/условий
Очевидным следствием из этой дилеммы является критерий, названный покрытием решений/условий. Он требует такого достаточного набора тестов, чтобы все возможные результаты каждого условия в решении выполнялись, по крайней мере, один раз, все результаты каждого решения выполнялись, по крайней мере, один раз и каждой точке входа передавалось управление, по крайней мере, один раз.
Недостатком критерия покрытия решений/условий является невозможность его применения для выполнения всех результатов всех условий; часто подобное выполнение имеет место вследствие того, что определенные условия скрыты другими условиями. В качестве примера рассмотрим приведенную на рис. 6.6 схему передач управления в машинном коде программы на рис. 6.5. Мно­го­ус­лов­ные решения исходной программы здесь разбиты на отдельные решения и переходы, поскольку большинство машин не имеет команд, реализующих решения с многими исходами. Наиболее полное покрытие тестами в этом случае осуществляется таким образом, чтобы выполнялись все возможные результаты каждого простого решения.
Два предыдущих теста критерия покрытия решений не выполняют этого. Они недостаточны для выполнения результата «ложь» решения Н и результата «истина» решения К. Набор тестов для критерия покрытия условий такой программы также является неполным — два теста (которые случайно удовлетворяют также и критерию покрытия решений/условий) не вызывают выполнения результата «ложь» решения I и результата «истина» решения К.
Причина этого заключается в том, что, как показано на рис. 6.6, результаты условий в выражениях и и или могут скрывать и блокировать действие других условий. Например, если условие и есть ложь, то никакое из последующих условий в выражении не будет выполнено. Аналогично, если условие или есть истина, то никакое из последующих условий не будет выполнено. Следовательно, критерии покрытия условий и покрытия решений/условий недостаточно чувствительны к ошибкам в логических выражениях.

Рис. 6.6 — Машинный код программы, изображенной на рис. 6.5


Не сдавайте скачаную работу преподавателю!
Данный конспект лекций Вы можете использовать для создания шпаргалок и подготовки к экзаменам.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем конспект самостоятельно:
! Как написать конспект Как правильно подойти к написанию чтобы быстро и информативно все зафиксировать.