
- •Введение
- •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.3. Методы проектирования тестовых путей.
Процесс построения набора тестов при структурном тестировании принято делить на 3 фазы [2]:
1)конструирование УГП;
2) выбор тестовых путей;
3)генерация тестов, соответствующих тестовым путям.
Первая фаза - статическая. Получаем граф программы и, зависящие от него и критерия тестирования, множество элементов, которые необходимо покрыть тестами.
Вторая фаза – выбор тестовых путей. Методы построения тестовых путей делятся на:
Статические методы( эвристические, адаптивные)
Динамические методы
Методы реализуемых путей.
На третьей фазе необходимо по путям тестирования найти подходящие тесты, реализующие прохождение этих путей.
Каждый путь описывается конъюнктивным предикатом:
Pred(i)=C1^C2^…^Сn, где каждый предикат Сi соответствует переходу из вершины – решения и задаётся в этой вершине.
Реальный предикат Pred(i) получается в процессе «обратной подстановки», т.е. в результате должна быть решена система нелинейных равенств и неравенств, реализующих тест.
Статические методы
Эвристические методы позволяют строить тестовый каждый путь по аналогии с выполнением программы путём постепенного удлинения графа за счёт добавления дуг, пока не будет построен УГП.
Адаптивные методы появились последнее время. Суть их состоит в том, что бы каждый раз добавлять только один тестовый путь (входной тест), используя предыдущие пути как руководство для выбора последующих путей в соответствии с некоторой индуктивной стратегией. Чаще всего адаптивные стратегии применяются по отношению к критерию С1. С точки зрения практической реализации для каждой покрытой вершины решения, из которой выходит хотя бы одна непокрытая дуга, необходимо модифицировать тест так, что бы при минимальных затратах (минимальность пути ) достичь указанную вершину. Статические методы трудно реализуемы для больших систем.
Динамические методы.
Дают возможность построить полную систему тестов, удовлетворяющих заданному критерию. Это построение покрывающего множества путей и тестовых данных одновременно. Основная идея методов – подсоединение к начальным реализуемым отрезкам путей дальнейших их частей так, чтобы не терять при этом реализуемости вновь полученных путей и покрыть требуемые элементы структуры программы.
Третья группа методов –методы реализуемых путей.Основная стратегия заключается в выделении из множества всех путей подмножества реализуемых путей и по ним построить покрывающее множество путей. Каждый из перечисленных методов имеет свои достоинства и недостатки. Поэтому их следует использовать совместно.
Достоинство статических методов в сравнительно небольших требуемых ресурсах как при использовании, так и при разработке ( последнее очень важно, т.к. пока промышленных систем построения покрывающего множества путей для основных языков программирования нет). Однако реализация этих систем может содержать заранее непредсказуемый процент брака (нереализуемых путей). Кроме того, в этих системах переход от покрывающего множества путей к полной системе тестов пользователь должен осуществить вручную, а это трудоёмко.
Динамические методы требуют больших ресурсов как при разработке, так и при эксплуатации, однако увеличение этих затрат происходит за счёт разработки и эксплуатации аппарата определения реализуемости путей( символический интерпретатор, решатель неравенств ). Методы реализуемых путей дают наиболее качественный результат. Однако их применение из-за сложности для широкого класса задач проблематично.