Калайда В.Т., Романенко В.В. Технология разработки программного обеспечения (2007) (1095890), страница 24
Текст из файла (страница 24)
6.18 — Окончательная функциональная диаграмма командыDISPLAYТретьим шагом является генерация таблицы решений сограниченными входами. В таблице решений причины естьусловия, а следствия есть действия. Процедура генерации заключается в следующем:1. Выбрать некоторое следствие, которое должно быть всостоянии 1.2.
Найти все комбинации причин (с учетом ограничений),которые установят это следствие в 1, прокладывая изэтого следствия обратную трассу через диаграмму.1563. Построить столбец в таблице решений для каждойкомбинации причин.4. Для каждой комбинации причин определить состояниявсех других следствий и поместить их в соответствующий столбец таблицы решений.При выполнении этого шага необходимо руководствоваться тремя положениями:1. Если обратная трасса прокладывается через узел или,выход которого должен принимать значение 1, то одновременно не следует устанавливать в 1 более одноговхода в этот узел. Такое ограничение на установкувходных значений называется чувствительностью пути.
Цель данного правила — избежать пропускаотдельных ошибок из-за того, что одна причина маскируется другой.2. Если обратная трасса прокладывается через узел и, выход которого должен принимать значение 0, то всекомбинации входов, приводящие выход в 0, должныбыть перечислены. Однако когда исследуется ситуация, где один вход есть 0, а один или более другихвходов есть 1, не обязательно перечислять все условия,при которых остальные входы могут быть 1.3. Если обратная трасса прокладывается через узел и, выход которого должен принимать значение 0, то необходимо указать лишь одно условие, согласно которомувсе входы являются нулями.
Когда узел и находится всередине графа и его входы исходят из других промежуточных узлов, может существовать чрезвычайнобольшое число ситуаций, при которых все его входыпринимают значения 0.Эти положения кратко поясняются рис. 6.19.157СитуацияaСостояние1xVba23Λxbc41. Если X должен быть равен 1, то неследует рассматривать ситуацию, гдеa = b = 1 (положение 1).2. Если X должен быть равен 0, топеречислить все ситуации, где a = b = 0.3. Если X должен быть равен 1, топеречислить все ситуации, где a = b == c = 1.4.
Если X должен быть равен 0, торассматриваем только одну ситуацию,где a = b = c = 0 (положение 3).Для состояний a, b и c 001, 010, 100,011, 101 и 110 рассмотреть толькоодну, любую из этих ситуаций(положение 2).Рис. 6.19 — Положения, используемые при прокладкеобратной трассы через диаграммуРис. 6.20 приведен в качестве примера функциональнойдиаграммы. Пусть требуется так задать входные условия, чтобыустановить выходное состояние в 0. Согласно положению 3 следует рассматривать только один случай, когда узлы 5 и 6 — нули. По положению 2, для состояния, при котором узел 5 принимает значение 1, а узел 6 — значение 0, следует рассматриватьтолько один случай, когда узел 5 принимает значение 1 (неперечисляя другие возможные случаи, когда узел 5 может принимать значение 1).Аналогично для состояния, при котором узел 5 принимаетзначение 0, а узел 6 — значение 1, следует рассматривать только один случай, когда узел 6 принимает значение 1 (хотя в данном случае он является единственным).
В соответствии с положением 1, если узел 5 должен быть установлен в состояние 1,то не рекомендуется устанавливать узлы 1 и 2 в состояние 1 одновременно. Таким образом, возможны пять состояний узлов 1—4, например значения0 0 0 0 (5 = 0, 6 = 0),1 0 0 0 (5 = 1, 6 = 0),1 0 0 1 (5 = 1, 6 = 0),1 0 1 0 (5 = 1, 6 = 0),0 0 1 1 (5 = 0, 6 = 1),а не 13, которые приводят к выходному состоянию 0.15812VΛ345V76Рис. 6.20 — Пример функциональной диаграммыдля иллюстрации обратной трассировкиНа первый взгляд, эти положения могут показаться необъективными, но они преследуют важную цель: уменьшитькомбинаторику диаграммы.
Их применение позволяет избежатьситуаций, которые приводят к получению малорезультативныхтестов. Если не исключать малорезультативные тесты, то общеечисло тестов, порождаемых по большой функциональной диаграмме, получается астрономическим. Если же и без них числотестов все еще оказывается большим, то выбирается некотороеподмножество тестов, при этом не гарантируется, что малорезультативные тесты будут исключены. Поэтому самое лучшее —исключить их в процессе анализа диаграммы.123456789101112131415161718191111111111111111111121001111111111111111301011111111111111114110011115011611101111111701111180191111000111101110101111110011201310011140101115001617001811911111111111100000000920000000000011110000930000000000000001100940000000000000000011950000000000000000000960000000000000000000970000000000000000000Рис.
6.21 — Первая половина результирующей таблицы решений1592021222324252728293031323334353637381110000111111000111211111111111311111111111411111111111511116111111711111181191111110111111111111121111113110111111411011111151111111161111111170000000001111111111811000000011100000091000000000000000000920000000000000000009300000000000000000094111111111000000000950000000000111111119600111111111111111197000000000011100000Рис. 6.22 — Вторая половина результирующей таблицы решенийПреобразуем функциональную диаграмму, изображеннуюна рис. 6.18, в таблицу решений. Выберем первым следствием91. Следствие 91 имеет место, если узел 36 принимает значение0.
Значение узла 36 есть 0, значение узлов 32 и 35 есть 0,0,0,1 или 1,0, и применимы положения 2 и 3. Хотя подобноепреобразование — трудоемкий процесс, но можно проложитьобратную трассу от следствий к причинам, учесть при этомограничения причин и найти комбинации последних, которыеприводят к следствию 91.Результирующая таблица решений, при условии, что имеетместо следствие 91, показана на рис. 6.21 (столбцы 1—11).Столбцы (тесты) 1—3 представляют условия, где узел 32 есть 0,а узел 35 есть 1.
Столбцы 4—10 представляют условия, где узел32 есть 1, а узел 35 есть 0. С помощью положения 3 определенатолько одна ситуация (колонка 11) из 21-ой возможной, когдаузлы 32 и 35 есть 0. Пробелы представляют «безразличные» ситуации (т.е. состояние причины несущественно) или указываютна то, что состояние причины очевидно вследствие состоянийдругих зависимых причин (например, для столбца 1 известно,160что причины 5, 7 и 8 должны принимать значения 0, так какони связаны ограничением «одно и только одно» с причиной 6).Столбцы 12—15 представляют ситуации, при которыхимеет место следствие 92, а столбцы 16 и 17 — ситуации, прикоторых имеет место следствие 93.
На рис. 6.22 показанаостальная часть таблицы решений.Последний шаг заключается в том, чтобы преобразоватьтаблицу решений в 38 тестов. Набор из 38-и тестов представленниже.Числа возле каждого теста обозначают следствия, которые, как ожидается, должны здесь иметь место. Предположим,что последний используемый адрес памяти машины есть 7FFF.1.DISPLAY 24AF74 — 123(91)2.DISPLAY 2ZX4 — 3000(91)3.DISPLAY HHHHHHHH — 200(91)4.(91)DISPLAY 200 2005.DISPLAY 0 — 22222222(91)6.DISPLAY 1 — 2X(91)7.DISPLAY 2 — ABCDEFGHI(91)8.DISPLAY 3.11111111(91)9.DISPLAY 44.$42(91)10. DISPLAY 100.$$$$$$$(91)11. DISPLAY 10000000 — M(91)12. DISPLAY FF — 8000(92)13.
DISPLAY FFF.7001(92)14. DISPLAY 8000 — END(92)15. DISPLAY 8000 — 8001(92)16. DISPLAY AA-A0(93)17. DISPLAY 7000.0(93)18. DISPLAY 7FF9 — END(94,97)19. DISPLAY 1(94,97)20. DISPLAY 21 — 29(94,97)21. DISPLAY 4021.A(94,97)22. DISPLAY — END(94,96)23. DISPLAY(94,96)24.
DISPLAY — F(94,96)25. DISPLAY .E(94,96)26. DISPLAY 7FF8 — END(94,96)27. DISPLAY 6000(94,96)16128. DISPLAY A0 — A4(94,96)29. DISPLAY 20.8(94,96)30. DISPLAY 7001 — END(95,97)31. DISPLAY 5 — 15(95,97)32. DISPLAY 4FF.100(95,97)33. DISPLAY — END(95,96)34. DISPLAY —20(95,96)35. DISPLAY .11(95,96)36. DISPLAY 7000 — END(95,96)37.
DISPLAY 4 —14(95,96)38. DISPLAY 500.11(95,96)Заметим, что в этом случае двум и более различным тестам соответствует один и тот же набор причин, следует стараться выбирать различные значения причин с тем, чтобы хотябы незначительно улучшить результативность тестов. Заметимтакже, что из-за ограниченного размера памяти тест 22 являетсянереализуемым (при его использовании будет получено следствие 95 вместо 94, как отмечено в тесте 33). Следовательно,реализуемы только 37 тестов.Замечания.Применение функциональных диаграмм — систематический метод генерации тестов, представляющих комбинацииусловий.
Альтернативой является специальный выбор комбинаций, но при этом существует вероятность пропуска многих «интересных» тестов, определенных с помощью функциональнойдиаграммы.При использовании функциональных диаграмм требуетсятрансляция спецификации в булевскую логическую сеть. Следовательно, этот метод открывает перспективы ее применения идополнительные возможности спецификаций.
Действительно,разработка функциональных диаграмм есть хороший способ обнаружения неполноты и неоднозначности в исходных спецификациях. Например, можно заметить, что предложенный процессобнаруживает неполноту в спецификации команды DISPLAY.Спецификация устанавливает, что все выходные строки содержат четыре слова. Это справедливо не во всех случаях; так, длятестов 18 и 26 это неверно, поскольку для них начальный адресотображаемой памяти отличается от конечного адреса памятимашины менее чем на 16 байт.162Метод функциональных диаграмм позволяет построитьнабор полезных тестов, однако его применение обычно не обеспечивает построение всех полезных тестов, которые могут бытьопределены.
Так, в нашем примере мы ничего не сказали о проверке идентичности отображаемых на экран терминала значений данных данным в памяти и об установлении случая, когдапрограмма может отображать на экран любое возможное значение, хранящееся в ячейке памяти. Кроме того, функциональнаядиаграмма неадекватно исследует граничные условия. Конечно,в процессе работы функциональными диаграммами можно попробовать покрыть граничные условия. Например, вместо определения единственной причиныадрес 2 адрес 1можно определить две причины:адрес 2 > адрес 1адрес 2 = адрес 1Однако при этом граф существенно усложняется, и числотестов становится чрезвычайно большим.