Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 33
Текст из файла (страница 33)
Откуда вам об атом узнать? Вы должны понять приложение и его задачи. Давайте смоделируем толы<о одну строку 38 и то, что она за собой влечет. 38 Налог Отнетить. если из а ( ] Тах ТаЫ е (Табпицы налогов). Ь ( ] Тах даве 5сиесц1е (Схены напоговых ставок). с ( ] Сар1ва1 Оатп Тах Иогйзьеет (Табпицы налога на напитапьнуш прибыпь) ипи О Е ] варны 8615. е. Сунма из форм(ы) 8814 Я не являюсь специалистом по налогам, так что я должен был читать инструкции ВНС и руководство по налогам, чтобы понять, что делать с пунктом е.
Пункт е должен быть добавлен в налог, несмотря на то, что в форме это не указано. Пункты а, Ь, с и (] — взаимоисключающие и формируют соответствующий узел выбора. Ниже приводится модель для данного случая. 38а: 38х: часть напога (Испопьзуйте Тах Тащ е (Табпицу напогов)) 38Ь 38х. часть налога (Испопьзуйте Тах дате 5сцебц)е (Схему налоговых ставок)) 38с; 38х: част~ напога (Испопьзуйте Сартта1 Оатп Тах Иогязпеев (Табпицу налога на капитальную прибыль)) 380; 38х: часть напога (Из Формы 8615) 38х: ОИБОР (исходя из правип 8НС) 38а 38Ь 38с 380 38е; 38; Сумма из Форм(ы) 88)4 38 С38х + С38е 138 Глава Б ° тестирование потоков данных 5.4.4.
Выбор основного порожденного подграфа Нам надо рассмотреть несколько различных ситуаций для выбора порожденного подграфа — эквивалента путей потока управления в диаграммах потока данных. То, что мы делаем, зависит от того, что представляет собой граф потока данных. 1. Нет узлов выбора, нет узлов потока управления (и нет циклов). 2. Только потоки данных и узлы выбора. 3. Только узлы предикатов потока управления, без узлов выбора.
4. Узлы предикатов потока управления и узлы выбора. 5. Циклы. Случай 1: Чистые потоки данных Следующую процедуру необходимо проделать для каждого выходного узла, Выберите выходной узел. Проследуйте в обратном направлении от выходного узла ко всем соединенным с ним узлам. Проследуйте от этих узлов в обратном направлении к тем узлам, которые, в свою очередь, соединяются с ними, и так далее, пока не достигнете входных узлов (для данной модели).
Теперь у вас есть порожденный граф потока данных. Символически ситуация проиллюстрирована следующим образом: 1)1, ()2 и ()3 — выходные переменные. А, В и С вЂ” наборы входных переменных. Средняя область содержит вычислительные узлы. () 1 зависит только от входных переменных из набора А. 1)2 зависит как от переменных из А, так н от переменных из В, а (13 зависит только от переменных из С. У нас есть три набора тестов, соответствующих ()1, ()2 и 1)3.
Если здесь нет узлов выбора и нет узлов потока данных, вам потребуется только один тестовый вариант на одну выходную переменную. Заметьте, что каждый порожденный подграф будет содержать (возможно) различные вычислительные узлы в области ВЫЧИСЛЕНИЕ. Например, нам следует ожидать, что вычислительные узлы, относящиеся к 1)3, не будут перекры- 5.ч. Методы 139 ваться с узлами, соотносящимися с Т)1 и 1)2.
Некоторая часть вычислительных узлов (но не все) будет, вероятно, использоваться как в П1, так и в Т) 2. Случай 2: Только потоки данных и узлы выбора Начните, как и ранъше, с порожденного подграфа для каждой выходной переменной. Однако когда вы достигнете узла выбора, вы должны включить в порожденный подграф каждый потенциально выбираемый вариант. Результатом будет нечто вроде объединенного порожденного подграфа, поскольку в данном случае имеется множество альтернативных путей. Каждый объединенный порожденный подграф приведет к получению целого набора тестовых вариантов. Рассмотрите отдельно каждый объединенный порожденный подграф.
Допустим, что в порожденном подграфе есть только один узел выбора. Выберите величину для каждого значения предиката выбора и затем исключите из порожденного подграфа все потоки данных, которые не принимают участия в определении этой величины. Если, например, в строке 38 мы выберем 38а (Использовать Тах Таые (Таблицу налогов) ), то нам следует исключить из порожденного подграфа потоки данных, приводящие к строке Использовать Тах вазе 5сбебц)е (Схену напогозых ставок), Использовать Сарзта) 6а1п Тах Иог)гзбеет (Таблицу налога на капитальную прибыль) и Испопьзовать форну 8615. Порожденный подграф, основанный на П, включает в себя три вычислительные области, наборы данных А, В, С, Р и узел выбора.
Если мы выберем величину Х, которая зависит только от наборов данных А и В, мы исключаем из порожденного подграфа наборы данных С и Т) и вычислительную область У. Напротив, если мы выберем величину У, то в этом случае исключаем набор А и вычислительную область Х, поскольку входные наборы данных В, С, н Р используются для вычисления г' и П по мере прохождения порожденного подграфа. зел бора Предположим, что в порожденном подграфе имеется два или более предикатов выбора. У нас опять есть два случая: при обратном движении по потокам (от выхода к входу) они могут соответствовать или ветвлению, или слиянию потоков 140 Глава 5 ° Тестирование потоков данных данных. Сначала мы рассмотрим более простой случай, при котором в двух предикатах выбора происходит ветвление потоков. Это изображено на следующем рисунке.
Мы начинаем с разделения на порожденные подграфы всех выходных переменных. Так же, как и прежде, выбираем одну из переменных и определяем порожденный подграф для этой переменной. Как и раньше, первый встреченный нами предикат выбора делит граф на несколько порожденных подграфов, каждый нз которых приводит к набору тестовых вариантов. На рисунке есть порожденный подграф для Чг, приводящий только к одному тестовому варианту, и егце один порожденный подграф для Ъ', Следуя от Ч в направлении входных узлов, мы встречаем второй узел выбора, который снова порождает два варианта, приводя к порожденному подграфу для Х, включающему наборы входных переменных А, В и другому набору для У, включающему наборы входных переменных В, С и Р.
Помните, что узел выбора может иметь много ветвей, и вы должны разрабатывать отдельный набор тестов для каждой ветви. И теперь рассмотрим последний случай, в котором потоки данных сливаются и следуют назад вместе. Если мы возьмем порожденный подграф Ч для нижнего узла выбора и проследуем по нему вверх, мы натолкнемся на другой узел выбора, приводящий к двум новым порожденным подграфам и двум тестовым вариантам, соответствующим выбору Х или У. Порожденный подграф ЪЧ, однако, идет назад к тому же узлу выбора (Х, У) где снова имеется возможность выбора из двух вариантов. Приведет ли это к еще двум тестовым вариантам нли только к одному? Это зависит от того, насколько тщательно вы хотите тестировать.
Если вы выберете только один вариант для %, что дает только один порожденный подграф (либо Х, либо У), тогда у вас будет один дополнительный тест. При более тщатель- 5.ч. Методы 141 ном (и требующем больших затрат) тестировании вам следует взять оба порожденных подграфа. В нашем примере это добавляет только один тест, но если у нас есть много узлов выбора, расположенных один за другим в каждом порожденном подграфе, разница в подходах может стать разительной. Эти два метода соответствуют применению того, что формально известно как критерий всех использований (ВИ) (берется какой-либо один порожденный подграф, который влияет на значение %) и критерий Всех путей-определение-использование (ВПОИ) (берется каждый порожденный подграф, влияющий на значение %). ВПОИ вЂ” более полный метод, чем ВИ, но требует ббльших трудозатрат.
Исходя из эмпирического доказательства, приведенного в [%ЕЪЧ)901, вы сможете получить больше преимушеств, выбрав ВИ. Таким образом, убедитесь, что вы включили по крайней мере один порожденный подграф для каждого выхода, а не все возможные порожденные подграфы, которые появляются вследствие всех возможных комбинаций выбора в селекторах (и, как мы увидим, всех комбинаций значений для предикатов потока управления и условий циклов).
Случай 3: Предикаты потока управления без узлов выбора Этот случай обрабатывается тем же способом, что и узлы выбора. Начиная с конца графа, от выходных переменных, создайте порожденный подграф. Правда, здесь есть отличие от предыдущего варианта. В узле выбора данных в порожденный подграф войдет только одна входящая связь. То есть каждая входящая связь создает новый порожденный подграф.
В узле потока управления (например, 1Р.ТНЕД-ЕЕ5Е или СА5Е) каждая исходящая связь создает новый порожденный подграф. По этой причине, возможно, будет проще создавать порожденный подграф для потоков управления начиная от входов, а не от выходов. Однако мы имеем дело с моделя- 142 Глава 5 ° Тестирование потоков данных ми потока данных, и злементы потока управления встречаются здесь (по крайней мере, на это следует надеяться) лишь случайно. Ситуация показана на следующем рисунке.
Начните создание порожденного подграфа так же, как и раньше, с выхода (3 (для каждого выхода). Он приводит в вычислительные области С1 и С2 и связанные с ними источники данных !1 и!2 (которые могу~ перекрываться). Продолжив создание порожденного подграфа, вы достигнете узла потока управления, который по определению означает, что за н им возможен только один из двух ал ьтернативных вариантов. То есть вы должны выбрать либо область С1, либо область С2 (и связанные с ними потоки данных). Каждый вариант порождает один тест. Для обоих тестов нужны выходы из области В и набор данных !4. Существует хорошая практика создания порожденных подграфов: 1.
Для узлов выбора потоков данных начинайте создание порожденного под- графа с входящих в узел связей. 2. Для узлов потока управления начинайте создание порожденного подграфа с исходящих из узла связей. Выбор пути при тестировании потока управления заключается в выборе порожденного подграфа, начинающегося с узла ВЕ61й'.