Файл: Технология раработки програмного обеспечения УП.pdf

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

 

 
 

136 

сы

 

эквивалентности

 

не

 

будут

 

покрыты

 

(только

 

не

 

общими)

 

тес-

тами.

 

3.

 

Запись

 

тестов,

 

каждый

 

из

 

которых

 

покрывает

 

один

 

и

 

только

 

один

 

из

 

непокрытых

 

неправильных

 

классов

 

эквивалент-

ности,

 

до

 

тех

 

пор,

 

пока

 

все

 

неправильные

 

классы

 

эквивалентно-

сти

 

не

 

будут

 

покрыты

 

тестами.

 

Причина

 

покрытия

 

неправильных

 

классов

 

эквивалентно-

сти

 

индивидуальными

 

тестами

 

состоит

 

в

 

том,

 

что

 

определенные

 

проверки

 

с

 

ошибочными

 

входами

 

скрывают

 

или

 

заменяют

 

дру-

гие

 

проверки

 

с

 

ошибочными

 

входами.

 

Например,

 

спецификация

 

устанавливает

 

«тип

 

книги

 

при

 

поиске

 

(ВЫЧИСЛИТЕЛЬНАЯ

 

ТЕХНИКА,

 

ПРОГРАММИРОВАНИЕ

 

или

 

ОБЩИЙ)

 

и

 

количе-

ство

 

(1

 

 

9999)».

 

Тогда

 

тест

 

 

XYZ 0 

отображает

 

два

 

ошибочных

 

условия

 

(неправильный

 

тип

 

книги

 

и

 

количество)

 

и,

 

вероятно,

 

не

 

будет

 

осуществлять

 

проверку

 

коли-

чества,

 

так

 

как

 

программа

 

может

 

ответить:

 

«XYZ

 

 

НЕСУЩЕСТВУЮЩИЙ

 

ТИП

 

КНИГИ»

 

и

 

не

 

проверять

 

осталь-

ную

 

часть

 

входных

 

данных.

 

Пример.

 

Предположим,

 

что

 

при

 

разработке

 

компилятора

 

для

 

под-

множества

 

языка

 

Фортран

 

требуется

 

протестировать

 

синтакси-

ческую

 

проверку

 

оператора

 

DIMENSION.

 

Спецификация

 

при-

ведена

 

ниже.

 

В

 

спецификации

 

элементы,

 

написанные

 

латин-

скими

 

буквами,

 

обозначают

 

синтаксические

 

единицы,

 

которые

 

в

 

реальных

 

операторах

 

должны

 

быть

 

заменены

 

соответствую-

щими

 

значениями,

 

в

 

квадратные

 

скобки

 

заключены

 

необяза-

тельные

 

элементы,

 

многоточие

 

показывает,

 

что

 

предшествую-

щий

 

ему

 

элемент

 

может

 

быть

 

повторен

 

подряд

 

несколько

 

раз.

 

Оператор

 

DIMENSION

 

используется

 

для

 

определения

 

массивов.

 

Форма

 

оператора

 

DIMENSION:

 

DIMENSION ad[,ad]

где

 

ad

 

есть

 

описатель

 

массива

 

в

 

форме

 

n(d[,d]…)

где

 

n

 

 

символическое

 

имя

 

массива,

 

а

 

d

 

 

размерность

 

масси-

ва.

 

Символические

 

имена

 

могут

 

содержать

 

от

 

одного

 

до

 

шести

 

символов

 

 

букв

 

или

 

цифр,

 

причем

 

первой

 

должна

 

быть

 

буква.

 


background image

 

 

 
 

137 

Допускается

 

использование

 

от

 

одной

 

до

 

семи

 

размерностей

 

в

 

форме

 

[lb:]ub

где

 

lb

 

и

 

иb

 

задают

 

нижнюю

 

и

 

верхнюю

 

границы

 

индекса

 

масси-

ва.

 

Граница

 

может

 

быть

 

либо

 

константой,

 

принимающей

 

значе-

ния

 

от

   

–65534

 

до

 

65535,

 

либо

 

целой

 

переменной

 

