Недостатки высокоуровневой архитектуры проникли на уровень кода. Проблемы порождают новые проблемы (см. обсуждение разбитых окон у Ханта и Дэвиса [1999]). Из-за отсутствия единой архитектуры и «стиля» проекта никто не потрудился выработать стандарты кодирования, обеспечить использование общих библиотек или применение единых идиом. Не существовало правил назначения имен компонентов, классов и файлов. В проекте даже не существовало единой системы сборки; сценарии командного процессора и «клей», написанный на Perl, сосуществовали с шаке-файлами и файлами проектов Visual Studio. Компиляция этого монстра считалась «обрядом посвящения»!
Одной из самых неприметных, но серьезных проблем Мегаполиса было дублирование кода. Без четкой архитектуры и четких правил размещения функциональности программисты постоянно «изобретали велосипед» по всей кодовой базе. Простые операции, стандартные алгоритмы и структуры данных повторялись во многих модулях, причем каждая реализация обладала собственным набором неприметных ошибок и странностей. Более масштабные аспекты, такие как внешний обмен данными и кэширование, тоже были реализованы многократно.
Дополнительные археологические исследования показали, как это произошло: существование Мегаполиса начиналось с серии разнородных прототипов, которые потом объединили, вместо того чтобы выбросить. В сущности, Мегаполис был случайным образованием. Компоненты кода были принудительно сшиты, несмотря на то, что они плохо сочетались друг с другом. Со временем небрежные стежки износились, компоненты стали конфликтовать, что вызвало неизбежное трение в кодовой базе вместо гармоничной работы всех деталей.
Примечание
Нечеткая, рыхлая архитектура ведет к появлению программных компонентов, плохо написанных и плохо сочетающихся друг с другом. Кроме того, для нее характерно дублирование кода и усилий.
Related posts: