Калайда В.Т., Романенко В.В. Технология разработки программного обеспечения (2007) (1095890), страница 21
Текст из файла (страница 21)
Этот процесс включает в себя: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-ю тестами.Хотя эквивалентное разбиение значительно лучше случайного выбора тестов, оно все же имеет недостатки (т.е.
пропускает определенные типы высокоэффективных тестов). Следующие два метода — анализ граничных значений и использование функциональных диаграмм (диаграмм причинно-следственных связей, или cause-effect graphing) — свободны от многих недостатков, присущих эквивалентному разбиению.6.4.3 Анализ граничных значенийКак показывает опыт, тесты, исследующие граничныеусловия, приносят большую пользу, чем тесты, которые их неисследуют. Граничные условия — это ситуации, возникающиенепосредственно на границах, а также выше или ниже границвходных и выходных классов эквивалентности.
Анализ граничных значений отличается от эквивалентного разбиения в двухотношениях:1. Выбор любого элемента в классе эквивалентности вкачестве представительного при анализе граничныхзначений осуществляется таким образом, чтобы проверить тестом каждую границу этого класса.2. При разработке тестов рассматривают не только входные условия (пространство входов), но и пространство результатов (т.е. выходные классы эквивалентности).Трудно описать «кухню» анализа граничных значений,так как это требует определенной степени творчества и специализации в рассматриваемой проблеме (следовательно, анализграничных значений, как и многие другие аспекты тестирования, в значительной мере основывается на способностях человеческого интеллекта).
Тем не менее приведем несколько правил этого метода.1. Построить тесты для границ области и тесты с неправильными входными данными для ситуаций незначительноговыхода за границы области, если входное условие описываетобласть значений. Например, если правильная область входныхзначений есть –1.0…+1.0, то написать тесты для ситуаций –1.0,1.0, –1.001 и 1.001.1382. Построить тесты для минимального и максимальногозначения условий и тесты, большие и меньшие этих значений,если входное условие удовлетворяет дискретному ряду значений.
Например, если входной файл может содержать от 1 до255 записей, то получить тесты для 0, 1, 255 и 256 записей.3. Использовать правило 1 для каждого выходного условия. Например, если программа вычисляет ежемесячный расходи если минимум расхода составляет $0,00, а максимум —$1165,25, то построить тесты, которые вызывают расходы с$0,00 по $1165,25.
Кроме того, построить, если это возможно,тесты, которые вызывают отрицательный расход и расходбольше $1165,25. Заметим, что важно проверить границы пространства результатов, поскольку не всегда границы входныхобластей представляют такой же набор условий, как и границывыходных областей (например, при рассмотрении подпрограммы вычисления синуса).
Не всегда также можно получить результат вне выходной области, но тем не менее стоит рассмотреть эту возможность.4. Использовать правило 2 для каждого входного условия.Например, если система информационного поиска отображаетна экране терминала наиболее релевантные рефераты в зависимости от входного запроса, но никак не более четырех рефератов, то построить тесты, такие, чтобы программа отображалануль, один и четыре реферата, и тест, который мог бы вызватьвыполнение программы с ошибочным отображением пяти рефератов.5.
Если вход или выход программы есть упорядоченноемножество (например, последовательный файл, линейный список, таблица), то сосредоточить внимание на первом и последнем элементах этого множества.6. Попробовать свои силы в поиске других граничныхусловий.Чтобы проиллюстрировать необходимость анализа граничных значений, можно использовать программу анализа треугольника, приведенную в п. 6.2.1.
Для задания треугольникавходные значения должны быть целыми положительными числами и сумма любых двух из них должна быть больше третьего.Если определены эквивалентные разбиения, то целесообразноопределить одно разбиение, в котором это условие выполняет-139ся, и другое, в котором сумма двух целых не больше третьего.Следовательно, двумя возможными тестами являются 3—4—5 и1—2—4. Тем не менее здесь есть вероятность пропуска ошибки.
Иными словами, если выражение в программе было закодировано как A+BC вместо A+B>C, то программа ошибочно сообщала бы нам, что числа 1—2—3 представляют правильныйравносторонний треугольник. Таким образом, существенноеразличие между анализом граничных значений и эквивалентным разбиением заключается в том, что анализ граничных значений исследует ситуации, возникающие на границах и вблизиграниц эквивалентных разбиений.В качестве примера для применения метода анализа граничных значений рассмотрим следующую спецификацию программы.MTEST есть программа, которая сортирует различнуюинформацию об экзаменах.
Входом программы является файл,названный OCR, который содержит 80-символьные записи.Первая запись представляет название; ее содержание используется как заголовок каждого выходного отчета. Следующее множество записей описывает правильные ответы на экзамене.Каждая запись этого множества содержит «2» в качестве последнего символа. В первой записи в колонках 1—3 задаетсячисло ответов, оно принимает значения от 1 до 999. Колонки 10—59 включают сведения о правильных ответах на вопросы сномерами 1—50, любой символ воспринимается как ответ.