Слайд 1ТЕСТИРОВАНИЕ
Тестирование – процесс испытания программы на тестах с целью обнаружения
в ней семантических ошибок.
Тест – контрольный пример, в котором для
конкретных данных известен правильный (эталонный) ответ. (иначе, тест - совокупность входных данных и эталонного результата).
Цель теста – выявить ошибку, если она имеется
Результаты, фактически полученные при выполнении теста, сопоставляются с эталонными, и на основе этого делается вывод о наличии или отсутствии ошибки.
Если результат, полученный на тесте, не совпадает с эталонным ответом, - обнаружена ошибка.
Для получения программы, свободной от ошибок по результатам тестирования, необходимо более одного теста.
Необходимое количество тестов определяется структурой программы и применяемой стратегией тестирования.
Слайд 2При разработке тестов для получения эталонного ответа или просто
эталона рекомендуется по возможности использовать алгоритм, отличающийся от того, который
проверяется в программе.
Отладка - процессе устранения ошибок в программе
Три этапа отладки:
локализация ошибки - найти то место в программе, из-за которого имеет место ошибка
внесение исправлений в программу
последующее тестирование.
Если локализовать место ошибки не удается, может потребоваться разработать дополнительные тесты, опираясь на некоторую гипотезу о причине ошибки.
После внесения исправлений в программу рекомендуется испытать программу не только на том тесте, который обнаружил ошибку, но и на других, а именно на тех, которые проходили правильно.
Слайд 3ВИДЫ ТЕСТИРОВАНИЯ
Статическое тестирование - поиск ошибок путем просмотра
текста программы и выполнения ее «вручную» («в уме» или на
бумаге). Применяется в процессе разработки алгоритма.
Детерминированное тестирование – подготовка тестов на основе некоторой методики и исполнение программы на них. Применяется когда для полноценных испытаний программы достаточно иметь ограниченное количество тестов.
Различают «численное» и «символьное» тестирование. Может применяться как в процессе разработки алгоритма, так и в процессе испытаний и отладки на компьютере.
Стохастическое тестирование – испытание только на компьютере с использованием генераторов тестов. Применяется когда, в силу сложности проверяемого алгоритма, необходимое количество тестов слишком велико. В этом случае вместо эталонных ответов задаются только области данных, которым должны принадлежать эталонные ответы.
Количество тестов выбирается на основе методов теории планирования экспериментов.
Слайд 4ОБЩИЕ ПРИНЦИПЫ ТЕСТИРОВАНИЯ
Хорошим считается тест, который обнаруживает ошибку,
если она имеется.
Каждый тест должен быть предназначен для обнаружения
отдельной ошибки алгоритма (и, по возможности, локализовать место в программе, где она была допущена)
Тест построен неудачно, если он формирует одно и то же сообщение для нескольких ошибок
Необходимо проверять, не делает ли программа того, чего не должна делать
Тесты следует разрабатывать также и для неправильных или непредусмотренных входных данных
Количество тестов должно быть таким, чтобы с их помощью можно было обнаружить все возможные ошибки алгоритма. Это можно обеспечить только за счет систематизированного подхода к их построению. В основе систематизации при построении лежит та или иная стратегия. Совокупность тестов, покрывающая все возможные ошибки, будем называть системой тестов
Порядок применения тестов не безразличен и должен быть таким, чтобы облегчить локализацию одной ошибки, если в программе их несколько.
Слайд 5СТРАТЕГИИ ТЕСТИРОВАНИЯ
Стратегия тестирования - совокупность принципов, положенных в основу
построения системы тестов.
Наиболее популярные стратегии:
Стратегия «черного ящика» :
При разработке тестов известны только функции программы, но не известно, как они реализуются. (разработчик тестов знает, ЧТО должна делать программа, но не знает КАК).
Стратегия используется и при разработке программы и при приемке заказчиком.
Стратегия «белого ящика» опирается на знание внутренней структуры программы: разработчик тестов знает, и ЧТО и КАК делает программа.
Стратегию применяют в процессе разработки алгоритма и при внесении изменений в готовую программу.
Слайд 6Методы стратегии «черного ящика»
Тестирование в рамках данной стратегии предполагает
управление по входным и выходным данным.
Тесты разрабатываются на основе
внешней спецификации. Никаких знаний о структуре программы не предполагается.
Применяемые методы:
метод эквивалентных разбиений
метод граничных условий
метод функциональных диаграмм
метод, основанный на предположениях об ошибке
Слайд 7 Метод эквивалентных разбиений
Основывается на разбиении области возможных значений входных
данных на конечное число классов эквивалентности.
Утверждается, что для любого
значения внутри класса эквивалентности поведение программы идентично, и, следовательно, проверка программы для каждого класса может быть проведена всего одним тестом.
Можно выделить два этапа разработки тестов:
выделение классов эквивалентности не только для допустимых, но и для недопустимых входных данных (результат – таблица классов эквивалентности)
разработка по одному тесту для каждого класса (результат – таблица тестов).
Слайд 8Таблица тестов:
Таблица классов эквивалентности:
Слайд 9Тесты:
Таблица классов эквивалентности:
Пример 1. Решение квадратного уравнения (черный ящик)
Подбор коэффициентов:
x1
= 2; x2 = 3; = > (x – 2)*(x
– 3) = 0
(x – 2)*(x – 3) = x*x – 2*x – 3*x + 6 = x*x – 5*x + 6 = > {a=1, b=-5, c=6}
Слайд 10 Метод граничных условий
Цель метода - проверить поведение программы непосредственно на
границах, выше или ниже границ входных данных для классов эквивалентности.
При его применении
сначала подготавливают тесты по стратегии «черного ящика», затем они дополняются тестами, построенными на основе знания границ правильных классов
Применение метода позволяет определить, сколько и какие тесты должны быть добавлены.
При разработке тестов иногда учитываются не только входные условия, но и пространство результатов.
Следствие: использование данного метода приводит к увеличению количества тестов по сравнению с предыдущим, что улучшает качество тестирования
Слайд 11 Метод функциональных диаграмм
К
недостаткам рассмотренных методов относится то, что при их применении не
предполагается проверять поведение программы при различных комбинациях входных данных.
Метод функциональных диаграмм позволяет сделать это.
Для этого на основе внешней спецификации строятся функциональные диаграммы, связывающие причины и следствия, а затем по этим диаграммам строятся тесты.
Для получения представления о сути метода рекомендуется обратиться к работам:
1. Майерс Г. Надежность программного обеспечения. – М.: Мир. - 1980 г.
2. Майерс Г. Искусство тестирования программ/Пер. с англ. под ред. Б.А.Позина. – М.: Финансы и статистика. - 1982 г.
Метод, основанный на предположениях об ошибке
Метод чаще всего применяется в процессе отладки, т.е. в случае, когда выясняется, что программа ведет себя неправильно.
При данном методе перечисляются возможные ошибки и ситуации, в результате которых могут эти ошибки появиться, и для них составляются тесты.
Слайд 12Методы стратегии «белого ящика»
В основу построения тестов положено знание структуры
программы:
Количество тестов, необходимых и достаточных для полноценной проверки программы
определяет знание правил интерпретации структурных элементов
«альтернативный выбор»
«цикл»
В рамках данной стратегии применяются большое число методов.
Рассмотрим следующие методы:
покрытие операторов («все операторы») - число тестов выбирается таким, чтобы каждый оператор был выполнен, по меньшей мере, один раз.
покрытие решений («все пути») - число тестов выбирается таким, чтобы каждое решение было выполнено, по меньшей мере, один раз (под решением понимается конкретное значение условия в альтернативной или циклической структуре вне зависимости от сложности условия)
комбинированное покрытие условий - Все возможные комбинации условий в каждом решении должны быть выполнены хотя бы один раз.
Слайд 13если (a>1) и (b=0) то
x:=x/a
все
если (a=2) и
(x>1) то
x:=x+1
все
Разработаем тесты для проверки корректности данного
фрагмента алгоритма
Метод покрытия операторов:
Тест 1. {a=2, b=0, x=6} Эталон: {x=4}
Метод покрытия решений:
Тест 1. {a=2, b=0, x=3} Эталон: x=2,5 Оба решения выполняются.
Тест 2. {a=3, b=1, x=1} Эталон: x=1 Оба решения не выполняются.
Слайд 14если (a>1) и (b=0) то
x:=x/a
все
если (a=2) и
(x>1) то
x:=x+1
все
Тест 1. {a=2, b=0,
x=4} Эталон: x=3
Тест 2. {a=2, b=1, x=4} Эталон: x=5
Тест 3. {a=1, b=0, x=2} Эталон: x=2
Тест 4. {a=1, b=1, x=1} Эталон: x=1
Тесты:
Метод комбинированного покрытия условий:
Слайд 16program sqroot;
внутренние переменные:
a, b, c : вещ {коэфф.
уравнения}
x1, x2 : вещ {корни}
d :
вещ {рабочая переменная}
начало
вывод('Квадратное уравнение');
вывод('введи коэффициенты ');
если (а = 0) то
вывод('Уравнение не квадратное.')
иначе
d := b * b - 4 * a * c;
если (d < 0) то
вывод('Действительных корней нет')
иначе
d := sqrt(d)
x1 := (-b + d) / (2 * a)
x2 := (-b - d) / 2 / a
вывод('корень 1 = ',x1)
вывод('корень 2 = ',x2)
все
все
конец
Дома: Построить в тетради тесты по стратегии белого ящика:
методом «покрытие операторов»
методом «покрытие решений»