Дейс
твия
Доба влен ие новог о студе нта
Нет Нет Нет Нет Нет Нет Нет Нет
Да
Нет Нет Нет Нет Нет Нет Нет
Изме нени е студе нта
Нет Нет Нет Нет Нет Нет
Да
Нет Нет Нет
Да
Нет Нет Нет Нет Нет
Удал ение студе нта
Нет Нет Нет Нет Нет
Да
Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет
42
Таблица 5-11: Таблица решений для Регистрационной системы Государственного университета.
Правила с 1 по 8 показывают, что никакие данные о студенте введены не были. Правила с 1 по 4 показывают, что в случае, если для студента не был введен СтудентID, то никакие действия не возможны.
Правила с 5 по 8 показывают, что СтудентID был введен. В этих случаях создание нового студента не является правильным. Правило 5 не требует ни изменения, ни удаления, поэтому не выполняется. Правила
6 и 7 требуют одну функцию и поэтому они выполняются. Обратите внимание, что правило 8 показывает, что выбраны как изменение, так и удаление, поэтому никаких действий не предпринимается.
Правила с 9 по 16 показывают, что данные о студенте были введены. Правила с 9 по 12 показывают, что
СтудентID не был введен, так что эти правила относятся к созданию нового студента. Правило 9 создает нового студента. Правило 10 удаляет студента. Правило 11 позволяет изменять данные студента. Правило
12 требует, чтобы было выполнено и изменение, и удаление, поэтому никаких действий не предпринимается. Правила с 13 по 16 предоставляют данные студента, указывающие на нового студента, но в то же время предоставляют и СтудентID, указывающий на существующего студента. Из-за таких противоречивых входных данных никаких действий не предпринимается. Часто в таких ситуациях отображаются сообщения об ошибке.
Применение и ограничения Тестирование таблиц принятия решений может быть использовано, когда система должна реализовывать сложные бизнес-правила, когда эти правила могут быть представлены в виде комбинации условий и когда эти условия имеют дискретные действия, связанные с ними.
Резюме ● Таблицы решений используются для записи сложных бизнес-правил, которые должна реализовывать система. Кроме того, они могут служить инструкцией по созданию проверочных тестов.
● Условия представляют собой различные исходные условия. Действиями являются процессы, которые должны быть выполнены в зависимости от различных комбинаций входных условий.
Каждое правило определяет уникальное сочетание условий, которые приводят в исполнение
("запуск") действия, связанные с этим правилом.
● Для каждого правила создаётся как минимум один тест-кейс. Если состояния этого правила бинарные, то должно быть достаточно одного теста для каждого сочетания. С другой стороны,
если состояние является диапазоном значений, то тестирование должно учитывать и нижнюю, и высшую границы диапазона.
Практика 1. Посещение Государственного университета является дорогостоящим мероприятием. В конце концов, они не получают государственное финансирование. Как и многие другие студенты, те, кто планирует его посещать, обращаются за студенческой помощью, используя БПФПС (Бесплатное
Приложение для Федеральной Помощи Студентам). Следующие инструкции были взяты из этой
43
формы. Изучите их и создайте таблицу принятия решений, представляющую правила БПФПС
(примечание: вы можете не осилить материал, подобно этому).
Шаг четвертый:
кого рассматривать в качестве родителя на этом шаге?
Прочитайте эти примечания, чтобы определить, кого нужно рассматривать в качестве родителя при заполнении этой формы. Ответьте на все вопросы четвертого шага про них, даже если вы не живете с ними.
Вы сирота, находитесь или находились (до 18 лет) под опекой? Если да, то пропустите четвертый шаг. Если ваши родители живут вместе и женаты друг на друге, ответьте на вопросы про них. Если один из ваших родителей вдовец или живет один, ответьте на вопросы только об этом родителе.
Если ваш овдовевший родитель снова женился и женат до сих пор, ответьте на вопросы об этом родителе и о человеке, на котором женат (замужем) ваш родитель. Если ваши родители разведены или живут раздельно,
ответьте на вопросы о том родителе, с которым вы прожили больше за последние 12 месяцев. Если вы не жили с одним из родителей больше чем с другим, ответьте про того родителя, кто оказывал вам большую финансовую поддержку за последние 12 месяцев или в течение последнего года, когда вы получали такую поддержку от одного из родителей. Если этот родитель женился (вышел замуж) на данный момент, ответьте на оставшиеся вопросы этой формы об этом родителе и том человеке, на котором он женат (замужем).
Литература Beizer, Boris (1990).
Software Testing Techniques
(Second Edition). Van Nostrand Reinhold.
Binder, Robert V. (2000).
Testing Object-Oriented Systems: Models, Patterns, and Tools
. Addison-Wesley.
44
Глава 6. Попарное тестирование
"Антона влекло к Анжеле как мотылька к пламени - не как любого мотылька, а как одного из гигантских
шёлковых мотыльков рода Hyalophora, возможно Hyalophora euryalus, чьи огромные красно-коричневые
крылья с основными белыми серединными линиями порхали так томно, пока одно из них не загорелось
от огня, раздувая пламя к невиданным высотам, пока не сгорит косматая грудь и брюхо, наполненное
жиром, которое обеспечивает удовлетворенное шипение до конца мучения."
Эндрю Эмлен
Введение
Как обычно говорят в Монти Пайтоне:
"А теперь о чем-то совершенно другом".
Рассмотрим следующие ситуации:
● Сайт должен работать в 8
браузерах - Internet Explorer 5.0, 5.5 и 6.0, Netscape 6.0, 6.1 и 7.0, Mozilla
1.1, и Opera 7; используя различные
плагины - RealPlayer, MediaPlayer, без плагинов; запускаться на различных
клиентских операционных системах - Windows 95, 98, ME, NT, 2000, и XP; получать страницы от разных
веб-серверов - IIS, Apache, и WebLogic; работать с различными серверными
операционными системами
- Windows NT, 2000 и Linux.
○ 8 браузеров
○ 3 плагина
○ 6 клиентских операционных систем
○ 3 сервера
○ 3 серверных операционных системы
○ 1296 комбинаций
● Банк создал новую систему обработки данных, которая готова к тестированию. У этого банка есть разные клиенты - обычные клиенты, важные клиенты, юр.лица и физ.лица; различные виды счетов - сберегательные, ипотечные кредиты, потребительские кредиты и коммерческие кредиты; плюс отделения банка работают в разных штатах, с разной спецификой проведения финансовых операций - Калифорния, Невада, Юта, Айдахо, Аризона и Нью-Мехико.
○ 4 типа клиентов
○ 5 видов счетов
○ 6 штатов
○ 120 комбинаций
● В объектно-ориентированной системе объект класса "А" может передать сообщение, содержащее параметр Р, объекту класса "Х". Классы "B", "C" и "D" унаследованы от класса "А", поэтому тоже
45
могут послать сообщение. Классы "Q", "R", "S" и "T" унаследованы от "P", поэтому могут быть переданы как параметры. Классы "Y" и "Z" унаследованы от класса "X" и могут получать данные
○ 4 класса отправителей
○ 5 классов данных
○ 3 класса получателей
○ 60 комбинаций
Что общего у этих примеров? В каждом случае у нас есть большое количество комбинаций, которые необходимо проверить. В каждом случае существует большое количество комбинаций, не тестировать которые выглядит рискованно. Но количество комбинаций настолько велико, что, скорее всего, у нас не хватит ресурсов, чтобы спроектировать и пройти тест-кейсы. Поэтому, учитывая наши ограниченные ресурсы, каким то магическим образом мы должны отобрать только часть комбинаций. Какие способы можно использовать для выбора такого подмножества?
Начнем список от наихудших способов, и будем двигаться к наилучшим:
●
Не тестировать совсем. Просто бросить это дело, так как количество входных комбинаций, а значит и количество тест-кейсов, слишком велико.
●
Тестировать все комбинации (один раз), но это задержит проект настолько, что он может потерять место на рынке, что приведет к всеобщему стрессу или компания вообще выйдет из бизнеса.
●
Выбрать один или два теста и надеяться на лучшее.
●
Выбрать тесты, которые вы уже запускали, возможно, как часть тестирования, выполняемого при программировании. Включить их в формальный тест-план и пройти снова.
●
Выбрать тесты, которые легки в создании и выполнении. Не обращать внимания на то, обеспечивают ли они полезной информацией о качестве продукта.
●
Создать список всех комбинаций и выбрать несколько первых.
●
Создать список всех комбинаций и выбрать случайное подмножество.
●
Волшебным способом выбрать специально выделенное небольшое подмножество, которое находит много дефектов - больше, чем можно ожидать от такого подмножества.
Мои студенты часто задумываются над плохими вариантами исполнения работы. Над развитием навыков выбора плохого. Это будет неоценимо при оценке других идей.
Студент в одном из моих классов поделился этой историей: его компания использует процесс, который они называют "Пост-установочное тестовое планирование." Это звучит впечатляюще до тех пор, пока не расшифровать, что это такое. Любые тесты, которым
посчастливилось запуститься и успешно выполниться, задокументированы как их тест-план.
Последний вариант выглядит наиболее успешным, но немного расплывчатым. Вопрос заключается в том, что за "волшебство" позволит нам выбрать это "специально выделенное" подмножество?
Замечательным подходом при выборе подмножества может быть случайный выбор, но большинству людей сложно выбрать действительно случайно.
Ответ кроется в том, что не следует пытаться проверить все комбинации значений для всех переменных, а нужно проверять комбинации пар значений переменных. Это существенно уменьшает количество
46
комбинаций для тестирования, которые должны быть созданы и выполнены. Вдумайтесь в значительное уменьшение усилий при тестировании в следующих примерах:
● если приложение имеет четыре разных входных параметра и каждый из этих параметров может принимать три различных значения, то количество комбинаций будет 3
4
, т.е. 81 комбинация.
Попарно, можно покрыть все входные значения за 9 тест-кейсов.
● если приложение имеет 13 разных входных параметров и каждый из этих параметров может принимать 3 различных значения, то количество комбинаций будет 3
13
, т.е. 1 594 323 комбинаций.
Попарно, можно покрыть все входные значения за 15 тест-кейсов.
● если приложение имеет 20 разных входных параметров и каждый из этих параметров может принимать 10 различных значений, то количество комбинаций будет 10
20
. Попарно можно покрыть все входные значения за 180 тест-кейсов.
Это очень показательное доказательство пользы попарного тестирования.
К сожалению, существует всего несколько задокументированных фактов:
1. Исследование, опубликованное Brownlie of AT&T в отношении тестирования
local-area network-based electronic mail system
гласит, что применение попарного тестирования обнаружило на 28% дефектов больше, чем их оригинальный план разработки и выполнение 1 500 тест-кейсов (позже количество тест-кейсов было сокращено до 1 000 из-за временных ограничений), и заняло на 50% меньше ресурсов.
2. Wallace и Kuhn опубликовали исследование, проведенное Национальным институтом стандартов и технологий над ошибками ПО в отозванных мед. устройствах, собиравшимися на протяжении 15 лет. Они пришли к выводу, что 98% дефектов могли быть обнаружены с помощью попарного тестирования.
3. Kuhn и Reilly проанализировали недостатки, записанные в базе данных браузера Mozilla. Они определили, что попарное тестирование обнаружило бы 76% найденных ошибок.
Почему попарное тестирование так хорошо работает? Неизвестно. Здесь нет "физики ПО", лежащей в основе, которая требует этого. Одна из гипотез заключается в том, что большинство дефектов являются либо одиночными (тестируемая функция просто не работает и любой тест на эту функцию найдет дефект), либо двойными (это пара из функции/модуля, с которыми функция/модуль проваливаются, хотя все остальные пары выполняются успешно). Попарное тестирование определяет минимальный набор, который поможет нам проверить все одиночные и попарные дефекты. В любом случае, успех применения этой техники на многих проектах, как задокументированных, так и не задокументированных, является отличной мотивацией для ее использования.
Попарное тестирование может не выбрать комбинацию, которую разработчики и тестировщики знают либо часто используют, т.к. её невыполнение является крайне рискованным.
Если такие комбинации существуют, используйте попарные тесты, а затем добавляйте дополнительные тест-кейсы для того, чтобы минимизировать риск пропустить важную комбинацию.
Методика Использование всех пар для создания тест-кейсов основывается на двух техниках - на
ортогональных массивах или алгоритме
Allpairs.
47
Ортогональные массивы
Что такое ортогональные массивы? Происхождение ортогональных массивов может быть прослежено от
Эйлера, великого математика, в облике латинских квадратов. Генетти Тагучи популяризовал их использование в тестировании аппаратного обеспечения. Замечательной книгой является "Качество инженерного использования робастного проектирования" Мадхава С. Фадке.
Рассмотрим цифры 1 и 2. Сколько комбинаций существует для пары значений "1" и "2"? {1,1}, {1,2}, {2,1} и
{2,2}. Ортогональный массив - это двумерный массив, с таким интересным свойством - выберите любые два столбца в массиве. В каждой паре столбцов будут встречаться все комбинации значений этих столбцов. Рассмотрим массив L
4
(2
3
):
Таблица 6-1: Ортогональный массив L
4
(2
3
).
Серые заглавные столбец и строка с номерами не являются частью ортогонального массива, а включены для удобства определения ячеек. Возьмем столбцы 1 и 2, и посмотрим, есть ли в них все комбинации этих столбцов (значения {1,1}, {1,2}, {2,1} и {2,2})? Да, причем в указанном ранее порядке. Теперь возьмем столбцы 1 и 3, и посмотрим, есть ли в них все комбинации значений этих столбцов (опять же значения {1,1},
{1,2}, {2,1} и {2,2})? Да, хотя и в другом порядке. Наконец, возьмем столбцы 2 и 3, и посмотрим, есть ли в них все комбинации значений этих столбцов ({1,1}, {1,2}, {2,1} и {2,2})? Да, есть. Массив L
4
(2
3
) является ортогональным; то есть в каждой паре столбцов будут встречаться все комбинации значений этих столбцов.
Как тестировщик, вы не должны создавать ортогональные массивы; все, что вам нужно сделать, это определить один из подходящих размеров. Сделать это вам помогут книги, веб-сайты и автоматизированные инструменты.
Примечание о любопытном (но стандартном) обозначении: L
4
означает ортогональный массив с четырьмя строками, а (2
3
) - это не степень. Это означает, что у массива три столбца, в которых значения могут быть "1" или "2".
48
Рисунок 6-1: обозначение ортогонального массива
Возьмем ортогональный массив побольше. Допустим у нас есть входные данные со значениями ""1", "2" или "3"; как много существует пар для значений"1", "2" и "3"? {1,1}, {1,2}, {1,3}, {2,1}, {2,2}, {2,3}, {3,1}, {3,2}, и {
3,3}. Рассмотрим ортогональный массив L
9
(3
5
):
Таблица 6-2: ортогональный массив L
9
(3
5
)
Возьмем столбцы 1 и 2, и посмотрим, есть ли в них все девять комбинаций значений "1", "2" и "3" - {1,1},
{1,2}, {1,3}, {2,1}, {2,2}, {2,3}, {3,1}, {3,2}, и {3,3}? Да. Теперь возьмем столбцы 1 и 3, и посмотрим, есть ли в них все девять комбинаций значений "1", "2" и "3"? Да, хотя и в другом порядке. Возьмем столбцы 1 и 4, и посмотрим, есть ли и в них все девять комбинаций? Да, есть. Продолжим анализ других пар столбцов - 2 и
3, 2 и 4, и, наконец, 3 и 4. Масив L
9
(3
5
) является ортогональным; то есть в каждой паре столбцов будут встречаться все комбинации значений этих столбцов.
Инструмент rdExpert от Phadke Associates реализует подход ортогонального массива.
Ссылка:
http://www.phadkeassociates.com
Следует отметить, что в массиве появляются не все комбинации по одному, двум и трем парам значений.
Например, не появляются тройки {1,1,2}, {1,2,1} и {2,2,2). Ортогональные массивы гарантируют только то, что в массиве существуют все комбинации пар. Комбинации, похожие на {2,2,2}, являются тройками, а не парами.
Ниже представлен ортогональный массив L
18
(3
5
). Он имеет пять столбцов, каждый из которых содержит значение "1", "2" или "3". Проверьте столбцы 1 и 2 на наличие пары {1, 1}. Есть ли в этих двух столбцах
49
такая пара? Подождите! Не смотрите в таблицу.
Применяя определение ортогональной матрицы, подумайте, каков будет ответ? Ответ - "Да", такая пара существует, как и любая другая пара из значений "1", "2" и "3". Пара {1, 1} находится в первой строке. Обратите внимание, что пара значений {1, 1} также содержится в шестой строке. Возвращаясь к исходному описанию ортогональных массивов,
Ортогональный массив - это двумерный массив чисел, который имеет такое интересное свойство - выберите любые два столбца в массиве. В каждой паре столбцов будут встречаться все парные комбинации возможных значений.
Это определение не полное. Мало того, что в массиве будут встречаться все парные комбинации значений, но и, если любая пара встречается в массиве несколько раз, то все остальные пары будут встречаться такое же число раз. Это происходит, потому что ортогональные массивы "сбалансированы". Изучите столбцы 3 и 5 и взгляните на пару {3, 2}. Это сочетание появляется в строках 6 и 17.
Таблица 6-3: ортогональный массив L
18
(3
5
)
В ортогональных массивах не все столбцы должны иметь одинаковый диапазон значений (1...2, 1...3, 1...5, и т.д.). Некоторые ортогональные массивы смешиваются. Ниже представлен ортогональной массив L
18
(2
1
3
7
). Он имеет один столбец из 1 и 2, и семь столбцов из 1, 2 и 3.
50
Таблица 6-4: ортогональный массив L
18
(2
1
3
7
)
Neil J.A. Sloane поддерживает полный каталог ортогональных массивов на сайте по адресу
http://www.research.att.com/njas/oadir/index.html