Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 22
Текст из файла (страница 22)
Подобные грубые ошибки в потоке управления сейчас встречаются довольно редко благодаря использованию языков структурного программирования. В старом программном обеспечении, написанном на языке СОВ01, илн, скажем, ассемблере, подобные ошибки встречаются значите л ь но ч а где. Ошибки в вычислениях, не влияющие на поток управления, также можно искать с помощью рассматриваемого метода, однако для этих целей существуют лучшие методы. Тестирование доменов (см. глава 7) и тестирование потоков данных (см.
глава 5) более эффективны при поиске подобных ошибок. 3.5.3. Ограничения и предостережения Ниже приведены некоторые ограничения и предостережения. 1. Вам не имеет смысла заниматься поищем отсутствующих требований, за исключением, конечно, того случая, когда ваша модель включает в себя эти требования, а программа — нет. 2. Вероятность того, что вы обнаружите неуместные или побочные характеристики, отсутствующие в требованиях, но присутствую1цие в программе, мала. 3. Чем лучше программист выполнил свою работу по тестированию модуля, тем менее вероятно, что данный метод обнаружит новые ошибки, например, если именно этот метод использовался при тестировании модуля (неплохая идея). 4. У вас мало шансов найти пропущенные пути и характеристики в программе, если программа и модель, на которой основывался тест, были написаны одним человеком.
Если вы программист и используете этот метод для тестирования своего собственного программного обеспечения, то неверное представление, которое привело в итоге к потере путей и характеристик в вашей программе, может остаться у вас в голове и когда вы проектируете тесты. Если тесты разрабатывает кто-то другой, вероятность одинаковых ошибок уменьшается, хотя и за счет увеличения затраченных усилий. 3.6. Резюме 93 5. Для устранения хотя и небольшой, но все же существующей угрозы возникновения случайной корректности вам надо проверить все промежуточные вычисления и значения предикатов. 6. Ваши тесты не лучше вашего оракула.
3.5.4. Автоматизация и инструментальные средства На момент написания этой книги не существовало коммерческих инструментов, предназначенных для работы с поведенческим тестированием потока управления, однако большое количество инструментов поддерживает структурное тестирование потока управления.
Вы можете использовать эти инструменты, запрограммировав ваши модели на поддерживаемых языках, таких как С, Разса! или Вагйс [ОА1С93, СЕКН88, 5СН169, %АКХ64). Это не будет потерей времени или избыточным программированием. Работа, затраченная на создание достаточно детальной графической модели, — это большая часть всей работы по представлению полуформальной модели в виде программы. Причина, по которой программирование модели не является избыточным, и, конечно, отличается от программирования реального продукта, заключается в том, что вы не забиваете себе голову практическими вещами, такими как доступ к базам данных, взаимодействие с операционной системой, ввод и вывод, вопросы окружения и многим другим, порождающим реальные ошибки.
В модельной программе могут отсутствовать детали, она не обязана работать на какой-то конкретной платформе, ей не обязательно быть производительной, и, что самое главное, она не должна быть интегрирована с другими частями продукта. Как используется модель? Вовсе не для запуска тестов реальной программы. Именно программа должна быть протестирована, а не какая-то модель тестировшика. Это так! Тестирование модели отличается от тестирования реальной программы, но его тоже нэло проводить.
Как вы собираетесь отлаживать свои тесты? Модель надо использовать как инструмент, помогающий вам разработать набор тестов, обеспечивающих покрытие, для выбора и активизации путей, в качестве оракула для реального программного обеспечения. Если вы построили действующую модель, то вы можете применить к ней коммерческие инструменты тестирования. А это значительно упростит вашу работу. 3.6. Резюме Поведенческое тестирование потока управления рассмотрено как фундаментальная модель тестирования черного ящика. Она является основой для всех других методов тестирования, обсуждаемых в этой книге, и впоследствии я буду считать, что вы ее усвоили. Проектирование тестов начинается с создания поведенческой модели графа потока управления на основе документированных требований, таких как спецификация.
Представление в виде списка, как правило, более удобно, чем рисунки графов, но маленькие графы помогают при проектировании модели. 94 Глава 3 ° Тестирование потока управления Составные предикаты в модели следует устранять или заменять, например, эквивалентными графами, для того чтобы не прятать реальную сложность.
Вместо графа при люделировании составных предикатов, состоящих из более чем трех компонентов, используйте таблицу истинности. Разбейте вашу модель на отрезки, которые начинаются и заканчиваются одиночным узлом, и отметьте взаимную корреляцию предикатов во всех сегментах. Постройте ваши тестовые пути, комбинируя пути в сегментах и исключая непроходимые пути. Используйте противоречия между предикатами для вычеркивания отдельных комбинаций. Маловероятно, что эта методика приведет к непроходимым путям, которые будет невозможно активизировать.
Выберите достаточное количество путей через модель, чтобы гарантировать полное покрытие связей. Не волнуйтесь, если тестов окажется слишком много. Начните с выбора очевидных путей, которые имеют прямое отношение к требованиям, и посмотрите, не можете ли вы таким способом добиться покрытия. Возможно, вы получите не самые эффективные тесты, но это политически верное решение.
Расширьте эти тесты, рассмотрев столько путей, сколько надо для стопроцентной гарантии покрытия связей. Активизируйте выбранные пути, интерпретируя предикаты вдоль пути в терминах входных величин. Интерпретированные предикаты дают набор условий или уравнений (в действительности неравенств), так что любое решение этого набора неравенств будет условием прохода по выбранному пути. Если активизация нс очевидна, то перед тем, как вы потратите много времени на решение уравнений, проверьте, нет ли ошибок в спецификации или модели. Если условия все же сложны, рассмотрите вариант использования коммерческой программы, предназначенной для решения неравенств для активизации, такой как 10ТБЯ 1-2-3.
Алгебраический пакет может помочь с интерпретацией предикатов. Не забывайте о возможности случайной корректности и сотрудничайте с программистами для получения промежуточных численных выводов, которые необходимы для проверки пути. Дайте выражениям с предикатами высокий приоритет, но не настаивайте больше чем на одном значении для каждой связи в графе. Продумайте программирование вашей модели с помощью реального языка программирования, используйте запрограммированную модель при проектировании тестов. 3.7. Вопросы для самопроверки 1. Дайте определение следующих терминов: операция И, комплементарные сегменты пути, составной предикат, граф потока управления, коррелированные предикаты, независимые предикаты, объединяющий узел, логическая модельная программа, логический преликат, НЕ, ИЛИ, предикат, интерпретация предиката, узел с предикатом, узел выбора, предикат выбора, активизировать, простой предикат, разделение транзакций, таблица истинности.
3.7. Вопросы для самопроверки 95 Во всех следующих примерах не пало моделировать побочные формы и ведомости, определенные в инструкциях ВНС. 2. Для бланка 5Е, 1994 и приведенного там же графа постройте граф потока управления, используя в качестве предикатов помечаемые графы. 3. Для бланка 5Е, 1994 замените в построенном вами графе все единичные составные предикаты на эквивалентные последовательности простых предикатов. 12. 13. 14. 5.
6. 7. 8. 9. 10. 11. Для бланка 5Е, 1994 скомпонуйте один составной предикат, определяющий все условия, при которых надо заполнять короткую форму, и все условия, при которых надо заполнять длинную форму. Постройтеграф-модельпотокауправлениядляформы 1040. Рассматривайте данные, приходящие из других форм или частей в качестве входов. Для каж- дого варианта постройте модель, выберете пути тестирования и спроекти- руйте тесты, используя обеспечение покрытия узлов и обеспечение покры- тия связей. Проверьте работу ваших тестов, используя в качестве оракула пакет программ для расчета налогов или модели в виде электронной таб- лицы. Если вы используете программу для расчета налогов, вам, возможно, придется брать входные значения из других форм.
(1) строки 1-5, (2) стро- ки 6-22,(3) строки 32-40,(4) строки 41-46,(5) строки 47-53,(6) строки 54-60, (7) строки 61-65. То же, что и в задаче 5 для формы 1040, бланка 5Е, короткая форма, строки 1-6, но включите в модель логику для определения того, может или не мо- жет быть использована короткая форма. Форма 1040, бланк на строке 10. Полная форма. Форма 1040, бланк на строке 20а, эос!а! эесцйсу 1псоте (доход, подлежа- щий налогообложению по программе социального обеспечения).
Полная форма. Форма 1040, бланк на строке 34, г!ерепг!епс г!ег!цсг!опз (льготы иждивенца). Полная форма. Постройте модель для строк 1-5 формы 1040, бланк на строке 26 (1994, Бланк 5е!Ветр!оуеб Ьеа!сЬ !пвцгапсе с(ег!цсг!опз (Льготы для частных пред- принимателей по программе страхования здоровья по старости)).
Найдите все пары коррелированных сегментов путей для примера в разделе ЗА.З. Форма 2106, Етр!оуее Ьцейпевв ехрепэеэ (Расходы служащего по сделкам), часть П, разделы А, В, С. Форма 2688, Арр!ьсасюп (ог Ехгепейоп со Рйе (Заявление о продлении сро- ка), строки 1-4. Форма 2210, Недоплата налогов. Включает (а) Строка 1, (Ь) часть П, (с) часть 1П, (д) часть !Ъ' раздела В. Представьте, что вы можете исполь- зовать короткий метод (часть П1), если вы не пометили графы 1Ь, 1с, или 96 Глава 3 ° Тестирование потока управления 1й. В любом случае выводы (если они есть) направляются на соответствующую строку формы 1040.