(без

 

индек-

сов).

 

Если

 

lb

 

не

 

определена,

 

то

 

предполагается,

 

что

 

она

 

равна

 

единице.

 

Значение

 

иb

 

должно

 

быть

 

больше

 

или

 

равно

 

lb.

 

Если

 

lb

 

определена,

 

то

 

она

 

может

 

иметь

 

отрицательное,

 

нулевое

 

или

 

положительное

 

значение.

 

Как

 

и

 

все

 

операторы,

 

оператор

 

DIMENSION

 

может

 

быть

 

продолжен

 

на

 

нескольких

 

строках

 

(конец

 

спецификации).

 

Первый

 

шаг

 

заключается

 

в

 

том,

 

чтобы

 

идентифицировать

 

входные

 

условия

 

и

 

по

 

ним

 

определить

 

классы

 

эквивалентности

 

(табл.

 

4.1).

 

Классы

 

эквивалентности

 

в

 

таблице

 

обозначены

 

чис-

лами.

 

Таблица

 

4.1

 

 

Классы

 

эквивалентности

 

 

 

 

Входные

 

условия

 

Правильные

 

классы

 

эквивалентности

 

Неправильные

 

классы

 

эквивалентности

 

Число

 

описателей

 

массивов

 

один

 

(1),

 

больше

 

одного

 

(2)

 

ни

 

одного

 

(3)

 

Длина

 

имени

 

масси-

ва

 

 

1-6

 

(4)

 

 

0

 

(5),

 

больше

 

6

 

(6)

 

 

Имя

 

массива

 

имеет

 

в

 

своем

 

составе

 

буквы

 

(7)

 

и

 

цифры

 

(8)

 

Содержит

 

что-то

 

еще

 

(9)

 

Имя

 

массива

 

начи-

нается

 

с

 

буквы

 

да

 

(10)

 

нет

 

(11)

 

Число

 

индексов

 

1-7

 

(12)

 

0

 

(13),

 

больше

 

7

 

(14)

 

Верхняя

 

граница

 

константа

 

(15),

 

целая

 

переменная

 

(16)

 

имя

 

элемента

 

массива

 

(17),

 

что-то

 

иное

 

(18)

 

Имя

 

целой

 

перемен-

ной

 

имеет

 

в

 

своем

 

составе

 

буквы

 

(19) 

 

и

 

цифры

 

(20)

 

состоит

 

из

 

чего-то

 

еще

 

(21)

 

Целая

 

переменная

 

начинается

 

с

 

буквы

 

да

 

(22)

 

нет

 

(23)

  

Константа

 

 

–65534

 

 

+65535

 

(24)

 

меньше

 

–65534

 

(25),

 

больше

 

65535

 

(26)

 


background image

 

 

 
 

138 

 

 

 

Входные

 

условия

 

Правильные

 

классы

 

эквивалентности

 

Неправильные

 

классы

 

эквивалентности

 

Нижняя

 

граница

 

определена

 

да

 

(27),

 

нет

 

(28)

 

 

Верхняя

 

граница

 

по

 

отношению

 

к

 

ниж-

ней

 

границе

 

больше

 

(29),

 

равна

 

(30)

 

меньше

 

(31)

 

Значение

 

нижней

 

границы

  

отрицательное

 

(32),

 

нуль

 

(33),

 

положитель-

ное

 

(34)

 

 

Нижняя

 

граница

 

константа

 

(35),

 

целая

 

переменная

 

(36)

 

имя

 

элемента

 

массива

 

(37),

 

что-то

 

иное

 

(38)

 

Оператор

 

располо-

жен

 

на

 

нескольких

 

строках

 

да

 

(39),

 

нет

 

(40)

 

 

 

Следующий

 

шаг

 

 

построение

 

теста,

 

покрывающего

 

один

 

или

 

более

 

правильных

 

классов

 

эквивалентности.

 

Напри-

мер,

 

тест

 

DIMENSION A(2) 

покрывает

 

классы

 

1,

 

4,

 

7,

 

10,

 

12,

 

15,

 

24,

 

28,

 

29

 

и

 

