Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 20
Текст из файла (страница 20)
Вот некоторые из таких коррелироваииых сегментов в примере: 32-ЗЗа4/34-34.12, ЗЗа4- ЗЗаб/34-34.12, ЗЗаб-ЗЗа8/34-34.12, 33а8-ЗЗа10/34-34.12, ЗЗЬ-33с/ЗЗс- 34, ЗЗс-34/34-34.12. 3. Для каждого сегмента выпишите все возможные отрезки пути, иа которых сегмент ие содержит циклов. 4. Выберите два любых сегмента с коррелироваииыми предикатами, даже если оии ие соединены напрямую, начните с тех пар сегментов, которые содержат идентичные предикаты.
Вам нужна строгая корреляция. Например, сегмент, в котором задается условие, и следующий сегмент, в котором это условие проверяется. Сегмент ЗЗЬ вЂ” ЗЗс помечает графу ЗЗЬ, впоследствии это проверяется в узле 34.3 сегмента 34 — 34.12. 5. Исключите методом от противного непроходимые пути.
Установите значение предиката в первом сегменте равным ИСТИНА и устраните все отрезки пути во втором сегменте, иа которых коррелироваииый предикат приии- мает значение ЛОЖЬ, Затем положите значение первого иредиката равным ЛОЖЬ и устраните все отрезки пути во втором ссгмеите, иа которых коррелироваииый предикат принимает значение ИСТИНА. Будьте, однако, внимательны, так как отрицание последовательности предикатов в виде АФВ4 С4 1)...
эквивалентно логической сумме отрицаний этих предикатов, то есть НЕ А ИЛИ НЕ В ИЛИ НЕ С ИЛИ НЕ П... Используйте для уверенности в верности преобразований булеву алгебру. 6. Продолжайте выполнять операции, описанные в пункте 5, объединяя сегменты и устраняя по ходу их комбинации. Таким образом, вы построите более длинные пути, содержащие коррелированвые предикаты. При объединении сегментов (например, ЗЗс — 34/34 — 34.12) вы создаете более длинные сегменты, хотя и с меньшим числом возможных путей в каждом из иих.
3.4. Методика В$ 7. На данном этапе у вас уже есть набор больших сегментов, которые не коррелируют друг с другом. Это означает, что вы можете выбрать отрезки пути в каждом из сегментов, которые не зависят от других сегментов. Выберите достаточное число путей в каждом сегменте, чтобы быть уверенным, что вы обеспечили покрытие связей внутри этих сегментов. 8. Объединяйте сегменты, комбинируя пути и выбирая имеющие смысл комбинации.
Обратите внимание, что число тестов при этом не должно увеличиться. Например, сегмент А содержит 6 путей, а сегмент  — 10 путей. Это означает, что пара сегментов будет содержать 1О путей, а не 60. Поскольку сегменты некоррелированные, вы можете связать любой отрезок пути в сегменте А с любым отрезком пути в сегменте В. 9. Продолжайте до тех пор, пока не получите набора путей, обеспечивающих покрытие. 10. Теперь мы можем перейти непосредственно к активизации.
Следуйте вдоль пути и по достижении предиката определите входное условие, при котором предикат принимает значение ИСТИНА пли ЛОЖЬ, в зависимости от требований пути. Вам, возможно, придется использовать некоторые методы из следующего раздела для осуществления этого, однако, как правило, для большинства логических предикатов и предикатов выбора, зто должно быть просто, так как вы уже убедились в отсутствии противоречий на выбранном пути.
1 1.1 11 12 1.2 1.3 1 3 1.4 1 4 1.5 1 5 1 6 1 6 1 7 1 7 1.8 1,8 2 2 2.1 21 2.2 22 3 з з.! 1прщ А!4 1приг А!9 1прщ АО4 !прщ АО8 1прщ АШ9 4прщ А!26 шрщ А!27 !при! Я!28 Н! = А!4 + А19 + АО4 + А!18 + АО9 + А!26 А!27 ° А!28 1прщ А!13 1прш А!289 Н2= Я14 + АШЗ + А1!9 + А!289 ИЗ= Н2-Н1 3.4.4.3. Алгебраическая активизация Интерпретация предиката. Предикат считается интерпретированным, если оп выражен через входные значения.
Интерпретация предиката зависит от выбора пути. Это означает, что мы можем получить эквивалентный предпкат, следуя в вычислениях по определенному пути, ведущему к этому предикату. Примером в данном разделе служит расчет детализированных льгот в Бланке А, строке 29 (См. Приложение). Модель для этого вычисления приводится ниже. Это не полная модель — она содержит только узлы, нахоляшнеся на пути, который мы активизируем. Переменные, начинающиеся с буквы А, от7п7сятся к бланку А или к строкам формы 1040. Переменные, начинающиеся с буквы Ч7, относятся к процедуре расчета. 86 Глава 3 ° Тестирование потока управления НЗ А!4 + А!9 +АП4 + АПВ + АП9 + А!26 + А!27 + Я!28- !Я 4 ь АПЗ + АП9 + Я!289) НЗ = А!8 + АП4 + АПВ ь А!26 + Я 27 + А!28 - ЯПЗ - А!289 В-+ )6-5 )+-НВ-«8 Второй преднкат на последней не зачеркнутой строке — это интерпретированный предикат.
Сначала мы подставили входные значения, а затем выразили предикат через них путем их полстановки в символьном виде. Нетрудно заметить, что спецификация в данном случае неверна. В ней говорится; «если результат равен нулю...», а должно быть: «если результат меньше или равен нулю...» Я зачеркнул последнюю строку, поскольку активизация у нас выполняется вдоль определенного пути. Мы будем рассматривать путь, определенный на строке 10.
Продолжим модель: 3 1 4 1Е А!9 + АП4 + АПВ + А!26 + А!27 + А!28 - АПЗ - А!289 > 0 4 5 0.8 * ИЗ - О.В * (А!9 + АП4 + АПВ + А!26 + Я!27 + А!28 - АПЗА!289) 5 6 злрщ А!32 6 6 5 если раздельно Этот путь я решил выбрать для данного теста. 6>6 — вени еевича«ее 6 5 7 Н6 $55.900 7 7.1 Н7 Н5 - Н6 = Я!32 - 55,900 8 ) 1 И7> О. )Г Я!32 - 55.900 > 0 8 9 И7* 0,03= Я) 32* 0.03.
1.667 00 9 2 М А!32* 0 03 -1.667 00 > 0 В * !А!9 + АП4 + АПВ + Я!26 + Я!27 + А!28 - АПЗ - А!289) 9.2 9.5 и!9 = 0 8 * (А!9 + АП4 + ЯПВ + Я!26 + А!27 + Я!28 - АПЗ— А!289) 9.5 1О НПО - А!4 ь АЕ9 + ЯП4 + АПВ + АП9 + А!26 + А!27 + А!28- 0 8*!А!9 + АП4 ь АПВ + А!26 + А!27 ь А!28 - ЯП1 - А!289) Ниже приведены интерпретированные предикаты, через которые проходит этот путь: Я!9 + АП4 " АПВ + А!26 + А!27 + А!28 - АПЗ - Я!289 > О РАЗДЕПЬНОЕ ЗАПОПНЕНИЕ А!32 - 55,900 > 0 Это простой случай, поскольку все три преднката полностью независимы. Но так бывает далеко не всегда.
Как правило, входные значения встречаются сразу в нескольких интерпретированных предикатах. Следует отметить, что здесь указаны далеко не все существующие условия. Дополнительные условия: все входные переменные должны быть больше или равны нулю.
Строго говоря, вам следует записывать такую информацию, чтобы не забыть ее на следующем шаге активизации. 3.4. Методика 87 На следуюшем шаге активизации мы ишем набор входных значений, удовлетворяю!цих всем интерпретированным преднкатам на заданном пути. В последнем примере это выполняется достаточно просто. АЕ9 + АП4 + АПВ + ЯЕ26 + А!27 + А!28 > АПЗ + АЕ289 РАЗДЕЛЬНОЕ ЗАПОЛНЕНИЕ Я1.32 > 55,900 Если нам сильно не повезет, то придется решать систему уравнений для активизирующих величин. Уравнения в системе представляют собой интерпретированные преднкаты. В большинстве случаев, однако, это просто вопрос правильного выбора входных значений для первого интерпретированного предиката, подстановки их в последующих предикатах и упрошения по мере продвижения. Предположим, например, что у нас есть следующий набор интерпретированных предикатов (это не относится к нашей модели) для выбранного пути: АЕ9 + АП4 + А!18 + А!26 + А!27 + ЯЕ32 > АПЗ + Я!28 ЯЕ9 + 0 05"ЯП4 > А!32 А!32 > 55.900 япа > Апв Обратите внимание, что я расположил неравенства так, что они направлены одинаково.
Сначала установите значение любой из входных переменных таким, чтобы избавиться от одного уравнения. В данном случае это значение величины АЕЗ2, которую я положил равной $55,905. Затем подставьте это значение в другие выражения и получите следующий набор предикатов. А1.9 + АП4 ' АПВ + А!26 + АЕ27 + 55.905 > АПЗ + А!28 АЕ9 + 0.05*ЯЕ!4 > 55.905 55.905 > 55.900 ЯП4 > ЯПВ Мы можем положить значение АЕ14 большим, чем АЕ18, например, представив его в виде АЕ14 = Апв+10.
АЕ9 + ЯЕ18 + 10 + АПВ + А!26 + А!27 + 55.905 > АЕ!3 + Я!28 А!9 + 0.05*ЕЯПВ + 101 > 55.905 55.905 > 55.900 япа = япв . 10 япв Упрошаем и группируем члены; Я 9 + 2"АПВ > А!26 + Я 27 > 55.915 > АПЗ + А!28 АЬ9 + 0.05*АПВ - 55.904.50 > О Складывая эти два выражения, получим; 2*Я!9 + 2.05*ЯПВ + А!26 + АЕ27 +10 5 - АПЗ - А!28 > 0 Мы свели все наши условия к одному выражению, слагаемые в котором можем выбирать по нашему усмотрению. После того как мы это проделали, подставляем выбранные значения в выражения для величин, от которых мы предварительно избавились (АЕ14, к примеру), и в результате получим набор согласованных входных значений, удовлетворяюших всем интерпретированным предикатам на заданном пути.
Вот мой набор входных значений: 88 Глава 3 ° Тестирование потока управления А09 АЬ18 АГ25 АЬ27 4013 4028 яща АЬ32 10 15 30 40 5 10 Ящв + 10 25 55.900 3.4.5. Предсказание итогов Следующим шагом в процессе проектирования теста является предсказание итогов для кажлого из выбранных путей. Хотя вашим первым побуждением будет попытка сыграть роль компьютера и пройти по этим путям вручную, не спешите это делать. Во-первых, это может быть очень непростой задачей.
Во-вторых, вы будете пытаться заменить собой компьютер, а в этом еще никто из людей не преуспел. Вы с большей вероятностью допустите ошибку в вашем предсказании итогов, чем программист в программе, Ниже приведено несколько более привлекательных альтернативных вариантов. Существующие тесты. Около 80 98 труда разработчиков программного обеспечения на ссгодняпший лень уходит на сопровождение программ. Большинство тестировщнков и программистов работает над модификацией уже существующего программного обеспечения.
Это означает, что 95 процентов ваших тестов не меняется от версии к версии. Если вы будете так же тщательно контролировать конфигурацию своих тестов, как и конфигурацию программного обеспечения, то у вас будет оракул для большинства ваших тестов. Старые программы. Серьезное обновление не всегда влечет за собой соответствующие изменения в тестовом комплекте, поэтому старые программы могут использоваться в качестве оракула. Например, старая программа была написана для В большинстве случаев вы можете выполнить активизацию, не прибегая к формальному решению уравнений с использованием матриц и даже не подозревая о том, что можно использовать эту процедуру.