Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
pps-new [2021/08/30 16:58]
user
pps-new [2025/09/15 11:27] (current)
user old revision restored (2025/09/02 08:59)
Line 1: Line 1:
-====== Курс Проектирование программных систем (осень 2021) ======+====== Курс Проектирование программных систем (осень 2025) ======
  
-На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design)+**Обновлено 31.08.2025**
  
-А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.+На курсе вы узнаете:
  
-Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.+  - как проводить анализ требований с применением гибких методов и UseCase 2.0, основы разработки технических заданий 
 +  - основы языка моделирования UML2 и станете разбираться в продвинутых вопросах его применения 
 +  - методы предметного-ориентированного проектирования (Domain-Driven Design, DDD) и их применение для создания микросервисных приложений (MSA)  
 +  - фундаментальные методы разработки архитектуры программных систем, структурный анализ и проектирование 
 +  - паттерны и приемы разработки облачных приложений (cloud-native applications), разработки распределенных систем и согласования состояний узлов 
 + 
 + 
 +Практика предполагает решение задач на семинарах, выполнение и защиту двух заданий по командному курсовому проекту.
  
 Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения. Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.
  
 +**Содержание**
 +
 +  * [[#Примерный план|Темы и план]]
 +  * [[#Учебный проект|Учебный проект]]
 +  * [[#Коллоквиум, контрольная работа и устный ответ|Коллоквиум и диффзачет]]
 +  * [[#Оценки по курсу|Критерии оценки по курсу]]
 +  * [[#Литература|Литература и ссылки]]
 +  * [[#Контакты|Контакты]]
  
 ===== Примерный план ===== ===== Примерный план =====
  
 ^ Неделя ^ Раздел ^ Тема ^ ^ Неделя ^ Раздел ^ Тема ^
-01/09 | INTRO+REQ | Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.) | +04/09 | INTRO+REQ | Введение, цели и содержание курса. Кратко о требованиях. Понятие о качестве ПО. Сценарии. Фичи. Варианты использования (динамич. представл.) | 
-08/09 | DDD Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER | +11/09 | REQ Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований. | 
-15/09 | DDD | Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области. | +|       | REQ | Вариативная тема: Структура и содержание технического задания по ГОСТ 19. | 
-22/09 | DDD+UML2 | Моделирование поведенияСогласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD). |  +| 18/09 | DDD+UML2 | Моделирование в ООП. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Структуры программы в UML2. Сравнение с моделями данных ER
-29/09 | UML2 | Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты+25/09 | DDD | Методы объектно-ориентированного анализа. Методы именных групп и Аббота, контрольные списки. Основные понятия и приемы предметно-ориентированного проектирования (DDD). Повсеместный язык, сущности, агрегаты. Окрестности, предметные области. | 
-06/10 | UML2 | Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language +02/10 | DDD+UML2 | Моделирование сценариев в системе.  Структура в динамикеВзаимодействия, кооперации, последовательности в UML2. Проектирование на основе обязанностей (метод CRC, RDD). Согласованность моделей. |  
-13/10 | UML2+PROC | Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD) | +| 09/10 | UML2 | Моделирование динамики. Конечные автоматы и схемы состояний. Управление сложностью, пакеты и профили. 
-20/10 | ARCH | Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили). |  +16/10 | UML2 | Моделирование процессов и алгоритмов. Сети Петри и модели деятельности (activity). Язык действий в UML2. | 
-27/10 | ARCH+UML2 | Функциональная декомпозиция. Потоки данных DFD. UML 2. Диаграммы компонентов и размещения | +23/10 | UML2+PROC | Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD) | 
-03/11 | MSA | Введение в микросервисную архитектуру. Ресурсы. Распределенные системыДекомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов. | +30/10 | EXAM | **Коллоквиум. Сдача теоретического минимума по моделированию и анализу требований.** |  
-10/11 | MSA | Паттерны, принципы SOLID в реализации микросервисов. Фреймворки. | +| 06/11 | ARCH | Методы структурного проектирования, метрики связности и сходства (сцепления), постепенное уточнение. Методы структурного анализа. Введение в архитектуру ПО (определение, архитектурные стили). |  
-17/11 | MSA | Объектно-ориентированное проектирование. Применение паттернов проектирования. | +13/11 | ARCH+UML2 | Введение в микросервисную архитектуру. Ресурсы. Решетки типов. Задача совместимости. Декомпозиция на окрестности и на сервисы. Гексагональная архитектураНотация C4, физические DFD и UML 2. Диаграммы компонентов и размещения.  
-24/11 | ARCH+MSA | Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA | +20/11 | MSA | Синхронизация и согласованность данных в распределенных системахМодели вычислений и алгоритмы согласования. Паттерны SAGA и 2PC. | 
-01/12 | MSA+PROC Процесс продуктовой разработки от потребности к дизайну REQ+DDD+MSA. Повторение и подготовка к контрольной работе. | +| 27/11 | MSA | Приемы и паттерны объектно-ориентированного проектирование для облачных приложений. Паттерны API и коммуникаций. Представление на диаграмме компонентов. | 
-| 08/12 | EXAM | Контрольная работа по курсу |+04/12 | MSA | Паттерны, принципы SOLID в реализации микросервисов. Применение паттернов проектирования. | 
 +| 11/12 | MSA+DATA Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA. Основы Kubernetes, элементы KOF и разработка CRD | 
 +|       | ARCH | Вариативная тема: Проектирование интеллектуальных микросервисов, поставка и сервинг моделей. | 
 +      | ARCH+MSA | Вариативная тема: Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA | 
 +18/12 | EXAM **Дифференцированный зачет, контрольная и защита проектов по курсу** |
  
  
Line 36: Line 55:
  
 Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов. Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.
 +
 +Примерная таблица этапов проекта и применяемых методов проектирования.
 +
 +^#^Этап^Методы и результаты^Задачи^
 +| 1 | Анализ требований к продукту | Customer Development, JTBD, JTBD Interview, Personas, User story, Job story, Story Map, Customer Journey Map*, Value Proposition Canvas*, Jobs Map*, UI Wireframes, Product features | Предложить и описать образ продукта и решаемые задачи. Определить аудиторию и провести интервью с пользователями. Сформулировать полезные функции и ограничить его рамки. Прояснить элементарные сценарии для полезных функций. Составить словарь данных. |
 +| 2 | Разработка модели анализа | Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot's method/Noun phrases, Entity-Relationship model | По описанию продукта разработать модель использования. Выделить кандидаты классов, построить модель предметной области в UML2 или ERD. Выписать важные требования к атрибутам качества по стандарту. |
 +| 3 | Разработка динамической модели | Responsibility-driven design, CRC, UML2 Collaborations model and implementation, UML2 Structured classes, UML2 Activity and Statechart and Interactions models, Logical Data-flow model. | Разделить сценарии по обязанностям и назначить ролям классов. Разработать модель деятельности или псевдокод для исполняемого поведения, схемы состояний или конечных автоматов для интерактивного и реактивного, модели взаимодействий или потоков данных для эмерджентного поведения. Обновить модель классов / данных. | 
 +| 4 | Декомпозиция на микросервисы | Data consistency I, Ресурсы и алгоритмы / решетки типов, CRDT, Event storming, Domain-Driven Design, UML2 Components and Deployments models, Physical Data-flow model | Разделить модель предметной области на агрегаты и сформировать микросервисы. Разработать модель событий и процессов. Разработать модель компонентов в UML2 или Physical DFD. Разработать модель размещения |
 +| 5 | Техническое проектирование | Microservices applications, Reference architecture, Technology stacks, RESTful API, HTTP(S)/URL/HATEOAS, API Design patterns | Выбрать и обосновать эталонную архитектуру для приложения. Подобрать библиотеки и каркасы, инструменты разработки, сравнить и обосновать выбор. Разработать API сервисов применив RESTful API и паттерны проектирования API. Представить в виде OpenAPIv3 схемы. |
 +| 6 | Проектирование данных и прототип | Polyglot persistence, Relational schema, NoSQL, Data consistency II: Saga and CRDT and 2PC, Develop prototype with source code, SOLID and GoF patterns, MSA Metrics | Перейти от логической модели к физической схеме хранения данных. Разработать модели процессов взаимодействия микросервисов. Реализовать прототип системы в коде и автоматические интеграционные тесты к нему. Применить и обосновать приципы SOLID или GoF паттерны. Посчитать метрики сложности MSA |
  
 ==== Задание 1 ===== ==== Задание 1 =====
  
 Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей. Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.
 +
 +В таблице выше это задание включает этапы 1-3.
  
 Что можно будет освоить: Что можно будет освоить:
Line 49: Line 80:
  
 В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания. В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.
 +
 +В таблице выше это задание включает этапы 4-6.
  
 Что можно будет освоить: Что можно будет освоить:
Line 57: Line 90:
  
  
-==== Результаты проекта ====+==== Результаты и оценивание проекта ====
  
 Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию. Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.
  
-Задания по проекту выполняются на семинарах, защита проходит в виде доклада. Оценивается: +Общие критерии оценивания приведены в методичке {{uml-verification-proc.pdf|Критерии оценивания проектов}} 
-  * согласованность и непротиворечивость требований и модели реализации + 
-  * правильность применения и понимание изученных методовобоснованность решения +Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада.  
-  * вклад участников проекта в обший результат+ 
 +Если кратко, то оцениваются следующие харатеристики выполненного проекта 
 +  * Согласованность разных представлений в составе проекта между собой 
 +  * Правильность применения методов проектирования 
 +  * Полнота выполнения проекта и следование рекомендациям 
 +  * Обоснованность и целесообразность принятых проектировочных решений 
 +  * Ошибки и недочеты в применении языков моделирования 
 +  * Вклад участников в общий результат
  
 ==== Примеры тем проектов ==== ==== Примеры тем проектов ====
Line 80: Line 120:
 |8.| [[design:PhystechTaxi|Физтех-Такси]]  | Агрегатор такси со скидкой на поездки в МФТИ | |8.| [[design:PhystechTaxi|Физтех-Такси]]  | Агрегатор такси со скидкой на поездки в МФТИ |
  
-**Использование проектов инновационного практикума** 
  
-Можно по согласованию с семинаристом и ментором проекта инновационного практикума. 
  
-Смтакже [[design:OldCases|задачи прошлых лет]]+===== Коллоквиум, контрольная работа и устный ответ =====
  
-===== Контрольная работа =====+Коллоквиум проводится в середине курса и служит для определения дальнейшей траектории участия в курсе. При успешной сдаче коллоквиума вознкиает возможность сдавать итоговый проект по курсу вместо контрольной работы и устного ответа
 +  - Одна задача на анализ и проектирование  
 +  - Одна из пройденных тем по курсу по билетам для ответа устно
  
-Для закрепления материала предлагается решить контрольную работу. Проводится на лекции **08.12.2021** и включает три части: +Контрольная работа при сдаче дифференцированного зачета может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания.  
-  - Тест на UML, вопросы похожи на те, что в экзамене OCUP-Fundamental. (смgoogle.com/search?q=zertifizierung.testfragen.fundamental.pdf) +  - Две задачи на анализ проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID
-  - Задача на проектирование с применением UML2, ER, DFD. +  - Две темы по курсу по билетам для ответа устно
-  - Вопросы по методам проектирования.+
  
-===== Формирование оценки по курсу =====+Примерные критерии оценивания 
 + 
 +  * Правильность и количество решенных задач 
 +  * Полнота и правильность ответа на вопросы по методам проектирования 
 +  * Ответы на дополнительные вопросы по теме 
 +  * Владение терминологией и методами проектирования 
 +  * Способность принимать и обосновывать проектировочные решения 
 +  * Способность находить и устранять ошибки в применении методов 
 +===== Оценки по курсу =====
  
 Критерии оценивания, итоговый балл Критерии оценивания, итоговый балл
  
-ИБ = 0,2 * ПЗ + 0,3 * ПР + 0,* КЗ + 0,25 * КР +ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,(ПРЭ или ЭКЗ) 
 + 
 +ЛЗ + ПЗ - посещения лекций и работа на семинаре
  
-ПЗ посещения лекций и семинаров (допускается 2 пропуска)+КЛК - оценка за коллоквиум
  
-ПР работа на семинарах (активность на занятиях)+ЭКЗ устно-письменный экзамен в конце семестра
  
-КЗ - оба задания+ПРЭ курсовой проект
  
-КР - контрольная работа 
  
  
 ===== Литература ===== ===== Литература =====
  
 +  - Martina Seidl, Marion Scholz, Christian Huemer, Gerti Kappel. UML @ Classroom 
 +  - C. Larman. Applying UML and Patterns
   - Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)   - Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)
   - Sam Newman. Building Microservices   - Sam Newman. Building Microservices
Line 117: Line 167:
   - [[pps-book|UML. Сборник задач]]   - [[pps-book|UML. Сборник задач]]
  
-===== Инструменты моделирования =====+==== Инструменты моделирования ====
  
 **Modelio Community** **Modelio Community**
Line 141: Line 191:
 При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта,  а также ограничения лицензии. Для курса понадобятся минимум эти диаграммы: классов, вариантов использования, деятельности или состояний, компонентов. При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта,  а также ограничения лицензии. Для курса понадобятся минимум эти диаграммы: классов, вариантов использования, деятельности или состояний, компонентов.
  
-===== Еще релевантные источники и дополнительные ссылки ===== +==== Еще релевантные источники и дополнительные ссылки ==== 
  
 Дополнительная литература: Дополнительная литература:
Line 195: Line 245:
 **Хританков Антон Сергеевич**, автор курса, course [at] objectoriented.ru **Хританков Антон Сергеевич**, автор курса, course [at] objectoriented.ru
  
-**Межуев Игорь Юрьевич**, ведет семинары+<html><br/><br/> 
 +</html>
  
-**Андрианов Андрей Иванович**, ведет семинары+В прошлом семинары по курсу вели
  
 +**Межуев Игорь Юрьевич**
 +
 +**Андрианов Андрей Иванович**
  
-В прошлом семинары по курсу вели 
  
 **Ахтямов Павел Ибрагимович** **Ахтямов Павел Ибрагимович**