Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 23
Текст из файла (страница 23)
Таким образом, вы можете не беспокоиться относительно форм 1040А, 1040МК 1041, и т. д, 15. Форма 3903, часть 1, Ещр!оуее Моч1п3 Ехрепзез (Расходы на поездки служащего). Тестирование ЦИКЛОВ 4.1. Обзор Тестирование цикла — это эвристический метод, который следует использовать в сочетании со многими другими методами тестирования, поскольку опыт показывает, что ошибки часто сопутствуют циклам.
Методы, обсуждаемые в этой главе, применяются в тех случаях, когда имеются циклы в таких графах как: граф потока управления, граф потока транзакций, или синтаксический граф. 4.2. Основные термины Внешние термины: приложение, массив, компоновка, группа, С, оператор ВйЕАК, сбор/воспроизведение данных, СОВОГО., код, компилятор, копировать, повреждение данных, отказ, отладка, отрицательное приращение, конец файла, ввод (цикла), вычислять, выполнять, поле, файл, длина файла, ЕОЙ, ООТО, аппаратные средства, эвристический, реализация, положительное приращение, инициализировать, внутренний цикл, целочисленный, итерация, ошибка границ в памяти, объединение,модель, вложенный цикл, операционная система, внешний цикл, указатель, ошибка указателя, предусловие, процесс внутри цикла, обработка, программа, программист, программирование, язык программирования, случайный, запись, повторяющийся процесс, требование, время выполнения, поиск, программное обеспечение, сортировка, спецификация, язык структурного программирования, структурное программное обеспечение, завершать, передавать, истинное значение,значение, переменная,'нГПЕЕ.
Внутренние термины: поведение, поведенческое тестирование, тестирование черного ящика, ошибка, граф потока управления, тестирование потока управления, граф, модель на основе графа, цикл, связь, логический предикат, узел, имя г з .тго 98 Глава ч ° Тестирование циклов узла, объект, исходящая связь, путь, предикат, отношение, действенный тест, предикат-переключатель, спецификация, структура, симптом, системное тестирование, тестовый вариант, тестирование модуля. Цикл. Повторяющийся или итерационный процесс. Та часть модели-графа, которая содержит цикл. То есть повторяющееся имя узла хотя бы на одном пути. Число повторений цикла. Число раз, которое повторяется цикл.
Прн выходе из цикла не спутайте это число с конечным значением переменной управления цикла, если она существует (смотри ниже). Ошибочное принятие числа повторений цикла за конечное значение переменной управления цикла — распространенный источник ошибок. Детврмилировапный цикл. Цикл, число итераций которого известно до того, как начнется выполнение цикла. Недетерминировапный цикл.
Цикл, число итераций которого неизвестно до того, как начнется выполнение цикла, или цикл, число итераций которого определяется или изменяется внутри цикла по ходу выполнения. Узел управления циклом. Узел с двумя и больше исходящими связями: для одной связи цикл будет выполняться, а для другой не будет. На рисунке узел управления циклом отмечен как «20». Узел выхода из цикла. Узел, который представляет предикат по крайней мере с одним значением, вызывающим отмену выполнения цикла.
Цикл может, к несчастью, иметь более одного узла выхода. Узел 20 в только что приведенной модели— узел выхода из цикла. Уэвл входа в цикл. Узел, через который происходит вход в цикл. Цикл может иметь более одного узла входа. Узел 10 на предыдущем рисунке — это узел входа в цикл.
Предикат управления циклом. Предикат в узле управления циклом, значение которого определяет, будет цикл выполняться или нет. Переменная управления циклом. Любая переменная в предикате управления циклом, значение которой влияет на (истинное) значение предиката управления циклом — что определяет, будет цикл выполняться илн нет. Цикл с првдусловивм. Цикл, в котором предикат управления циклом вычисляется до того как выполняется какая-либо обработка внутри цикла. На рисунке узел управления циклом — это узел 20, а между узлами 10 и 20 нет никакой обработки.
Вся обработка происходит на связи 20 — 10, так что это цикл с предусловием. обработки 4.3. Отношения и модель 99 Цикл с постусловием. Цикл, в котором преднкат управления циклом вычисляется после обработки. В циклах с постусловием обработка выполняется по меньшей мере один раз. Нвт обработки Цикл со смешанной проверкой. Цикл, в котором обработка происходит и до, и после того, как вычислен предикат управления циклом'. Вложенные ииктгзг. Два или более циклов — вложенные, если олин полностью содержится в другом.
На следующем рисунке цикл 10-20-10 является вложенным по отношению к циклу 5 — 25-5. 4.3. Отношения и модель 4.3.1. Основы В этом разделе мы используем язьпс програлсмирования, так что кювет показаться, что мы говорим о программах. Однако мы говорим не только о программах или о циклах, которые могут находиться или не находиться внутри них, Тестирование черного яшика касается поведения, а не структуры. Наши модели — это модели поведения, и соответствующие циклы могут существовать или не сушествовать в тестируемом программном обеспечении. Если вы будете смотреть на программное обеспечение с чересчур близкого расстояния, пытаясь разобраться, с каким видом цикла вы столкнулись, вы можете допустить ту же ошибку в своей модели, что и программист в коде. ' Пусть вас не сбивают с толку языки программирования и семантика конструкций типа опера- ~оров ГОй и ИН11.Е.
Почти любая комбинация летермипировапцыхггпелетермииированных циклов с проверкой логпослегсхгепзапоой может быть создана с помощью почти любой лопгчсской структуры. Своз рите упражнения в конце главы. 100 Глава 4 ° Тестирование циклов Вы заметите, что в нижеперечисленных моделях циклов я не использую конструкции структурного программирования, такие как ЕОК или НН! ЕЕ, а использую вместо них явные предикаты и ООТО для данных модельных циклов. Мы имеем дело с моделями, а не с кодом. Я не ратую за отбрасывание конструкций ЕОР и НН1ЕЕ в пользу ООТО.
Я не использую структурные конструкции циклов в моделях, поскольку они зависят от языка, в котором реализованы, и в некоторых случаях даже от специфического компилятора для данного язьпа. Это особенно справедливо для проблем с циклами со смешанной проверкой. И именно это приводит к ошибкам циклов в коде и дизайне теста. Отношение между узлами в данных моделях — предшествует. Однако я осознанно не буду говорить ничего конкретного об оставшейся части модели. Здесь примеры будут приводиться для моделей потока управления, но тестирование цикла применяется и ко многим другим моделям (в том числе к тестированию синтаксиса), в которых, несмотря на то, что объекты и отношения различны, принципы тестирования остаются теми же.
4.3.2. Детерминированные циклы В детерминированных циклах число повторений цикла известно до того, как будет выполняться первый оператор внутри цикла, и внутри цикла нет процесса, который вызвал бы изменение этого числа. 20 30 1оор соптго! - О, пшах = !О 30 40 1оор ргосевв 40 30 1оор соптго! "< пшах !оор соптго! - 1оор соптгот + ! 50 1оор сопгго! > пшах 50 продолиить оставшуюся наст> подели Это пример цикла с постусловием. Предполагается, что переменная управления циклом 1оор соп1го1 не меняется процессом 1оор ргосевв на связи 30-40. Она может использоваться процессом 1оор ргоседз, но этот процесс саму ее не меняет.
Узел 20 — входной узел цикла. Узел 40 — выходной узел цикла и вместе с тем узел управления циклом. Несмотря на то, что я использовал простое положительное приращение (1оор соп0го! 1оор сового! +1), можно использовать практически любую функцию, в том числе и отрицательное приращение, приращение на величину пт, или даже некоторую функцию от 1оор сопдго1.
Переменной управления циклом здесь является 1оор соп0го1, чье максимальное значение равно 10. Однако обработка будет выполнена 11 раз. Ниже дан пример детерминированного цикла с предусловием. 20 30 1оор сопсго! - 1, пшах - 10 30 50 1оор солтго! > пшах 40 1оор соптго! < - пяшх 40 30 !оор ргосевя, 1оор сон!го! - 1оор соптго! + 1 50 продолиить оставшуюся настя подели Следующий пример — пример цикла со смешанной проверкой, поскольку обработка цикла происходит и до, и после выходного узла цикла. 20 25 1оор сои!го! - !.
пшах - !О 25 30 Д ргосеввтпэ 4.3. Отношения и модель 101 30 50 !оор соптго1 > пюах 40 1оор соптго1 > ошах 40 25 В ргосеззтпч, 1оор соптго1 = 1оор соптго1 + 1 50 продопюить оставшуюся часть иодепи В этой модели на каждом шаге обязательно выполняется А ргосеззтпд. На последнем шаге выполнения, однако, обрабатываемый объект минует В ргосезз1по.
Заметьте, что значение переменной управления циклом, 1оор сопсго1, различно для процессов А и В. Циклов со смешанной проверкой следует избегать в спецификациях, моделях и программном обеспечении, так как они уязвимы для ошибок. В языках структурного программирования смешанные циклы не могут быть созданы случайно, перед их применением программисту следует хорошенько подумать. Один из аргументов в пользу использования структурированных циклов — уход от ошибок, связанных со смешанными циклами.
При построении моделей старайтесь использовать явные циклы с постусловием и предусловием, а циклы со смешанной проверкой применяйте только в тех случаях, когда они необходимы для точного моделирования требований. Если цикл со смешанной проверкой необходим, то он должен быть тщательно протестирован из-за повышенной вероятности наличия ошибок. Поскольку в детерминированных циклах заранее известно число повторов, циклические процессы с их использованием надо конструировать во всех следующих случаях: копирование файла с известным числом записей, обработка и платежных чеков, добавление колонки чисел, заполнение массива числами, передача файла известной длины.