Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 34
Текст из файла (страница 34)
Создание порожденного подграфа при наличии потока управления в графе потока данных усложняется, поскольку в целом мы хотим создать порожденный подграф начиная с выхода. Однако присутствие узлов потока управления вынуждает нас менять направление и исключать из порожденного подграфа то, что мы могли включить в него раньше (до того как осознали, что это был узел потока управления). Прежде чем вы станете зто делать, проверьте, нужна ли вам часть модели с потоком управления.
В предыдущем примере такой необходимости не было. Мы могли бы, например, заменить узел потока управления узлом выбора данных, ко- ' Говоря формально, именно порожденный подграф определяется выбранным путем начиная от узла ВЕС! и и заканчивая узлом ЕХ!Т. То есть выберите путь, а затем созлайте порожденный подграф, который объединяет другие порожденные полграфы. полученные лля каждой активной переменной вдаль пути. 5.4. Методы 143 5.4.5.
Итоговый пример Теперь создадим модель, которую мы можем использовать для активизации теста и для завершения атой главы. Она основана на бланке ИПС номер 1 (Форма 1040, Строка 23ауЬ). После неболыпой переработки этого бланка, сделанной для того, чтобы придать ему более формальный вид, мы имеем следующую модель.
У Вас У Вашего Супруга!и> С1; Мин >$2000. ИПС Сопвгто 1994 !Вкпад ИПС в 1994)) С2 !псоще !Поход> СЗ. Мин !С1, С2> !выход) Неработающий!ав) супруг!а) С4: Мин !С2а. $2250) С5 Выход иа СЗ Сб: Строка 5 - Строка 4 С7: Мин !$2000. 94 вкпад супР) СВ. Мин >Строка б. Строка 7> >выход> 1040 23а 1040 23Ь торый осуществлял бы выбор между выводами областей С1 и С2 и затем передавал бы их в область СЗ. Можете ли вы поступить подобным образом — зависит от приложения и от природы используемых объектов. Помните, что не важно, как именно может быть (или не может быть) запрограммировано приложение.
Важно, насколько правильно модель отражает смысл требований. Вы ничего не можете сделать с основными (существенными) потоками управления и синхронизации. Вы можете лишь экспериментировать с каким-либо удобным примером. Если разумно примененный в вашей модели узел потока управления устраняет дублированные потоки данных, то зто хорошо. Если он прибавляет сложности и затрудняет построение порожденного под>рафа, то это плохо. Случай 4: Смешение предикатов потока управления и узлов выбора потоков данных Этот случай — комбинация двух предшествующих ситуаций, так что будьте аккуратны в построении ваших порожденных подграфов.
Вам следует избегать смешанных моделей, поскольку в них легко запутаться. В отличие от программирования, путаница приведет не к созданию ошибки, а к бесполезной трате времени и созданию бесполезных или невыполнимых тестов. Если у вас есть смешанная модель, как с узлами потока управления, так и с узлами выбора, вам лучше пометить узлы каждого типа, поскольку вы будете часто колебаться при построении порожденных подграфов. Случай 5: Циклы Модели потока данных просто неудобны для проверки циклов. Правильный подход — выполнить полную развертку однократного прохода цикла и затем ввести узел выбора данных для каждого значения. Например, если вы предпочтете три варианта, у вас получится: отсутствие прохождения цикла, однократное прохождение, двукратное прохождение и узел выбора для этих трех случаев.
144 Глава 5 ° Тестирование потоков данных ВХОД ваш взнос в ИПС 94 ВХОД уоцг 94 ыаоез 18аша заработная плата в 1994 ??) СС4а ВС?; СС7 Х2: СС4а СС1а: С1а С1а: ССЗа ССЗа: СЗа СЗа: ВЫХОДа С5 С5 Сб ВХОД взнос супруга в ИПС 94 константа - $2250 ВЫБРЯТЬ мин яп птк 1, ВС1а) ВЫБРАТЬ мин штп)С1а. С2а) ВЫХОД в Строку 23а Формы 1040 тзанечание: спецификация ВНС неправилвна.
внесто СтрокаЗ должно быти сказано "СтрокаЗа" - подобные пустяки как раз и порождают ошибки> ВЫБРДТЬ нин тс2а, Х2) (замечание: в этом месте еше олна ошибка ВНС) СС4а. С4 С4 Сб Сб. ССВ СС7: С? С7; ССВ ССВ: СВ С4-С5 ВЫБРЯТЬ мин 1807. Х1) ВЫБРАТЬ мин 1сб, С7) ВЫХОД в строку 23Ь формы 1040 Сначала мы выбираем простые порожденные подграфы. Одним из них является случай взноса в ИПС, вводимого в строку 23а формы ВНС 1040. Порожденный подграф, начинактщпйся от выходного узла ВЫХОДа, содержит узлы 111, ВС1а, СС1а, С1а, ССЗа, С2а, СЗа, ВЫХОДа и соответствующие связи. Тут имеются два узла выбора (и предикаты), но только три возможности, зависящие от того, какая из следующих величин меньше: $2000, 1994 Взнос в ИПС, илн заработная плата в 1994 году.
В силу этого наш порожденный подграф приводит к трем тестовым вариантам, которые следует активизировать позже. Вывод в строке В для супружеского взноса в ИПС более сложен из-за того, что выбор этого вывода приводит к включению в наш порожденный подграф всего графа, за исключением узла ВЫХОДа. Я буду строить свои порожденные графы методично, двигаясь от конца к началу, и буду пытаться обеспечить покрытие связей и узлов, не покрытых предыдущим тестовым вариантом.
Получившиеся цепочки выглядят следующим образом. Тест 1: СВ, ССВ, Сб. С5. СЗа. ССЗа. С!а. СС1а. ВС1а. С4. СС4а. Х2 Тест 2: СВ. ССВ. Сб, С5. СЗа. ССЗа С1а. СС1а, Х1, С4. СС4а. С2а Я буду строить эту модель для случая, когда ваш супруг(а) (если он(а) есть) не работает, и вы можете (или не можете) внести взнос в ИПС за него.
Полная модель (в которую включен работающий супруг) оставлена в качестве упражнения для самостоятельного выполнения. Вы можете предположить, что в атой модели некоторые из узлов и связей на самом деле не нужны, например, такие как: С1а, СЗа, С4, С5 и С7. Я сохранил все узлы, следующие за узлом выбора, в качестве меры предосторожности и для того, чтобы быть уверенным в том, что узел выбора в этой модели явный, а не скрытый, по аналогии с формой.
Строка 5 (узел 5) была сохранена, посколысу подобная строка имеется в форме ВНС, и у нас будет возможность проверить ее значение. Х1. СС1а константна - $2000 СС? ВС)а. СС)а С2а ССЗа 5.4. Методы 145 Тест 3: СВ, ССВ. Сб. С5. СЗа. ССЗа. С2а.
С4. ССаа Тест 4: СВ. ССВ. Сб. С5. СЗа. ССЗа, С!а. СС!а. 11. С4. СС4а. 12 Тест 5: СВ, ССВ С7, СС7 ВС7 Тест 6 СВ. ССВ. С7. СС7, К! Заметьте, что я выписывал имена узлов, а не связей. В общем случае вы должны выписать все связи или ясно показать, что вы определяете набор сегментов путей через граф потока данных, которые определяют порожденный подграф. Например, более точное представление будет таким: Тест 1: СВ. ССВ. Сб. С5. СЗа.
ССЗа С!а. СС!а ВС!а7С6. С4. СС4а. 22 Я использовал сокрасценную запись, поскольку в данном случае она недвусмысленна. В случае более сложного потокового графа она может быть неоднозначной и для точной идентификации маршрута будет недостаточно просто перечислить имена узлов. Заметьте, что в отличие от тестирования потока управления, где мы следовали только вдоль одного набора стрелок, в данном случае, поскольку Сб содержит вычисление, затрагивающее С4 и С5, нам следует включить в порожденный подграф обе связи.
Для узлов выбора, однако, в порожденный подграф включается ветвь только для выбранной входяшей связи. Может быть, и есть возможность обойтись меньшим количеством тестов, но я не слишком к этому стремился. Задача заключается в том, чтобы обеспечить покрытие связей, а не минимизировать количество тестовых вариантов. Узлы выбора здесь коварны, потому что они основаны на сравнении лвух величин, я имею в виду М(Х (А, В). Если обе величины одинаковы, вы не знаете, какую связь следует использовать, так что это не слишком хорошая основа для тестовых вариантов (по крайней мере, для попытки обеспечить покрытие связей).
5.4.б. Активизация Каждый тест соответствует порожденному подграфу. Если порожденные подграфы были определены корректно, тогда для активизации одного подобного порожденного подграфа достаточно задать только его входные величины. Активизация происходит по большей части так же, как это было описано для потоков управления, за исключением того случая, когда вы можете решить, что проШе начать с выхода и двигаться в направлении входов.
Если же в порожденном подграфе нет узлов выбора или узлов потока управления, об активизации не стоит и говорить. Любые приемлемые входные значения подойдут. В случае существования узлов выбора или узлов потока управления следует выполнить несколько процедур. 1. Обратите внимание на минимальные и максимальные значения для каждого входа. Если значения составляют некоторое множество, запишите все значения из него. 2.
Двигайтесь по всем ветвям порожденного подграфа в обратном направлении (к началу), отмечая пути, которые достигают входов без прохождения через узлы выбора (потоков данных или потоков управления). Вы можете 146 Глава 5 ° Тестирование потоков данных пока игнорировать эти части порожденного подграфа, потому что для входящих данных, скорее всего, нет ограничений. 3. Двигайтесь наверх вдоль путей, пока не достигнете узла выбора (для которого вы уже сделали выбор). Этот узел выбора — неважно является ли он узлом выбора потоков данных или потока управления — содержит предикат, значение которого вы уже определили (выбором данного порожденного подграфа). Этот предикат теперь накладывает ограничения на все входные значения, которые могут быть достигнуты при движении по порожденному подграфу из этой точки.
Определите самый широкий набор входных значений, удовлетворяющих атому предикату. 4. Продолжайте обрабатывать каждый встреченный вами предикат (при движении к началу порожденного подграфа). Если в порожденном подграфе на выбранном пути имеется больше двух предикатов, следует рассматривать их условия одновременно, а каждый последующий предикат накладывает дополнительные ограничения на возможные входные значения. Для потоков данных активизация обычно происходит проще, поскольку в этом случае существует сравнительно немного промежуточных узлов и обычно пе нужно интерпретировать предикаты для того, чтобы выразить их через входные переменные. Если вы имеете дело с таким случаем, поступайте так, как если бы работали с потоками управления, учитывая, что вы имеете дело с порожденными подграфами для потоков данных, а не с отдельными путями.