40.

 

Далее

 

опре-

деляются

 

один

 

или

 

более

 

тестов,

 

покрывающих

 

оставшиеся

 

правильные

 

классы

 

эквивалентности.

 

Так,

 

тест

 

DIMENSION A 12345 (I,9,J4XXXX,65535,1, 
   KLM, * 100), BBB (–65534 : 100,0 : 
   1000,10 : 10,I: 65535) 

покрывает

 

оставшиеся

 

классы.

   

Перечислим

 

неправиль-

ные

 

классы

 

эквивалентности

 

и

 

соответствующие

 

им

 

тесты:

 

(3)

 

DIMENSION

 

(5)

 

DIMENSION

 

(10)

 

(6)

 

DIMENSION

 

A234567(2)

 

(9)

 

DIMENSION

 

A.I(2)

 

(11)

 

DIMENSION

 

1A(10)

 

(13)

 

DIMENSION

 

В

 

(14)

 

DIMENSION

 

В

 

(4,4,4,4,4,4,4,4)

 

(17)

 

DIMENSION

 

B(4,A(2))

 

(18)

  

DIMENSION

 

B(4

7)

 

Окончание табл. 4.1 


background image

 

 

 
 

139 

(21)

 

DIMENSION

 

C(I.,10)

 

(23)

 

DIMENSION

 

C(10,1J)

 

(25)

 

DIMENSION

 

D(–65535:1)

 

(26)

 

DIMENSION

 

D(65536)

 

(31)

 

DIMENSION

 

D(4:3)

 

(37)

 

DIMENSION

 

D(A(2):4)

 

(38)

 

DIMENSION

 

D.:4)

 

Эти

 

классы

 

эквивалентности

 

покрываются

 

18-ю

 

тестами.

 

Хотя

 

эквивалентное

 

разбиение

 

значительно

 

лучше

 

слу-

чайного

 

выбора

 

тестов,

 

оно

 

все

 

же

 

имеет

 

недостатки

 

(т.е.

 

пропускает

 

определенные

 

типы

 

высокоэффективных

 

тес-

тов).

 

Следующие

 

два

 

метода

 

 

анализ

 

граничных

 

значений

 

и

 

использование

 

функциональных

 

диаграмм

 

(диаграмм

 

причин-

но-следственных

 

связей,

 

или

 

cause-effect

 

graphing)

 

 

свободны

 

от

 

многих

 

недостатков,

 

присущих

 

эквивалентному

 

разбиению.

 

6.4.3 Анализ граничных значений 

Как

 

показывает

 

опыт,

 

тесты,

 

исследующие

 

граничные

 

ус-

ловия,

 

приносят

 

большую

 

пользу,

 

чем

 

тесты,

 

которые

 

их

 

не

 

ис-

следуют.

 

Граничные

 

условия

 

 

это

 

ситуации,

 

возникающие

 

непосредственно

 

на

 

границах,

 

а

 

также

 

выше

 

или

 

ниже

 

границ

 

входных

 

и

 

выходных

 

классов

 

эквивалентности.

 

Анализ

 

гранич-

ных

 

значений

 

отличается

 

от

 

эквивалентного

 

разбиения

 

в

 

двух

 

отношениях:

 

 

1.

 

Выбор

 

любого

 

элемента

 

в

 

классе

 

эквивалентности

 

в

 

качестве

 

представительного

 

при

 

анализе

 

граничных

 

значений

 

осуществляется

 

таким

 

образом,

 

чтобы

 

прове-

рить

 

тестом

 

каждую

 

границу

 

этого

 

класса.

 

 

2.

 

При

 

разработке

 

тестов

 

рассматривают

 

не

 

только

 

вход-

ные

 

условия

 

(пространство

 

входов),

 

но

 

и

 

пространст-

во

 

результатов

 

(т.е.

 

выходные

 

классы

 

эквивалентно-

сти).

 

Трудно

 

описать

 

«кухню»

 

анализа

 

граничных

 

значений,

 

так

 

как

 

это

 

требует

 

определенной

 

степени

 

творчества

 

и

 

специа-

