Способ тестирования потоков данных

 

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

Работу любой программы можно рассматривать как обработку потока данных, передаваемых от входа в программу к ее выходу.

Рассмотрим пример.

Пусть потоковый граф программы имеет вид, представленный на рис. 6.8. В нем сплошные дуги — это связи по управлению между операторами в программе. Пунктирные дуги отмечают информационные связи (связи по потокам данных). Обозначенные здесь информационные связи соответствуют следующим допущениям:

q в вершине 1 определяются значения переменных а, b;

q значение переменной а используется в вершине 4;

q значение переменной b используется в вершинах 3, 6;

q в вершине 4 определяется значение переменной с, которая используется в вершине 6.

Рис. 6.8.Граф программы с управляющими и информационными связями

 

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

q множество определений данных

DEF(i) = { х | i -я вершина содержит определение х};

q множество использований данных:

USE (i) = { х | i -я вершина использует х}.

Под определением данных понимают действия, изменяющие элемент данных. Признак определения — имя элемента стоит в левой части оператора присваивания:

x:=f(…).

Использование данных — это применение элемента в выражении, где происходит обращение к элементу данных, но не изменение элемента. Признак использования — имя элемента стоит в правой части оператора присваивания:

#:=f(x).

Здесь место подстановки другого имени отмечено прямоугольником (прямоугольник играет роль метки-заполнителя).

Назовём DU-цепочкой (цепочкой определения-использования) конструкцию [х, i,j], где i,j — имена вершин; х определена в i-й вершине DЕF(i)) и используется в j -й вершине USE(j)).

В нашем примере существуют следующие DU-цепочки:

[а,1,4],[b, 1,3], [b, 1,6], [с, 4, 6].

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

Очевидно, что для подготовки тестов требуется выделение маршрутов — путей выполнения программы на управляющем графе. Критерий для выбора пути — покрытие максимального количества DU-цепочек.

Шаги способа DU-тестирования:

1) построение управляющего графа (УГ) программы;

2) построение информационного графа (ИГ);

3) формирование полного набора DU-цепочек;

4) формирование полного набора отрезков путей в управляющем графе (отображением набора DU-цепочек информационного графа, рис. 6.9);

Рис. 6.9.Отображение DU-цепочки в отрезок пути

 

5) построение маршрутов — полных путей на управляющем графе, покрывающих набор отрезков путей управляющего графа;

6) подготовка тестовых вариантов.

Достоинства DU-тестирования:

q простота необходимого анализа операционно-управляющей структуры программы;

q простота автоматизации.

Недостаток DU-тестирования: трудности в выборе минимального количества максимально эффективных тестов.

Область использования DU-тестирования: программы с вложенными условными операторами и операторами цикла.

Тестирование циклов

 

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

Различают 4 типа циклов: простые, вложенные, объединенные, неструктурированные. Структура циклов приведена на рис. 6.10.

Рис. 6.10.Типовые структуры циклов

 

Простые циклы

 

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

1) прогон всего цикла;

2) только один проход цикла;

3) два прохода цикла;

4) т проходов цикла, где т<п;

5) п - 1, п, п + 1 проходов цикла.

Вложенные циклы

 

С увеличением уровня вложенности циклов количество возможных путей резко возрастает. Это приводит к нереализуемому количеству тестов [13]. Для сокращения количества тестов применяется специальная методика, в которой используются такие понятия, как объемлющий и вложенный циклы (рис. 6.11).

Рис. 6.11. Объемлющий и вложенный циклы

 

Порядок тестирования вложенных циклов иллюстрирует рис. 6.12.

Рис. 6.12. Шаги тестирования вложенных циклов

 

Шаги тестирования.

1. Выбирается самый внутренний цикл. Устанавливаются минимальные значения параметров всех остальных циклов.

2. Для внутреннего цикла проводятся тесты простого цикла. Добавляются тесты для исключенных значений и значений, выходящих за пределы рабочего диапазона.

3. Переходят в следующий по порядку объемлющий цикл. Выполняют его тестирование. При этом сохраняются минимальные значения параметров для всех внешних (объемлющих) циклов и типовые значения для всех вложенных циклов.

4. Работа продолжается до тех пор, пока не будут протестированы все циклы.

Объединенные циклы

 

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

Неструктурированные циклы

 

Неструктурированные циклы тестированию не подлежат. Этот тип циклов должен быть переделан с помощью структурированных программных конструкций.

Контрольные вопросы

1. Определите понятие тестирования.

2. Что такое тест? Поясните содержание процесса тестирования.

3. Что такое исчерпывающее тестирование?

4. Какие задачи решает тестирование?

5. Каких задач не решает тестирование?

6. Какие принципы тестирования вы знаете? В чем их отличие друг от друга?

7. В чем состоит суть тестирования «черного ящика»?

8. В чем состоит суть тестирования «белого ящика»?

9. Каковы особенности тестирования «белого ящика»?

10. Какие недостатки имеет тестирование «белого ящика»?

11. Какие достоинства имеет тестирование «белого ящика»?

12. Дайте характеристику способа тестирования базового пути.

13. Какие особенности имеет потоковый граф?

14. Поясните понятие независимого пути.

15. Поясните понятие цикломатической сложности.

16. Что такое базовое множество?

17. Какие свойства имеет базовое множество?

18. Какие способы вычисления цикломатической сложности вы знаете?

19. Поясните шаги способа тестирования базового пути.

20. Поясните достоинства, недостатки и область применения способа тестирования базового пути.

21. Дайте общую характеристику способов тестирования условий.

22. Какие типы ошибок в условиях вы знаете?

23. Какие методики тестирования условий вы знаете?

24. Поясните суть способа тестирования ветвей и операторов отношений. Какие он имеет ограничения?

25. Что такое ограничение на результат?

26. Что такое ограничение условия?

27. Что такое ограничивающее множество? Чем удобно его применение?

28. Поясните шаги способа тестирования ветвей и операторов отношений.

29. Поясните достоинства, недостатки и область применения способа тестирования ветвей и операторов отношений.

30. Поясните суть способа тестирования потоков данных.

31. Что такое множество определений данных?

32. Что такое множество использований данных?

33. Что такое цепочка определения-использования?

34. Поясните шаги способа тестирования потоков данных.

35. Поясните достоинства, недостатки и область применения способа тестирования потоков данных.

36. Поясните особенности тестирования циклов.

37. Какие методики тестирования простых циклов вы знаете?

38. Каковы шаги тестирования вложенных циклов?