Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1438

.pdf
Скачиваний:
2
Добавлен:
30.04.2022
Размер:
1.16 Mб
Скачать

недопустимый 3 (например, х – не число).

2.Если предполагается ввод конкретного значения, то выделяют 1 допустимый и 3 недопустимых класса.

допустимый - это правильное значение, недопустимый – значение, большее допустимого, недопустимый – значение, меньшее допустимого,

недопустимый – значения других типов.

3.Если ввод предполагает множество значений {a, b, c}, то выделяют 2 класса:

допустимый {a, b, c},

недопустимый (x<>a) And (x<>b) And (x<>c).

4.Если вводится булево значение, исследуются 3 класса:

значение true, значение false, значения других типов.

7.3.2. Анализ граничных условий

Существуют несколько правил для определения наборов тестов.

1.Если исходные данные представлены диапазоном значений n..m, то определяются наборы:

n,

m,

левее n,

143

правее m,

значения других типов.

2.Если исходные данные – дискретное множество, то тесты представляются наборами:

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

3.Правила 1 и 2 применяются к выходным данным.

4.Проверяются исходные данные на границах.

5.Если входные и выходные данные – упорядоченные множества, то тестируются 1-й и последний элементы этого множества, а также данные других типов.

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

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

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

7.4.1. Тестирование циклов, покрытие операторов, условий

144

Для циклов с n повторениями строится один из наборов тестов:

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

1 проход цикла;

2 прохода цикла;

m проходов цикла, m<n;

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

Покрытие операторов – подбираются такие тесты, при которых каждый оператор выполняется хотя бы 1 раз.

Например [11], в блоке реализуется алгоритм поиска минимума из трех значений Y=min(a, b, c).

145

A

1

Y=a

 

Да

 

 

2

3

 

 

 

 

 

 

Y=b

b>a И b>c

 

 

B

 

 

 

 

 

 

 

C

Нет

 

Да

 

5

4

 

 

 

 

Y=c

 

 

 

 

 

 

 

 

 

c>a И c>b

 

 

 

D

 

 

 

 

 

 

 

 

 

 

 

 

Нет

E

Рис. 24. Блок-схема поиска максимума трех значений

В этом примере покрывают операторы следующие тес-

ты:

1)a=5, b=1, c=2 – покрыты операторы 1, 2, 4;

2)a=1, b=3, c=2 - покрыты операторы 1, 2, 3, 4;

3)a=2, b=4, c=6 – покрыты операторы 1, 2, 4, 5.

146

Покрытие переходов – составляются такие тесты, совокупность которых обеспечивает проход каждого направления при ветвлении хотя бы 1 раз.

В примере покрывают переходы следующие тесты:

1.a=1, b=3, c=2 - покрыты переходы A, B, E;

2.a=2, b=4, c=6 – покрыты переходы A, C, D.

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

В примере покрывают все возможные результаты каждого элементарного условия следующие тесты:

1.a<b;

2.b<=a;

3.b>c;

4.b<=c;

5.c>a;

6.c<=a;

7.c>b;

8.c<=b.

Комбинаторное покрытие условий – подбирается такая совокупность тестов, при которой хотя бы 1 раз проверяются все возможные комбинации результатов условия и все точки входа.

Для рассмотренного примера это следующие тесты:

1.b>a, b>c;

2.b>a, b<=c;

3.b<=a, b>c;

4.b<=a, b<=c;

147

5.c>a, c>b;

6.c>a, c<=b;

7.c<=a, c>b;

8.c<=a, c<=b.

Наиболее надежным является комбинаторное покрытие условий.

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

7.4.2. Тестирование базового пути

Этот способ составления тестов предложил Том Мак-

Кейт (1976 г.) [15].

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

Чтобы выяснить все маршруты программы, строится потоковый граф [15]. Он отображает структуру программы. Каждый оператор или линейная последовательность операторов – вершины графа. Дополнительные вершины вводятся для обозначения конца оператора if и конца цикла. Дуги отображают поток управления в программе.

Операторные (выходит одна ду-

га)

Вершины

Предикатные (выходит две дуги) соответствуют простым условиям в программе

148

Составное условие разбивается на несколько предикатных вершин.

Пример:

If a or b then x Else y;

 

 

Нет

 