лизации

 

в

 

рассматриваемой

 

проблеме

 

(следовательно,

 

анализ

 

граничных

 

значений,

 

как

 

и

 

многие

 

другие

 

аспекты

 

тестирова-

ния,

 

в

 

значительной

 

мере

 

основывается

 

на

 

способностях

 

чело-


background image

 

 

 
 

140 

веческого

 

интеллекта).

 

Тем

 

не

 

менее

 

приведем

 

несколько

 

пра-

вил

 

этого

 

метода.

 

1.

 

Построить

 

тесты

 

для

 

границ

 

области

 

и

 

тесты

 

с

 

непра-

вильными

 

входными

 

данными

 

для

 

ситуаций

 

незначительного

 

выхода

 

за

 

границы

 

области,

 

если

 

входное

 

условие

 

описывает

 

область

 

значений.

 

Например,

 

если

 

правильная

 

область

 

входных

 

значений

 

есть

 

–1.0

+1.0,

 

то

 

написать

 

тесты

 

для

 

ситуаций

 

–1.0,

 

1.0,

 

–1.001

 

и

 

1.001.

 

2.

 

Построить

 

тесты

 

для

 

минимального

 

и

 

максимального

 

значения

 

условий

 

и

 

тесты,

 

большие

 

и

 

меньшие

 

этих

 

значений,

 

если

 

входное

 

условие

 

удовлетворяет

 

дискретному

 

ряду

 

значе-

ний.

 

Например,

 

если

 

входной

 

файл

 

может

 

содержать

 

от

 

1

 

до

 

255

 

записей,

 

то

 

получить

 

тесты

 

для

 

0,

 

1,

 

255

 

и

 

256

 

записей.

 

3.

 

Использовать

 

правило

 

1

 

для

 

каждого

 

выходного

 

усло-

вия.

 

Например,

 

если

 

программа

 

вычисляет

 

ежемесячный

 

расход

 

и

 

если

 

минимум

 

расхода

 

составляет

 

$0,00,

 

а

 

максимум

 

 

$1165,25,

 

то

 

построить

 

тесты,

 

которые

 

вызывают

 

расходы

 

с

 

$0,00

 

по

 

$1165,25.

 

Кроме

 

того,

 

построить,

 

если

 

это

 

возможно,

 

тесты,

 

которые

 

вызывают

 

отрицательный

 

расход

 

и

 

расход

 

больше

 

$1165,25.

 

Заметим,

 

что

 

важно

 

проверить

 

границы

 

про-

странства

 

результатов,

 

поскольку

 

не

 

всегда

 

границы

 

входных

 

областей

 

представляют

 

такой

 

же

 

набор

 

условий,

 

как

 

и

 

границы

 

выходных

 

областей

 

(например,

 

при

 

рассмотрении

 

подпрограм-

мы

 

вычисления

 

синуса).

 

Не

 

всегда

 

также

 

можно

 

получить

 

ре-

зультат

 

вне

 

выходной

 

области,

 

но

 

тем

 

не

 

менее

 

стоит

 

рассмот-

реть

 

эту

 

возможность.

 

4.

 

Использовать

 

правило

 

2

 

для

 

каждого

 

входного

 

условия.

 

Например,

 

если

 

система

 

информационного

 

поиска

 

отображает

 

на

 

экране

 

терминала

 

наиболее

 

релевантные

 

рефераты

 

в

 

зависи-

мости

 

от

 

входного

 

запроса,

 

но

 

никак

 

не

 

более

 

четырех

 

рефера-

тов,

 

то

 

построить

 

тесты,

 

такие,

 

чтобы

 

программа

 

отображала

 

нуль,

 

один

 

и

 

четыре

 

реферата,

 

и

 

тест,

 

который

 

мог

 

бы

 

вызвать

 

выполнение

 

программы

 

с

 

ошибочным

 

отображением

 

пяти

 

ре-

фератов.

 

5.

 

Если

 

вход

 

или

 

выход

 

программы

 

есть

 

упорядоченное

 

множество

 

(например,

 

последовательный

 

файл,

 

линейный

 

спи-