Калайда В.Т., Романенко В.В. Технология разработки программного обеспечения (1015641), страница 21
Текст из файла (страница 21)
Во-первых, каждый тестдолжен включать столько различных входных условий, сколькоэто возможно, с тем, чтобы минимизировать общее число необходимых тестов. Во-вторых, необходимо пытаться разбитьвходную область программы на конечное число классов эквивалентности так, чтобы можно было предположить (конечно, неабсолютно уверенно), что каждый тест, являющийся представителем некоторого класса, эквивалентен любому другому тестуэтого класса.
Иными словами, если один тест класса эквивалентности обнаруживает ошибку, то следует ожидать, что и вседругие тесты этого класса эквивалентности будут обнаруживатьту же самую ошибку. Наоборот, если тест не обнаруживаетошибки, то следует ожидать, что ни один тест этого класса эквивалентности не будет обнаруживать ошибки (в том случае,когда некоторое подмножество класса эквивалентности не попадает в пределы любого другого класса эквивалентности, таккак классы эквивалентности могут пересекаться).Эти два положения составляют основу методологии тестирования по принципу черного ящика, известной как эквивалентное разбиение.
Второе положение используется для разработки набора «интересных» условий, которые должны бытьпротестированы, а первое — для разработки минимального набора тестов, покрывающих эти условия.Примером класса эквивалентности для программы о треугольнике (см. п. 6.2.1) является набор «трех равных чисел,имеющих целые значения, большие нуля». Определяя этот набор как класс эквивалентности, устанавливают, что если ошибка не обнаружена некоторым тестом данного набора, то маловероятно, что она будет обнаружена другим тестом набора. Иными словами, в этом случае время тестирования лучше затратить132на что-нибудь другое (на тестирование других классов эквивалентности).Разработка тестов методом эквивалентного разбиенияосуществляется в два этапа:1) выделение классов эквивалентности и2) построение тестов.6.4.2.1 Выделение классов эквивалентностиКлассы эквивалентности выделяются путем выбора каждого входного условия (обычно это предложение или фраза вспецификации) и разбиением его на две или более групп.
Дляпроведения этой операции используют таблицу, изображеннуюна рис. 6.7.Входные условияПравильныеклассы эквивалентностиНеправильныеклассы эквивалентностиРис. 6.7 — Форма таблицы для перечисления классов эквивалентностиЗаметим, что различают два типа классов эквивалентности: правильные классы эквивалентности, представляющие правильные входные данные программы, и неправильные классыэквивалентности, представляющие все другие возможные состояния условий (т.е.
ошибочные входные значения). Таким образом, придерживаются одного из принципов п. 6.2 о необходимости сосредоточивать внимание на неправильных или неожиданных условиях.Если задаться входными или внешними условиями, то выделение классов эквивалентности представляет собой в значительной степени эвристический процесс. При этом существуетряд правил:1. Если входное условие описывает область значений(например, «целое данное может принимать значения от 1 до999»), то определяются:133 один правильный класс эквивалентности (значений от1 до 999); два неправильных класса (значения целого данного<1 и значение целого данного >999).2.
Если входное условие описывает число значений(например, «в автомобиле могут ехать от одного до шести человек»), то определяются один правильный класс эквивалентности и два неправильных (ни одного и более шести).3. Если входное условие описывает множество входныхзначений и есть основание полагать, что каждое значение программа трактует особо (например, «известны способы передвижения на АВТОБУСЕ, ГРУЗОВИКЕ, ТАКСИ, ПЕШКОМ илиМОТОЦИКЛЕ»), то определяется правильный класс эквивалентности для каждого значения и один неправильный класс эквивалентности (например, «НА ПРИЦЕПЕ»).4. Если входное условие описывает ситуацию «должнобыть» (например, «первым символом идентификатора должнабыть буква»), то определяется один правильный класс эквивалентности (первый символ — буква) и один неправильный(первый символ — не буква).5.
Если есть любое основание считать, что различные элементы класса эквивалентности трактуются программой неодинаково, то данный класс эквивалентности разбивается на меньшие классы эквивалентности.Этот процесс ниже будет кратко проиллюстрирован.6.4.2.2 Построение тестовВторой шаг заключается в использовании классов эквивалентности для построения тестов. Этот процесс включает в себя:1. Назначение каждому классу эквивалентности уникального номера.2.
Проектирование новых тестов, каждый из которых покрывает как можно большее число правильных непокрытыхклассов эквивалентности, до тех пор, пока все правильные классы эквивалентности не будут покрыты (только не общими) тестами.3. Запись тестов, каждый из которых покрывает один итолько один из непокрытых неправильных классов эквивалент-134ности, до тех пор, пока все неправильные классы эквивалентности не будут покрыты тестами.Причина покрытия неправильных классов эквивалентности индивидуальными тестами состоит в том, что определенныепроверки с ошибочными входами скрывают или заменяют другие проверки с ошибочными входами.
Например, спецификацияустанавливает «тип книги при поиске (ВЫЧИСЛИТЕЛЬНАЯТЕХНИКА, ПРОГРАММИРОВАНИЕ или ОБЩИЙ) и количество (1 — 9999)». Тогда тестXYZ 0отображает два ошибочных условия (неправильный тип книги иколичество) и, вероятно, не будет осуществлять проверку количества, так как программа может ответить: «XYZ — НЕСУЩЕСТВУЮЩИЙ ТИП КНИГИ» и не проверять остальную частьвходных данных.Пример.Предположим, что при разработке компилятора для подмножества языка Фортран требуется протестировать синтаксическую проверку оператора DIMENSION.
Спецификация приведена ниже. В спецификации элементы, написанные латинскимибуквами, обозначают синтаксические единицы, которые в реальных операторах должны быть заменены соответствующимизначениями, в квадратные скобки заключены необязательныеэлементы, многоточие показывает, что предшествующий емуэлемент может быть повторен подряд несколько раз.Оператор DIMENSION используется для определениямассивов. Форма оператора DIMENSION:DIMENSION ad[,ad]…,где ad есть описатель массива в формеn(d[,d]…),где n — символическое имя массива, а d — размерность массива. Символические имена могут содержать от одного до шестисимволов — букв или цифр, причем первой должна быть буква.Допускается использование от одной до семи размерностей вформе[lb:]ub,где lb и иb задают нижнюю и верхнюю границы индекса массива.
Граница может быть либо константой, принимающей значения от–65534 до 65535, либо целой переменной (без135индексов). Если lb не определена, то предполагается, что онаравна единице. Значение иb должно быть больше или равно lb.Если lb определена, то она может иметь отрицательное, нулевоеили положительное значение. Как и все операторы, операторDIMENSION может быть продолжен на нескольких строках(конец спецификации).Первый шаг заключается в том, чтобы идентифицироватьвходные условия и по ним определить классы эквивалентности(табл.
4.1). Классы эквивалентности в таблице обозначены числами.Таблица 4.1 — Классы эквивалентностиПравильные классыНеправильные классыэквивалентностиэквивалентностиЧисло описателейодин (1), больше одного ни одного (3)массивов(2)Длина имени масси- 1-6 (4)0 (5), больше 6 (6)ваВходные условияИмя массиваИмя массива начинается с буквыЧисло индексовВерхняя границаимеет в своем составебуквы (7) и цифры (8)да (10)1-7 (12)константа (15), целаяпеременная (16)Имя целой перемен- имеет в своем составенойбуквы (19) и цифры(20)ЦелаяпеременнаяОкончание табл. 4.1 да (22)начинается с буквыКонстанта–65534 — +65535 (24)Нижняя границаопределенаВерхняя граница поотношению к нижней границеЗначение нижнейграницыСодержит что-то еще(9)нет (11)0 (13), больше 7 (14)имя элемента массива(17), что-то иное (18)состоит из чего-то еще(21)нет (23)меньше –65534 (25),больше 65535 (26)да (27), нет (28)больше (29),равна (30)отрицательное (32),нуль (33), положительное (34)меньше (31)136Входные условияНижняя границаОператор расположен на несколькихстрокахПравильные классыэквивалентностиконстанта (35), целаяпеременная (36)да (39), нет (40)Неправильные классыэквивалентностиимя элемента массива(37), что-то иное (38)Следующий шаг — построение теста, покрывающегоодин или более правильных классов эквивалентности.
Например, тест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)(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)137Эти классы эквивалентности покрываются 18-ю тестами.Хотя эквивалентное разбиение значительно лучше случайного выбора тестов, оно все же имеет недостатки (т.е.