Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 13
Текст из файла (страница 13)
Следующие отношения нерефлексивные: друг (как часто можно услышать: «Он сам себе злейший врать), выше, ниже. Рефлексивность — это возможность остаться в исходном состоянии. Рефлексивность является важным свойством наших моделей (еслп она есть). Я както работал с неудачным текстовым редактором, в котором необходимо было чтото выбирать в каждом меню.
Это можно было сделать, используя мышь (которой у меня в то время не было) или вводя ключевую букву, соответствующую первой букве в названии пункта мснкх В таких случаях, если я ввожу неправильную букву, я должен остаться в том же самом меню, но самонадеянная программа вместо этого делала выбор за меня и, как правило, неверный. Используемые меню нс были рефлексивными в атом странном продукте. 2.4. Отношения ББ Рефлексивность также чагце подразумевается, чем постулируется, и, следовательно, является хорошим объектом для поиска ошибок.
Поскольку рефлексивность должна быть присуща каждому узлу, каждый узел должен быть проверен. Тестируйте рефлексивность по тому же принципу, что и транзитивность с симметричностью. 2.4.5. Классы эквивалентности и разбиения Отношение экеиеолентности — симметрично, транзитнвно и рефлексивно. Набор объектов, удовлетворяющих отношению эквивалентности, называется классом :жвивалентности. Каждгяй объект из этого класса называется эквивалентным (в смысле данного отношения) любому другому объекту атого класса.
Все методы, описываемые в этой книге, являются примерами тестирования путем разбиения [НАМ1.88, 08ТК88, К!СН81, К!СН89, ЪЧН!Т94]. Эта стратегия построена на разбиении всех возможных входов на классы эквивалентности по какому-либо отношению эквивалентности. Я не буду в этой книге рассказывать, как создавать или находить подобные отношения, а познакомлк> вас с набором уже готовых полезных отношений и, следовательно, полезных разбиений на классы эквивалентности. Гслн у вас есть транзитивное отношение, то вы можете автоматически конвертировать его в соответствующее отношение эквивалентности и таким образом разбить множество вводов на классы эквивалентности.
Однако этот метод нс рассматривается в данной книге. Дополнительную информацию вы найдете в [ВЕ!790), глава 12. 2.4.6. Альтернатива графам 2.4.6.1. Граф — зто визуализация Графическое представление графов, используемое в этой книге, является удобным инструментом для обучения, поскольку большинство людей находит такое визуальное представление менее абстрактным. На практике, однако, за исключением модельных задач, представленных в этой книге, графическое представление графов слишком затруднительно. Вместо того чтобы рисовать картинки и использовать шаблоны О1ли нх программные аналоги), мы представляем графы в виде таблиц или списков.
Возможно, для вас в определенных случаях эти способы представления окажутся полезны. Мне представляется правильным объяснить вам принципы их построения при первом же вашем знакомстве с графами. 2.4.6.2. Представление в виде таблиц или матриц Графы удобно представлять в табличной или матричной форме. Обычно используется следующий порядок создания графа. 1. Нарисуйте двухмерный массив, размер которого равен числу узлов. 2. Если существует связь между узлом 1 и, например, 1, задайте элемент [1, 1! массива равным 1, в противном случае задайте его равным 0 или оставьте эту позицию пустой или же отметьте ее точкой.
5б Глава 2 ° Графы и отношения 3. Если число связей между двумя узлами больше одной, значение данного элемента должно быть равно числу связей. 4. Если связи обладают весами, впишите соответствующие веса. Обычно бывает удобно обозначать колонки и строки матрицы именами узлов. На рисунке показано подобное описание графа, внешний вид которого был приведен в начале главы. На следующем рисунке представлен граф, описанный в пункте 2.2. 2.4.6.3. Представление в виде списка Рассмотренные матрицы оказались по большей части пустыми.
Это бывает часто, поскольку в графах число узлов, как правило, превышает число связей. Несмотря на то, что матрицы компактны, и их проще рисовать, чем графическую форму, использование такого формата часто затруднительно и приводит к ошибкам при работе с большими матрицами. Более удобная форма представления — в виде списка связей.
Чем объяснять, это проще показать на примере. Вот представление в виде списка последнего графа: 7: 12: 17.1б 13. !2 99: 12 14: 13, 99 43; 7 17. 7 1б: Если связи обладают весами, вы должны дополнить элементы списка соответствующими весами. К примеру, если взять имена связей в качестве их весов, то граф, изображенный на с. 50, будет представлен в следующем виде: 2.5. Основополагающие принципы тестирования 57 7: 14(а) 14. 99(К), 13(С) 13; 12(г). 17(с) 99: 12(г) 12: 17(а). 16(у) 17: 7(5) 16: 99(ц). 43(П) 43: 12(к), 7(и) Вы можете изменять этот порядок записи по своему усмотрению, добавлять свойства, комментарии или что-то еше, чтобы список был понятным для вас и однозначно определял: 1.
Начальный узел связи. 2. Конечный узел связи. 3. Все свойства связи. 43:12(к) (устраникая ошибка: си. раздел б 4.5) 7(тт) (неустраниная оеибка: сн. специальный раздел 6.4 6) 2.5. Основополагающие принципы тестирования 2.5.1. Обзор Ниже приведены основные шаги по использованию моделей на основе графов для разработки конкретных тестов. 1. Постройте граф. 2.
Определите отношения. 3. Разработайте тесты проверки узлов (тесты, подтверждающие, что все узлы на месте). 4. Разработайте тесты проверки связей (тесты, подтверждающие наличие всех заданных связей и отсутствие лишних связей). 5. Протестируйте все веса. 6. Разработайте тесты для циклов. ВОПРОС: Что вы делаетс, когда вам встречается граф? ОТВЕТ; Исследую его! 4. Все свойства узла. Для больших графов удобно записывать каждую связь на отдельной строке, оставляя место для комментариев и других аннотаций, относящихся к связям. Также может быть удобно записывать пояснения или ссылки на соответствующие параграфы так, как это сделал я: 7.
14(а) (перезапуск процесса. си. раздел 3.1.4.1.5.9) 14:99('к) (загрузка тонни ввода; сн. раздел 3.2.4.5) 13(С) (инсталляция точки входа: сн. раздел 3.3.1.7 5) 58 Глава 2 ° Графы и отношения 2.5.2. Построение графа 1. Определение узлов. ° Какие объекты (узлы) представлены на данном графе? Каждому рассматриваемому объекту соответствует один узел. ° Дайте имена узлам. Вы называете узлы по своему усмотрению, однако каждый узел должен иметь уникальное имя или идентификатор. Мне нравится использовать числа, но вы, возможно, отдадите предпочтение именам, несущим определенный смысл в контексте вашего приложения. ° Узлы могут обладать также свойствами (весами).
Отметьте свойства (значения) для каждого узла. 2. Определение связей. ° Каждая связь должна начинаться н заканчиваться на узле (это может быть один и тот же узел). Поскольку довольно часто предполагается наличие входного и/или выходного узла, вам, возможно, придется добавить их в вашу модель. Если связь оборвана (то есть приходит ниоткуда или ведет в никуда), то в построении модели допущена ошибка. ° Дайте имена связям.
Если между парой узлов существует больше одной связи, то разумно дать каждой связи свое уникальное имя. Если два узла может соединять только одна связь, то давать ей имя не обязательно. ° Отметьте веса каждой связи. 3. Найдите входной и выходной узлы. В графе модели не обязательно присутствуют входной и выходной узлы, но часто есть оба. Если в графе всетаки есть входной и/или выходной узлы, то, по всей видимости, они играют важную роль. Обозначьте все входные и выходные узлы соответственно. Например: 14 (ВХОД)з.. или 44 (ВЫХОД).
Помните, что у входных узлов нет входящих связей, а у выходных нет исходягцих связей. 4. Найдите все циклы. В графах моделей не обязательно присутствуют циклы, но если они есть, то они важны. Мы будем использовать специальные методы тестирования циклов, позтому вам надо будет найти все циклы на диаграмме. Существуют способы сделать зто автоматически (то есть алгоритмически), но они не описываются в атой книге, см.
[ВЕ12901. 2.5.3. Определение отношений 1. Начните с написания отношений на английском языке (или на вашем родном языке). 2. Ответьте ДА или НЕТ на следующие вопросы: ° Оно рефлексивно? 2.5. Основополагающие принципы тестирования 59 ° Оно симметрично? ° Оно транзнтивно? Если оно рефлексивно, то каждый узел должен иметь петлю. Если оно симметрично, то каждая связь должна быть двусторонней. Отношения на графе не обязательно должны обладать атими свойствами. Более того, они могут обладать другии и свойствами, не рассматриваемыми в этой книге (ем. [В Е! 1901, глава 12).