Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 26
Текст из файла (страница 26)
Вы проектируете тестовые варианты путем перебора комбинаций критических значений. Это должно привести к 64 или большему числу тестовых вариантов, если вы строго следуете этому правилу. Отступите немного от этого и протестируйте по крайней мере комбинации обход/ноль, один, два и МАХ для внутреннего цикла и обход(ноль, один, два и МАХ для внешнего цикла. Это будет 16 случаев в дополнение к тестированию одиночных циклов — всего 32 теста. 110 Глава ч ° Тестирование циклов 4.5.
Рассмотрение приложения 4.5.1. Индикаторы приложений Каждый повторяющийся (циклический) процесс требует тестирования. Каждый граф с циклами должен быть протестировав, с возможным исключением графов для автоматов с конечным числом состояний' (глава 9), потому что в этом случае имеется слишком много циклов, и тестирования доменов (глава 7), где присутствие циклов делает метод неприменимым. 4.5.2. Предположения об ошибках Здесь нет особо глубоких прелположений; только эмпирическое наблюдение, что повторяющимся процессам трудно корректно начаться и еше более трудно правильно остановиться.
Мы выполняем какие-то действия слишком много или слишком мало раз. Многие ошибки происходят также из-за того, что кто-то допускает существование определенных предусловий, хотя в действительности они не обязательны: например, что все файлы содержат хотя бы одну запись. 4.5.3. Ограничения и предостережения Ошибки циклов обычно обнаруживаются в низкоуровневом программном обеспечении и чаще всего имеют ограниченное влияние.
Симптомы, как правило, выявляются неподалеку от самой ошибки и одновременно с ней. Многие из этих ошибок будут обнаружены операционной системой или исполняемой резидентной частью компилятора, потому что они вызывают переполнение памяти, обнаружнмые ошибки указателя, чтение вне пределов файла и лругую подобную чепуху. Ошибки, обнаруженные путем тестирования цикла, не очень коварны и мы хотели бы надеяться, что программисты найдут и исправят их при низкоуровневом тестировании модулей, где они часто могут быть найдены при тестировании цикла. Не ожидайте очень многого от тестирования цикла для развитого программного обеспечения. 4.5.4. Автоматизация и инструментальные средства Специальные инструменты на самом деле не нужны.
Если вы используете тестирование циклов как часть системного поведенческого тестирования, вы можете с успехом эксплуатировать систему покрытия/воспроизведения. Индивидуальные тесты циклов, особенно если они касаются файлов и вложенных циклов, могут быть трудны для реализации. Олнажды реализовав и отладив типичный тестовый вариант для цикла, редактируйте его, изменяя входные значения для создания других вариантов тестирования цикла, в особенности это касается комбинированных вариантов, необходимых для вложенных циклов.
' На самом леле любых сильно сананых срафон. 4.7. Вопросы для самопроверки 111 4.6. Резюме Тестирование цикла — это эвристический метод, основанный на опыте, который программисты приобретают, сталкиваясь с ошибками в начале и конце циклов. Несмотря на то, что для пояснений в этой главе были использованы примеры с потоком управления, метод эффективен для большинства графовых моделей, имеющих циклы (исключая сильно связные графы). Необходимые для тестирования значения основаны на числе повторений цикла: О, 1, 2, М1Х вЂ” 1, М1Х, М1Х + 1, типичное количество проходов, МАХ вЂ” 1, МАХ, и МАХ + 1, а также на комбинациях этих величин для вложенных циклов. 4.7.
Вопросы для самопроверки 1. Дать определение следующих терминов: критические тестовые значения цикла, детерминированный цикл, ужасный цикл, число итераций цикла, цикл, обход цикла, узел управления циклом, преднкат управления циклом, переменная управления циклом, узел входа в цикл, узел выхода из цикла, цикл со смешанной проверкой, вложенные циклы, недетерминированные циклы, цикл с проверкой до, цикл с проверкой после.
2. Рассмотрите шесть комбинаций циклов (детерминированных, недетерминированных) и (с проверкой до, после, со смешанной проверкой) в язьпе С. Придумайте примеры для каждой комбинации, используя следующие конструкции для создания циклов: ИН1ЕЕ, РОй, ОО.ИН1ЕЕ, 1Р/ООТО.
Если комбинация невозможна, докажите это. 3. То же, что и задание 2, но для Паскаля, с использованием РОй ТО-ООИНТО, РОй- 00, йЕРЕАТ-ОНТ1Е, ИН1ЕЕ, и всех прочих способов создания циклов. 4. В большинстве пакетов программ для подготовки налоговых документов имеется команда для вывода форм и бланков пользователя на печать.
Если каждая форма рассматривается как объект, который следует распечатать, этот циклический процесс детерминированный или недетермипированный? Обоснуйте ваш ответ. Если вы скажете ««детерминированный»», почему практичный человек может решить запрограммировать этот процесс с помощью недетерминированного цикла? Разработайте набор тестов для печати действующей декларации о доходах в вашей программе подготовки налоговых документов. 5. Классифицируйте как детерминированные или недетерминированные (по отношению к числу итераций цикла) следующие процессы: (а) проверка орфографии, (б) решение системы уравнений, (в) сортировка, (г) объединение, (д) сложение двух чисел, (е) извлечение квадратного корня, (ж) деление столбиком, (з) проведение переписи населения в Америке, (н) копирование файла, (к) копирование каталога, (л) копирование всего диска, (и) проверка диска на наличие ошибок, (н) загрузка файла, (о) подсчет числа предметов в коробке, (п) пересчет числа предметов в коробке, (р) проверка 112 Глава 4 ° Тестирование циклов ваших счетов, в предположении, что ни вы, ни банк не делали ошибок, (с) позлементное умножение двух массивов, (т) позлементное умножение двух матриц, (у) извлечение квадратного корня из 16-битиого числа и обеспечение представления результата в виде 16-битного числа, (ф) вычисление х'Ып-'АВБ((з,(АВБ(17 / е "дх)))), где х — 16-битное число и ре-'о зультат необходимо представить в виде 16-битного числа, (х) удаление и символов из конца документа начиная с последнего и в обратном порядке, (ц) добавление и символов в конец документа, (ч) удаление и символов из середины документа, когда известно, что документ содержит не меньше и символов.
6. Для каждого из детерминированных процессов из задания 5 укажите, каковы практические последствия (иапример, в части уязвимости, расхода оперативной памяти и дискового пространства), которые могут возникнуть в результате реализации процесса в виде недетерминированиого цикла. 7. Для каждого из недетерминированных процессов из задания 5, каковы практические последствия (например, в части уязвимости, расхода оперативной памяти и дискового пространства), которые могут возникнуть в результате реализации процесса в виде детерминированного цикла7 8.
Какие из процессов в задании 5 имеют вложенные циклы и какая глубина их вложения? 9. Для каждого из процессов, проанализированных вами в заданиях 5, 6, 7 и 8, создайте набор тестов циклов, 10. Смоделируйте часть 4 формы 2210 как граф потока управления с детерминированным циклом и протестируйте его соответствующим образом. Тестирование ПОТОКОВ ДЗННЫХ 5.1. Обзор Граф потока данных является характерной особенностью многих методов проектирования программного обеспечения и с успехом используется в проектировании тестов. 5.2.
Основные термины Внешние термины: добавить запись, алиас, приложение, массив, присваивать, ошибка, С, вычисление, дерево вызовов, СА5Е, закрывать, код, комментарий, сравнивать, компилятор, вычисление, параллельный процесс, константа, ограничение, управление, копировать, число повторений, аварийный отказ, создавать, данные, отладочная программа, удалять, обозначать, диск, фиктивная переменная, динамический вызов, выражение, извлекать, выборка (команды или данных из памяти), поле, файл, формула, функция, глобальные данные, остановка, аппаратные средства, эвристический, иерархический, 1Е-ТНЕМ, 1Е-ТНЕМ-ЕЕ5Е, сокрытие информации, инициализировать, вставлять, конкретизировать, итерировать, число повторений, переход, редактор связей, размещение, логический, цикл, сопровождение, память, адрес ячейки памяти, объединять, сообщение, перемещать, многозадачность, сеть, численный, имя объекта, объектно-ориентированное программирование, открывать, вывод, собственные данные, параллельный компьютер, раздел, РАИСАМИ., указатель, обработка, программа, программист, программирование, язык программирования, псевдокод, ОЗУ, запись, переименовывать, повторно используемый, время выполнения, поиск, упорядочение, совместно используемые данные, побочный эффект, программное обеспечение, сортировать, исходный код, электронная таблица, оператор, хранить, структурный, символьный, синхронизация, 114 Глава 5 ° Тестирование потоков данных таблица, тестируемость, тестировщик, передавать, истинное значение, значение, переменная.
Внутренние термины: поведенческое тестирование, слепота, тестирование ветвей, случайная корректность, компонент, составной предикат, поток управления, граф потока управления, оборванная связь, детерминированный цикл, грязный тест, входной узел, выходной узел, модель с конечным числом состояний, граф, начальное состояние, входящая связь, интеграция, ввод, входной узел, покрытие связей, представление графа в виде списка связей, вес связи, цикл, тестирование цикла, модель, отрицательный тест, вложенный цикл, узел, покрытие узлов, вес узла, иедетермииироваииый цикл, объект, оракул, итог, исходящая связь, узел выхода, путь, позитивный тест, предикат, интерпретация предиката, отношение, требование, активизировать, простой предикат, спецификация, состояние, граф потока транзакций, Определение (обьекта).