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

Типы циклов:

а) Простой цикл. (рисунок 10)Обычно тестируют следующими способами:

1) один раз пройти цикл.

2) два прохода через цикл.

3) проход всего цикла n раз.

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

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

Пример подобного цикла на языке Ассемблер:

mov cx,n

cicle:

adc [di], ax

add si,2

add di,2

loop cicle

 

Рисунок 10 – Простой цикл

б) Вложенный цикл (рисунок 11).

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

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

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

Шаг 3. Повторяем, пока не протестированы все циклы.

 

 

 

 

Рисунок 11 – Вложенный цикл

Пример подобного цикла на языке Ассемблер:

mov dx, Number_Of_Arrays

loop_ext:

call Print_Name_Of_Array

mov cx,n

loop_in: call Print_An_Array_Element

dec cx

cmp cx,0

jz loop_in

dec dx

cmp dx,0

jnz loop_ext

 

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

 

Рисунок 12 – Объединённые циклы

 

Пример двух независимых объединенных циклов на языке Ассемблер:

cicle: mov dl,slovo

and dx,ax

shl ax,1

inc bx

cmp dx,0

jz fwd

inc in_byte

mov left_one,bl

cmp in_byte,1

jz right

jnz fwd

right: mov right_one,bl

fwd:loop cicle

mov ax,1

mov cx,16

mov bx,-1

cicl: mov dx,dslovo

and dx,ax

shl ax,1

inc bx

cmp dx,0

jz fwd2

inc in_byte2

mov left_one2,bl

cmp in_byte2,1

jz right2

jnz fwd2

right2: mov right_one2,bl

fwd2:loop cicl

г) Неструктурированные циклы (рисунок 13).Такие циклы переписываются в простые или вложенные. Такие циклы не подлежат тестированию.

Пример подобного цикла на языке Ассемблер:

back:mov cx,n

breaking_the_structure:cmp flag,0

jz skip

strange:cmp flag2,0

jz back

skip: call Read_Line

push cx

cmp cx,n

jz strange

cmp flag3,0

jz breaking_the_structure

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

 

Такой стиль написания программ – признак непрофессионализма и отклонения от программистской этики.

 

Пример тестирования циклов

Рассмотрим тот же пример на базе сортировки вставкой. В программе сортировки вставкой встречается один вложенный цикл. Для начала мы тестируем внутренний цикл while. Для его тестирования на вход подаём неупорядоченный массив, содержащий больше трёх элементов. Затем тестируем объемлющий цикл, он также простой. Для его тестирования лучше запустить цикл на (n – 1), n, (n + 1) проход. То есть, при n = 10000, подготовить три тестовых варианта с 9999 элементами в первом, 10000 во втором и 10001 в третьем.

 

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

1. Чем характерно тестирования «белым ящиком»?

2. Какие существуют стратегии (способы) тестирования «белым ящиком»?

3. Что такое цикломатическая сложность и как она может быть вычислена?

4. Опишите алгоритм тестирования базового пути.

5. Перечислите и поясните типы условий, существующих в методе тестирования условий.

6. Назовите шаги алгоритма тестирования ветвей и операторов отношений.

7. Что представляют собой управляющий и информационный графы, и по какому принципу они строятся?

8. По какому принципу строятся DU цепочки?

9. Какие типы циклов вам известны?

10. Охарактеризуйте тестирования каждого из известных вам типов циклов.