
- •Часть 1. Планирование архитектуры
- •Заключение
- •Дополнительная литература
- •4.10. Дискуссионные вопросы
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Глава 6. Управление воздушным движением. Пример разработки, ориентированной на высокую готовность
- •Глава 7. Проектирование архитектуры
- •Глава 8. Моделирование условий полета. Конкретный пример архитектуры, ориентированной на интегрируемость
- •8.4. Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Глава 9. Документирование программной архитектуры
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Глава 10. Реконструкция программной архитектуры
- •Глава 11. Метод анализа компромиссных архитектурных
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Глава 12. Метод анализа стоимости и эффективности — количественный подход к принятию
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Глава 13. Всемирная паутина. Конкретный пример реализации способности к взаимодействию 374
- •Глава 14. Линейки программных продуктов.
- •Заключение
- •Дополнительная литература
- •Глава 15. CelsiusTech. Конкретный пример разработки
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Заключение
- •Дополнительная литература
- •Заключение
- •Часть 1. Планирование архитектуры
- •Часть 2. Создание архитектуры
- •Часть 3. Анализ архитектуры
- •Часть 4. От одной системы к множеству
- •Часть 1
- •Глава 1
- •1.1. Откуда берутся варианты архитектуры?
- •1.2. Программный процесс и архитектурно-экономический цикл
- •1.3. Из чего складывается «качественная» архитектура?
- •1.4. Заключение
- •1.5. Дискуссионные вопросы
- •Глава 2
- •2.1. Чем является программная архитектура и чем она не является
- •2.2. Другие взгляды на архитектуру
- •2.3. Архитектурные образцы, эталонные модели и эталонные варианты архитектуры
- •2.4. Почему программная архитектура так важна?
- •2.5. Архитектурные структуры и представления
- •2.6. Заключение
- •2.7. Дополнительная литература
- •2.8. Дискуссионные вопросы
- •Глава 3
- •3.1. Связь с архитектурно-экономическим циклом
- •3.2. Требования и атрибуты качества
- •3.3. Архитектура авиационной электронной системы а-7е
- •3.4. Заключение
- •3.5. Дополнительная литература
- •3.6. Дискуссионные вопросы
- •Часть 2
- •Глава 4
- •4.1. Функциональность и архитектура
- •4.2. Архитектура и атрибуты качества
- •4.3. Атрибуты качества системы
- •4.4. Практическое применение сценариев атрибутов качества
- •4.5. Другие атрибуты качества системы
- •4.6. Коммерческие атрибуты качества
- •4.7. Атрибуты качества архитектуры
- •4.8. Заключение
- •4.9. Дополнительная литература
- •4.10. Дискуссионные вопросы
- •Глава 5
- •5.1. Определение тактики
- •5.2 Тактики реализации готовности
- •5.3. Тактики реализации модифицируемости
- •5.4. Тактики реализации производительности
- •5.5. Тактики реализации безопасности
- •5.6. Тактики реализации контролепригодности
- •5.7. Тактики реализации практичности
- •5.8. Взаимосвязь тактик и архитектурных образцов
- •5.9. Архитектурные образцы и стили
- •5.10. Заключение
- •5.11. Дополнительная литература
- •5.12. Дискуссионные вопросы
- •Глава 6
- •6.1. Связь с архитектурно-экономическим циклом
- •6.2. Требования и атрибуты качества
- •6.3. Архитектурное решение
- •6.4. Заключение
- •6.5. Дополнительная литература
- •6.6. Дискуссионные вопросы
- •Глава 7
- •7. 1. Архитектура в контексте жизненного цикла
- •7.2. Проектирование архитектуры
- •1. Выбор модуля для декомпозиции
- •2А. Выбор архитектурных мотивов
- •2Ь. Выбор архитектурного образца
- •2D. Задание интерфейсов дочерних модулей
- •7.3. Формирование рабочих групп
- •7.5. Заключение
- •7.6. Дополнительная литература
- •7.7. Дискуссионные вопросы
- •Глава 8
- •8.1 Связь с архитектурно- экономическим циклом
- •8.2. Требования и атрибуты качества
- •8.3. Архитектурное решение
- •8.2 Заключение
- •8.5 Дополнительная литература
- •8.6. Дискуссионные вопросы
- •Глава 9
- •9.1. Варианты применения архитектурной документации
- •9.2. Представления
- •9.3 Выбор значимых представлений
- •9.4. Документирование представления
- •9.5. Перекрестная документация
- •9.6. Унифицированный язык Моделирования
- •9.7. Заключение
- •9.8. Дополнительная литература
- •9.9. Дискуссионные вопросы
- •Глава 10
- •10.1. Введение
- •10.2. Извлечение информации
- •10.3. Создание базы данных
- •10.4. Объединение представлений
- •10.5. Реконструкция
- •10.6. Пример
- •10.7. Заключение
- •10.8. Дополнительная литература
- •10.9. Дискуссионные вопросы
- •Часть 3
- •Глава 11
- •Результаты проведения оценки по методу атам
- •Этапы atam
- •1 Источник: приводится по изданию [Clements 02а] (адаптированная версия).
- •11.4. Система Nightingale: конкретный пример проведения оценки по методу атам
- •11.5. Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Глава 12
- •Результаты оценки по методу свам
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Глава 13
- •13.1. Отношение к архитектурноэкономическому циклу
- •13.4. Еще одна итерация архитектурноэкономического цикла: эволюция вариантов веб-архитектуры систем электронной коммерции
- •13.7. Заключение
- •13.8. Дополнительная литература
- •13.9. Дискуссионные вопросы
- •Часть 4
- •Глава 14
- •За счет чего работают линейки программных продуктов?
- •Варианты архитектуры линеек продуктов
- •Факторы, усложняющие применение линеек программных продуктов
- •Заключение
- •Дополнительная литература
- •Дискуссионный вопрос
- •Глава 15
- •Связь с архитектурноэкономическим циклом
- •Требования и атрибуты качества
- •Архитектурное решение
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Глава 16
- •Связь с архитектурноэкономическим циклом
- •16.3. Архитектурное решение
- •16.4. Решения по размещению системы
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Глава 17
- •17.2. Требования и атрибуты качества
- •17.3. Архитектурное решение
- •17.4. Механизм реализации атрибутов качества в архитектуре Luther
- •Заключение
- •Дополнительная литература
- •Дискуссионные вопросы
- •Глава 18
- •18.1. Воздействие компонентов на архитектуру
- •18.2. Архитектурное несоответствие
- •18.3. Компонентное проектирование как поиск
- •18.4. Пример приложения aseilm
- •18.5. Заключение
- •18.6. Дополнительная литература
- •Глава 19
- •19.1. Снова архитектурноэкономический цикл
- •19.2. Создание архитектуры
- •19.3. Архитектура в рамках жизненного цикла
- •Влияние коммерческих компонентов
- •Заключение
- •8 Все перечисленные специалисты работают в корпорации Inmedius (Питтсбург, сша).
1.3. Из чего складывается «качественная» архитектура?
Если утверждение о том, что, располагая одними и теми же техническими требованиями, два архитектора в двух компаниях создадут разные архитектуры, верно, 70 как эти архитектуры оценивать? Другими словами, какая из них правильная!
'Не существует такой архитектуры, которую можно было бы признать однозначно хорошей или однозначно плохой. Варианты архитектуры могут более или менее соответствовать поставленной задаче. Скажем, распределенная трехзвенная клиент-серверная архитектура идеально подходит для системы управления финансами в крупной компании, но в то же время совершенно не годится для авиационных приложений. Архитектуру, вполне отвечающую требованию по высокой модифицируемости, не имеет смысла использовать для создания одноразовой опытной системы. Один из главных постулатов этой книги заключается в том, что варианты архитектуры можно оценивать, и это один из факторов, обосновывающих повышенное к ним внимание, однако проводить такую оценку можно только в контексте конкретных задач.
Тем не менее в ходе проектирования архитектуры следует придерживаться ряда практических правил. Несоблюдение какого-то одного из них не означает, что архитектуру следует полностью забраковать; просто в причинах этого несоблюдения неплохо бы разобраться.
Все наши наблюдения делятся на две части: рекомендации по процессу и рекомендации по продукту (они же структурные рекомендации). Рекомендации по процессу таковы.
♦ Архитектура должна разрабатываться одним архитектором или небольшой командой архитекторов с очевидным руководителем.
♦ Архитектор (пли команда архитекторов) должен знать функциональные требования к системе и располагать четким, отсортированным согласно приоритетам перечнем атрибутов качества (примерами которых могут быть безопасность и модифицируемость), которым предполагаемая архитектура должна соответствовать.
♦ Архитектура должна быть в полной мере документирована, причем в документации следует отразить как минимум по одному статическому и динамическому представлению (о том, что это такое, мы поговорим в главе 2), использующему согласованную, понятную всем заинтересованным лицам нотацию.
♦ Содержание архитектуры необходимо раскрыть для всех заинтересованных в системе лиц; последние должны принимать активное участие в ее обсуждении.
+ Архитектуру следует проанализировать на предмет значимых количественных характеристик (например, максимальной производительности) и формально оценить па предмет атрибутов качества, причем сделать это нужно на том этапе, когда вносить поправки еще не поздно.
♦ Архитектура должна предусматривать возможность инкрементной (пошаговой) реализации; для этого следует создать «макет» (skeletal) системы и при минимальной функциональности испытать на нем все каналы связи. Макет системы можно использовать для инкрементного «наращивания» системы, тем самым уменьшив затраты на интеграцию и тестирование (см. главу 7, раздел 7.4).
♦ Все области состязаний за ресурсы в конечной архитектуре должны быть, во-первых, немногочисленными, а во-вторых, ясно определенными; порядок разрешения этих конфликтов необходимо четко обозначить, информации) о нем распространить и впоследствии поддерживать. В частности, если трудности возникают в связи с уровнем использования сети, архитектор должен составить (и провести в жизнь) нормативы, согласно которым все группы разработчиков должны будут соблюдать минимальный уровень сетевого трафика. Если же требуется обеспечить высокую производительность, архитектор должен определить (и провести в жизнь) временные ресурсы для основных потоков.
Что касается структурных правил, то их мы представляем следующим образом.
♦ Архитектура должна состоять из строго очерченных модулей, а функциональные обязанности между ними должны распределяться согласно принципам сокрытия информации и разделения задач. На основе информационной закрытости должны строиться (прежде всего) те модули, в которых инкапсулируется гиперчувствителыюсть вычислительной инфраструктуры, — при внесении изменений в инфраструктуру они уберегают от корректировки большую часть программного обеспечения.
♦ Каждый модуль должен иметь четкий интерфейс, инкапсулирующий или «скрывающий» изменяемые аспекты (в частности, стратегии реализации и варианты структур данных) от стороннего, обращающегося к его средствам программного обеспечения. Наличие подобных интерфейсов позволяет добиться определенной независимости в действиях различных групп разработчиков.
♦ Атрибуты качества должны реализовываться с привлечением хорошо изученных архитектурных тактик и на индивидуальной основе (см. главу 5 «Реализация качества»).
♦ Зависимость архитектуры от конкретной версии коммерческого изделия или инструмента недопустима. Если она все же имеет место, архитектуру необходимо структурировать таким образом, чтобы адаптацию к другим продуктам можно было провести без существенных трудностей и издержек.
♦ Модули, производящие информацию, следует отделять от модулей, потребляющих информацию. Поскольку изменения во многих случаях ограничиваются исключительно производством или исключительно потреблением данных, такое разделение способствует повышению модифицируемости. Введение новых данных предполагает корректировку обеих сторон, обновление которых, в случае разделения, производится поэтапно.
♦ В состав архитектуры систем с параллельной обработкой должны входить четко заданные процессы или задачи, которые могут соответствовать, а могут и не соответствовать структуре декомпозиции на модули. Иначе говоря, любой такой процесс может распространяться на несколько модулей; с другой стороны, процедуры в некоторых модулях могут вызываться как элементы нескольких процессов (этот принцип реализован в системе А-7Е — см. конкретный пример в главе 3).
♦ Все задачи и процессы следует писать так, чтобы обеспечить удобство их переназначения на другой процессор (даже в период прогона).
♦ В состав архитектуры должен входить ряд элементарных образцов взаимодействия (см. главу 5). Эго нужно для того, чтобы система все время выполняла свои задачи единообразно. В результате произойдет улучшение таких характеристик, как понятность, продолжительность разработки, надежность и модифицируемость. Кроме того, это придаст архитектуре концептуальную целостность — она, хоть и не поддается измерению, существенно облегчает разработку.
По мере того как вы будете знакомиться с представленными в этой книге конкретными примерами успешного решения той или иной архитектурной задачи, вспоминайте эти правила и проверяйте, насколько они соблюдались в каждом случае. Представленный набор правил не претендует ни на полноту, ни на безусловность; тем не менее он послужит ориентиром для любого архитектора, приступающего к решению архитектурно-проектной задачи.