Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл: Источник:
Скачиваний:
84
Добавлен:
04.03.2014
Размер:
323.07 Кб
Скачать

8.3 Функциональное тестирование(2)

Для определения наиболее вероятных наборов данных используют следующие методы формирования тестовых наборов:

эквивалентное разбиение;

анализ граничных значений;

анализ причинно-следственных связей;

предположение об ошибке.

Эквивалентное разбиение

Метод эквивалентного разбиения заключается в следующем. Область

всех возможных наборов входных данных программы по каждому параметру разбивают на конечное число групп – классов эквивалентности. Наборы данных, включенные в такой класс, объединены по принципу обнаружения одних и тех же ошибок: если набор какого-либо класса обнаруживает некоторую ошибку, то предполагается, что все другие тесты этого класса эквивалентности тоже обнаружат эту ошибку и наоборот.

8.3 Функциональное тестирование(3)

Разработка тестов методом эквивалентного разбиения осуществляется в два этапа: на первом выделяют классы эквивалентности, а на втором

– формируют тесты.

Выделение классов эквивалентности является эвристическим процессом, однако целесообразным считают выделять в отдельные классы эквивалентности наборы, содержащие допустимые и

недопустимые значения некоторого параметра.

Построение тестов заключается в использовании классов эквивалентности для построения тестов. Этот процесс включает в себя:

Назначение каждому классу эквивалентности уникального номера.

Проектирование новых тестов, каждый из которых покрывает как можно большее число непокрытых классов эквивалентности, до тех пор, пока все правильные классы не будут покрыты (только не общими) тестами.

Запись тестов, каждый из которых покрывает один и только один из непокрытых неправильных классов эквивалентности, до тех пор, пока все неправильные классы не будут покрыты тестами.

8.3 Функциональное тестирование(4)

Недостаток метода эквивалентных разбиения в том, что он не исследует комбинации входных условий.

Анализ граничных значений.

Граничные условия – это ситуации, возникающие на границах классов эквивалентности входных значений или около них. Анализ показывает, что в этих местах резко увеличивается возможность обнаружения ошибок. Например, если в программе анализа вида треугольника было записано А + В >=С вместо А + В > С, то это приведет к ошибочному выводу: линия будет отнесена к одному из видов треугольника.

Применение метода анализа граничных условий требует определенной степени творчества и специализации в рассматриваемой проблеме.

8.3 Функциональное тестирование(5)

Существует несколько общих правил для применения этого метода:

если входное условие описывает область значений, то следует построить тесты для границ области и тесты с неправильными входными данными для ситуаций незначительного выхода за границы области, например, если описана область [1.0, +1.0], то должны быть сгенерированы тесты: -1.0, +1.0, -1.001 и +1.001;

если входное условие удовлетворяет дискретному ряду значений, то следует построить тесты для минимального и максимального значений и тесты, содержащие значения большие и меньшие этих двух значений, например, если входной файл может содержать от 1 до 255 записей, то проверить 0, 1, 255 и 256 записей;

если существуют ограничения выходных значений, то целесообразно аналогично тестировать и их: конечно не всегда можно получить результат вне выходной области, но, тем не менее, стоит рассмотреть эту возможность;

если некоторое входное или выходное значение программы является упорядоченным множеством, например, это последовательный файл, линейный список или таблица, то следует сосредоточить внимание на первом и последнем элементах этого множества.

8.3 Функциональное тестирование(6)

Анализ причинно-следственных связей

Анализ причинно-следственных связей, позволяет системно выбирать высоко результативные тесты. Метод использует алгебру логики и оперирует понятиями «причина» и «следствие».

Причиной в данном случае называют отдельное входное условие или класс эквивалентности.

Следствием – выходное условие или преобразование системы.

Идея метода заключается в отнесении всех следствий к причинам, т.е. в уточнении причинно-следственных связей. Данный метод дает полезный побочный эффект, позволяя обнаруживать неполноту и неоднозначность исходных спецификаций.

Построение тестов осуществляют в несколько этапов.

