Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 47
Текст из файла (страница 47)
Эта модель неизящна, и вероятность того, что программист построит вычисления таким образом достаточно мала. Программист, проанализировав требуемые вычисления, организует их более эффективно (то есть так, чтобы их было проще сопровождать), и вместо промежуточных вычислений, заданных в спецификации, он, возможно, реализует нечто от них отличное, но, по всей вероятности, им эквивалентное. И в этом все дело. Анализ, который мы проводим для разработки тестов доменов, имеет совершенно иные задачи, в отличие от задач, стоящих перед программистом, и поэтому наши ошибки тоже, скорее всего, будут отличаться от ошибок разработчика, У нас, тестировшиков, собственные ошибки.
7.3. Отношения и модель 191 Домен СОД (Тыслчи! г льготы Рис 7.2. Домены длв неравенств в налоговой декларации Основной аргумент в пользу проведения интерпретации предикатов — это обеспечение независимой проверки рациональности спецификации. Я допускаю, что спецификация содержит множество промежуточных вычислений па пути преобразования входных данных в выходные.
Подобные промежуточные вычисления зачастую несущественны и являются всего лишь видением того, как должна быть запрограммирована спецификация, — что-то наши программисты могут и проигнорировать. Наша задача не ограничивается независимой проверкой работы программиста. Если проводимое нами моделирование выявляет противоречия и неопределенности в спецификации доменов (что часто и происходит), мы не зря едим свой хлеб. Интерпретация предикатов обычно не очень сложна.
В большинстве случаев вам не надо проводить ее совсем, поскольку домены изначально выражаются через входные переменные. Если вам все же приходится это делать и если ваши предикаты достаточно просты, используйте ваш текстовый редактор подобно тому, как это делал я (однако не забывайте заключать подставляемые выражения в скобки, чтобы избежать различных алгебраических ошибок при подстановке). Если текстовый редактор не справляется, используйте редактор формул.
Мне хватает моего калькулятора НР-28С. Если для вас это затруднительно, используйте соответствующий математический пакет. 7.3.3. Анализ неопределенностей и противоречий !!риблизительно 30";ь ошибок являются следствием некорректных требований. Цена таких ошибок высока, поскольку они проявляются лишь тогда, когда про- 192 Глава 7 ° Тестирование доменов грамма начинает эксплуатироваться. Около 5 процентов ошибок происходят из-ча неверного определения доменов'.
Вопреки широко распространенному мифу, не существует какого-то одного превалирующего тина оцшбок. Относительная частота возникновения большинства ошибок не превышает 3 процентов, то есть 5 процентов — высокий показатель и на поиск ошибок в доменах имеет смысл тратить время. В программе необходимо исключить внутренние противоречия. Все ее функции должны быть согласованы друг с другом. Программа также не может быть неопределенной. Она всегда должна выполнять какие-либо действия над входными данными. Спецификации, однако, бывают и неопределенными и противоречивыми.
Когда программист реализует такую неопределенную или внутренне противоречивую спецификацию, он или она должны сознательно или несознательно разрешать эти неопределенности и противоречия. Ошибки объясняются тем, что неопределенности и противоречия обычно не удается распознать, и тем что их разрешение обычно происходит подсознательно. Модель тестирования дол<снов, а также анализ, необходимый для построения этой модели, эффективны при проверке спецификаций на неопределенности н противоречия.
Неопределенность доменов. Спецификация набора доменов является неопределенной, если этот набор доменов не покрывает все входное пространство. Противоречивость доменоа. Два доьтена и роты воре ни вы, если они перекрываются. Первое место, где стоит искать неопределенности и противоречия, — это границы между доменами. Рассмотрим пример: Домен 3: СОД > 28300 + 2350Льготы СОД <- 59700 + 2350Льготы Донеч 4: СОД >- 59700 + 2350Льготы СОД < 12!200 + 2350Ль<оты Донен 5. СОД > 121200 + 235ОЛьготь> СОД <- 256200 + 2350йь<о<ы Граница между доменами 3 и 4 противоречива, поскольку оба они одновременно закрыты на границе СОД = 59700 + 2350Льготы. Граница между доменами 4 и 5 не определена, так как входные значения для СОД = 121000 + 2350Льготы отсутствуют в спецификации.
Если у вас есть спецификация интерпретированной границы домена, вам надо проверить ее на предмет наличия неопределенностей и противоречий. Большинство из них легко могут быть выявлены прн проверке. Для одной и двух входных переменных вы сможете выполнить это графически. Для трех и более входных переменных используйте соответствующие алгебраические инструменты [ЪЧНГТ95]. 1. Все ли входные значения в диапазоне от — до + включены? Если это не так, то существуют ли механизмы, запрещающие ввод в систему значений ' Эта опенка аанижена ллн современною программного обеспечении, поскольку утаержденис оскола но на данных почти дналпатилсп<сй данности (и 1994 году).
В ы> арами как методы коьшопентн ого тестироаании совершенствовались, относительпаа часпжа аош>паншснин окшбок а трсбоаанинх аотрастала. Я не удиалюс>ы если доля оишбок ломеноа а среднем окажется порядка 1О а дли некоторых программ и всех ЗО Х Отношения н модель 193 больше верхней границы и меньше нижней? Проведите специальную проверку для нулевых значений. Спецификация в подразделе 7.3.1 не определена. Объясните, почему.
2. Последовательно ли закрытие для всех переменных и всех границ доменов в диапазоне от — до е ? Если это не так, то должно быть несколько (как минимум два) неравенств, определяющих одну и ту же границу, но в различных областях входных значений, для различных направлений закрытия и включающих по меньшей мере одну переменную.
Сгруппируйте эти наборы и проверьте их на предмет наложения закрытий иггили зазоров между ними. Ниже приводится пример, в котором закрытие противоречиво и не определено. Домен 3: налог = 0.28СОД - 658 ольготы - 4609.0 СОД >= 28300 + 2350Льготы. 0 < Льготы < 4 СОД > 28300 + 2350льготы. 4 <= Льготы < 7 СОД >= 28300 > 2350Льготы, 7 < 0~готы <= 70 СОД > 28300 > 2350Льготы СОД <- 59700 + 2350Льготы 3. В одномерных и двумерных пространствах нарисуйте все заданные домены на одном рисунке, построив графически решения уравнений, определяющих границы для каждого из доменов.
На следующем рисунке демонстрируется неопределенность для входных значений, меньших 7, и перекрытие доменов 1 н 2. Помните, что неопределенности и противоречия чаще всего встречаются в определении границ, поэтому вы должны быть уверены, что проверили закрытие каждой границы. 4. А как насчет пространства с размерностью три и более? В этом случае необходим алгебраический анализ, см. 1Ъ'Н1Т95).
Вы, возможно, сможете решить задачу анализа трехмерных моделей в лоб или при помощи эвристических методов, но вряд ли вам что-нибудь сможет помочь разрешить математические аспекты данной проблемы. Созданные к 1995 году коммерческие инструменты не могут уверенно подтвердить непротиворечивость и однозначность спецификаций доменов. Организации, которым регулярно бывает нужен подобный анализ, привлекают для этих целей экспертов и разрабатывают собственное программное обеспечение.
Х = 7 Х >= 7 8 Х < 44 Х = 44 Ф вЂ” Ф~ Г Неоднсзначность Противоречие Домен 3 Х>= 50 7.3.4. Нелинейные домены В этом разделе я поделюсь хорошими новостями, а также хорошими новостями, которые могут показаться плохими, но не для всех, и отличными новостями.
т 3<< тто 194 Глава 7 ° Тестирование доменов 1. Хорошие новости. Хорошей новостью является то, что нелинейные домены (то есть домены как минимум с одной нелинейной границей) на практике встречаются не слишком часто. Ранние исследования [СОНЕ78] выявили в коде языка СОВО1. около 85 процентов линейных предикатов. Мы имеем дело в основном с линейным миром. 2. Хорошие новости, которые могут показаться плохими (не обязательно). Проблему линейности в нашем случае надо рассматривать не как простую алгебраическую линейность, а в более широком смысле линейности векторных пространств. Полиномы первого порядка линейны в этом широком смысле.
Поскольку любая приличная функция может быть аппроксимирована полиномами, то выбором подходящей аппроксимации можно свести задачу тестирования нелинейных доменов к задаче тестирования линейных доменов, хотя и ценой увеличения размерности, Нелинейные граничные уравнения нередко можно линеаризовать определенными преобразованиями.
Это в первую очередь касается гипербол, зкспоненциальных, степенных и логарифмических функций. Аппроксимация функций полиномами первого порядка встречается довольно редко, так как неэффективна с точки зрения вычислимости. Однако благодаря большой производительности современных компьютеров эта проблема стоит гораздо менее остро, чем принято считать.
Выбирайте сами, чего вы хотите, вычислительной эффективности или тестируемостн. 3. Отличные новости. Отличные новости []ЕНО94] состоят в том, что если вам нужно определить только наличие ошибки, а не описать ошибку (например, вид доменной ошибки), и прн этом вы хотите исходить из рассчитываемого риска сокрытия некоторых ошибок [АГ!Г92], тогда проблем нелинейных границ доменов просто нет (в болыпинстве случаев).