Открытый семинар для студентов в компании CUSTIS (25 сентября 2014 года).
Лектор: Игорь Беспальчук, руководитель проектов дирекции технологического развития.
Аннотация: Уже больше тридцати лет термин «архитектура» широко используется в разработке программного обеспечения. Без сомнения, архитектура — это нечто очень значительное, сложное, а может быть, и самое важное при создании качественного ПО. Но на вопрос о четком определении и критериях значимости архитектуры даже специалисты с большим опытом обычно отвечают уклончиво, умножая абстракции и не добавляя ясности в понимание. Неудивительно, что без четкого представления о том, что такое архитектура, нельзя сказать, какой она должна быть, как ее создать и как проверить, иными словами — как управлять архитектурой. На семинаре мы постараемся разобраться со всеми этими вопросами.
Видеозапись семинара: https://vimeo.com/107810012.
8. Наша компания занимается:
проектированием, разработкой, внедрением,
сопровождением, развитием…
…заказных информационных систем
на полном жизненном цикле
t
8/144
15. Игорь Беспальчук
(2001) Окончил
МГТУ им. Н. Э. Баумана (ИУ-8)
Программист (Oracle, C#)
(2006) Пришёл в CUSTIS
(2008) Руководитель проекта
для ГК «Спортмастер»
(2010) Руководитель отдела
технологического развития
(2013) Руководитель проектов
дирекции по развитию технологий
15/144
16. Моя работа в компании сегодня
Становление и
совершенствование
Управление
проектированием
Архитектурное
проектирование
Архитектор
Управленец
16/144
18. Суета вокруг архитектуры
Проблематика – в области управления
архитектурным проектированием
Управление архитектурным проектированием
может показаться
далекой и чуждой работой
Но управлять можно и снизу
Важно
понимание происходящего
18/144
19. План
1. Прошлое и настоящее, теория и практика
2. Проблематика управления
3. Понятие архитектуры
4. Принципы управления
5. Паттерны и анти-паттерны
19/144
21. История дисциплины (1)
1950-е: появление множества языков
программирования
1960-е: первые соображения
(Эдсгер Дейкстра)
о необходимости структуризации программ
1969 – вторая конференция Software
Engineering, первые упоминания
о “software architecture”
21/144
22. Ian P. Sharp, 1969
«Есть некое дополнение
к программированию,
и его надо вытащить на свет.
Это программная архитектура.
Архитектура и проектирование –
не одно и то же»
22/144
23. История дисциплины (2)
1970-е: концепции модульности и сокрытия
информации (Парнас)
до 1980-x: термин «архитектура» в основном
применяется к аппаратной части компьютеров
1984: основан Software Engineering Institute
1990-е: возрождение интереса к теме
поздние 1990-е – бум на архитектурные тематики
1996-2000: создание стандарта IEEE 1471
на описание программной архитектуры
23/144
24. История дисциплины (3)
Слияние с движением
системной инженерии
ISO/IEC/IEEE 42010:2011,
Systems and software engineering –
Architecture description
(2010) Состояние дисциплины
архитектурного проектирования:
«готово к внедрению»
24/144
25. От теории к практике
«Кто переходит к практике
без теории, подобен моряку,
плывущему
на корабле без руля
и компаса, и не ведающему,
где он может оказаться»
25/144
26. The Standish Group Inc., «CHAOS manifesto-2013»
Печальная статистика
26/144
27. Совет Standish Group
Для больших проектов – нет шансов быть
успешным,поэтому…
не делайте больших проектов
«Мы верим, что нет нужды в больших
проектах и любой IT-проект можно
разбить на набор маленьких»
Совет в целом правильный, но…
…иногда при уменьшении проекта
полностью теряется его смысл
27/144
29. B. Boehm, 2008
The ROI of System Engineering
Не отказываться, а научиться?
Размер
проекта
(KSLOC)
Оптимальные
затраты
на АП, %
Снижение
затрат
за счет АП,
%
10 5 18
100 20 38
1000 26 63
10000 33 92
29/144
30. Внутри больших проектов
У управленцев запаздывает:
понимание важности АП
представление о зрелости дисциплины
и внедрение
…методов программной инженерии в целом
…методов работы с программной архитектурой
Болезни незрелости управления АП
Хорошие программисты → плохие системы
30/144
32. В чем затруднения практиков?
Обычное отставание
Сложность предмета архитектуры
Мистификация на почве
непонимания
Неосведомленность
о продвижениях
дисциплины
Неготовность
учиться
32/144
33. Ключевое затруднение
Без понимания предмета
управление невозможно
Об архитектуре
говорят повсеместно,
но объяснить не могут
Картинки зданий –
«вот, это архитектура»
33/144
34. «Архитектура…
… – это все, что важно»
… – содержит самые ранние решения»
… – это способ координировать умы»
… уравновешивает интересы сторон»
… играет роль договора с заказчиком»
… оказывает влияние на структуру коллектива»
34/144
36. Понятие и определение
Для сложных понятий хороших
определений не бывает
150 определений
архитектуры
Системный подход:
В какое целое
вещь включена как часть
Какую функцию она выполняет
Как она устроена
(из чего состоит и за счет чего
выполняется функция)
Архитектура
36/144
37. Ian P. Sharp, 1968
«Мы говорим только о таких
спецификациях, которые определяют,
что программа должна делать….
Но нужно также определять дизайн,
форму; и в рамках этого каркаса
разработчик должен создавать что-
то… понимая, что архитектор имел в
виду»
37/144
38. Lane, 1990
«Архитектура включает разделение
функций между модулями, средства связи
между модулями, и представление
разделяемых данных»
38/144
41. Dewayne Perry, Alexander Wolf, 1992
«Архитектура определяет выбор
элементов, их взаимодействий,
и ограничения на эти элементы,
и взаимодействия, необходимые, чтобы
обеспечить каркас, в котором будут
удовлетворяться требования и который
будет служить базой для дизайна.
Архитектура =
{Элементы, Формы, Объяснения} »
41/144
43. David Garlan, Mary Shaw, 1993
«Архитектура – уровень дизайна,
определяющий вопросы за алгоритмами
и структурами данных вычислений: общую
структуру системы, включая организацию
и глобальную систему управления, протоколы
коммуникации, синхронизации, доступа
к данным; назначение функциональности
элементам дизайна; физическое размещение;
композицию элементов; масштабирование
и производительность; выбор из альтернатив»
43/144
44. Barry Boehm, 1995
«Архитектура включает: набор
компонентов, связей и ограничений;
набор утверждений о потребностях
интересантов; объяснения,
показывающие что компоненты, связи
и ограничения определяют систему,
которая (если будет реализована)
ответит потребностям
интересантов»
44/144
46. Soni, Nord, and Hofmeister, 1995
«Архитектура включает четыре
представления:
1. концептуальная а. – элементы и связи
2. модульная а. – функциональная и слоевая
декомпозиция
3. а. выполнения – динамическая структура
4. а. кода – организация исходников,
бинарников и библиотек в окружении
разработки»
46/144
48. David Garlan, 2000
«Архитектура описывает структуру
системы в крупном. Эта структура
освещает высокоуровневые
проектировочные решения, включая
то, как система составлена
из взаимодействующих частей, каковы
основные способы взаимодействия,
и каковы ключевые свойства частей»
48/144
49. Philippe Kruchten, 2003
«Архитектура – это набор значимых
решений по поводу организации системы,
набор структурных элементов и их
интерфейсов, при помощи которых
компонуется система,
вместе с их поведением, определяемым во
взаимодействии между этими элементами,
компоновка элементов в постепенно
укрупняющиеся подсистемы, а также стиль
архитектуры который направляет эту
организацию»
49/144
50. James McGovern, 2004
«Архитектура состоит из всех важных
проектных решений по поводу структур
программы и взаимодействий между этими
структурами, которые составляют системы.
Проектные решения обеспечивают желаемый
набор свойств, которые должна поддерживать
система, чтобы быть успешной. Проектные
решения предоставляют концептуальную
основу для разработки системы, ее поддержки
и обслуживания»
50/144
52. ISO 42010
«Архитектура –
фундаментальные концепции или свойства
системы в ее окружении, выраженные
в ее элементах, отношениях, и принципах
их проектирования и развития»
«Архитектура и описание архитектуры –
разные сущности»
52/144
54. Стандарт ISO 42010
Дает приемлемое определение
И вводит ряд связанных понятий
(stakeholder, concern, view, viewpoint, …)
Разводит архитектуру и описание
Содержит развернутые рекомендации
на описание архитектуры
54/144
57. Стандарт ISO 42010
Очень ценен для задач документирования
Для задач управления – недостаточно
Нужно разобраться с тем, что такое
«фундаментальные решения»
и как они должны приниматься
57/144
59. Содержание архитектуры
Элементы, модули, связи, структуры, виды,
формы, каркасы, разделения, ограничения,
интересанты, потребности окружение,
размещение, управление, интерфейсы, слои,
артефакты, технологии, статика и динамика,
поведение, свойства, отношения, принципы,
стили…
То есть самые разнообразные
проектные решения
Конечно, не все и не любые,
а только фундаментальные – об этом далее
59/144
60. Зависимость проектных решений
Решение А зависит от решения B,
если A имеет смысл или целесообразно
только в том случае,
когда принято и актуально решение B
B
A
60/144
61. Система транспортной логистики
Пример
Склады в 100 городах Гарантируется интернет-доступ
Распределенный «клиент-сервер»
Кросс-платформенный «клиент» Нужна работа с оборудованием
«Клиент» пишем на Java
Для UI используем JavaFX
61/144
62. Главное про зависимость решений
Зависимости не бывают цикличны,
решения образуют направленный граф
(для простоты – «дерево решений»)
Если изменяется некоторое решение,
то придется пересмотреть все решения,
которые прямо или косвенно зависят от него
Решения ближе к корню дерева менять сложно,
решения ближе к листьям менять проще
Именно положение в структуре зависимостей
определяет пресловутый уровень решения
Именно околокорневые (фундаментальные)
проектные решения
и составляют содержание архитектуры системы 62/144
63. Пример Система транспортной логистики
Склады в 100 городах Гарантируется интернет-доступ
Распределенный «клиент-сервер»
Кросс-платформенный «клиент» Нужна работа с оборудованием
«Клиент» пишем на Java
Для UI используем JavaFX
Нужна работа с оборудованием
«Клиент» делаем под Web
Для UI используем JavaFX
Гарантируется интернет-доступ
Файловый и почтовый обмен
Кросс-платформенный «клиент»
«Клиент» делаем под Web
Для UI используем JavaFX
63/144
65. О чем недоговаривают эксперты
Мартин Фаулер, 2003:
Ральф Джонсон, 2003:
«Архитектура – это все важные решения...
Важные решения – это те, по которым
эксперт сказал, что они важные»
«Нет теоретических причин к тому, чтобы
какие-то решения в софте было тяжело
менять, как в строительстве»
65/144
67. Области проектных решений
Свойства целевой системы (черный ящик)
Устройство системы (прозрачный ящик)
Окружение целевой системы (надсистема)
Производство (обеспечивающая система)
Производство Окружение
Устройство Свойства
67/144
68. А. Левенчук, 2014
«Архитектура – это те 20% решений
(относительно как требований,
так и устройства), которые
определяют остальные 80%
устройства»
68/144
69. Области проектных решений
В архитектуру могут входить решения
не только об устройстве
Если они существенно влияют на устройство
Производство Окружение
Устройство Свойства
69/144
70. Граница архитектуры
Граница «архитектура–дизайн» определяется
«мерой существенности»
(«фундаментальности»), проектных решений
То есть граница относительна
70/144
72. Гибкая архитектура
Не бывает
Гибкой (легко изменяемой)
может быть структура
Ральф Джонсон:
«Мы очень легко можем сделать любой
аспект ПО гибким. И это не сложно.
Но мы не можем сделать ПО гибкими во всех
аспектах. Это породит сложность,
а сложность трудноизменяема»
72/144
73. Модели в архитектуре
Основная форма представления
и описания проектных решений (ISO)
Вся современная инженерия
моделеориентирована
Но не все модели одинаково полезны
Детализация
Вид модели
Уровень абстракции
Некоторые решения плохо выражаются
классическими box-and-line моделями
(ограничения, принципы)
73/144
77. АС
Генерация данных журналов
Сохранение данных журналов
Файлы на
локальных
дисках
Журналы в
БД
Интерфейсы доступа к
журналам
первичная запись
Хранилище
журналов архивирование
чтение
Запрос данных
Запись данных
77/144
78. Даты
событий
Журналы в исходной БД
(фиксированный объем)
Журналы в хранилище
Перенос
данных
Удаление
данных
Создание
новых
данных
Оперативный
и отчетный контурАналитический и архивный контур
78/144
79. Результат прояснения
Про архитектуру можно разговаривать предметно!
Выделять конкретные решения
Показывать, что они фундаментальны для устройства
И этим обосновывать,
что решение входит
в архитектуру
(и что из этого следует)
Находить подходящие
модели и тексты
для наилучшего
выражения решений
Конец архитектурной
алхимии
79/144
88. Интернет
Из чего состоит архитектура интернета?
Элементы, соединения и топология практически
произвольны
Ключевые решения собраны
в стеке протоколов TCP/IP
Структура гибка
(произвольна),
архитектура – нет!
88/144
93. Личные примеры каждого
Ремонт квартиры
Мебель ставят в последнюю очередь
Но протяжка проводов и установка розеток
зависит от положения мебели
Базовая абстракция – функциональные зоны
Строительство загородного дома
no comments…
93/144
94. Резюме по примерам
Архитектурные решения не всегда
реализуются раньше
Они могут не относиться к структуре,
структура может быть гибкой
Они могут плохо выражаться с помощью
структурных (box-and-line) моделей
Они могут относиться не к устройству,
а к употреблению или производству
Они не выражаются самой системой
(«кодом») явно
Ищите примеры архитектур вокруг себя
94/144
97. Надсистема архитектуры
Архитектура не «внутри» целевой системы
Архитектура –
внутри производственной системы
Производство Окружение
Устройство Свойства
97/144
102. Анализ надсистемы
Назначение и качество
тоже меняются
на жизненном цикле,
но медленно и закономерно
Нужно понимать
динамику развития,
надсистемы
(окружение и производство)
102/144
103. Ответственность за архитектуру
Архитектор или команда?
НЕ ИМЕЕТ ЗНАЧЕНИЯ!
До тех пор, пока
ответственность
не лежит ни на ком
и архитектуры нет
как механизма
управления
в производстве
103/144
105. Анализ, архитектура и дизайн
Связаны, логически
(как зависимые решения)
Но не хронологически!
Хронологически –
все сложнее,
много итераций
105/144
106. Принципы организации АП
Современное проектирование
должно быть архитектурным!
Проявить предмет!
Ответственность – не важно, на ком,
но должна быть!
Ориентация на назначение и качество
на ПЖЦ, (а значит – требуется аналитика
качества и стратегии развития надсистем)!
Вплетена в интерактивный цикл детального
проектирования
Своевременный пересмотр
106/144
113. Скрыта за кодом
Архитектура есть,
но «скрыта за кодом» –
не выражена явно
Кто-то придумал, остальные
постоянно «реверсируют»
(с переменным успехом),
ответственность потеряна
Обсуждение невозможно,
т. к. предмет отсутствует
(даже когда есть объект – А.)
113/144
117. Попытка спроектировать все до мелочей
и сразу
Все проектирование
произвести до кодирования
Весь дизайн
запихивается в архитектуру
Big Design Upfront
117/144
121. Тайное качество
Не направленность на требуемое качество
или работа на «внутреннее» качество
Не бывает «внутреннего качества»!
т. е. такого, которое не обеспечивает внешнее,
может быть на долгом периоде
Само требуемое качество
(как краткосрочное, так и долгосрочное)
тоже нуждается
в анализе, и фиксации
Здесь же: мода, авангардизм
121/144
123. Башня из слоновой кости
Архитектор творит нечто, что ему кажется
прекрасным
Всем остальным это непонятно и неудобно
Сам архитектор при этом «код не пишет» –
он выше этого
123/144
125. Анархический Agile
Отрицается любое главенство
Страшилки Ivory Tower и BDUF как оружие
«Мы все равны»
И поэтому никто не отвечает
Принцип «равенства»
важнее результата
125/144
126. Лебедь, рак и щука
Каждый строит свою
архитектуру
Каждый хочет как лучше
(в своих представлениях)
Безответственно
к общему результату
126/144
128. Главенство авторитета
Главенство авторитета над целями
Переход на личности –
сравниваются не решения,
а регалии архитекторов
Статус важнее результата
128/144
129. Лучший программист
Архитектор = самый сильный программист?
Специфический предмет. Специфический
материал и свойства
Специфические компетенции
129/144
130. Архитектура на год
Архитектура рассчитана только
на минимальный старт
130/144
134. Отлито в бронзе
А) «Архитектура от старой системы проверена,
возьмем для новой системы её»
Б) «Архитектуру системы мы сделали три года
назад, и теперь менять в ней ничего нельзя»
Фрэнк Ллойд Райт:
«Забудьте обо всех архитектурах
мира, если не понимаете того,
что они были хороши
в своём роде и в своё время»
134/144
136. Швейцарский нож
Универсальная архитектура –
одна на сильно непохожие (но кажущиеся
похожими) проекты
«Там же везде БД, документы, трехзвенка
и гриды»
Неверно выбран масштаб повторного
использования
Software Product Lines
136/144
139. Архитектура для клиента
Обсуждение архитектуры
с представителями
заказчика и другими
интересантами
В адекватных для них
представлениях,
отражающих их
(различные!)
интересы
139/144
140. Резюме (в форме советов-директив)
Управляйте или «оно» будет управлять вашим
проектом. Архитектура в любом случае будет
влиять. И никогда не будет гибкой. Сделайте ее
инструментом управления
Для этого – объективируйте предмет, возложите
ответственность, обеспечьте полномочиями
и ресурсами. Направляйте на цель (анализ)
Утвердите и держите в голове понятие:
20% фундаментальных решений, которые потом
не пересмотришь, но на которых стоит все
остальное. Из понятия все остальное следует
140/144
141. Литература
Филипп Кратчен «Ретроспектива программных архитектур»
Сайт стандарта ISO 42010 http://www.iso-architecture.org/ieee-1471/index.html
L. Bass, et al. «Software Architecture in Practice»
P. Clements, et al. «Documenting Software Architectures: Views and Beyond»
Блог А. Левенчука http://ailev.ru
Мартин Фаулер «Who Needs an Architect?»
Филипп Кратчен «Common Misconceptions about Software Architecture»
CHAOS manifesto 2013
Девид Гарлан «Software Architecture: a Roadmap»
D. Dikel «Software Architecture: Organizational Principles and Patterns»
P. Eeles «Что такое архитектура программного обеспечения?»
Определения архитектуры на сайте SEI
B. Boehm «The ROI of System Engineering»
Ф. Брукс «Проектирование процесса проектирования»
Geek & Poke
141/144
142. Расширенный список
Развитие успешных систем
не в области инженерии
Р. Докинз «Эгоистичный ген»
Т. Кун «Структура научных революций»
142/144
0:02
Заказная разработка иногда напоминает создание летающих слонов:
Нужно сделать то, чего нигде нет
Это мало кому действительно нужно
И (поэтому) стоит весьма дорого
Большие системы
Тематика учета в широком смысле слова
Сейчас в компании немногим больше 200 человек.
Четверть из них – профессиональная инфраструктура (маркетологи, бухгалтеры, юристы, специалисты отдела персонала), остальные заняты в проектных командах.
Каждый пятый специалист компании окончил вуз с отличием
30% всех сотрудников компании – девушки и женщины; в производстве 22% девушек и 78% ребят, в инфраструктуре мужчин и женщин поровну.
0:03
* Разделены три процесса. Процесс проектирования и две управляющие надстройки.
* Мы сегодня обзорно, на уровне понятий и принципов, поговорим про нижние две стрелки.
* 0:05
Про архитектуру в жизни студента и молодого специалиста
Мы будем в конце концов выходить на управление архитектурой. То есть к работе менеджера-организатора над архитектором.
Многие хотят вырасти из программиста в менеджеры, но далеко не всем эта работа действительно придется по вкусу.
То же самое – с работой архитектора. Многие хотят, но действительная работа архитектора – это совсем не то же самое, что работа «самого умного и главного программиста». Основным результатом становятся документы, а не программы, а основным средством – способность разговаривать, а не думать в одиночку. Подходит тоже далеко не всем.
Вам до таких позиций еще далеко. Будете долго работать внутри команд, не управляя, а подчиняясь архитектуре. Потому что опыт необходим.
НО! Будете смотреть, что происходит. Не думайте, что начальники всегда точно знают что делают и делают правильно. Задавайте вопросы, проясняйте, подсказывайте.
Понимание происходящего – это главный момент в управлении, а не официальная должность и полномочия.
0:06
О чем примерно говорим
0:07
Мы говорим именно про программную архитектуру, «Software Architecture». Хотя в большинстве случаев принципы будут подходить к любым системам.
Коротко, у нас не урок истории. Просто чтобы подойти к пониманию текущей ситуации.
История дисциплины, т.е. методов работы
Программная инженерия создавалась как средство в борьбе со сложностью, направленное против ухудшающегося качества программных систем.
Стенограммы обсуждений открыты, можно почитать, в них участвуют Дейкстра, Вирт. Тони Хоар, Эдсгер Дейкстра, Алан Перлис, Пер Бринч Хансен, Фридрих Бауэр и Никлаус Вирт.
Термин «SA» используется одним человеком, в одном сообщении.
«Есть некое дополнение к программированию, и его надо вытащить на свет. Это программная архитектура. Архитектура и проектирование — не одно и то же. »
Они дискутировали и называли это «теорией» против «практики»
Стандарты выбраны как средство распространения знаний, причем именно понятийно-концептуального характера, а не справочного
В системной инженерии также есть понятие архитектуры
Очень многие методы работы оказываются общими
Стандарт про документирование – основополагающий, с ним нужно быть знакомым всем. Но мы сегодня много о документировании говорить не будем.
В целом состояние дисциплины такое, что можно говгорить о возможности внедрения подходов и методов
0:10
Кто такие практики? Не академическая среда исследовательского института, а реальные бизнес-разработки софта.
Ситуация не самая благоприятная, ОСОБЕННО для больших проектов
Фиксируют улучшение ситуации, но только для маленьких проектов
Любопытно, что среди факторов успеха собственно архитектурную работу не называют, и даже не исследуют
Смена точки управления снабжением в торговой сети (переход к централизованному управлению).
Мы видим, что недостаток архитектурной работы очень сильно влияет именно на большие проекты
Гипотеза: это и есть тот неучтенный фактор
Кроме того, даже для маленьких проектов оказывается заметное влияние при совсем небольших вложениях, ROI даже выше
И затраты – это не единственный и не самый главный результат АП
Умы были больше заняты Agile
Быстро адаптировать теоретические изыскания к практике не получается.
Несмотря на огромное количество литературы (преимущественно на английском)
до сих пор к этой деятельности очень многие компании подходят не систематически, а полагаясь на искусство отдельных разработчиков. Если для других дисциплин программной инженерии — управления требованиями, контроля качества, или собственно кодирования целесообразность достаточно очевидна, то для выделения архитектурного дизайна в отдельную управляемую область очень часто руководители не находят достаточных оснований. Ведь есть же программисты, и причем очень компетентные, пусть они и думают как сделать лучше.
Статья Дэвида Гарлана в 2000м году предрекала 10летие программной архитектуры на западе
Аналогия хорошая
Отношения руководителя с архитектором напоминают отношения короля с придворным алхимиком
Никто не понимает, как они творят чудеса превращений
И они сами тоже не понимают
У них это не всегда получается, хотя они используют много средств – заговоры, заклинания, ритуалы, особые игридиенты, выбор фазы луны
Точно также как химия пришла на смену алхимии, и архитектурная работа должна де-алхимизироваться. Фактически это уже произошло, только практики не в курсе.
Болезни незрелости: проектирование от моды, от традиции, от авторитета, ad hoc, только при старте, обучение на жесточайших ошибках, невозможность говорить о самом предметно об объекте архитектуры. От технологий и инструментов. Мистификация архитектуры. Алхимия.
Спиральная динамика – красные и фиолетовые мемы, местами догматично-синие, вместо прагматично-оранжевых.
Управленцы не знают, что с этим делать!
0:25
Затруднения управленцев, на самом деле.
Первые три мы пытаемся забороть
Абстрактное и интуитивное представление не позволяет управлять. Становимся заложниками обстоятельств.
Крайне метафоричны и бесполезны, хотя иногда – эмоциональны и вдохновляющи
Говорят скорее о пользе, чем о сути
Все правда – но не помогает разобраться
НЕ ОПЕРАЦИОНАЛЬНЫ
0:30
Мы увидим, как все эти определения ходят вокруг да около…
Примеры сложных понятий: семья, государство, человек, организация, ответственность.
150 определений архитектуры
«Определение – гробик для мысли.»
Пример – аэропорт как часть транспортной системы. Система аварийного пожаротушения самолета.
Позже покажем схему как альтернативный способ сжатого задания понятий
Начнем с самых первых попыток определить архитектуру
Направляющий характер
Про то, что снаружи
Про то, что внутри
Представления до 90х
Только статическая структура
Очень ограниченный набор
Представления о каркасе просты – «что внутри модуля – то дизайн»
Любопытно. Процессы разработки сюда попали.
Про внешнее.
Пока метафора.
Про внутреннее (и внешнее – тоже каркас)
Модули превратились в более абстрактные «элементы», данные – в более абстрактные «взаимодействия»
Ограничения – это очень интересно – это то, чего НЕТ в реализации.
Тавтология про «архитектурные элементы»
Указана прагматика
Еще интереснее – указаны «объяснения»
Взаимодействия добавляют что-то про динамику
Начала 90х – начались усложнения представлений.
Явно появились штуки, не входящие в целевую систему – ограничения, объяснения
Появилась динамика
Много перечислений
Определения пухнут в размерах и в количестве
Вводится понятие об «уровне дизайна», но непонятно, что это за уровень такой, как его увидеть.
Но утверждается, что архитектура – тоже дизайн, т.е. это две части одного общего. «Дизайн» теперь надо называть «low-level»
Утверждается общая природа, общий материал и законы существования для всего проектирования.
Интересно – возникли интересанты и их потребности, архитектура как-то и провязывается к ним, и включает их (?!).
В остальном – все просто – элементы, связи, ограничения
Любопытно, что ЕСЛИ будет реализована. Это явно отделяет архитектуру во времени существования от самой системы.
Вторая половина 90х
Целевая система отделена от архитектуры
Потребности отделены от утверждений
Дизайн делится на архитектурный и LL
Содержание пухнет и размывается
Разные представления
Есть окружение разработки
Разные представления – это значит, нет уже «одной диаграммы», есть множество взглядов
Разные декомпозиции
Окружение разработки
Архитектура = Описание
Проектировочные решения
«Высокоуровневые» - ?!
Архитектура – не описание, а собственно набор решений
Появился стиль
Состоит – это значит, внутри решения
Обеспечивают – это значит, снаружи
Концептуальная основа – роль
Не = описание
Что такое «важные»?
Разные представления – это значит, нет уже «одной диаграммы», одной структуры, есть множество разнородных взглядов/видов/планов
Разные декомпозиции, design-time, runtime
Окружение разработки
Обобщение всех деталей до «проектных решений»
Структуры и связи – частный случай, не схватывающий главного
Развели архитектуру с описанием
Появляется развитие.
Появляется окружение.
Появляется «фундаментальные», впрочем, плохо раскрытые. Фундаментальные – это не все, а «самые важные»
Появляются «принципы».
Описание отделено от архитектуры.
В целом уровень абстракции нарастает.
Многие предыдущие определения и их части впитаны в абстрактной форме. Элементы стали формой выражения концепций и свойств.
Большое описание, как непросто приходили к этому определению.
concepts or properties – отдельная ржака. Идеалисты/эмпирики.
Не дает понимания того, откуда брать эти «концепции и свойства».
Описание – отдельно
Система в окружении
Развитие
Элементы, связи и принципы проектирования – это только средство выражения концепций и свойств
Было поломано много копий на обсуждении предмета
К консенсусу до конца не пришли
На их счастье, с документированием можно было разбираться без полного понимания, что они и сделали
Для управления важно понимать суть
Структура описания из стандарта, отношение описания и А.
Структура описания из стандарта, отношение описания и А.
0:50
Нужно разлепить слепленные вещи, выделить главное, добавить четкости
Перечисление здесь не работает.
Необходимо обобщение. Абстрактное проектное решение – такое обобщение. Которое позволит работать со всем разнообразием, если мы выделим общие свойства для всех решений и через эти свойства сможем говорить про архитектуру.
Но нужно что-то, что позволит отличить архитектурные решения от неархитектурных
Что такое «самые важные»?
Решения включают требования, ограничения, окружение!
Решения могут быть довольно абстрактны («любая ОС на клиенте») и не-модельны
Пытаемся локализовать изменения в листьях, тогда это будет дешево
Именно в этой логике кроются все поиски архитектуры с 1968 года – модули, связи, интерфейсы
Статья Фаулера «Кому нужен архитектор» 2003 год
Ральф Джонсон – один из «банды четырех»
Фаулер – логический перескок причины. Почему эксперт так говорит? Потому что он понимает зависимости.
Джонсон – ошибка, зависимость решений – такая причина.
1:00
Следствия, которые могут показаться неожиданными
На самом деле, они совершенно естественны, если мы взглянем с позиции использования и управления архитектурой
Свойства системы – то, что наблюдается извне, в процессе функционирования. Требования и ограничения.
Перетипизовали наше множество решений (структуры, связи, и т.д.)
Очень близкое. То же самое, но лаконично, хорошо для запоминания.
20% - конечно условно
Уточнение про 80% именно устройства. Т.е. архитектура – это то, что направляет проектировщиков, а не то, что направляет инженеров по требованию или еще кого-то.
Свойства системы – то, что наблюдается извне, в процессе функционирования. Требования и ограничения.
Перетипизовали наше множество решений (структуры, связи, и т.д.)
Но не обоснования
Это ровно тот смысл, который имел в виду Фаулер – «важные – это те, которые эксперт считает важными». Только мы теперь можем это объяснить
Далеко не все, что здесь отражено – действительно архитектурные решения. И заранее даже не скажешь. Нужно понимать контекст.
На самом деле архитектурным решением может быть не ВСЕ, что сказано в этой модели, а только пара связей или отношений, или какой-то общий тип данных во всех таблицах, или разделение этой модели на две подобласти – DDD.
Пример не-модельного решения: в доме НЕ ДОЛЖНЫ использоваться материалы, содержащие опасные вещества
ИЛИ: при выборе технологий следует пользоваться ТОЛЬКО внешними технологиями и компонентами с качественной поддержкой (проприетарными или OpenSource)
Модели могут быть не-структурными, например модель математической функции.
Алхимия закончилась, у нас появились представления о молекулах, с которых начинается и заканчивается все. Фазы луны и заклинаний нет.
Определение универсально и для строительства, и для железной инженерии, и для софта, и для деятельности
1:10
1:30
Определение универсально и для строительства, и для железной инженерии, и для софта, и для деятельности
Примеру будем смотреть везде (и надо учиться их искать везде)
И только теперь, с новым пониманием – смотрим картинки – для закрепления
Со строительной архитектурой – сложно, т.к. часть ее направлена на выражение и эстетику. Но можно смотреть ту часть, которая на функциональность.
Является ли архитектурным решением граница между 10 и 11 блоком? Да их вообще можно оба выкинуть легко вместе с границей!
Есть решение – о том, что все модули одинаковые, и какие
Есть принцип организации (плохо выражающийся box-and-line-диаграммой)
Количество блоков – произвольно и архитектурным решением не является
А вот угол поворота - является
Винтовые лестницы в башнях средневековых за́мков строились таким образом, чтобы подъём по ним осуществлялся по часовой стрелке. Это делалось для того, чтобы, в случае осады замка, защитники башни имели преимущество во время рукопашной схватки, так как наиболее сильный удар правой рукой можно нанести только справа налево, что было недоступно атакующим. Кроме того, если атакующий будет использовать для защиты щит, то он не сможет использовать оружие.[4]
Однако подобная винтовая лестница в виде левой спирали характерна не для всех замков. Так в родовом замке графов Вальдштейнов (на немецкий лад Валленштейнов) лестницы были закручены наоборот – против часовой стрелки. Изучив историю этого знатнейшего рода Богемии, исследователи пришли к выводу, что причина кроется в таком, незначительном на первый взгляд, факте – среди рыцарей преобладали левши, а все преимущества для защитников «стандартной» закрутки винтовой лестницы распространяются только на правшей.
Все – из белого мрамора
Очень много шпилей
На каждом шпиле - скульптуры
В мосту – определяющие два элемента – арка и горизонталь. Остальная структура – по ситуации, в зависимости от рельефа.
Фундаментальные решения не обязательно реализуются раньше!
Это структура интернета
Точнее будет сказать, что система команд составляет очень существенную часть архитектуры процессора
Концентрация ресурсов.
1:45
1:45
Архитектура - элемент производства
Архитектура - стратегия проектирования. Стратегия – архитектура действия.
Возникает вопрос – на что направлять? На то, что требуется и то, что стабильно.
Направлять – это значит экономить усилия проектирования за счет узко определенной области
Это ключевая функция, есть ряд других. Например, архитектура полезна и для оценки и для управления и для общения с заказчиком…
Эти цели стабильны!
Назначение - не равно требования! Назначение и качество более абстрактны и более стабильны. Требования могут меняться.
Возникает вопрос – на что направлять? На то, что требуется и то, что стабильно.
Чтобы понимать назначение и динамику – нужно понимать надсистему.
Почему необходимо обратное проектирование? Нужно проектировать в т.ч. от среды.
Проектируя самолет, нужно все знать про воздух, а корабль – про море.
Ок, но кто все это должен делать? ИНТЕРАКТИВ!
Сначала – архитектура, потом – архитектор
В нормальной команде люди всегда найдут способ подкинуть хорошие идеи и покритиковать существующие
Описание – отдельно
Система в окружении
Развитие
Элементы, связи и принципы проектирования – это только средство выражения концепций и свойств
2:00
Больше - антипаттерны
Забота управленца-организатора – выстроить именно такую машину
В т.ч. обозначить ответственности
Негативные паттерны вызваны тем, что представления в голове управленца или архитектора – НЕ ТАКИЕ, а БОЛЕЕ БЕДНЫЕ
2:00
Не негатив! Так бывает. Начальная точка.
Столица Перу
Очень частый случай
Это может быть нормально, когда к целому нет никаких требований.
Эта система – успешна (раз живет). Оптимальна на некотором этапе.
Но неуправляема как целое и обладает только сложившимися качествами.
Лоскутная автоматизация в IT – то же самое, нет проблем до определенных пор.
Иногда складываются вполне хорошие общесистемные качества, однородность, порожденная ментальной схожестью авторов.
Источник – ни у кого нет понимания архитектуры, (иногда нет и потребности)
Случайная однородность – это еще не решение. Решение – это нечто осознанное и управляемое.
2:06
Непонимание того, что код не может выразить архитектуру. Описание нуждается в других формах!
Обсуждать невозможно, хотя интуитивно кто-то может и придумал некоторую цельную конструкцию.
Порождается отсутствием представления, что А – важный объект управления, не выражаемый кодом, и должна быть объективирована отдельно.
2:16
Нет артефакта и все решения, принятые ранее и их обоснования – забываются
Принимаются заново или ломаются
Вызвано тем, что считается, что «слишком дорого документировать, никто не читает, все изменится».
Если изменится – значит, либо документируете что-то другое, или этому надо уделить такое большое внимание, что стоимость документирования – мелочь.
Отсутствие понимания ценности, важности объекта А как средства управления.
2:03
* Обратный случай – попытка запихнуть все в архитектуру и управлять дизайном централизованно.
Должна быть золотая середина между BDUF и полным отсутствием архитектурного проектирования
«Все» запихивается в архитектуру
2:36
Не понимание управленцев, что они губят продукт, не уделяя внимание.
Не образуется направление, теряется целостность, удорожают изменения.
Вызвано не ценностью для менеджера.
А также не ценностью для клиента
Нужно транслировать свое понимание ценности управленцам и клиентам, в терминах ВНЕШНЕГО качества. Хотя это сложно, т.к. очень часто всем-всем краткосрочные цели кажутся важнее долгосрочных.
2:23
Вызвано непониманием функций архитектуры. Отсутствием информации о качестве (плохим анализом).
Архитектор должен чувствовать плохой анализ и, понимая, что не сможет сделать успешную систему без качественного анализа, решать эту проблему любыми способами.
«Внутренняя красота» – не критерий.
Даже от менеджеров можно слышать «я, конечно, понимаю, что внутренняя красота тоже важна» - это чушь. Это признак уступки и признак отсутствия ценности для менеджера.
* 2:10
Объект есть, предмет есть, но они оторваны от функций архитектуры. Архитектор делает ее «потому что он архитектор».
Такое отношение поддерживается также страшилками про «архитектора в башне из слоновой кости» и «Big Design Up Front» (страшилки, конечно же, имеют под собой почву).
Если архитектор сам не пишет код.
Вызвано непониманием функций и качества архитектуры.
2:13
«Mы agile» - анархия agile.
Страшилки Ivory Tower и BigDesignUpfront в арсенале. И этими страшилками из жизни – порождается.
Никто не отвечает, потому что «все равны». Чтобы с этим разобраться, нужно очень хорошо понимать, что такое ответственность, а это штука тоже мутно понимаемая.
«Никто не может мне сказать, как писать код! Или пишите сами! Если я не согласен – вы не должны ничего делать! Только 100% консенсус.» - узурпация власти посредством призыва к консенсусу и блокировки решения.
Искаженные понимания Agile’а (воинствующий зеленый) как отсутствия дисциплины.
Мне самому эти искажения были свойственны, возможно, через них проходит каждый (или не проходит).
Также порождается отсутствием понимания, что А – это такой же цельный результат работы всей команды, имеющий определенное назначение и качество.
Вряд ли про функционал системы кто-то из анархистов agile скажет «никто мне не указ, что система должна делать».
Также порождается ошибочными представлениями, что единственный полезный результат – это функционал. См. доклад «прекратите думать о конвейере». Производство – саморазвивающаяся система, и один из элементов – архитектура.
* 2:20
* Есть интуиция и знания
Есть какие-то представления
Нет ответственности за целое
Этим и вызвано
Может сочетаться с «Mы agile!»
2:30
Фаулер
Непонимание того, что архитектура – не алхимия, а вполне предметная и рациональная вещь. Ее нужно обосновывать через рацио, а не через регалии.
Схожая проблема – с модой.
Вызвано тем же – непониманием того, что архитектура – это не про опыт, не про доверие, и вообще не про личность. Есть конкретный объективный объект и у него есть объективное качество, и разговаривать можно и нужно о нем, а не о личностях.
2:40
Например, оценка жизнеспособности технологий на интервале 5-1
Очень много коммуникаций, высокие требования к коммуникабельности, умению говорить, объяснять, выражать мысли устно и письменно, компактно и самую суть.
Может говорить не на C++, а с заказчиком. С теми, с кем нужно, на нужном языке.
Может быть не-специалистом в отдельных областях. Но нужен широкий кругозор, и охват.
Метафора Декатлона.
Вызвано: непониманием сущности объекта архитектуры, функций и ответственности архитектора.
Нормально, но нужно доучивать и прокачивать soft skills.
2:43
Развивающаяся надсистема. Сечения цилиндра.
Не от стратегии
на ПЖЦ, на роста объемов, изменения бизнеса и технологий.
2:50
Может быть вызвано тем, что архитектор = руководитель проекта, и его ответственность заканчивается проектом
Это может быть не со зла и не сознательно
Исправляться может оценкой качества архитектуры при сдаче
Связано с «архитектура на год»
2:33
Две формы – архитектура переносится из системы в систему
Архитектура не пересматривается в рамках одной сильно меняющейся системы
Ведет к тому, что архитектура плохо работает для новых условий
Вызвано и экономико-юридическими сложностями отношений с заказчиком (нужно говорить с ним об архитектуре) и убеждениями,
что «архитектура – это то, Что было сделано в начале и не должно меняьтся»
Что «лучше взять архитектуру от старой системы, это менее рисковано»
* 2:46
Желание сэкономить через повторное использование
Но неверно выбрано масштаб
Повторное использование возможно только в том же контексте, и для архитектуры целиком этот контекст слишком специфичен, чтобы повториться
Вместо этого надо нарабатывать (или брать готовыми) более мелкие фрагменты архитектуры и выстраивать заново (возможно, быстрее) на новых проектах
Концепия Software Product Lines