Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 18
Текст из файла (страница 18)
Хотя это и хорошо на практике, дидактически зто неправильно, поэтому мы сначала выберем пути тестирования, а затем, в следующем разделе, будем их активизировать. Мы создаем путь, добавляя сегмент за сегментом, начиная с входного узла и продолжая до выходного узла. Мы выбираем наши сегменты, начиная с точек, где потоки управления расходятся из одиночного узла, и продолжаем до тех пор, пока потоки управления опять не сойдутся в один узел.
Примеры: 32 — 33а4, 33а4- ЗЗа6, ЗЗс — 34. Поступая таким образом, мы строим путь, комбинируя ранее выбранные сегменты. Понятно, что комбинировать сегменты пути можно только в таких, одноузловых точках схождения. В каждом предикате мы выполняем ветвление, выбирая возможные значения (например, значения ИСТИНА/ЛОЖЬ), тем самым расщепляя пути, построенные до этой точки. В узлах 32 или 33а1 нет выбора; все наши тесты должны начинаться с узлов 32, 33а1.
Первым предикатом является узел 33а2. Ветвление здесь соответствует выбору из значений ИСТИНА или ЛОЖЬ, приводя к следующим двум семействам тестов: А1: 32, ЗЗа1. ЗЗа2(И). ЗЗаЗ, ЗЗа4 А2: 32. ЗЗа!. ЗЗа2(Л). ЗЗа4 Следующий предикат — это узел ЗЗа4 (слеп?). Он, очевидно, является независимым от предыдущего предиката ЗЗа2 (65лет или старше?).
Поэтому, хотя пути снова расщепляются, нет необходимости добавлять это в тесты. Для определенности зафиксируем значение предиката ИСТИНА в пути А1, а значение ЛОЖЬ— в пути А2. А1: 32. 33а1. ЗЗа2(И>. ЗЗаЗ. ЗЗа4(И). ЗЗаб. ЗЗаб А2: 32. ЗЗа1. ЗЗа2(Л>. ЗЗа4(Л). ЗЗаб В узле ЗЗаб мы спрашиваем, исполнилось ли супругу 65 лет, а в 33а8 мы спрашиваем, слеп ли ваш супруг. Рассматривая эти первые четыре предиката, вы можете увидеть, что они в итоге обеспечивают 16 возможных путей прохода через этот сегмент спецификации. Мы, конечно, можем подготовить в этой точке 16 тестов, проверяющих все 16 комбинаций значений этих четырех предикатов, но это был бы плохой выбор. Тем самым мы бы пытались тестировать маловероятные ошибки.
Для проверки связи от узла 32 до узла ЗЗЬ требуются только два сегмента пути. Какие из них нам следует взять? Любой из двух комплементарных путей подойдет. Пути на отрезке от 32 к ЗЗЬ могут привести к значениям счетчика пометок от нуля до четырех. Из опыта мы знаем, что программисты склонны вводить путаницу с граничными значениями (нулем или четырьмя), поатому мы должны выделить эти варианты, следовательно, эту логику желательно проверить с помощью тестов, в которых оба — и человек, заполняющий форму, и супруг — слепы и старше 65 лет. А1 32. ЗЗа1. ЗЗа2(и>, ЗЗаЗ. ЗЗа4(И>, ЗЗаб.
ЗЗаб(И). ЗЗа?, ЗЗаб(И). 3349. ЗЗа10. ЗЗЬ А2: 32. Зза 1. ЗЗа2(Л). ЗЗа4(Л). ЗЗаб(Л>. ЗЗаз(Л). 33410, ЗЗЬ 3.4. Методика 79 Следующий предикат — это узел ЗЗЬ. Вначале я допустил ошибку и в результате получил проблемы с активизацией. Я не забегаю вперед, чтобы увидеть, может ли этот предикат заблокировать дальнейшие пути, завершаемые в сегменте 34 — 35. Вот два варианта для этого сегмента: В1: ЗЗЬ(И), ЗЗЬ1, ЗЗс и В2: ЗЗЬ(Л), 33с. Я не знаю, какие комбинации блокируются позже, поэтому в этой точке создаю четыре варианта, комбинируя наборы А и В. Позднее мы исключим тесты, которые не выполняются.
Получаем следующее семейство тестов. 81А!. 32. ЗЗа!. ЗЗа2(И), ЗЗаЗ. ЗЗа4(И). ЗЗа5 ЗЗаб(И>. ЗЗа7. ЗЗа8(И). ЗЗа9. ЗЗа!О. ЗЗЫи), ЗЗЫ. ЗЗс 82А! 32. ЗЗа1. 33а2(и) ЗЗаЗ. ЗЗа4(И) ЗЗа5. ЗЗаб(И> ЗЗа>. ЗЗа8(И>. ЗЗа9. ЗЗа10, ЗЗЫЛ), ЗЗс 81А2: 32. ЗЗа1. ЗЗа2(Л). ЗЗа4(Л>. 33аб(Л>. ЗЗа8(Л>.
ЗЗа10. ЗЗЫИ). ЗЗЫ. ЗЗс 82А2; 32 . 33а1. ЗЗа2(Л > . ЗЗа4(Л) . ЗЗаб(Л ), ЗЗа8(Л> ЗЗа 10 . ЗЗЬ(Л ) . ЗЗс Следуюший сегмент — это 33с — 34. Существует пять возможных путей через этот сегмент, и все пять необходимы для покрытия связей. Пять сегментов; С! ЗЗс(Л). ЗЗс2(И>. ЗЗсЗ. 34 С2. ЗЗс(И>. ЗЗс!(И). ЗЗсЗ. 34 СЗ ЗЗс(И>. ЗЗс!(П).
33с4(И). ЗЗсЗ. 34 С4. ЗЗс(Л). ЗЗс2(Л>. 34 Сб: ЗЗс(И>. ЗЗс1(П>. ЗЗс4(Л>. 34 Здесь целесообразна быстрая проверка. Я просмотрел четыре предиката (ЗЗс, ЗЗс1, ЗЗс2 и 33с4) в предыдушем списке, чтобы быть уверенным, что каждый предикат принимает оба значения (ИСТИНА и ЛОЖЬ) в каком-нибудь сегменте теста. С!В>Я1. 32. 33а!. ЗЗа2(И), ЗЗаЗ. ЗЗа4(И).
ЗЗа5. ЗЗаб(И). ЗЗа7. ЗЗав(И>. ЗЗа9. ЗЗа!О. ЗЗЫИ>, ЗЗШ . ЗЗс(Л). 33с2(И>. ЗЗсЗ. 34 С281Я1: 32. ЗЗа>. ЗЗа2(И>. ЗЗаЗ. ЗЗа4(И). ЗЗа5. ЗЗаб(И). ЗЗа>. ЗЗа8(И>. ЗЗа9. 33а!0. ЗЗЫ И). ЗЗЫ . ЗЗс(И). ЗЗс1(И>. ЗЗсЗ, 34 СЗВ1А1: 32. 33а1. ЗЗа2(И). 33аЗ. ЗЗа4(И). ЗЗа5. ЗЗаб(И). ЗЗа7.
ЗЗа8(И). ЗЗа9. ЗЗа10. ЗЗЫИ>. ЗЗЫ . ЗЗс(И). ЗЗс1(П>. ЗЗс4(И>. ЗЗсЗ. 34 С481А1; 32. ЗЗа 1. 33а2(И). ЗЗаЗ. ЗЗа4(И), ЗЗа5. ЗЗаб(И). ЗЗа7. ЗЗа8(И), ЗЗа9. ЗЗа10, ЗЗЫИ>. ЗЗЫ ЗЗс(Л). ЗЗс2(Л>. 34 С581А1: 32, ЗЗа 1, ЗЗа2(И), ЗЗаЗ. ЗЗа4(И>. ЗЗа5. ЗЗаб(И). 33а). ЗЗа8(И), ЗЗа9. 33а10. ЗЗЫ И>. ЗЗЫ . ЗЗс(И). ЗЗс!(Л>, ЗЗс4(Л). 34 С!82А1: 32. ЗЗа!.
ЗЗа2(И>, ЗЗаЗ. ЗЗа4(И>. ЗЗа5. ЗЗаб(И). ЗЗа7. ЗЗав(И>. ЗЗа9. ЗЗа10. ЗЗЫЛ>. Зс(Л). ЗЗс2(И). ЗЗсЗ. 34 С282А1: 32, ЗЗа 1. ЗЗа2(И>. ЗЗаЗ. ЗЗа4(И). ЗЗа5. ЗЗаб(И). ЗЗа7. ЗЗа8(И>, ЗЗа9, ЗЗа10. ЗЗЫЛ). ЗЗс(И). ЗЗс1(И). ЗЗсЗ, 34 СЗВ2А! 32. ЗЗа1. ЗЗа2(и). ЗЗаЗ. ЗЗа4(И). ЗЗа5.
ЗЗаб(И). ЗЗа7. ЗЗа8(и>. 33а9. 33а10. ЗЗЬ(Л). ЗЗс(И). ЗЗс1(П>, 33с4СИ) ЗЗсЗ. 34 С482А!: 32. ЗЗа 1. ЗЗа2(И>. ЗЗаЗ. ЗЗа4(и), ЗЗа5. ЗЗаб(И>. ЗЗа>. ЗЗа8(И). ЗЗа9. ЗЗа>0. ЗЗЬ(Л,', ЗЗс(Л). ЗЗс2(Л). 34 С582А1: 32. ЗЗа 1. ЗЗа2(И), ЗЗаЗ. ЗЗа4(И) ЗЗа5. ЗЗаб(И>. ЗЗа). ЗЗа8(И>. ЗЗа9. ЗЗа10. ЗЗЫЛ>. ЗЗс(и). ЗЗсцЛ>. ЗЗса(Л>. 34 С181Я2. 32. 33а1. 33а2(Л>. ЗЗа4(Л), ЗЗаб(Л>. ЗЗа8(Л>. ЗЗа10. ЗЗЫИ), ЗЗЫ . ЗЗс(Л).
33 2(и). ЗЗсЗ. 34 С281Я2 32. 33а1, ЗЗа2(Л). ЗЗа4(Л>. ЗЗаб(П). ЗЗаб(Л>. ЗЗа>0. ЗЗЫ И>. ЗЗЫ . ЗЗс(И). ЗЗс1(И), ЗЗсЗ, 34 СЗВ1А2: 32. ЗЗа1. ЗЗа2(П>. ЗЗа4(Л>. ЗЗаб(Л). ЗЗав(Л). ЗЗа10, ЗЗЫ И>. ЗЗЫ . 33с(И), ЗЗс1(Л>. 3344(И>. ЗЗсЗ. 34 С48!А2: 32. ЗЗа1. ЗЗа2(Л). ЗЗа4(Л), ЗЗаб(Л>. 33а8(Л).
Зза10. ЗЗЫ И>. ЗЗЫ . 80 Глава 3 е Тестирование потока управления ЗЗс(Л>. ЗЗсг(Л). За Зг, ЗЗа). ЗЗаг(Л>, 3344(Л>. ЗЗаб(л). ЗЗс(И). ЗЗсцЛ>. ЗЗса(Л>. За 32. Зза1. Зза2(Л). Зза4(П>. Ззаб(Л), Ззс(П). Ззс2(И). Ззсз. 34 Зг. ЗЗа>. ЗЗаг(Л). ЗЗа4(Л>, ЗЗаб(Л>. ЗЗс(И>. ЗЗс)(И>. ЗЗсЗ. З4 Зг ЗЗа>.
ЗЗаг(Л>. ЗЗа4(Л). ЗЗаб(Л>. Ззс(И). ЗзсВЛ). Ззс4(И), Ззсз. 34 32. Зза1. Зза2(П), Зза4(Л). Ззаб(Л), Ззс(Л), Ззс2(Л). 34 32. Зза1. Зза2(Л). Зза4(Л), Ззаб(Л>. Ззс(И). Ззс1(П). Ззс4(Л). 34 С581А2: С182А2 Зза8(Л). ЗЗа10. ЗЗЫИ). ЗЗЫ, Зза8(л). Зза!О. ЗЗЫП). Зза8(Л). Зза10. ЗЗЬ(Л). Зза8(Л).
Зза!0. ЗЗЬ(Л). 33а8(л>. Зза10. ЗЗЫЛ). Зза8(П), Зза10. ЗЗЫЛ), С28242 СЗВ2А2 С482А2: С582А2 Небольшая подсказка. Используйте особенности вашего текстового редактора для предотвращения ошибок. Для начала я скопировал сегменты с С1 по С5, а затем я использовал копирование и вставку для вставки предыдущих сегментов (В1А2- В2А2), перед С1-С5. Так как узел ЗЗс не был включен в копируемый блок, мне не пришлось удалять его копии. Такой способ является простым и более надежным.
Ниже приведены восемь возможных сегментов пути от узла 34 до узла 34.12. 01: 34(И). 34 1. 34.12 02. 34(П). 34.2(И). 34.4. 34. 12 03: 34(Л). 34.2(л). 34 3(И). 34.4. 34 12 04: 34(Л). 34.2(П). 34 3(Л>, 34.5(И). 34.6. 34.12 05: 34(Л), 34.2Ш ). 34.3(П). 34.5(П). 34.7(>(ОЛОСТ). 34.8.
34 12 06: 34(Л). 34.2(л>. 34.ЗШ ), 34 5(Л). 34 7(ГЛАВА). 34 9. 34.12 07: 34(Л). 34.2(Л). 34 3(Л>, 34.5(Л). 34 7(СОВНЕСТНО). 34.10. 34.12 08: 34(Л), 34.2(Л>. 34.3(Л). 34.5(Л). 34 7(РАЗДЕЛЬНО). 34.11. 34 12 Если мы продолжим комбинирование, то у нас получится 20 вариантов, скомбинированных с восемью вариантами.
То есть всего 160 вариантов для рассмотрения. Поэтому стоит исключить некоторые варианты по ходу рассмотрения. Это еще одна причина, почему активизация и выбор пути обычно выполняются вместе. Мы исключаем пути посредством удаления комбинаций, которые не могут быть выполнены, так как нредикаты блокируют друг друга. Я создал таблицу из 20 строк и 8 столбцов (табл. 3.2). Заголовками строк были сегменты с С1В1А1 по С5В2А2, а заголовками столбцов — сегменты от 1)1 до 08. 1а. Значение ЛОЖЬ в узле 34.5 означает, что графа 33с не была помечена, поэтому путь не может пройти через узел 33сЗ, соответствующий помеченной графе. Я использовал текстовый редактор, чтобы найти те сегменты, которые содержат в себе узел ЗЗСЗ.
Это оказались С1, С2 и СЗ. Их нельзя скомбинировать с 1)5 — Г)8, так как в этих вариантах должна быть помечена графа ЗЗсЗ. Поэтому следует вычеркнуть их из таблицы, 1Ь. Напротив, значение ИСТИНА в узле 34.5 означает, что графа ЗЗс была помечена, поэтому путь проходил через узел 33сЗ. Следовательно, 04 не комбинируется с С4 и С5. 2а. Если графа ЗЗЪ помечена, логика не позволяет выбрать в узле 34.3 исходящую ветвь, соответствующую значению ЛОЖЬ. Следовательно, если выполняется узел ЗЗЬ1, сегменты 1)4 — 1)8 выполняться не могут.