грамма выполняет всю необходимую работу. Скорее всего, на этом разработка не прекратится.
Хорошие системы имеют противную привычку возбуждать в своих пользователях множество идей о
других вещах, которые они могут делать. Как разработчику системы вам было сказано вначале, что
все, что вы должны сделать - это сгенерировать чеки и пару вспомогательных выходных данных. Но
затем просьбы о расширениях начинают попадать на ваш стол одна за другой: “Может ли программа
собирать некоторую дополнительную статистику?“ “Я говорил вам, что в следующем квартале мы
собираемся начать платить некоторым служащим ежемесячно, а некоторым - дважды в месяц, не так
ли?“ “И, между прочим, мне нужен ежемесячный суммарный отчет для администрации и еще один
ежеквартальный для акционеров”. “Бухгалтерам требуется отдельный отчет для начисления нало-
гов”. “Кстати, правильно ли вы храните информацию о зарплате? Очень хотелось бы предоставить
персоналу интерактивный доступ к ней. Не понимаю, почему трудно добавить такую функцию?“
Процесс изменений происходит непрерывно. Новая система все еще является во многих отно-
шениях “той же”, что и старая: все еще платежной системой, программой для ядерной физики,
компилятором. Но исходная “главная функция”, которая вначале выглядела самой важной, часто
становится просто одной из функций системы, а иногда и совсем исчезает, становясь ненужной.
Если при анализе и проектировании используется метод декомпозиции, основанный на функции,
то структура системы будет вытекать из исходного понимания разработчиками главной функции
системы. При этом добавление всякой новой функции, даже если оно кажется заказчику простым,
может разрушить всю структуру системы. Поэтому очень важно найти в качестве критерия деком-
позиции свойства менее изменчивые, чем главная функция системы.
Интерфейсы и проектирование ПО
Архитектура системы должна основываться на содержании, а не на форме. Но проектирование
сверху вниз стремится использовать в качестве основы для структуры самый поверхностный аспект