a

Да

 

 

 

 

 

 

 

 

 

R2

 

Нет

b

Да

 

x

 

 

 

 

y

 

R1

 

x

 

 

 

 

 

 

R3

End if

Рис. 25. Пример потокового графа.

Замкнутые области, образованные вершинами и дугами, называют регионами. Окружающая среда рассматривается как дополнительный регион.

Цикломатическая сложность (ЦС) – метрика ПО, дающая оценку сложности ПО. ЦС определяется при тестировании как:

1)количество независимых путей в базовом множестве программы;

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

Независимым путем считается тот путь, который вводит новый оператор или новое условие.

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

149

Пути обычно формируются от самого короткого к самому длинному. Начинают путь в начальной вершине, а заканчивают – в конечной. Все независимые пути образуют базовое множество графа.

Тесты базового множества гарантируют:

1)однократное выполнение всех операторов;

2)выполнение всех условий по True и False ветвям. Мощность базового множества = ЦС потокового графа.

ЦС вычисляется по одному из трех способов.

1)ЦС = числу регионов в потоковом графе.

2)ЦС = V(G) = E – N +2, где E количество дуг, N – количество в потоковом графе.

3)ЦС = V(G) = p + 1, где p – количество предикатов вершин в графе.

То есть по ЦС получается оценка числа необходимых

тестов.

Пример: вычисление среднего значения [15]. Процедура среднее

1)i:= 1;

1)введено:= 0;

1)количество:= 0;

1)Сум := 0;

Выполнять пока

2)величина (i) <> stop и

3)введено <= 500

4)Введено := введено + 1;

5)Если величина (i) >= мин и

6)Величина (i) <= макс

7)То количество := Количество + 1; Сум := Сум + Величина (i);

8)Конец если; I:=I+1;

9)Конец выполнить.

150

10)Если количество > 0 то сред := Сум/ Ко-

личество;

11)Иначе Сред := Stop;

12)Конец если

13)Конец процедуры среднее;

1.Нумеруются операторы текста программы, причем линейную последовательность нумеруем одним номером. Пронумерованные операторы отображаются в потоковый граф.

1

10

R1 2 11 R2 12

3 13

4

R6

R3

5

R4 6

8

R5

7

 

 

9

Рис. 26. Потоковый граф процедуры среднее

2.Определяется ЦС потокового графа.

1)V(G) = 6 регионов.

2)V(G) = 17 дуг – 13 вершин +2 = 6.

3)V(G) = 5 предикатных вершин + 1=6.

3.Определяется базовое множество независимых линейных путей.

Путь 1: 1-2-10-11-13 // Величина (i)= stop количество = 0.

151

Путь 2: 1-2-10-12-13 // Величина (i)= stop количество = 0. Путь 3: 1-2-3-10-11-13 // Попытка обработки 501-ю вели-

чину.

 

Путь 4: 1-2-3-4-5-89-2-…

// Величина (i)<мин.

Путь 5: 1-2-3-4-5-6-8-9-2-…

// Величина (i)>макс.

Путь 6 : 1-2-3-4-5-6-7-8-9-2-… // Нормальная обработка. Здесь … означает любое продолжение пути.

4. Готовятся тесты, вызывающие прохождение всего

пути.

Исходные данные: … … …

Ожидаемые результаты: … … …

Путь 1. Исходные данные: величина (k) – допустимое значение, k<I,

Величина (i) = stop, 2 ≤ I ≤500.

Ожидаемые результаты: корректное усреднение на k величинах.

Путь 2. Исходные данные: величина (1) = stop. Ожидаемые результаты: Среднее = stop

Путь 3. Исходные данные: обработка 501 величины, предыдущие 500 должны быть правильными.

Ожидаемые результаты: Корректное вычисление. Путь 4. Исходные данные: величина (i) – дополнитель-

ное значение I ≤500 величина (k)< мин k<i. Ожидаемые результаты: ОК!

Путь 5. Исходные данные: Величина (i) - допустимое значение, I ≤ 500, величина (i)>макс.

Ожидаемые результаты: корректное вычисление сред-

него.

Путь 6. Исходные данные: Величина (i) – допустимое значение I ≤ 500.

Ожидаемые результаты: корректное вычисление сред-

него.

152