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

9.6. Заключение

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

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

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

Методичность при тестировании, отладке и защитном про­граммировании значительно облегчает работу программиста. Эта работа окупает себя также и при последующей модификации программы.

Дополнительная литература

Beiser, В., 1983. Software Testing Techniques. New York: Van Nostrand Rein-hold.

Goodenough, John., and Susan L. Gerhart, 1975. Toward a theory of test data selection. IEEE Transactions on Software Engineering SE-I (2): 156—173.

Howden, William E., 1981. A survey of dynamic analysis methods. In Tutorial-. Software Testing and Validation Techniques (New York: IEEE Computer Society Press), pp. 209—231.

Weinberg, Gerald, M., 1971. The Psychology of Computer Programming. New York: Van Nostrand Reinhold.

Упражнения

9.1. Разработайте набор тестов для процедуры merge, используя специфи­кацию, приведенную на рис, 3.5, и реализацию, приведенную на рис. 3.6. Про­делайте то же самое для процедур merge.sort и sort. Напишите драйвер для про­цедуры merge.

9.2. Разработайте набор тестов для процедуры poly (рис. 4.3 и 4.7). Напи­шите для этой задачи драйвер.

9.3. Разработайте набор тестов и драйвер для процедуры permutations (рис. 6.9).

9.4. В упражнении 5 гл. 4 наборы intset были реализованы при помощи упорядоченных списков olist. Подумайте, заглушки какого типа вы использо­вали бы для списков olist при проверке реализации intset.

9.5. Структурированная по блокам таблица символов в упр. 6 гл. 6 может быть реализована с помощью блоков и карт. Сделайте набросок такой реализации. Затем рассмотрите, как при тестировании syrntab вы могли бы использовать за­глушки для этих двух абстракций.

9.6. Напишите итератор, выдающий числа Фибоначчи. (Число Фибоначчи представляет собой сумму двух предыдущих чисел Фибоначчи, а первое число Фибоначчи есть 0. Например, первые семь чисел Фибоначчи есть 0, 1, 2, 3, 5 и 8.) Перед отладкой определите тестовые наборы. Затем отладьте вашу программу и сообщите, насколько успешными оказались тесты.

9.7. Разработайте для себя профильный файл ошибок. Заведите журнал, в который записывайте ошибки в ваших программах. Для каждой ошибки запи­сывайте ее причину и ищите закономерности.

Соседние файлы в папке Б. Лисков