Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПП.docx
Скачиваний:
6
Добавлен:
27.08.2019
Размер:
1.91 Mб
Скачать

Тестирование и виды тестирования

Тестирование – это процесс выполнения программы с целью обнаружения ошибок.

Шаги процесса задаются тестами, каждый из которых определяет:

  1. Свой набор исходных данных и условий для запуска программы;

  2. Набор ожидаемых результатов работы программы.

Процесс разработки ПО предполагает три стадии тестирования:

  1. Автономное тестирование компонентов ПО;

  2. Комплексное тестирование ПО;

  3. Системное или оценочное тестирование (на соответствие основным критериям качества).

Для повышения качества тестирования рекомендуется соблюдать следующие основные принципы:

  1. Предполагаемые результаты должны быть известны до тестирования;

  2. Следует избегать тестирование программы автором;

  3. Необходимо досконально изучать результаты каждого теста;

  4. Необходимо проверять действие программы на неверных данных;

  5. Необходимо проверять программу на неожиданные побочные эффекты.

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

Существует два подхода к формированию тестовых наборов: структурный и функциональный.

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

Структурное тестирование

Структурное тестирование – это тестирование, которое образно называется «по маршрутам», т. к. в этом случае тестовые наборы формируют путем анализа маршрутов, предусмотренных алгоритмом.

Под маршрутом понимают последовательности операторов программы, которые выполняются при конкретном варианте исходных данных.

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

Структурное тестирование имеет несколько недостатков:

  1. Не обнаруживает пропущенные маршруты;

  2. Не обнаруживает ошибок, зависящих от обрабатываемых данных;

  3. Не дает гарантий, что программа правильная.

Для формирования тестов программу представляют в виде графа.

procedure m(a, b:real; var x:real);

begin

if (a>0) and (b=0) then x:=x/a;

if (a=2) or (x>1) then x:=x+1;

end;

Формирование тестовых наборов может осуществляться по нескольким критериям:

  1. Покрытие операторов;

  2. Покрытие решений;

  3. Покрытие условий;

  4. Покрытие решений/условий;

  5. Комбинаторное покрытие условий.

Покрытие операторов

Критерий покрытия операторов подразумевает такой подбор тестов, чтобы каждый оператор выполнялся, по крайней мере, один раз. Например, чтобы выполнить это условие для фрагмента на рисунке, нужно в качестве входных данных принять a=2, b=0, x=3. Т. о., хотя при тестировании необходимо задавать исходные данные так, чтобы все операторы были выполнены хотя бы один раз, для проверки программы этого не достаточно.

Покрытие решений

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

Функциональное тестирование

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

При функциональном тестировании различают следующие методы формирования тестовых наборов:

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

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

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

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

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

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

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

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

  2. Формируют сами тесты.

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

Граничные значения – это значения на границах классов эквивалентности входных данных.

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

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

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

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

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

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

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

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