Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| pps-new [2021/08/30 17:12] – user | pps-new [2026/08/29 08:43] (current) – [Еще релевантные источники и дополнительные ссылки] user | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Курс Проектирование программных систем (осень | + | ====== Курс Проектирование программных систем (осень |
| - | < | + | |
| - | < | + | **Обновлено 17.11.2023** |
| - | div.table-responsive { | + | |
| - | width: 80%; | + | |
| - | } | + | |
| - | </ | + | |
| - | </ | + | |
| На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design). | На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design). | ||
| Line 18: | Line 13: | ||
| **Содержание** | **Содержание** | ||
| - | * [[# | + | * [[pps-new|Темы и план]] |
| - | * [[# | + | * [[pps-new|Учебный проект]] |
| - | * [[# | + | * [[pps-new|Контрольная работа]] |
| - | * [[# | + | * [[pps-new|Критерии оценки по курсу]] |
| - | * [[# | + | * [[pps-new|Литература и ссылки]] |
| - | * [[# | + | * [[pps-new|Контакты]] |
| ===== Примерный план ===== | ===== Примерный план ===== | ||
| ^ Неделя ^ Раздел ^ Тема ^ | ^ Неделя ^ Раздел ^ Тема ^ | ||
| - | | 01/09 | INTRO+REQ | Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.) | | + | | 07/09 | INTRO+REQ | Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.) | |
| - | | 08/09 | DDD | Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER | | + | | 15/09 | REQ | Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований. | |
| - | | 15/09 | DDD | Выделение классов и построение моделей в Методы именных групп и Аббота, | + | | 22/09 | DDD+UML2 | Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER | |
| - | | 22/09 | DDD+UML2 | Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD). | | + | | 29/09 | DDD | Выделение классов и построение моделей в Методы именных групп и Аббота, |
| - | | 29/09 | UML2 | Динамическое представление модели (кооперации, | + | | 06/10 | DDD+UML2 | Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD). | |
| - | | 06/10 | UML2 | Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language | | + | | 13/10 | UML2 | Динамическое представление модели (кооперации, |
| - | | 13/10 | UML2+PROC | Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD) | | + | | 20/10 | UML2 | Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language | |
| - | | 20/10 | ARCH | Методы структурного проектирования (история, | + | | 27/10 | UML2+PROC | Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD) | |
| - | | 27/10 | ARCH+UML2 | Функциональная декомпозиция. Потоки данных DFD. UML 2. Диаграммы компонентов и размещения | | + | | 02/11 | ARCH | Методы структурного проектирования (история, |
| - | | 03/11 | MSA | Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов. | | + | | 09/11 | ARCH+UML2 | Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения | |
| - | | 10/11 | MSA | Паттерны, | + | | 16/11 | MSA | Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов. | |
| - | | 17/11 | MSA | Объектно-ориентированное проектирование. Применение паттернов проектирования. | | + | | 23/11 | MSA | Паттерны, |
| - | | 24/11 | ARCH+MSA | Измерения в проектировании. Метрики сложности программ, | + | | 30/11 | MSA | Объектно-ориентированное проектирование. Применение паттернов проектирования. | |
| - | | 01/12 | MSA+PROC | + | | 07/12 | MSA+DATA | Проектирование данных. Реляционная, |
| - | | 08/12 | EXAM | Контрольная работа | + | | 14/12 | ARCH+MSA | Измерения в проектировании. Метрики сложности программ, |
| + | | 21/12 | EXAM | Защита проектов по курсу | | ||
| ===== Учебный проект ===== | ===== Учебный проект ===== | ||
| Line 52: | Line 47: | ||
| Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, | Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, | ||
| - | ==== Задание 1 ===== | + | Примерная таблица этапов проекта и применяемых методов проектирования. |
| + | |||
| + | ^ # ^ Этап ^ Методы и результаты ^ Задачи ^ | ||
| + | | 1 | Анализ требований к продукту | Customer Development, | ||
| + | | 2 | Разработка модели анализа | Use Case model, Use case text, Candidate classes, SIAOUT checklist, Abbot' | ||
| + | | 3 | Разработка динамической модели | Responsibility-driven design, CRC, UML2 Collaborations model and implementation, | ||
| + | | 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, | ||
| + | | 6 | Проектирование данных и прототип | Polyglot persistence, | ||
| + | |||
| + | ==== Задание 1 ==== | ||
| Первое задание посвящено проработке требований применению DDD к предметной области, | Первое задание посвящено проработке требований применению DDD к предметной области, | ||
| + | |||
| + | В таблице выше это задание включает этапы 1-3. | ||
| Что можно будет освоить: | Что можно будет освоить: | ||
| + | |||
| * анализ требований: | * анализ требований: | ||
| * DDD: анализ повсеместного языка, выделение окрестностей, | * DDD: анализ повсеместного языка, выделение окрестностей, | ||
| Line 64: | Line 72: | ||
| В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, | В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, | ||
| + | |||
| + | В таблице выше это задание включает этапы 4-6. | ||
| Что можно будет освоить: | Что можно будет освоить: | ||
| + | |||
| * DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов | * DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов | ||
| * MSA: OpenAPI для RESTful web services, hexagonal architecture, | * MSA: OpenAPI для RESTful web services, hexagonal architecture, | ||
| Line 71: | Line 82: | ||
| * UML2: диаграммы компонентов, | * UML2: диаграммы компонентов, | ||
| - | + | ==== Результаты | |
| - | ==== Результаты проекта ==== | + | |
| Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, | Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, | ||
| - | Задания по проекту выполняются на семинарах, | + | Общие критерии оценивания приведены в методичке {{uml-verification-proc.pdf|Критерии оценивания проектов}} |
| - | * согласованность | + | |
| - | * правильность применения | + | Задания по проекту, по возможности, |
| - | * вклад участников | + | |
| + | Если кратко, | ||
| + | |||
| + | * Согласованность | ||
| + | * Правильность применения | ||
| + | * Полнота выполнения проекта и следование рекомендациям | ||
| + | * Обоснованность | ||
| + | * Ошибки и недочеты | ||
| + | * Вклад участников в общий результат | ||
| ==== Примеры тем проектов ==== | ==== Примеры тем проектов ==== | ||
| Line 85: | Line 103: | ||
| В таблице примеры тем проектов, | В таблице примеры тем проектов, | ||
| - | ^# | + | ^ # ^ Название ^ Описание ^ |
| - | |1.| [[design:SmartContract|СмартРитейл]] | Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна | | + | | 1. | [[design:smartcontract|СмартРитейл]] | Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна | |
| - | |2.| [[design:OkFridge|Ok, Fridge]] | + | | 2. | [[design:okfridge|Ok, Fridge]] | Холодильник доставит к дивану соки и воды под настроение, |
| - | |3.| [[design:AutoFill|ЗалейсяIS]] | + | | 3. | [[design:autofill|ЗалейсяIS]] | Управляем сетью авто-автозаправок, |
| - | |4.| [[design:DocFree|БезВрача]] | + | | 4. | [[design:docfree|БезВрача]] | Контролируем соблюдение условий медицинского страхования, |
| - | |5.| [[design:ShareCar|Перетачка]] | + | | 5. | [[design:sharecar|Перетачка]] | Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса | |
| - | |6.| [[design:QACall|Как? | + | | 6. | [[design:qacall|Как? |
| - | |7.| [[design:ShipAll|ДоставимВсе]] | Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, | + | | 7. | [[design:shipall|ДоставимВсе]] | Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, |
| - | |8.| [[design:PhystechTaxi|Физтех-Такси]] | + | | 8. | [[design:phystechtaxi|Физтех-Такси]] | Агрегатор такси со скидкой на поездки в МФТИ | |
| **Использование проектов инновационного практикума** | **Использование проектов инновационного практикума** | ||
| Line 99: | Line 117: | ||
| Можно по согласованию с семинаристом и ментором проекта инновационного практикума. | Можно по согласованию с семинаристом и ментором проекта инновационного практикума. | ||
| - | См. также [[design:OldCases|задачи прошлых лет]] | + | См. также [[design:oldcases|задачи прошлых лет]] |
| - | ===== Контрольная работа ===== | + | ===== Контрольная работа |
| - | Для закрепления материала | + | Контрольная работа может быть |
| - | - Тест на UML, вопросы похожи на те, что в экзамене | + | |
| - | | + | - Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID. |
| - | - Вопросы по методам проектирования. | + | - Вопросы по методам проектирования по билетам для |
| + | |||
| + | Примерные критерии оценивания | ||
| + | |||
| + | | ||
| + | * Полнота и правильность ответа на вопросы по методам | ||
| + | * Ответы на дополнительные вопросы по теме | ||
| + | * Владение терминологией и методами проектирования | ||
| + | * Способность принимать и обосновывать проектировочные решения | ||
| + | * Способность находить и устранять ошибки в применении методов | ||
| ===== Оценки по курсу ===== | ===== Оценки по курсу ===== | ||
| Line 112: | Line 139: | ||
| Критерии оценивания, | Критерии оценивания, | ||
| - | ИБ = 0,2 * ПЗ + 0,3 * ПР + 0,5 * КЗ + 0,25 * КР | + | ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или |
| - | + | ||
| - | ПЗ - посещения лекций и семинаров (допускается 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 | ||
| - Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns | - Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns | ||
| - Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: | - Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: | ||
| - | - UML diagrams reference, https:// | + | - UML diagrams reference, |
| - [[pps-book|UML. Сборник задач]] | - [[pps-book|UML. Сборник задач]] | ||
| Line 136: | Line 164: | ||
| **Modelio Community** | **Modelio Community** | ||
| - | https:// | + | [[https:// |
| IDE для моделирования, | IDE для моделирования, | ||
| Line 142: | Line 170: | ||
| **Visual Paradigm Community Ed** | **Visual Paradigm Community Ed** | ||
| - | https:// | + | [[https:// |
| Бесплатная версия коммерческого IDE для моделирования ПО с помощью UML 2, помогает с ER-диаграммами и построением моделей по тексту. Требует регистрации при старте. Много фич и диаграммы, | Бесплатная версия коммерческого IDE для моделирования ПО с помощью UML 2, помогает с ER-диаграммами и построением моделей по тексту. Требует регистрации при старте. Много фич и диаграммы, | ||
| Line 148: | Line 176: | ||
| **Draw.io + VS Code Plugin** | **Draw.io + VS Code Plugin** | ||
| - | https:// | + | [[https:// |
| Известный онлайн и офлайн инструмент для рисования диаграмм, | Известный онлайн и офлайн инструмент для рисования диаграмм, | ||
| Line 156: | Line 184: | ||
| При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта, | При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта, | ||
| - | ==== Еще релевантные источники и дополнительные ссылки ==== | + | ==== Еще релевантные источники и дополнительные ссылки ==== |
| Дополнительная литература: | Дополнительная литература: | ||
| - | - Нотация UML 2 {{design: | + | - Нотация UML 2 {{design:uml2-notation.zip|uml2-notation.zip}} |
| - Б. Мейер, Объектно-ориентированное конструирование программных систем. - Русская Редакция, | - Б. Мейер, Объектно-ориентированное конструирование программных систем. - Русская Редакция, | ||
| - | - Microsoft. Руководство Майкрософт по проектированию архитектуры приложений для Azure, [https:// | + | - Microsoft. Руководство Майкрософт по проектированию архитектуры приложений для Azure, |
| Интернет-источники: | Интернет-источники: | ||
| - | | + | |
| + | | ||
| Классические статьи методам проектирования: | Классические статьи методам проектирования: | ||
| - (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive? | - (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive? | ||
| - | - N. Wirth. Program Development by Stepwise Refinement. (http:// | + | - [[http:// |
| - | - D. Parnas. On the Criteria to be used in Decomposing System into Modules (http:// | + | - [[http:// |
| - | - D. Garlan, M. Shaw. An Introduction | + | - [[http:// |
| - | - Kent Beck, Ward Cunningham. A Laboratory For Teaching Object-Oriented Thinking / OOPSLA89 | + | - [[http:// |
| - | - Doug Rosenberg, Kendall Scott, The ICONIX Process, (http:// | + | - [[http:// |
| - B. Liskov. Programming with abstract data types | - B. Liskov. Programming with abstract data types | ||
| - Friedrich Steimann, Philip Mayer. Patterns of Interface-Based Programming | - Friedrich Steimann, Philip Mayer. Patterns of Interface-Based Programming | ||
| - Rebecca Wirfs-Brock, | - Rebecca Wirfs-Brock, | ||
| - Robert C. Sharblet, Samuel S. Cohen. The object-oriented brewery. A comparison of two object-oriented development methods | - Robert C. Sharblet, Samuel S. Cohen. The object-oriented brewery. A comparison of two object-oriented development methods | ||
| - | - P. Krutchen. Architectural Blueprints—The “4+1” View Model of Software Architecture, | + | - [[http:// |
| - | - IEEE Recommended practice for architectural description of software intensive systems, (http:// | + | - [[http:// |
| - | - M. Fowler. Who need an Achitect?, | + | - [[http:// |
| - | - D. Greer, Interactive Application Architecture, | + | - [[http:// |
| - Frank DeRemer, Hans Kron. PROGRAMMING-IN-THE LARGE VERSUS PROGRAMMING-IN-THE-SMALL | - Frank DeRemer, Hans Kron. PROGRAMMING-IN-THE LARGE VERSUS PROGRAMMING-IN-THE-SMALL | ||
| - The Agile Method and Other Fairy Tales (google it) | - The Agile Method and Other Fairy Tales (google it) | ||
| - A RATIONAL DESIGN PROCESS: HOW AND WHY TO FAKE IT (google it) | - A RATIONAL DESIGN PROCESS: HOW AND WHY TO FAKE IT (google it) | ||
| - | - Edward V. Berard. Be Careful With "Use Cases" | + | - Edward V. Berard. Be Careful With “Use Cases” |
| - (beware!)Chidamber Kemerer Metrics Suite. A Measurement Theory Perspective | - (beware!)Chidamber Kemerer Metrics Suite. A Measurement Theory Perspective | ||
| - McCabe. A complexity measure | - McCabe. A complexity measure | ||
| Паттерны: | Паттерны: | ||
| - | | + | |
| - | - Паттерны обработки ошибок, http:// | + | |
| - | - Microservices patterns, | + | - [[http:// |
| + | - [[https:// | ||
| - GoF. Design Patterns: elements of reusable object-oriented software | - GoF. Design Patterns: elements of reusable object-oriented software | ||
| - | - Статья на c2.com про DoubleDispatch и DoubleDispatchExample, | + | - Статья на c2.com про DoubleDispatch и DoubleDispatchExample, |
| - Jenifer Tidwell, Designing Interfaces | - Jenifer Tidwell, Designing Interfaces | ||
| - Scott Ambler, Process Patterns | - Scott Ambler, Process Patterns | ||
| Line 200: | Line 231: | ||
| - Martin Fowler, Patterns of Enterprise Application Architecture | - Martin Fowler, Patterns of Enterprise Application Architecture | ||
| - G. Hohpe, Enterprise Integration Patterns | - G. Hohpe, Enterprise Integration Patterns | ||
| - | - D. Greer, Interactive Application Architecture, | + | - [[http:// |
| - | - Pattern-Oriented Software Architecture (несколько томов), http:// | + | - [[http:// |
| - | - C++ Idioms, | + | - [[http:// |
| - | - Linda Rising - Patterns Almanac 2000, http:// | + | - [[http:// |
| - | ===== Контакты | + | ===== Контакты ===== |
| **Хританков Антон Сергеевич**, | **Хританков Антон Сергеевич**, | ||
| - | **Межуев Игорь Юрьевич**, | + | В прошлом семинары |
| - | **Андрианов Андрей Иванович**, ведет семинары | + | **Межуев Игорь Юрьевич** |
| - | < | + | **Андрианов Андрей Иванович** |
| - | </ | + | |
| - | В прошлом семинары по курсу | + | |
| **Ахтямов Павел Ибрагимович** | **Ахтямов Павел Ибрагимович** | ||
| Line 229: | Line 257: | ||
| **Ивахненко Андрей Александрович** | **Ивахненко Андрей Александрович** | ||
| - | |||
| - | |||
| - | |||