Сначала спецификация разбивается на «рабочие» участки, стараясь, по возможности, выделять независимые группы причинно- следственных связей в отдельные таблицы.

8.3Функциональное тестирование(7)

Затем в спецификации определяют множество причин и следствий.

Далее на основе анализа семантического (смыслового) содержания

спецификации строят таблицу истинности, в которой каждой возможной комбинации причин ставится в соответствие следствие. При этом целесообразно истину обозначать «1», ложь – «0», а для обозначения безразличных состояний условий применять обозначение «Х», которое предполагает произвольное значение условия (0 или 1).

Таблицу снабжают примечаниями, задающими ограничения и описывающими комбинации причин и/или следствий, которые являются невозможными из-за синтаксических или внешних ограничений. При необходимости аналогично строится таблица истинности для класса эквивалентности.

Каждую строку таблицы преобразуют в тест. При этом рекомендуется по возможности следует совмещать тесты из независимых таблиц.

Данный метод позволяет строить высоко результативные тесты ,но его недостатком является неадекватное исследование граничных значений.

8.3 Функциональное тестирование(8)

Предположение об ошибке

Часто программист с большим опытом находит ошибки, «не применяя никаких методов».

На самом деле он подсознательно использует метод предположение об ошибке.

Процедура метода предположения об ошибке в значительной степени основана на интуиции.

Основная его идея заключается в том, чтобы перечислить в некотором списке возможные ошибки или ситуации, в которых они могут появиться, а затем на основе этого списка составить тесты.

Другими словами, требуется перечислить те специальные случаи, которые могут быть не учтены при проектировании.

8.4 Тестирование модулей и комплексное тестирование

Восходящее тестирование.

Восходящий подход предполагает, что каждый модуль тестируют отдельно на соответствие имеющимся спецификациям на него, затем собирают оттестированные модули в модули более высокой степени интеграции и тестируют их. При этом проверяют межмодульные интерфейсы, используемые для подключения модулей более низкого уровня иерархии. И так далее, пока не будет собран весь программный продукт.

Тестирующая

 

Тестирующая

программаn

 

программаk

 

 

 

 

 

 

 

 

 

 

Модульn

Модульk

а

Тестирование модулей низшего уровня

Тестирующая программаs

Модульs

Модульn

 

Модульk

 

 

 

б

Тестирование модуля следующего уровня

8.4 Тестирование модулей и комплексное тестирование (2)

Достоинства:

Такой подход обеспечивает полностью автономное тестирование, для которого просто генерировать тестовые последовательности, которые передаются в модуль напрямую.

Недостатки:

при восходящем тестировании, так же как при восходящем проектировании, серьезные ошибки в спецификациях, алгоритмах и интерфейсе могут быть обнаружены только на завершающей стадии работы над проектом;

для того, чтобы тестировать модули нижних уровней необходимо разработать специальные тестирующие программы, которые обеспечивают вызов интересующих нас модулей с необходимыми параметрами. Причем эти тестирующие программы также могут содержать ошибки.

8.4 Тестирование модулей и комплексное тестирование (3)

Нисходящее тестирование

Нисходящее тестирование органически связано с нисходящим проектированием и разработкой: как только проектирование какого-либо модуля заканчивается, его кодируют и передают на тестирование.

В этом случае автономно тестируется только основной модуль. При его тестировании все вызываемые им модули заменяют, модулями, которые в той или иной степени имитируют поведение вызываемых модулей. Такие модули принято называть «заглушками». В отличие от тестирующих программ заглушки очень просты.

Основной модуль

 

 

 

 

 

 

Заглушка1

 

Заглушка2

 

Заглушка3

 

 

 

 

 

 

а

Основной

модуль

 

 

 

 

 

 

Заглушка1

 

Модуль2

 

Заглушка3

 

 

 

 

 

 

 

 

 

 

 

 

Заглушка21

Заглушка22

Заглушка23

б

а) Тестирование

б) Тестирование двух

основного модуля

модулей