Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
45
Добавлен:
23.03.2015
Размер:
884 Кб
Скачать

182 Глава 9

лишь четырех маршрутов; различные маршруты получения ре­зультата процедурой pred в данном случае не анализируются. Однако проверка процедуры предполагает много различных тестов. Объединение всех этих вариантов проверки имеет много недостатков. Число тестов и время их выполнения возрастает) а при изменении в реализации любого из этих модулей необходимо пересматривать всю процедуру тестирования. Более эффективна индивидуальная проверка каждого модуля.

9.3. Средства тестирования

Процесс отладки всегда желательно максимально автоматизи­ровать. Обычно мы не можем автоматизировать генерацию про­верочных данных. Генерация соответствующих данных для про­верки программы является неалгоритмическим процессом, тре­бующим тщательного анализа. Далее, задача автоматизации при­нятия решения о том, какие выходные данные для произвольного входного набора считать удовлетворительными, обычно также трудна и так же подвержена ошибкам, как и процесс написания самой тестируемой программы.

Однако мы можем автоматизировать процесс вызова про­граммы с заранее определенной последовательностью входных данных и дальнейшую проверку получаемых результатов с задан­ной проверочной последовательностью. Выполняющий это меха­низм называется драйвером. Драйвер вызывает тестируемую про­грамму и следит за ее выполнением. Более конкретно, это пред­полагает:

1. Установку окружения, необходимого для вызова прове­ряемого модуля. В некоторых языках (но не в языке CLU) это предполагает создание и инициализирование глобальных пере­менных.

2. Выполнение ряда вызовов. Аргументы для этих вызовов могут быть считаны из файла или встроены в программу драй­вера. Если аргументы считываются из файла, то, если это воз­можно, они должны быть проверены на соответствие. 3. Сохранение результатов и проверку их на соответствие. К наиболее распространенному способу проверки соответ­ствия результатов предполагаемым является сравнение их с кон­трольной последовательностью значений, которая была поме­щена в файл. Однако иногда более удобно написать программу) которая сравнивает результаты непосредственно с входными зна­чениями. Например, если программа должна находить корни полинома, то достаточно просто написать программу, проверяю­щую, являются ли в действительности полученные значения кор­нями данного полинома. Аналогично, результат работы про­граммы sqrt легко проверить непосредственным вычислением.

^Тестирование и отладка

1Драйвер, проверяющий реализацию программы sqrt, показан 1иа рис. 9.5.

% считать следующие файлы в качестве входных; % file_of_tests, bad.tests, correct.results, incoirect.results

for % каждого теста в file_of_tests

do it test.square < 0 [ test.epsilon < .00001 I test.epsilon »> .001 then % добавить test к bad Jests else result := sqrt (test,square, test.epsilon) if real$abs (square — result * result) < == epsilon then % добавить (test, result) к correct_results else % добавить (test, result) к incorrect results end end end Рис. 9.5. Драйвер для программы sqrt.

При тестировании помимо драйверов также используются заглушки. Драйвер имитирует части программы, к которым об­ращается тестируемый модуль. Заглушки имитируют части про­граммы, вызываемые тестируемой программой. Заглушка должна 1) проверять корректность окружения, создаваемого вызываю­щей программой; 2) проверять правильность аргументов, пере­даваемых пользователем; 3) модифицировать аргументы и окруже­ние и возвращать значения, позволяя вызывающей программе продолжить свою работу. Лучше всего, если эти процессы соот­ветствуют спецификации модуля, имитируемого данной заглуш­кой. К сожалению, это не всегда возможно. Иногда «правиль­ное» значение может быть получено только самой имитируемой программой. В таких случаях мы должны остановиться на каком-нибудь «приемлемом» значении.

(Если все взаимодействия между модулями осуществляются через аргументы и результаты, то нет необходимости проверять или модифицировать аргумент.)

Очевидно, что драйверы требуются при тестировании тех мо­дулей, для которых вызывающие их модули еще не были соз­даны. Заглушки используются для проверки тех модулей, для которых еще не были созданы вызываемые ими модули. Оба спо­соба необходимы для проверки отдельных программных единиц, когда мы хотим максимально изолировать проверяемую единицу от остальных частей программы,

На практике заглушки и драйверы принято использовать для тестирования в интерактивном режиме. Самая простая реализация заглушки может просто печатать аргументы, с которыми она была вызвана, и выдавать запрос к пользователю на ввод значений, которые должны быть ею возвращены. Аналогично в случае ис­пользования простейшего драйвера проверка правильности ре­зультатов возлагается на производящего тестирование человека. Хотя такие драйверы и заглушки легко реализуются, их следует

Соседние файлы в папке POSIBNIK