неполадок. Возьмем, например, программу sqrt, включившую проверку x<0, хотя ее клиенты были
проинструктированы о необходимости обеспечения x>=0. Что в этом плохого? С микроскопической
точки зрения, ограничив наше видение узким мирком sqrt, кажется, что включение проверки делает
программу более устойчивой. Но мир системы не ограничивается одной программой - он содержит
множество программ в множестве классов. Для получения надежной системы необходимо перейти
к макроскопическому видению проблемы, обобщающему всю архитектуру.
С этой глобальной точки зрения простота становится критическим фактором. Сложность - главный
враг качества. Когда в этот концерн привносятся излишние проверки, то это уже не покажется
столь безобидным делом. Экстраполируйте на тысячи программ в системе среднего размера (или на
десятки и сотни тысяч в большой системе) проверку (if x<0 then ...), столь безобидную с первого
взгляда, - все это начнет выглядеть подобно монстру бесполезной сложности. Добавляя избыточные
проверки, добавляете больше кода. Больше кода - больше сложности, отсюда и больше источников
условий, приводящих к тому, что все пойдет не так, это приведет к дальнейшему разрастанию кода и
так до бесконечности. Если пойти по этой дороге, то определенно можно сказать одно - мы никогда
не достигнем надежности. Чем больше пишем, тем больше придется писать.
Этот бег с препятствиями не для нас, нас ждет другая дорога. Проектирование по Контракту
приглашает идентифицировать согласованные условия, необходимые для правильного функциониро-
вания каждого контракта в кооперации клиенты - поставщики. Метод вынуждает для каждого со-
глашения установить, кто несет ответственность - клиент или поставщик. Ответ может быть разный,
частично он определяется стилем проектирования; позже будет дан ответ, как это делать лучшим
образом. Но когда решение принято, нужно его придерживаться. Если требования корректности по-
являются в предусловии, определяя тем самым ответственность клиента, то в программе не должно
быть соответствующих проверок. Требования, не указанные в предусловии, должны проверяться и
выполняться в программе.
Следует отметить, что избыточные проверки широко применяются в процессе функционирования