Калайда В.Т., Романенко В.В. Технология разработки программного обеспечения (1015641), страница 22
Текст из файла (страница 22)
пропускает определенные типы высокоэффективных тестов). Следующие два метода — анализ граничных значений и использование функциональных диаграмм (диаграмм причинно-следственных связей, или 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, любой символ воспринимается как ответ.
Последующие записи содержат в колонках 10—59 сведения о правильных ответах на вопросы с номерами 51—100, 101—150 и т.д.Третье множество записей описывает ответы каждого студента;любая запись этого набора имеет число «3» в восьмидесятой колонке. Для каждого студента первая запись в колонках1—9 содержит его имя или номер (любые символы); в колонках10—59 помещены сведения о результатах ответов студентов навопросы с номерами 1—50. Если в тесте предусмотрено болеечем 50 вопросов, то последующие записи для студента описывают ответы 51—100, 101—150 и т.д. в колонках 10—59.
Максимальное число студентов — 200. Форматы входных записейпоказаны на рис. 6.8.Название140Число вопросов13Правильные ответы:1—504Идентификаторстудента91059Неправильные ответы:51—10026079Ответы студента:1—50Ответы студента:51—100ИдентификаторстудентаОтветы студента:1—50802333Рис. 6.8 — Структуры входных записей для программы MTESTВыходными записями являются:1) отчет, упорядоченный в лексикографическом порядкеидентификаторов студентов и показывающий качествоответов каждого студента (процент правильных ответов) и его ранг;2) аналогичный отчет, но упорядоченный по качеству;3) отчет, показывающий среднее значение, медиану исреднеквадратическое отклонение качества ответов;4) отчет, упорядоченный по номерам вопросов и показывающий процент студентов, отвечающих правильно накаждый вопрос.Конец спецификации.Начнем методичное чтение спецификации, выявляя входные условия.
Первое граничное входное условие есть пустойвходной файл. Второе входное условие — карта (запись) названия; граничными условиями являются отсутствие карты названия, самое короткое и самое длинное названия. Следующимивходными условиями служат наличие записей о правильных ответах и наличие поля числа вопросов в первой записи ответов. 1—999 не является классом эквивалентности для числа вопросов,так как для каждого подмножества из 50 записей может иметьместо что-либо специфическое (т.е. необходимо много записей).Приемлемое разбиение вопросов на классы эквивалентностипредставляет разбиение на два подмножества: 1—50 и 51—999.141Следовательно, необходимы тесты, где поле числа вопросовпринимает значения 0, 1, 50, 51 и 999.
Эти тесты покрываютбольшинство граничных условий для записей о правильных ответах. Однако существуют три более интересные ситуации —отсутствие записей об ответах, наличие записей об ответах типа«много ответов на один вопрос» и наличие записей об ответахтипа «мало ответов на один вопрос». Например, число вопросов60 и имеются три записи об ответах в первом случае и одна запись об ответах во втором. Таким образом, определены следующие тесты:1. Пустой входной файл.2. Отсутствует запись названия.3. Название длиной в один символ.4. Название длиной в 80 символов.5. Экзамен из одного вопроса.6. Экзамен из 50 вопросов.7. Экзамен из 51 вопроса.8. Экзамен из 999 вопросов.9.
0 вопросов на экзамене.10. Поле числа вопросов имеет нечисловые значения.11. После записи названия нет записей о правильных ответах.12. Имеются записи типа «много правильных ответов наодин вопрос».13. Имеются записи типа «мало правильных ответов наодин вопрос».Следующие входные условия относятся к ответам студентов. Тестами граничных значений в этом случае, по-видимому,должны быть:14. 0 студентов.15. 1 студент.16. 200 студентов.17. 201 студент.18.
Есть одна запись об ответе студента, но существуютдве записи о правильных ответах.19. Запись об ответе вышеупомянутого студента первая вфайле.20. Запись об ответе вышеупомянутого студента последняя в файле.14221. Есть две записи об ответах студента, но существуеттолько одна запись о правильном ответе.22. Запись об ответах вышеупомянутого студента первая вфайле.23.
Запись об ответах вышеупомянутого студента последняя в файле.Можно также получить набор тестов для проверки выходных границ, хотя некоторые из выходных границ (например,пустой отчет 1) покрываются приведенными тестами. Граничными условиями для отчетов 1 и 2 являются: 0 студентов (так же, как тест 14); 1 студент (так же, как тест 15); 200 студентов (так же, как тест 16);24. Оценки качества ответов для всех студентов одинаковы.25. Оценки качества ответов всех студентов различные.26. Оценки качества ответов некоторых, но не всех студентов одинаковы (для проверки правильности вычисления рангов).27.
Студент получает оценку качества ответа 0.28. Студент получает оценку качества ответа 100.29. Студент имеет идентификатор наименьшей возможнойдлины (для проверки правильности упорядочивания).30. Студент имеет идентификатор наибольшей возможнойдлины.31. Число студентов таково, что отчет имеет размер,несколько больший одной страницы (для того чтобыпосмотреть случай печати на другой странице).32. Число студентов таково, что отчет располагается наодной странице.Граничные условия отчета 3 (среднее значение, медиана,среднеквадратическое отклонение):33. Среднее значение максимально (качество ответов всехстудентов наивысшее).34. Среднее значение равно 0 (качество ответов всех студентов равно 0).35.
Среднеквадратическое отклонение равно своему максимуму (один студент получает оценку 0, а другой —100).14336. Среднеквадратическое отклонение равно 0 (все студенты получают одну и ту же оценку).Тесты 33 и 34 покрывают и границы медианы. Другой полезный тест описывает ситуацию, где существует 0 студентов(проверка деления на 0 при вычислении математического ожидания), но он идентичен тесту 14.Проверка отчета 4 дает следующие тесты граничных значений:37. Все студенты отвечают правильно на первый вопрос.38. Все студенты неправильно отвечают на первый вопрос.39.
Все студенты правильно отвечают на последний вопрос.40. Все студенты отвечают на последний вопрос неправильно.41. Число вопросов таково, что размер отчета несколькобольше одной страницы.42. Число вопросов таково, что отчет располагается на одной странице.Опытный программист, вероятно, согласится с той точкойзрения, что многие из этих 42-х тестов позволяют выявить наличие общих ошибок, которые могут быть сделаны при разработке данной программы. Кроме того, большинство этих ошибок, вероятно, не было бы обнаружено, если бы использовалсяметод случайной генерации тестов или специальный метод генерации тестов.
Анализ граничных значений, если он примененправильно, является одним из наиболее полезных методовпроектирования тестов. Однако он часто оказывается неэффективным из-за того, что внешне выглядит простым. Необходимопонимать, что граничные условия могут быть едва уловимы и,следовательно, определение их связано с большими трудностями.6.4.4 Применение функциональных диаграммОдним из недостатков анализа граничных значений и эквивалентного разбиения является то, что они не исследуют комбинаций входных условий. Например, пусть программа MTESTиз предыдущего раздела не выполняется, если произведение144числа вопросов и числа студентов превышает некоторый предел(например, объем памяти).