- •4.9.1. Изменяемость
- •4.9.2. Классы операций
- •98 Глава 4
- •4.9.3. Полнота
- •100 Глава 4
- •4.9.5. Операции egual, similar и copy
- •102 Глава 4
- •104 Глава 4
- •5. Исключительные ситуации
- •108 Глава 5
- •110 Глава 5
- •6.2.1. Сигнализация об исключительных ситуациях
- •5.2.2. Обработка исключительных ситуаций
- •112 Глава 5
- •5.2.3. Предложение resignal
- •6.2.4. Необрабатываемые исключительные ситуации
- •114 Глава 5
- •6.2.3. Предложение resignal
- •5.2.4. Необрабатываемые исключительные ситуации
- •116 Глава 5
- •118 Глава 5
- •118 Глава 5
- •120 Глава 5
- •122 Глава 5
- •124 Глава 5
- •128 Глава 6
- •130 Глава 6
- •6.2.1. Реализация итераторов
- •6.2.2. Использование итераторов
- •132 Глава 6
- •134 Глава 6
- •136 Глава 6
- •138 Глава 6
- •140 Глава 7
- •142 Глава 7
- •7.2. Абстракция данных
- •144 Глава 7
- •146 Глава 7
- •148 Глава 7
- •150 Глава 7
- •7.4. Генераторы
- •162 Глава 7
- •154 Глава 7
- •156 Глава 7
- •162 Глава 8
- •164 Глава 8
- •166 Глава 8
- •168 Глава 8
- •170 Глава 9
- •172 Глава 9
- •174 Глава 9
- •176 Глава 9
- •9.1.3. Пример
- •178 Глава 9
- •180 Глава 9
- •182 Глава 9
- •184 Глава 9
- •186 Глава 9
- •188 Глава 9
- •190 Глава 9
- •192 Глава. 9
- •194 Глава 9
168 Глава 8
желательно стремиться к наибольшей краткости, а затем ввести некоторую избыточность, часто в форме примера. Избыточность также позволяет читателям проверить свое понимание спецификации.. Она также делает более очевидными ошибки, поскольку при избыточных описаниях они часто проявляются в виде противоречий. Для облегчения понимания спецификации вся избыточная информация должна быть каким-нибудь образом выделена.'
Спецификации имеют два основных назначения. Во-первых, процесс написания спецификации проливает свет на специфицируемую абстракцию — за счет фокусирования внимания на свойствах этой абстракции. Их роль может быть увеличена путем тщательного анализа свойств, которые могли остаться незамеченными, включая то, что должно быть указано в предложении requires относительно обработки исключительных ситуаций и поведения на границах. Иногда эта роль является главной ролью) выполняемой спецификацией, поскольку она выявляет проблемы в спецификациях, требующих дальнейшего анализа.
Спецификация используется также для документирования программ, на каждой стадии разработки и создания программного обеспечения. Разумеется, спецификация не покрывает всю необходимую документацию. Она описывает выполняемые модулем функции, однако для сложных модулей необходимо также описание принципов их работы. Если эти два вида документации четко разграничены, то модификация и сопровождение программного обеспечения значительно облегчаются.
Спецификации являются единственной расшифровкой абстракции и играют существенную роль в использованной нами методологии, поскольку без них абстракции были бы слишком расплывчатыми. Мы будем акцентировать на них свое внимание и в последующих главах.
Дополнительная литература
Parnas, David L,, 1977, The use of precise specifications in the development of software. In Proceedings of IFIP Congress 77, pp. 861—868.
Упражнения
8.1. Приведите четкую и краткую спецификацию абстракции портфеля целых чисел с операциями по созданию пустого портфеля, размещения и удаления из него элемента, проверки на принадлежность элемента к портфелю, установлению числа вхождений элемента в портфель и выборки элементов и портфеля.
8.2. Воспользовавшись спецификацией, рассмотренной в предыдущей главе, проанализируйте ее ограниченность, обобщенность и простоту. 8.3. Разумно ли ставить вопрос о корректности спецификации? Объясните. 8.4. Обсудите, как спецификации могут быть использованы в процессе компоновки системы. 8.5. Рассмотрите взаимосвязь абстракции, ее спецификации и реализации.
^.Тестирование и отладка
До сих пор речь шла о спецификации и реализации программы 'в совсем мало говорилось непосредственно о ее создании. Сейчас мы перейдем к связанным с этим вопросам, касающимся про-1-верки работоспособности программы.
1 Говоря о том, что созданная программа выполняется согласно (; нашим ожиданиям, мы воспользуемся понятием «проверка досто-- верности». Проверка достоверности обычно производится путем выполнения различных тестов и анализом ряда соображений, касающихся того, что мы считаем правильной работой программы. Назовем процессом отладки такой процесс, при котором производится выяснение причин, вследствие которых программа работает неправильно. Введем также понятие защитного программирования, обозначая этим создание программ, специально предназначенных для облегчения процессов проверки достоверности и отладки.
Перед подробным рассмотрением процесса проверки на достоверность необходимо обсудить, что мы должны от него ожидать. Наилучшим результатом окажется ситуация, при которой все пользователи программы будут удовлетворены ее работой. Эта цель недостижима. Такая гарантия предполагает знание того, что понимать под удовлетворенностью пользователей работой программы. Лучший результат, на который мы можем рассчиты-'вать, это гарантия того, что программа удовлетворяет своей спецификации. Большая часть работы тратится на выполнение именно этого условия.
Проверка достоверности может быть реализована двумя способами. Мы можем говорить о том, что программа будет работать со всеми возможными входными данными. Это предполагает тщательный анализ текста программы, что обычно называют верифи-цировац^ем. В гл. II мы рассмотрим ряд четких приембв' проверки программ. Как увидим далее, формальная проверка программу^ без^ привлечейия ЭВМ зачастую~чересчур__утомительна. К сожалению, на сегодняшний день существуют относительно примитивные средства проверки, и проверка программ в подавляющем большинстве представляет собой неформализованный процесс. Однако даже неформальная проверка может оказаться Довольно затруднительной.
