Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 14
Текст из файла (страница 14)
Какими бы нп были свойства отногпений, они должны проверяться при тестировании. 2.5Я. Проверка узлов Меньшее из всего, что вы можете сделать, — это провести достаточно тестов, для того «тобы убедиться, что все узлы именно такие, какими и должны быть. Такие тесты называ1отся проверкой узлов. У проверки узлов, однако, есть своя градация по степени совершенства тестов. Ниже приводится список тестов (в порядке возрастания приоритета), которые надо провести, чтобы полностью выполнить проверку узлов.
1. Тесты, чтобы убедиться в наличии всех заданных узлов. Ни один узел не должен быть пропущен. 2. Тесты, чтобы убедиться в отсутствии лишних узлов (это может потребовать неограниченного числа тестов и поэтому быть неосуществимо). 3. Тесты, чтобы убедиться в корректности весов узлов, если они есть. 4. Если существуют входной и выходной узлы, то в завершение предыдуших шагов можно выбрать пути от входа до выхода и выбрать входные значения так, чтобы программа проследовала по каждому из заданных в модели путей. Обычно задают несколько таких путей от входа к выходу (тестовых вариантов).
Как уже говорилось, проверка узлов — ато очень слабые тесты, на практике они оказываются настолько слабы, что фактически не используются. Все методы, из:шгаемые в этой книге, предполагают, что вы по меньшей мере выполнили проверку связей (см. ниже). Проверка связей, в свою очередь, подразумевает, что выполнены все тесты проверки узлов. 2.5.5. Проверка связей Следующее по эффективности действие, которое можно сделать, — это провести .юстаточно тестов, для того чтобы убедиться, что все связи именно такие, какигш и должны быть. Такие тесты называются проверкой связей. Ниже приводится список тестов (в порядке возрастания приоритета), которые надо провести, чтобы полностью выполнить проверку связей. 1.
Тесты, чтобы убедиться в наличии всех заданных связей, — что ни одна связь не пропущена. 2. Тесты, чтобы убедиться в отсутствии лишних связей (Это может потребовать неограниченного числа тестов и поэтому быть неосуществимо). 60 Глава 2 ° Графы и отношения 3. Тестирование отношений. ° Если отношение симметрично, то необходимо убедиться, что каждая связь является двустороннеи: например, ООГОИОО.
° Если отношение рефлексивно, то необходимо убедиться, что каждый узел связан сам с собой: например, ОО иотн1иа. ° Если отношение транзитивно, то вы должны проверить его транзитивность в любой ситуации. Это делается следующим образом. Рассмотрим три объекта, А, Б и В, причем А связано с Б, а Б связано с В. То есть А Й Б и Б Й В. Показав (путем тестирования), что А Й Б — истина и Б Й В вЂ” истина, необходимо показать, что А Й В тоже является истиной. Сделайте это для каждой тройки узлов, в которой выполняются данные условия.
4. Если существуют входной и выходной узлы, то шаги 1-3, как правило, завершаются подбором путей от входа к выходу, при этом выбираются такие входные параметры, с которыми программа проследует по выбранным путям. Чаше всего для теста указывают несколько путей ВХОД/ВЫХОД (тестовых вариантов). Заметим, что если вы осуществляете проверку связей, вы обычно осуществляете и проверку узлов. Тем не менее, проверка связей в большинстве случаев требует большего количества тестов, чем проверка узлов.
При тестировании черного ящика, исключая патологические случаи, если вы разрабатываете тесты проверки связей, вы вместе с тем добиваетесь и проверки узлов. Однако вы вряд ли сможете убедиться, что не существует лишних узлов и что веса узлов, если узлы обладают весами, верны. Хорошей идеей будет добавление в проверочный список инспектирования тестов и в ваш проект тестов требования проверки узлов из раздела 2.5.4.
2.5.6. Тестирование весов Если связи имеют веса, проведите достаточное количество тестов, чтобы убедиться в правильности значения веса для каждой связи. То же самое сделайте для узлов, если они включены в модель. 2.5.7. Тестирование циклов Мы уделяем специальное внимание тестированию циклов, так как статистика ошибок показывает, что у программистов возникают проблемы с циклами. По этой причине циклам посвящена целая глава (см. главу 4). В этом разделе излагаются лишь основы. В нашу задачу не входит анализ кола чтобы увидеть, есть в нем циклы или нет. Мы проводим тестирование циклов, если наша модель поведения программы включает в себя циклы. Цикл — это последовательность имен узлов, в которой как минимум одно имя узла повторяется. Если появляется лругая последовательность повторяющихся имен узлов или она просто возможна, то у вас есть еще один цикл.
Вы должны протестировать каждый цикл. 2.6. Резюме 61 Тестирование цикла основано на том, сколько раз вы будете выполнять этот цикл. Вы мо)кете совсем обойти цикл, можете пройти его один раз, два раза.... Максимальное количество проходов обозначим как и. В следующем примере есть узел, который является входом в цикл (А) и два узла, которые являются выходными в цикле (Х и У). 1. Обойдем цикл: лхе или лхтхь. (Я буду использовать оба пути.) 2.
Пройдем цикл один раз: лхтхнхх или лхтхнхтхх. 3. Пройдем цикл два раза: лхтхнхтхнхх или дхтнхтхнхтхх. 4, Пройдем цикл обычное число раз: д1хтхн)' ""хх. 5, пройдем цикл максимальное число раз (и): ихтхн) "хг н х1хтхн) "хтхх. 6. Пройдем цикл и-1 раз: лсхтхн)"чхк и их)хи)" 'хуго.
7. Попытаемся пройти цикл и + 1 раз: л<хтхн)"'хе и л<хтхн)"'хтхе. Рассмотрим два каких-нибудь узла в модели, скажем, А и В. Если существует путь от А к В (не обязательно прямая связь) и другой путь от В к А, и это верно для каждого А и В, то существует возможность, стартуя от любого узла, по какому-то вуги прийти к любому другому узлу и вернуться назад к начальному узлу. Такие ~ рафы называются сильно связанными. Исчерпывающее тестирование цикла, как было определено, обычно является излишней тратой времени в сильно связанных ~рафах.
Очевидно, что граф с симметричными отношениями (или ненаправленный граф) является сильно связанным, так как все стрелки направлены в обе стороны. Следовательно, тестирование циклов не является эффективным для графов с симметричными отношениями. 2.6. Резюме Вы освоили словарь и основную идею поведенческого тестирования. Может быль, материал был изложен более кратко, чем вы бы хотели. Как я уже говорил в КЕАРМЕ.РОС, эта глава — как подпрограмма, которую вы будете использовать х последующих главах при создании конкретных тестов.
Рассматривайте зту глазу как объект в объектно-ориентированных программах, которые вы будете созтавать в последующих главах. ООП, на мой взгляд, более абстрактно, нежели эта пава. Или же рассматривайте эту главу как игру, в которой вы должны победить. Используйте следующие вопросы для оценки того, что вы вынесли из атой главы. 62 Глава 2 ° Графы и отношения 2.7. Вопросы для самопроверки Дайте определение: проходимый путь, несимметричное отношение, двоичное отношение, узел ветвления, оператор ветвления, дерево вызова, комментарий, граф потока управления, проверка (покрытие), оборванная связь, граф потока данных, направленный граф, направленная связь, входной узел, путь вход — выход, класс эквивалентности, отношение эквивалентности, выходной узел, граф, матрица графа, входящая связь, нетранзитнвное отношение, перефлекспвное отношение, связь, проверка связей, представление списка связей, имя связи, вес связи, цикл, нециклический путь, программа, управляемая через меню, узел, проверка узлов, имя узла, вес узла, исходящая связь, параллельные связи, стратегия тестирования путем разбиения, путь, длина пути, нмя пути, сегмент пути, рефлексивное отношение, отношение, петля, соединять, сильно связанный граф, симметричные отношения, граф потока транзакций, транзитивные отношения, непроходимый путь, ненаправленный граф, ненаправленная связь.
Отношения могут быть: симметричными или несимметричными, рефлексивными или нерефлексивными, транзитивными или нетранзитивпыми. Всего насчитывается восемь различных комбинаций. В табл 2.1. приведены примеры каждого типа отношений. Придумайте еше по три примера для каждого типа. Докажите принадлежность каждого к тому или иному типу (то есть протестируйте их). Подсказка: попробуйте использовать Тезаурус Роже. Таблица 2.1.
Примеры отношений Симметричное Рефлекеивное Тренеитивное Примеры любит, грубит, спорит, критикует, владеет выше, длиннее знаком с больше или равен двоюродные сестры, женаты, обручены параллелен, сосед рядом с равен нет нет нет нет нет нет да нет да да нет да нет да нет да нет да да да да Определите, является ли отношение <находится в проекции» транзитивным? Придумайте ситуацию или способ освещения, при котором данное отношение нетранзитивно. Рассмотрите отношение был объединен с с точки зрения его симметричности, рефлексивности, транзитивности. Приведите примеры и контрпримеры, подтверждающие ваши выводы.
Исследуйте следующие отношения (на предмет их симметричности, рефлексивности, транзитивности) и подтвердите свои выводы, продемонстрировав отсутствие контрпримеров: А вызывает Б, А не равно Б, А согласен с Б, А эквивалентен Б, А согласуется с Б, Л совнестии с Б, А несовместим с Б, Л— часть Б, А — вне Б, Алучше, чен Б, А доминирует над Б, А зависит огп Б. Тестирование потока управления 3.1. Обзор В этой главе в качестве основной модели, используемой при разработке тестов, рассматривается граф потока управления'.
С помощью графа потока управления мы будем моделировать различные части формы 1040 декларации о доходах внутренней налоговой службы США (форма 1040 ВНС), сложность тестирования которой сравнима с ее собственной сложностью. В дальнейшем модель будет использована для построения набора тестов по проверке связей. 3.2. Основные термины Внешние термины: алгебра, алгебраический, И (логическое), приложение, язык ассемблера, логическая ветвь, ошибка, оператор ЕА5Е, СОВО1, код, завершать, сложность, вычисление, последовательный, ограничение, противоречие, управление, поток управления, копировать, программа лля решения уравнений, !1СКЛЮЧАЮЩЕЕ ИЛИ (логическое), выполнять, выражение, крайние значения, формальная модель, оператор 1Е, оператор 1Р-ТНЕИ.Еь5Е, оператор, ЛОЖЬ, оператор 60ТО, реализация, ВКЛЮЧАЮЩЕЕ ИЛИ (логическое), приращение, неравенство, экземпляр, прыжок, логика, логическое выражение, логическое значение, ЬОТ(!о-123, сопровождение, матрица, пропущенные требования, модель, ошибка модели, моделирование, имя, естественный язык, вложенный, НЕ ' Ноток управлении задает послеловательиость действий при выполнении программы, он соот- ветствует кепочке операторов программы, последовательно передаюшик друг другу управление к<>м- ы ютером.