— Вебстер, и ты задаешь этот вопрос даме, которая по ночам спит в парке под пальмой? Странный ты человек. Конечно, у меня есть внутренние сомнения, как и у любого другого. Но на этом я уже давно обожглась и усвоила урок. Мне хорошо известно, что иногда попадаются спецификации, которые никуда не годятся. У меня даже есть несколько правил, которые помогают мне определить, насколько хорошо написана спецификация программы.
— Расскажи, пожалуйста. Очень хочется узнать, что же это за правила.
— Первое и самое главное — по сути, определение. Спецификация — это описание того, как система — некий набор запланированных реакций — отвечает на события, которые происходят непосредственно за ее пределами. Любая спецификация делится на две части: первая описывает зависимость между определенными событиями и реакцией системы. Вторая описывает входящие и исходящие данные, благодаря которым события и реакция системы становятся единым целым. Какой бы сложной ни была система, вторую часть всегда достаточно просто описать: все эти входящие и исходящие данные — просто список неких данных и управляющих элементов. Всех их можно поименовать, пронумеровать и перечислить. К тому же их можно измерять (например, по количеству информационных элементов в потоке).
— То есть получается, что даже если система очень и очень сложная, вся сложность заключается в первой части — правилах.
— Именно. Описать то, каким образом входящая информация превращается в исходящую, довольно сложно. Но вторая часть, в любой системе, — это всего лишь входящие и исходящие данные. Можно не суметь разобраться в сложной логике, но если в спецификации не перечислены базовые элементы, с которыми работает система, — ей место на помойке. Это вообще нельзя считать спецификацией.
— Значит, в спецификации должны быть по меньшей мере данные по входящей и исходящей информации. Причем каждому элементу нужно дать имя и указать, к какой части системы он относится.
— По меньшей мере! Конечно, это автоматически не делает спецификацию прекрасной и полезной, но, по крайней мере, с ней можно работать. В нашей спецификации ничего такого и в помине нет.
Некоторое время мистер Томпкинс молча обдумывал услышанное.
— Ну что ж. Возможно, это объясняет качество нашей спецификации. Допустим, система, которую они пытались описать, была настолько сложной, что писатели просто запутались в ней, исписали три сотни страниц, а про вторую, простую часть, забыли. Можно даже решить, что система такого типа слишком сложна и ее невозможно описать в спецификации.
— Знаешь, мне так не кажется. Тут дело кое в чем другом. На этот счет у меня тоже есть своя теория, но о ней позже. Для начала я хотела бы еще раз подчеркнуть, что, независимо от сложности системы, ты всегда можешь довольно просто описать входящие и исходящие данные. А теперь представь себе другую спецификацию системы для управления аэропортом. Всего на двадцати страничках, где подробно, последовательно описаны все типы входящей и исходяшей информации, все они поименованы. Чем более важна входящая и исходящая информация для системы, тем более подробным описанием она сопровождается: здесь могут даже описываться сами сигналы и, может быть, уровни напряжения, длительности импульсов и т. п. Допустим, на двадцати страницах такой спецификации описывается двадцать типов входящей информации и тридцать — исходящей. А в первой части стоит всего одна фраза: «Перечисленные ниже типы входящей и исходящей информации каким-то стандартным образом связаны друг с другом». Ну, как тебе такая спецификация?
— Ужасная спецификация. Белинда, это же самая недоделанная и туманная спецификация, какую только можно вообразить!
— Что касается первой части — да. Но зато в ней есть и вторая часть — перечисление данных, с которыми работает система. Другими словами, вторая часть просто превосходная, а вот первая почти отсутствует.
— Ну, и что же ты этим хочешь сказать?
— Я хочу сказать, что при всем ее очевидном несовершенстве с такой спецификацией можно было бы начинать работу над системой для аэропорта. Более того, это спасло бы их от провала проекта, от судебной тяжбы и прочих неприятностей. Разработчики прочли бы эти самые двадцать страниц и через какое-то время предложили бы свое видение отсутствующей первой части — логики работы системы. Потом они показали бы результат другим участникам проекта: администраторам и операторам, — чтобы те уточнили детали. Двадцатистраничная спецификация, которую я тебе описала, конечно, ужасна. И все же она гораздо лучше той, которая нам досталась от FAA.
Сейчас мистер Томпкинс уже не сомневался в том, что Белинда права. Но ее объяснение только добавило новых вопросов:
— Белинда, но зачем, почему они составили вот такую спецификацию? Кому нужен документ, с которым все равно никто не сможет работать?
— Знаешь, я, кажется, догадалась, — весело рассмеялась Белинда. — Поначалу это было не так уж просто сделать, но теперь, когда я знаю основное правило, частности уже не мешают видеть всю картину.
— И что же это за «основное правило»?