Upgrade to Pro — share decks privately, control downloads, hide ads and more …

"Соединяя миры" или "DevArch на горизонте"

"Соединяя миры" или "DevArch на горизонте"

Igor Bespalchuk

March 22, 2020
Tweet

Other Decks in Technology

Transcript

  1. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 1

    г.Москва, 21-22 марта 2020 г. Научно-практическая конференция «Прикладное системное мышление» «Соединяя миры» Игорь Беспальчук, Software/Solution Architect 1 1
  2. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 2

    2 / 19 ▪ > 20 лет в разработке ПО (коммерческое прикладное ПО) ▪ от разработчика к software/solution архитектору ▪ задачи оргпроектирования, стратегии и развития компании ▪ интерес к общей системной методологии, методологии управления, школе СМД, системной инженерии, ШСМ, и всем другим ветвям системного движения ▪ 3 года вел курс «Основные практики архитектора ПО» на площадке Luxoft Training ▪ после некоторого перерыва вернулся к работе с кодом на разных уровнях и с разными задачами О себе 2
  3. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 3

    1. Низкое качество дизайна среднего уровня, создаваемого разработчиками средней и низкой квалификации 2. Затрудненное понимание дизайна среднего уровня (разработанного даже квалифицированными разработчиками) по коду, без дополнительных описаний (которых обычно нет) 3. Измерение метрик качества дизайна среднего уровня 4. Трудоемкое обучение разработчиков в части качества дизайна среднего уровня 5. Автоматизированный анализ функционирования приложений на высоких системных уровнях Боль Подсистема, сервис, приложение Класс, функция, метод ? 3 / 19 3
  4. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 4

    Понятия системного подхода, хорошо работающие в «железной» системной инженерии, иногда не очень хорошо переносятся на сферу ПО (становятся малополезны без некоторой модификации содержания) Устоявшаяся терминология в сфере ПО местами тоже заметно отличается (вплоть до противоположных) Тем не менее большинство приемов системного мышления работают и полезны Я буду использовать терминологию, принятую в сфере ПО, (например, в “Documenting Software Architecture” / Клементс, Басс, Гарлан, др.) Онтологическое замечание 4 / 19 4
  5. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 5

    «Компоненты» и «модули» в мире ПО Компонент С2 Модуль A «использует» Модуль B Компонент С1 «реализует» =«описывает устройство» «зависит» design-time ~ Исходные тексты и библиотеки; «типы»; «описание» run-time ~ Состояния ячеек памяти и процессы в CPU; «экземпляры»; «воплощение» Трансляция, сборка, запуск Логистические единицы, но НЕ части воплощения! НЕ физические части воплощения, но принимаемые за реальность 5 / 19 5
  6. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 6

    Zoom-in, zoom-out Модуль A С1 С1.2 С1.1 Модуль A.1 Модуль A.2 run-time design-time 6 / 19 6
  7. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 8

    run-time А что в действительности? приложение design-time, «код» «документация», «коммуникация», «реверс-инжиниринг» функции/«объекты» 8 / 19 8
  8. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 9

    Общая картина системы в коде Модуль E Модуль D Модуль F Модуль H Модуль G Модуль M Модуль A Модуль B Модуль C Модуль K Модуль J Модуль L Модуль R Модуль Q Модуль S Модуль O Модуль N Модуль P Модуль U Модуль T 9 / 19 9
  9. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 10

    Два мира Developer + Code (Lowest Level Design) Машинно-транслируемые языки программирования Architect + High Level Design Неформальные (редко иначе) языки описания + естественный язык 10 / 19 10
  10. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 11

    1. Низкое качество дизайна среднего уровня, создаваемого разработчиками средней и низкой квалификации 2. Затрудненное понимание дизайна среднего уровня по коду, без дополнительных описаний 3. Измерение метрик качества дизайна среднего уровня 4. Трудоемкое обучение разработчиков в части качества дизайна среднего уровня 5. Автоматизированный анализ функционирования приложений на высоких системных уровнях 1. Язык кода не подталкивает к проектированию и мышлению в системном подходе на верхних уровнях и не мешает плохому дизайну 2. В языке кода никак не представлены структуры верхнего уровня 3. Абстракции языка кода бедны по отношению к архитектурным моделям верхнего уровня 4. Материал обучения оторван от предметного языка ежедневной работы 5. В машинных абстракциях сред исполнения также есть компоненты только нижнего уровня Причины боли 11 / 19 11
  11. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 12

    Языки ассемблера Максимально близки к «реальному» сквозному физическому процессу вычислений Первые языки высокого уровня Выделение подпроцессов (процедур) как паттерна и как средств языка Структурное программирование Иерархия процедур без состояния, первые запреты (goto) Объектно-ориентированное программирование (ООП) Компоненты нижнего уровня («объекты») с состоянием и абстрактными интерфейсами ООП с паттернами и принципами, runtime-средой и GC Только компоненты нижнего уровня, никаких новых запретов ??? Следующая парадигма языков программирования ??? «Изнутри — наружу» 12 / 19 12
  12. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 14

    Simon Brown Architecture for Developers, Make your architecture physical! Визуализация верхнеуровневых структур, удобная и понятная для разработчиков Robert Martin Принципы SOLID, Clean Architecture Паттерны проектирования на ООЯП, «уважающие» интерфейсы, метрики ОО-дизайна Функциональное программирование Сильные запреты и абстракции на уровне языка со свойствами, позволяющими делать выводы (чистые функции, immutable-значения, …) Test Driven Design Направляющая для «слепого проектирования» … Model Based Design, Code Generation Генерация каркасов низкоуровневого кода из высокоуровневых строгих моделей Neal Ford et.al. Architecture Fitness Functions Автоматические ограничения на код и дизайн, проверки и метрики Микросервисная архитектура Оставляет разработчикам меньше простора для плохого дизайна … Попытки улучшить ситуацию Dev Arch 14 / 19 14
  13. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 15

    Что реально может помочь Машинно-транслируемый язык, одинаково пригодный для описания компонент всех уровней, вводящий ценные абстракции и запреты, инспирированные системным подходом Arch Dev Поддержка высокоуровневых абстракций в средах исполнения 15 / 19 15
  14. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 16

    Мейнстримные ООЯП Все есть объект (некоторого класса)… …с частично скрытым состоянием (но это не точно)… …которое произвольно меняется при любом взаимодействии с объектом (или без него)… …и который может быть связан и обращаться к любым* другим объектам Следующая парадигма ЯП Есть значения (паттерны Value object, DTO) ▪ составное, неизменяемое, сериализуемое, пассивное, не зависящее ни от чего внешнего ▪ например: строка, матрица, список, сообщение, снимок состояния, … ▪ может содержать другие значения, но ничего больше Есть хранилища («состояния», паттерн Builder) ▪ изменяемое, сериализуемое, пассивное, не зависящее ни от чего внешнего ▪ может содержать значения и дочерние хранилища ▪ например: массив, B-дерево, очередь, стек, StringBuilder Есть компоненты без состояния (паттерн «чистая функция» из ФП) ▪ функции или их наборы, включая вложенные скрытые; только локальные переменные-хранилища ▪ часто встречаются в ролях: «сервис», «контроллер», «адаптер» ▪ может иметь зависимости – точки подключения интерфейсов других компонентов Есть компоненты с состоянием (состояние = внутреннее хранилище) Жесткое разделение команд и запросов в интерфейсах (паттерн/принцип CQS) (Запросы не меняют хранилище данного компонента и не вызывают команд других компонент (!!!) Есть отношение вложенности компонент и интерфейсов (часть/целое) Новые абстракции в языке 16 / 19 16
  15. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 17

    Герметичность компонент: нельзя вызвать другой компонент «поперек границ» родительского компонента и его интерфейсов/зависимостей (сейчас — можно, т. к. все «объекты» – одного уровня, жесткого отношения вложенности нет*) Строгость интерфейсов: нельзя, зная один интерфейс компонента, получить (украсть) другой (сейчас — можно, т. к. все имеющиеся интерфейсы — это просто «адрес в памяти + тип») Явные пути передачи интерфейсов: нельзя «доставать интерфейсы из воздуха» классический пример: «текущая дата» DateTime.Today() … Новые запреты в языке С1 С1.2 С1.1 С2 С2.2 С2.1 Ч С1 С1.2 С1.1 С2 С2.2 С2.1 С1 С1.2 С1.1 С2 С2.2 С2.1 17 / 19 17
  16. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 18

    0. Поиск подтверждения/критики идей и людей, страдающих от аналогичных болей 1. Подтверждение рабочей гипотезы (вручную или подручными инструментами) ▪ анализ существующего ОО-кода (некоторый open source), восстановление всех уровней компонентной модели (+ уточнение принципиальной модели) — верификация возможности ▪ обсуждение выявленных недостатков дизайна — верификация полезности 2. Метод ▪ разработка метрик качества дизайна ▪ описание метода проектирования (в т. ч. направляемого метриками) 3. Минимально полезный набор инструментов ▪ легковесные средства дополнительной разметки поверх существующих мейнстримных ООЯП (Java, C#) ▪ средство автоматического анализа качества дизайна 4. Новые языки программирования и инструменты Что делать? 18 / 19 18
  17. Доклад «Соединяя миры» («DevArch на горизонте») 22.03.2020 И. Беспальчук 19

    Спасибо за внимание! Игорь Беспальчук [email protected], linkedin.com/in/iamhere2 19