Тестирование циклов
Типы циклов:
а) Простой цикл. (рисунок 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. Охарактеризуйте тестирования каждого из известных вам типов циклов.