Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 28
Текст из файла (страница 28)
отмел тпсоще (другие доходы) 22 общий доход : = заработная плата + напогооблагаеиый доход с процентов + .. - другие доходы. Обратимся к форме 1040. Узлы с 7 по 21 — источники данных. Из них узлы 8а, 9, 10, 12, 13, 14, 15, 18, 19 и 21, возможно, пришли из других форм ВНС, но будут трактоваться здесь как входные данные, чтобы не усложнять пример. Строка 22— обрабатывающий узел.
Узел 22 также зависит от узлов 15Ь и 18Ь, расчетом которых мы па данный момент пренебрегаем (а вы не должны). Почти каждая строка в форме 1040 соответствует объекту данных, который вводился без предварительного расчета, пришел из другой формы или был рассчитан по ходу обработки формы 1040. Отношение (связи). Непосредственно используется для расчета значения. В последнем примере узлы с 7: надев (заработная плата) по 21: оСЬег 1псове (другие доходы), исключая 15а: 1ЯА (индивидуальные пеькионные счета (ИПС)) и 16ат репв1опд (пенсии), напрямую используются для вычисления значения узла 22: Сота1 тпсояе (общий доход).
Эти значения также используются косвенным образом для вычисления значений других объектов — таких как узел 53: уош' СоСа1 Сахев (общая сумма ваших налогов), но поскольку применение не являет- 5,3. Отношения и модель 119 ся прямым, то здесь нет прямых стрелок из этих узлов к узлу 53. Однако есть потоки данных из некоторых из этих узлов, приходящие в узел 53. Свойства узлов (веса узлов). Пометьте узлы функцией входящих связей, которую онп вычисляют.
Это может быть просто имя выхода функции (например, об. щий доход) пли сама фактическая функция, например, формула. Свойства связей (веса связей). Добавление весов связей не является необходимым, поскольку эта информация заложена в весах узлов. Однако поскольку графы потока данных могут быть довольно сложными, обычно исходящие связи помечаются именами представляемых ими объектов данных.
Если узел представляет собой узел выбора данных, пометьте входящие связи значениями предиката выбора, соотнесенными с каждой входящей связью. 5.3.2. Аналогии с графами потока данных В графах потока управления имеются конструкции, эквивалентные конструкциям в графах потока данных. Простая обработка. Обгячно простая обработка обозначается одиночным узлом обработки без принятия во внимание порядка обработки.
Несмотря на то, что предыдущий пример для вычисления СоСа) йпсоае (общий доход) выглядит упорядоченным, этого упорядочения не требуется, поскольку ВНС не настаивает, чтобы мы заполняли налоговые документы, сначала указывая сумму заработка, затем налог па проценты, и так далее. Если мы пишем программу на обычном 120 Глава 5 ° Тестирование потоков данных 21. 22. 11: 22: 15а: 15Ь: 15Ь: 22: отлег тпсаше (другие доходы) а)тлюпу гесетчеб (полученные алииенты) тата! !85 щ зтгтьцттоп (общее распределение ипс) сахаьТе ащоцпт (налогооблагаемая сумма> (справьтесь у вашего бухгалтера) сахаше ашоцпс (налогаоблагаемал сумиа) (справьтесь у другого вашего бухгалтера> лепта) гоуа)Стев (доходы от аренды> Гага тпсоше ог )озз (прибыль или убыток от сельского хозяйства> цпешр)аущепт сошрепзаттоп (пособие по безработице) аоста! зесцгйтту Ьепеттт (пособие по социальному обеспечению) тахаы е зоста1 зесцю Су Ьепе(тт (налогооблагаемые пособия по социал~ному обеспечению> Сах ехещр( тпсегезт тпсоще (проценты освобожденные от налогов> бтчрбепо тпсоше (доход от дивидендов) другие прибыли и убытки из формы 4797 сахаы е гегцпбз (облагаеные налогон платещи по долгам) сахаре тпсегезс (налогооблагаемые проценты> Ьцзтпезз тпсоще ог 1озз (прибыль или убытки от предпринимательской деятельности) надев (заработная плата) сартта> датпз ог Тозз (капитальнал прибыль или убытки) соса) тпсаше Тобщий доход): - надев (заработнал плата) ь сахаыуе тпсегезь тпсоще (налогооблагаемый доход с процентов) + сах ехешрс тпсегезс тпсоше (проценты асвобоиденные от налога) + ..
+ о(ьег тпсоле (другие доходы) 16а: 16Ь. 17. 22 18: 22. 19: 22: 20а 20Ь: 20Ь 22: 8Ь 9. 22. 14: 22: 10: 22. ва: 22; 12: 22: 7. 22. 13 22 22: Не так важно, как мы переставим строки в вышеприведенном графе. Связи определеиы, так что порядок, в котором мы расположим их иа странице, ие влияет иа обработку или на модель.
Я включил узел 8Ъ, который, как кажется, никуда не ведет; ВНС желает получить зту информацию, несмотря даже иа то, что она ие используется в этом расчете, По-видимому, оии используют ее для каких-то других расчетов. 1Е-ТНЕМ.ЕЕЗЕ. Здесь приведена спецификация для строки 36 из формы 1040 ВНС. 36 Если значение в строке 32 (Абзцзсеб вгозз !пстхле (скорректированный общий доход)) иеньше ипи равно $83.850. уиноиить $2450 на общее число льгот. закаленных в строке бе. Если суниа в строке 32 (ЯО)цзвеб 6гозз !псоше (скорректированный общий доход)) больше $83,850, смотрите инструкции (8НС 1040Т длл того чтобы рассчитать облагаеную сунну.
Приводим модель псевдокода для этой операции. 36 1: 36. !Е((СО))> строка 32 <= $ 83850) ТНЕН строка 36 = число асвобошдений * $2450 ЕС56 строка 36. = расчет согласно инструкции языке программирования, тогда иам следует выбрать определенный порядок выполнения действий, но это упорядочение делается по нашему выбору и ие существенно для решения задачи. В диаграммах потока данных мы ие навязываем определенную последовательность, ие предполагаемую требованиями. Обозначение в виде списка связей удобнее графического представления. Комментарий, относящийся к связи, согласно нашей договоренности соответствует первому узлу из пары. Это облегчит нам задачу, поскольку иам не придется писать список узлов и затем еще и список связей.
В следующем примере коммеитарий отпел ) псоюе (другие доходы) соответствует связям, исходящим из узла 2 !. 5.3. Отношения и модель 121 Ниже приводится классический граф потока управления для этой операции. 36 1: 36.2 узел предиката. СОД <- $83850 36 1: 36.3: узел предиката, СОД > $83850 36 2: 36: Строка 36. - число освобокдений * $2450 36.3: 36: Строка 36: - расчет согласно инструкции Переменная Строка 36 не перегружена. Почему? Вот граф потока данных для этой операции, общее число освобокдений значение константы $2450 значение константы $83850 общее число освобоыдений >й! адзшсец дговв тпсоще (скорректированный общий доход) расчет согласно инструкции узел выбора данных 36.1 1Е СОД <= К2 Р23 1Е СОД > 12 бе: 36.1: й1: Зб.!: й2: 36: 36.1: 36: 32. 36.
Р23: 36: 36: Меня не удовлетворяет эта модель, поскольку средства управления перемешаны с вычислением. Действительно, замысловатая модель, могла бы запутать, так что я бы добавил несколько связей, чтобы сделать ситуацию более ясной, предложив следующий граф потока данных. гога! пцюЬег ат ехещрстопз (общее число освобождений) значение константы $2450 соСа1 пцщЬег оу ехеюрстопз (общее число асвобокденнй) * К! расчет согласно инструкции значение константы $83850 абзщтеб дговв тпсове (скорректированный общий доход) значение селектора (управляющая входящая связ>) узел выбора данных Зб 1 !Е СОД = К2 (значенне селектора- ИСТИЙА) бе: 36.1. й1: 36.1: 36.1: 36: Р23: Зб: '<2: 36.2: 32: 36.2: 36.2: 36: Зб Р23 1Е СОД > <2 (значение селектора - ЛОЖЫ Вы, возможно, захотите начертить все эти графы потока данных для сравнения.
Модели потоков данных могут показаться более сложными по сравнению с ранее рассматриваемыми моделями, но это не так. Они только включают больше информации, чем обычно закладывается в модель потока управления. Дополнительные детали возникают вследствие того, что каждый объект данных должен откуда-то появиться. Вот почему мы добавили два узла )(1 и к2, отвечаютцие за константы $2450 и $83850 соответственно. Мы добавили связь 32: 36 в первую модель потока данных (связь 32: 36.2 во вторую модель потока данных) потому что ат(Зцвсет! дгодд тпсояе (скорректированный общий доход) должен откуда-то появиться. Связь бе: 36.! для переменной тота1 пцщбег от ехещрттопд (общее число освобождений) была добавлена по той же причине.
Если мы уберем эту дополнительную информацию (уменьшив детализацию нашей модели), мы получим даже еще более простую модель (по числу узлов и связей), чем модель потока управления. 36.1 36: сова) пцщЬег ог ехэвргтопз (общее число освобокдений) * К! Р23: 36: расчет согласно инструкции Зб: .. узел выбора данных 36 1 !Е СОД <= й2 Р23 !Е СОД > К2 122 Глава 5 ° Тестирование потоков данных При качественном проектировании программных средств предполагается, что значения константам [с! и )с2 присвоены раньше в программе или хранятся в таблице.
Это намного лучше, чем многократное повторение значений $2450 и $83850 в коде программы. Это правильный подход, поскольку уменьшается вероятность ошибок, при которых якобы постоянные величины в разных местах отличаются друг от друга. Это хорошо также для сопровождения, поскольку в том случае, когда ВНС изменит ставки налогового обложения (что неминуемо когда-нибудь случится), нужно будет изменить одно значение в одиом месте'. Это, конечно, правильиый подход, ио мы ие можем быть уверены, что программист так и поступил. Но почему об этом должен заботиться тестировщик? Используя символьные коистанты в нашей модели, мы уменьшаем вероятность ошибок там, где мы иепреднамереиио используем несколько различных значений предполагаемой константы, Хороший дизайн программного обеспечения часто также хорош и для проектироваиия теста.
1Г-ТНЕИ. Мне не нравятся конструкции типа 1Г-ТНЕМ в графах потока данных, поскольку оии неоднозначны, если условие ие выполняется. В графах потока управления неоднозначности меньше, поскольку следующий оператор всегда подразумевается. Большинство конструкций 1Г-ТНЕМ лучше моделировать при помощи конструкций 1Г-ТНЕМ-ЕЕ5Е, как в следующем примере: !Г !предикат — ИСТИНА> гйеп х функция Е[5Е х. пусто Явно определяйте, что происходит с объектом данных, когда предикат ие истинеи.
Например, постулат: 54 удержан федеральный налог. Если вы используете форму 1099, отпетые [Грдфд! можно представить при помощи следующего псевдокода и модели потока данных, соответственно. 54 11 нз форм(ыз 1099 ТНЕН графа. = отмечена Е[5Е графа не отмечена 54 1; 54: графа - отмечена 54.2. 54: графа, - не отмечена Г 1099 54 значение ЛОИЬУИСТИНА нз формы 1099 54 , узел выбора данных 54,1 !Г Г!099 - ИСТИНА 54.2 !Г Г1099 = ЛОИЬ Будьте осторожны с такими величинами, как ноль и пусто; это ие одно и то же. Мы ввели два входных узла в последний пример; 54.1 графа: = отнечена и 54.2 гра. фа: - ие отмечена.