6.4. Автономная отладка пс
При автономной отладке каждый модуль тестируется в некотором программном окружении, кроме случая одномодульной программы. Это окружение включает уже отлаженные модули и модули, управляющие отладкой - отладочные модули. Таким образом, при автономной отладке всегда тестируется некоторая программа, созданная для тестирования отлаживаемого модуля. Такая программа, называемая тестируемой, лишь частично совпадает с отлаживаемой программой, кроме случая отладки последнего модуля. В процессе отладки производится наращивание тестируемой программы отлаженными модулями - при переходе к отладке следующего модуля в его программное окружение добавляется последний отлаженный модуль. Процесс наращивания программного окружения отлаженными модулями называется интеграцией программы. Отладочные модули зависят от порядка отладки модулей программы, находящегося в отладке модуля и используемого теста.
При восходящем тестировании окружение модуля содержит только один отладочный модуль, кроме случая отладки последнего модуля программы, который является головным в тестируемой программе. Такой отладочный модуль называется ведущим или драйвером. Ведущий модуль подготавливает информационную среду для тестирования отлаживаемого модуля, т. е. формирует ее состояние, в частности, путем ввода некоторых тестовых данных, осуществляет обращение к отлаживаемому модулю и после окончания его работы выдает необходимые сообщения. При отладке модуля для разных тестов могут составляться и разные ведущие модули.
При нисходящем тестировании окружение отлаживаемого модуля включает отладочные имитаторы-заглушки не отлаженных модулей, которые и выступают в качестве отладочных модулей. К таким модулям относятся те модули, к которым может обращаться отлаживаемый модуль, а также еще не отлаженные модули, к которым могут обращаться уже отлаженные модули, включенные в окружение. Некоторые из имитаторов при отладке отдельного модуля могут изменяться в зависимости от тестов.
На практике в окружении отлаживаемого модуля могут содержаться отладочные модули обоих типов, если используется смешанная стратегия тестирования. Это связано с тем, что восходящее и нисходящее тестирование имеют свои достоинства и недостатки.
Достоинства восходящего тестирования: простота подготовки тестов и возможность полной реализации плана тестирования модуля. Это связано с тем, что тестовое состояние информационной среды готовится ведущим отладочным модулем непосредственно перед обращением к отлаживаемому модулю.
Недостатки восходящего тестирования:
тестовые данные, как правило, готовятся не в той форме, которая рассчитана на пользователя, кроме случая отладки последнего головного модуля программы;
большой объем отладочного программирования - для отладки каждого модуля подготавливается несколько ведущих отладочных модулей, формирующих состояние информационной среды для разных тестов;
необходимость специального тестирования сопряжений модулей.
Достоинствам нисходящего тестирования:
большинство тестов готовится в форме, рассчитанной на пользователя;
во многих случаях относительно невелик объем отладочного программирования - имитаторы модулей, как правило, просты и каждый пригоден для большого числа тестов;
нет необходимости в тестировании сопряжений модулей.
Недостаток нисходящего тестирования: состояние информационной среды перед обращением к отлаживаемому модулю результат применения уже отлаженных модулей к тестовым данным или данным, выданными имитаторами. Это, во-первых, затрудняет подготовку тестов для вновь отлаживаемого модуля и требует высокой квалификации тестовика, а, во-вторых, осложняет реализацию полного плана тестирования модуля. Указанный недостаток вынуждает разработчиков иногда применять восходящее тестирование даже в случае нисходящей разработки. Однако чаще применяют некоторые модификации нисходящего тестирования, либо некоторую комбинацию нисходящего и восходящего тестирования. Исходя из того, что нисходящее тестирование является предпочтительным, рассмотрим некоторые приемы, позволяющие преодолеть указанные недостатки.
Прежде всего, необходимо организовать отладку программы так, чтобы первыми были отлажены модули, реализующие ввод данных, тогда тестовые данные можно готовить в форме, рассчитанной на пользователя. Не всегда этот ввод осуществляется в головном модуле, поэтому, в первую очередь отлаживаются цепочки модулей, ведущие к модулям, осуществляющим указанный ввод. Пока модули, осуществляющие ввод данных, не отлажены, тестовые данные поставляются имитаторами, которые либо вводят эти данные извне либо уже содержат их в себе как часть.
При нисходящем тестировании отдельных модулей некоторые состояния информационной среды вообще не возникают ни при каких входных данных. Казалось бы, что в этих случаях можно не тестировать отлаживаемый модуль, так как даже наличие ошибок никак не скажется на выполнении программы. Однако это неверный подход. При внесении изменений в программы, например, при сопровождении ПС, ранее не использованные для тестирования модуля состояния информационной среды могут возникнуть, что потребует дополнительного тестирования модуля, хотя сам модуль не изменился, а этого при рациональной организации отладки можно было бы избежать. Для тестирования отлаживаемого модуля в указанных ситуациях иногда используют имитаторы для создания соответствующего состояния информационной среды. Чаще пользуются модифицированным вариантом нисходящего тестирования, при котором отлаживаемые модули перед их интеграцией тестируются отдельно. В этом случае в окружении отлаживаемого модуля появляется ведущий модуль, наряду с имитаторами модулей, к которым может обращаться отлаживаемый модуль. Более целесообразна другая модификация нисходящего тестирования. После завершения тестирования модуля на достигаемых состояниях информационной среды следует провести отдельное тестирование на остальных состояниях информационной среды.
Часто применяется комбинация восходящего и нисходящего тестирования, названная методом сандвича. Его суть заключается в одновременном осуществлении как восходящего, так и нисходящего тестирования, пока эти два процесса не столкнутся на каком-либо срединном модуле программы. Этот метод позволяет воспользоваться достоинствами и восходящего, и нисходящего тестирования, а также нейтрализовать их недостатки.
Важным моментом при автономной отладке является тестирование сопряжения модулей. Спецификации модулей, кроме головного, используются в программе в двух ситуациях. Во-первых, при разработке текста модуля. Во-вторых, при написании обращения к модулю из других модулей программы. И в том, и в другом случае в результате ошибки может быть нарушено требуемое соответствие заданной спецификации модуля. Во избежание этого и предназначено тестирование сопряжения модулей. При нисходящем тестировании сопряжения тестируются попутно каждым пропускаемым тестом, что является достоинством нисходящего тестирования. При восходящем тестировании обращение к отлаживаемому модулю производится не из модулей отлаживаемой программы, а из ведущего отладочного модуля. Поэтому, приступая, в процессе интеграции программы, к отладке нового модуля, приходится тестировать каждое обращение к ранее отлаженному модулю с целью обнаружения несогласованности этого обращения с телом соответствующего модуля. Не исключено, что виновником несогласованности окажется ранее отлаженный модуль. Таким образом, приходится в новых условиях частично повторять тестирование ранее отлаженного модуля, при этом возникают те же трудности, что и при нисходящем тестировании.
Автономное тестирование модуля целесообразно проводить в пошаговом порядке.
Шаг 1. На основании спецификации отлаживаемого модуля готовятся тесты для всех мыслимых ситуаций, границ областей допустимых и недопустимых значений входных данных, областей их изменения, и всех недопустимых условий.
Шаг 2. Проверяется текст модуля и устанавливается, что каждое направление разветвлений будет пройдено хотя бы на одном тесте. Добавляются недостающие тесты.
Шаг 3. Проверяется текст модуля и устанавливается, что тесты обеспечивают полноту отладки каждого цикла: тело цикла не выполняется ни разу, выполняется один раз и выполняется максимальное число раз. Добавляются недостающие тесты.
Шаг 4. Проверяется текст модуля и устанавливается, что имеются тесты, проверяющие чувствительность модуля к особым значениям входных данных. Добавляются недостающие тесты.
- Введение в программирование и основы алгоритмизации
- 1.2. Понятие "правильной" программы
- 1.3. Надежность программного средства
- 1.4. Технология программирования как разработка надежных пс
- 1.5. Информатизация общества
- Тема 2 источники ошибок в программных средствах
- 2.1. Интеллектуальные возможности человека
- 2.2. Неправильный перевод как причина ошибок в пс
- 2.3. Модель перевода
- На каждом из этих шагов человек может совершить ошибку разной природы.
- 2.4. Основные пути борьбы с ошибками
- Тема 3 общие принципы разработки программных средств
- 3.1. Специфика разработки пс
- 3.2. Жизненный цикл пс
- 3.3. Понятие качества пс
- 3.4. Внешнего описания и его роль в обеспечении качества пс
- 3.5. Обеспечение надежности – основной мотив разработки пс
- 3.5. Борьба со сложностью систем и обеспечение точности перевода
- Тема 4 разработка структуры программы. Модульное и объектно-ориентированное программирование
- 4.1. Цель модульного программирования
- 4.2. Основные характеристики программного модуля
- 4.3. Методы разработки структуры программы
- 4.4. Объектно-ориентированное программирование
- 4.5. События и событийная модель
- Тема 5 Алгоритмизация и разработка программного модуля
- 5.1. Определение алгоритма
- Алгоритмизация - техника составления алгоритмов и программ для решения задач на эвм.
- 5.2. Изобразительные средства описания алгоритмов
- 5.3. Блок-схемы алгоритмов. Графические символы
- 5.4. Порядок разработки программного модуля
- 5.5. Структурное программирование
- 5.6. Пошаговая детализация и понятие о псевдокоде
- Тема 6 тестирование и отладка программного средства
- 6.1. Основные понятия
- 6.2. Принципы и виды отладки пс
- 6.3. Заповеди отладки пс
- 6.4. Автономная отладка пс
- Тема 7 Методы разработки алгоритмов
- 7.1. Метод частных целей
- 7.2. Метод подъема
- 7.3. Программирование с отходом назад
- Тема 8 Алгоритмы сортировки
- 8.1. Сортировка. Основные понятия
- 8.2. Пузырьковая сортировка
- 8.3. Сортировка с помощью дерева
- 8.4. Пирамидальная сортировка
- 8.5. Быстрая сортировка
- Тема 9 Алгоритмы поиска и перебора
- 9.1. Поиск. Основные понятия
- 9.2. Бинарный поиск
- 9.3. Поиск в сети
- Тема 10 Событийно-управляемое программирование на языке Visual Basic
- 10.1. Историческая справка
- 10.2. Основы Visual Basic
- Среда Windows: окна, события, сообщения
- Интерактивная разработка
- Интегрированная среда разработки
- 10.3. Формы и элементы управления
- Разработка и установка свойств формы
- События и методы формы
- Кнопки управления как основа выполнения действий
- 10.4. Элементы управления пользователя
- Флажки и переключатели
- Другие стандартные элементы управления
- 10.5. Фокус. Последовательность переходов. Меню Фокус
- Основы меню
- Контекстные меню
- Редактор меню
- Подсказки пользователю с помощью диалога
- Тема 11 Управление проектами
- 11.1. Работа с проектом и его структура
- 11.2. Работа с несколькими проектами
- 11.4. Установка параметров проекта
- 11.5. Дополнения и мастера
- Тема 12 Управляющие конструкции
- 12.1. Конструкции принятия решения (ветвление)
- 12.2. Циклы
- 12.3. Работа со структурами управления и досрочный выход из них
- Тема 13 Структура приложения. Техника написания кода
- 13.1. Структура приложения
- 13.2. Как работает событийное приложение
- 13.3. До начала кодирования
- 13.4. Техника написания кода
- 13.5. Автоматизация написания программы