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

162 Глава 8

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

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

8.2.3. Простота

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

Хорошая спецификация должна облегчать работу е другими людьми.УСпецификация может быть достаточно ограниченной и достаточно обобщенной^ т. е. иметь необходимый смыслы/однако этого недостаточно. Если этот смысл трудно понимаем читателями программы, то польза от такой спецификации весьма невелика.

Имеются два пути, ведущие к непониманию спецификации. Одни читатели могут изучать ее и прийти к тому, что они не по­нимают спецификацию. Например, читатель второй специфика­ции elems на рис. 8.1 может быть смущен тем фактом, что эле­мент встречается в портфеле более одного раза. Это не очень хо­рошо, однако гораздо менее опасно, чем в том случае, когда люди считают, что они поняли спецификацию, а в действительности это не так. В таком случае пользователь и разработчик понимают спецификацию каждый по-своему, что ведет к модулям, которые не могут работать совместно. Например, разработчик процедуры elems может решить выдавать каждый элемент столько раз, сколько раз он встречается в портфеле, а пользователь при этом считает, что элемец^выд^ется только один раз. „ Простота^' Шляется важным, однако аморфным критерием.'. Легко сказать, что хорошую спецификацию будет легче понять, и гораздо сложнее сказать, как достичь этого. Имеется множество факторов, оказывающих влияние на простоту, среди которых

Спецификации

W,'' \

раткость, избыточность и структурированность/являются, по­жалуй, наиболее важными.

'-Наиболее краткое представление не всегда является наилуч­шим, однако на начальном этапе оно, как правило, является луч­шим. Имеется ряд соображений, оправдывающих увеличение спе­цификации добавлением к ней избыточной информации или уров­ней структурированности, однако важно избегать ненужного многословия. Обычно по мере возрастания объема спецификации увеличивается вероятность появления в ней ошибок, а также по­является возможность ее неверного трактования. </ Важно не путать объем с полнотой^Спецификации, порожден­ные «потоком сознания», приводят к неполноте и громоздкости.. Созданные без учета критериев спецификации, подобно програм­мам, имеют размеры, большие необходимыхх/Вместо внесения до­бавлений в спецификацию разумнее^отложить локальные изме­нения и\ изыскать пути подтверждения достоверности этой ин­формации. Написание короткой полной спецификации занимает больше времени, чем написание длинной и полной, однако автор спецификации может оставить эту задачу читателям специфика­ции.

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

Роль, выполняемая спецификацией, во многом схожа с ролью, выполняемой записной книжкой. Она '(предназначена не только для содержания информации, но и для эффективной работы с этой информацией. Избыточность может быть использована для снижения вероятности пропуска важных подробностей.УСтарая поговорка «скажи им, что ты хочешь им сказать, и скажи им, что ты им сказал» имеет некоторую педагогическую ценность. ^Идея состоит в том, чтобы^представить информациюнесколькими способами, внося избыточность без повторений. Рассмотрим, на­пример, '' • , •.. ,

р = proc(sl, s2: set) returns (b: bool) . effects b имеет значение true, если si есть подмножество s2, и false —в про­тивном случае.

р== proc(sl, s2: set) returns (b: bool)

effects b = yx [x ^ si имплицирует x ^ s2]. p = proc (si, s2: set) returns (b: bool)

effects b имеет значение true, если si есть подмножество s2, и false —в пр»« тивном случае, т.е. b = ух [х (- si имплицирует х ^ s2].

Первая спецификация кратка и вполне понятна большинству читателей. Однако некоторые из них могут задаться вопросом: 6*

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