
- •Введение
- •1. Основные понятия процесса тестирования
- •1.1 Особенности тестирования программных компонент.
- •1.2. Виды и методы тестирования.
- •1.3. Структурное тестирование. Критерии структурного подхода
- •1.3.1. Тестирование на основе потока управления
- •1.3.2. Тестирование на основе потока данных
- •1.3.3. Методы проектирования тестовых путей.
- •1.3.4. Оценка степени тестированности программного проекта.
- •1.3.5. Примеры построения тестов «белого ящика» .
- •1.4. Функциональное тестирование – принцип «чёрного ящика»
- •1.4.1. Метод эквивалентного разбиения
- •1.4.2. Анализ граничных значений.
- •1.4.3. Метод функциональных диаграмм причинно-следственных связей.
- •1.4.4. Тестирование потока транзакций.
- •1.4.5. Метод предположения об ошибке.
- •1.4.6. Общая стратегия функционального тестирования
- •1.4.7.Примеры функционального тестирования.
- •Метод эквивалентного разбиения
- •Метод граничных условий.
- •Метод функциональных диаграмм причинно-следственных связей.
- •2. Разработка эффективных наборов тестов «чёрного ящика»
- •2.1. Характеристики хорошего теста
- •2.2. Тестирование переходов между состояниями
- •2.3.Условия гонок и другие временные зависимости
- •2.4. Нагрузочные испытания
- •2.5. Тестирование функциональной эквивалентности
- •2.6. Применение технологии эквивалентности
- •3. Задание для самостоятельной работы
1.3.5. Примеры построения тестов «белого ящика» .
Рассмотрим фрагмент участка программы, который представлен графом передачи управления. Каждая вершина графа это линейный участок программы, заканчивающейся оператором ветвления. Дуги указывают на передачу управления. Граф описывает программу из 10-12 операторов, включая цикл, который выполняется не менее 20 раз. Если предположить, что одновременно выполняются хотя бы 6 ветвей графа и цикл 20 раз, то число тестов для этого участка будет равно 120. Поскольку программы состоят из множества таких участков, то исчерпывающее тестирование невозможно. Целью отбора тестовых наборов данных является попытка уменьшить эту «неполноту». Если ввести ограничение на время, стоимость, машинное время и т.п., то основным вопросом детерминированного тестирования становится вопрос о том, какое подмножество тестов имеет наивысшую вероятность обнаружения большинства ошибок. Это подмножество называется эффективным.
Покрытие операторов – критерий С0 (выполняется каждый оператор хотя бы один раз) . Критерий очень слабый и в больших программах невыполним.
2. Покрытие решений (или покрытие узлов ветвления ) – критерий С1 .
В каждом узле ветвления должен быть обеспечен переход по веткам “истина” и “ложь” хотя бы один раз.
да нет
Рис.1. Узел ветвления
Построим тесты для данного узла ветвления.
1) А>2 и С=Д (истина)
Тест1: A=3, С=0, Д=0.
2)
А<=2 и С
Д (ложь)
Тест2: А=2, С=0, Д=1.
Покрытие условий . Для выполнения таких ошибок используют комбинаторное покрытие условий. Этот критерий требует создания такого числа тестов, чтобы все возможные комбинации результатов условия в каждом решении и все точки входа выполнялись хотя бы один раз. Для условия на рис.1 по этому критерию надо покрыть тестами следующие 4 комбинации:
1) A>2;
С=Д; 2) А>2; С
Д;
3) А
2;
С=Д; 4) А
2;
С
Д.
Тесты: 1) А=3; С=0; Д=0; 2) А=3; С=0; Д=1;
3) А=2; С=1; Д=1; 4) А=2; С=1; Д=0.
1.4. Функциональное тестирование – принцип «чёрного ящика»
Это тестирование, игнорирующее внутренние механизмы работы системы. Проверяются только данные на входе и выходе («чёрный ящик»). Структурное тестирование не может полностью заменить функциональное, т.к. подчас некоторые входные условия могут быть упущены при проектировании системы. Функциональное тестирование производиться для проверки соответствия системы специфицированным функциональным требованиям. Критерии функционального тестирования отличаются от критериев структурного тестирования, т.к. множество требуемых элементов , которое следует покрыть тестом другое. Рассмотрим наиболее широко применяемые методы функционального тестирования.
1.4.1. Метод эквивалентного разбиения
Разработка тестов по методу эквивалентного разбиения известного под названием метод тестирования доменов , осуществляется в 2 этапа:
Выделение классов эквивалентности.
2. Построение тестов.
Классы эквивалентности выделяются путём выбора каждого входного условия ( обычно это предложения или фразы в спецификации) и разбиением его на две или более групп. Различают два класса эквивалентности: правильные и неправильные.
Правильные классы эквивалентности объединяют правильные входные данные.
Неправильные – ошибочные входные данные.
Построение тестов включает:
назначение каждому классу эквивалентности уникального номера;
проектирование тестов, каждый из которых показывает как можно большее число правильных классов эквивалентности, пока все они не будут покрыты;
проектирование тестов покрытия непокрытых неправильных классов в отдельности.
Сложность тестирования по данному методу оценить трудно из-за отсутствия их взаимосвязей.