3.9. Сложность
59
Поэтому система должна быть безопасной не в результате тестирований и ис-
правлений, а с самого начала разработки.
Представьте себе такую аналогию. Вы пишете довольно большое приложе-
ние на одном из популярных языков программирования. При этом вы стара-
тельно исправляете все синтаксические ошибки до тех пор, пока приложению
не удастся пройти первую компиляцию. Как только это происходит, вы без
какого-либо дальнейшего тестирования упаковываете диск с приложением
в красивую коробку и продаете покупателю. Разумеется, никто не ожидает
получить действительно
функциональный продукт подобным образом.
Между тем именно это и происходит в наши дни с системами безопасно-
сти. Их невозможно протестировать, так как никто не знает, на что их нужно
тестировать. При этом, если в системе безопасности обнаружится хотя бы од-
на ошибка, она сведет на нет назначение всей системы. Таким образом, един-
ственный
способ получить безопасную систему — это с самого начала делать
ее надежной и безопасной. Это, в свою очередь, требует, чтобы система была
простой.
Единственный известный нам
способ построить простую систему — раз-
бить ее на модули. Это прописная истина программной инженерии. В на-
шем случае, однако, нельзя позволить себе вообще ни одной ошибки, поэто-
му к разбивке на модули необходимо подойти со всей возможной строгостью.
Вот наше основное правило.
Правило проектирования 2.
Корректность работы должна быть локаль-
ным свойством.
Другими словами, одна часть системы должна
функционировать коррект-
но, независимо от того, как
функционирует вся остальная система. Только не
пытайтесь сказать нам что-нибудь наподобие: “Это не проблема, потому что
оставшаяся часть системы просто не может дать сбой”. Оставшаяся часть
системы может иметь ошибку или же измениться в какой-нибудь будущей
версии. Каждая часть системы должна отвечать за свою собственную функ-
циональность.
Как вы вскоре убедитесь, мы еще не раз будем применять это правило
на протяжении последующих глав книги. Именно оно стало причиной того,
что большинство наших решений оказались более консервативными, чем те,
которые принято применять в разработке современных систем.