Скачиваний:
387
Добавлен:
01.05.2014
Размер:
1.33 Mб
Скачать

2. Тестирование на основе потока данных

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

В настоящее время используется несколько стратегий тестирования на основе потока данных:

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

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

Лекция 12. Методы функционального тестирование программных продуктов

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

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

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

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

Рассмотрим наиболее широко применяемые методы функционального тестирования, или тестирования по принципу "черного ящика".

1. Метод эквивалентного разбиения

Цель – выбрать минимальное подмножество тестов, обеспечивающих наибольшую вероятность обнаружения ошибок.

Правильно выбранный тест этого подмножества должен обладать двумя свойствами:

  1. включать как можно больше входных условий с тем, чтобы минимизировать общее число тестов;

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

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

  1. выделение классов эквивалентности;

  2. построение тестов.

1.1. Выделение классов эквивалентности

Классы эквивалентности выделяются путем выбора каждого входного условия (предложение спецификации) и разбиения его на две или более групп.

Различают два типа классов эквивалентности:

  • правильные классы эквивалентности, представляющие правильные входные данные программы;

  • неправильные классы эквивалентности, представляющие ошибочные входные данные.

Выделение классов эквивалентности представляет собой взначительной степени эвристический процесс. Однако существует ряд правил, которые следует выполнять:

  1. Если входное условие описывает область значений (например, 1 I 100), то задается один правильный класс эквивалениности (1 I 100) и два неправильных ( X < 1 и X>100).

  2. Если входное условие описывает число значений (например, число элементов последовательности N не должно превышать 10), то определяется один правильный класс эквивалентности (N 10) и два неправильных (N<1 и N>10).

  3. Если входное условие описывает множество входных значений и есть основание полагать, что каждое значение программа трактует особо (например, цвет может принимать значения: красный, желтый, зеленый), то определяется правильный класс эквивалентности для каждого значения и один неправильный класс эквивалентности – значение, не принадлежащее множеству (например, белый).

  4. Если входное условие описывает ситуацию “должно быть” (например, первым символом идентификатора должна быть буква), то определяется один правильный класс эквивалентности (первый символ – буква) и один неправильный класс эквивалентности (первый символ – не буква).

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