ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Проектирование информационных систем
Добавлен: 21.10.2018
Просмотров: 10784
Скачиваний: 8
136
сы
эквивалентности
не
будут
покрыты
(только
не
общими)
тес-
тами.
3.
Запись
тестов,
каждый
из
которых
покрывает
один
и
только
один
из
непокрытых
неправильных
классов
эквивалент-
ности,
до
тех
пор,
пока
все
неправильные
классы
эквивалентно-
сти
не
будут
покрыты
тестами.
Причина
покрытия
неправильных
классов
эквивалентно-
сти
индивидуальными
тестами
состоит
в
том,
что
определенные
проверки
с
ошибочными
входами
скрывают
или
заменяют
дру-
гие
проверки
с
ошибочными
входами.
Например,
спецификация
устанавливает
«тип
книги
при
поиске
(ВЫЧИСЛИТЕЛЬНАЯ
ТЕХНИКА,
ПРОГРАММИРОВАНИЕ
или
ОБЩИЙ)
и
количе-
ство
(1
—
9999)».
Тогда
тест
XYZ 0
отображает
два
ошибочных
условия
(неправильный
тип
книги
и
количество)
и,
вероятно,
не
будет
осуществлять
проверку
коли-
чества,
так
как
программа
может
ответить:
«XYZ
—
НЕСУЩЕСТВУЮЩИЙ
ТИП
КНИГИ»
и
не
проверять
осталь-
ную
часть
входных
данных.
Пример.
Предположим,
что
при
разработке
компилятора
для
под-
множества
языка
Фортран
требуется
протестировать
синтакси-
ческую
проверку
оператора
DIMENSION.
Спецификация
при-
ведена
ниже.
В
спецификации
элементы,
написанные
латин-
скими
буквами,
обозначают
синтаксические
единицы,
которые
в
реальных
операторах
должны
быть
заменены
соответствую-
щими
значениями,
в
квадратные
скобки
заключены
необяза-
тельные
элементы,
многоточие
показывает,
что
предшествую-
щий
ему
элемент
может
быть
повторен
подряд
несколько
раз.
Оператор
DIMENSION
используется
для
определения
массивов.
Форма
оператора
DIMENSION:
DIMENSION ad[,ad]
…
,
где
ad
есть
описатель
массива
в
форме
n(d[,d]…)
,
где
n
—
символическое
имя
массива,
а
d
—
размерность
масси-
ва.
Символические
имена
могут
содержать
от
одного
до
шести
символов
—
букв
или
цифр,
причем
первой
должна
быть
буква.
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)
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
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.
При
разработке
тестов
рассматривают
не
только
вход-
ные
условия
(пространство
входов),
но
и
пространст-
во
результатов
(т.е.
выходные
классы
эквивалентно-
сти).
Трудно
описать
«кухню»
анализа
граничных
значений,
так
как
это
требует
определенной
степени
творчества
и
специа-
лизации
в
рассматриваемой
проблеме
(следовательно,
анализ
граничных
значений,
как
и
многие
другие
аспекты
тестирова-
ния,
в
значительной
мере
основывается
на
способностях
чело-
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.
Если
вход
или
выход
программы
есть
упорядоченное
множество
(например,
последовательный
файл,
линейный
спи-