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

194 Глава 9

Когда нам кажется, что причина ошибки установлена, мы изучаем соответствующий участок программы и исправляем ошибку.

Отладка может быть значительно облегчена, если использовать защитное программирование. Оно предполагает использование в программе различных проверок, позволяющих обнаружить вероятную ошибку. В частности, мы должны убедиться в том, что требования в предложении 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. Разработайте для себя профильный файл ошибок. Заведите журнал, в который записывайте ошибки в ваших программах. Для каждой ошибки запи­сывайте ее причину и ищите закономерности.

Написание формальных Спецификаций

Большинство спецификаций в данной книге написаны квази-зрмально, без использования строгих правил. Фактически они Представляют собой сильно стилизованные комментарии. Мы 1выбрали неформальные спецификации, исходя из следующих воображений.

^ 1. Хотя формальные спецификации и принадлежат к много-^обещающим областям в исследованиях методов программирования, ^выгода от их применения при разработке различного программ­ного обеспечения еще должна быть продемонстрирована.

2. Овладение техникой написания формальных специфика­ций требует времени. Мы не думаем, что в течение односеместро-вого курса студенты могут освоить формальные спецификации вместе с другими материалами из этой книги.

3. Написание формальных спецификаций затруднено также и тем, что для этого требуется некоторая машинная поддержка. По крайней мере необходимы средства проверки синтаксиса и типа. Большинство читателей данной книги такими средствами не обладают.

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

Вспомните, что наши неформальные спецификации абстракций данных включают раздел, в котором дается интуитивное описание определяемого типа. Обычно это описание ссылается на некоторую область, с которой пользователи предположительно знакомы. Например, мы определяем набор intset в терминах математических наборов и poly в терминах полиномов над полем целых чисел. Проблема, связанная с использованием неформальных специфи­каций, заключается в том, что такие дополнительные области никогда не определяются четко. Если читатели имеют интуитивное понимание материала из затронутой области и это их представле­ние соответствует рассматриваемому, то они будут в состоянии понять спецификации, в противном случае — нет. Что еще хуже, и это говорилось вгл,8,—- нет способа узнать, интерпретирует ли 7*

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