Differences

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

Link to this comparison view

Next revision
Previous revision
pps-new [2020/08/30 08:28]
user created
pps-new [2024/10/20 13:55] (current)
user
Line 1: Line 1:
 +====== Курс Проектирование программных систем (осень 2023) ======
 +
 +**Обновлено 17.11.2023**
 +
 +На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design). 
 +
 +А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.
 +
 +Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.
 +
 +Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.
 +
 +**Содержание**
 +
 +  * [[#Примерный план|Темы и план]]
 +  * [[#Учебный проект|Учебный проект]]
 +  * [[#Контрольная работа|Контрольная работа]]
 +  * [[#Оценки по курсу|Критерии оценки по курсу]]
 +  * [[#Литература|Литература и ссылки]]
 +  * [[#Контакты|Контакты]]
 +
 +===== Примерный план =====
 +
 +^ Неделя ^ Раздел ^ Тема ^
 +| 07/09 | INTRO+REQ | Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.) |
 +| 15/09 | REQ | Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований. |
 +| 22/09 | DDD+UML2 | Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER |
 +| 29/09 | DDD | Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области. |
 +| 06/10 | DDD+UML2 | Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD). | 
 +| 13/10 | UML2 | Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты) |
 +| 20/10 | UML2 | Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language |
 +| 27/10 | UML2+PROC | Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD) |
 +| 02/11 | ARCH | Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили). | 
 +| 09/11 | ARCH+UML2 | Функциональная декомпозиция. UML 2. Диаграммы компонентов и размещения |
 +| 16/11 | MSA | Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов. |
 +| 23/11 | MSA | Паттерны, принципы SOLID в реализации микросервисов. Фреймворки. |
 +| 30/11 | MSA | Объектно-ориентированное проектирование. Применение паттернов проектирования. |
 +| 07/12 | MSA+DATA | Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA |
 +| 14/12 | ARCH+MSA | Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA |
 +| 21/12 | EXAM | Защита проектов по курсу |
 +
 +
 +===== Учебный проект =====
 +
 +Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. 
 +По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.
 +
 +Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.
 +
 +Примерная таблица этапов проекта и применяемых методов проектирования.
 +
 +^#^Этап^Методы и результаты^Задачи^
 +| 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 =====
 +
 +Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.
 +
 +В таблице выше это задание включает этапы 1-3.
 +
 +Что можно будет освоить:
 +  * анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем
 +  * DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.
 +  * UML2: диаграммы классов, вариантов использования, деятельности или последовательности.
 +
 +==== Задание 2 ====
 +
 +В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.
 +
 +В таблице выше это задание включает этапы 4-6.
 +
 +Что можно будет освоить:
 +  * DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов
 +  * MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.
 +  * Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении
 +  * UML2: диаграммы компонентов, расширенные диаграммы классов
 +
 +
 +==== Результаты и оценивание проекта ====
 +
 +Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.
 +
 +Общие критерии оценивания приведены в методичке {{uml-verification-proc.pdf|Критерии оценивания проектов}}
 +
 +Задания по проекту, по возможности, выполняются на семинарах, защита проходит в виде доклада, материалы по проекту высылаются на проверку не позднее, чем за 1 неделю до даты доклада. 
 +
 +Если кратко, то оцениваются следующие харатеристики выполненного проекта
 +  * Согласованность разных представлений в составе проекта между собой
 +  * Правильность применения методов проектирования
 +  * Полнота выполнения проекта и следование рекомендациям
 +  * Обоснованность и целесообразность принятых проектировочных решений
 +  * Ошибки и недочеты в применении языков моделирования
 +  * Вклад участников в общий результат
 +
 +==== Примеры тем проектов ====
 +
 +В таблице примеры тем проектов, предлагавшихся в прошлые годы. 
 +
 +^#^Название^Описание^
 +|1.| [[design:SmartContract|СмартРитейл]] | Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна |
 +|2.| [[design:OkFridge|Ok, Fridge]]  | Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине |
 +|3.| [[design:AutoFill|ЗалейсяIS]]  | Управляем сетью авто-автозаправок, работающих без персонала |
 +|4.| [[design:DocFree|БезВрача]]  | Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ |
 +|5.| [[design:ShareCar|Перетачка]]  | Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса |
 +|6.| [[design:QACall|Как?Никак!]]  | Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ |
 +|7.| [[design:ShipAll|ДоставимВсе]] | Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании |
 +|8.| [[design:PhystechTaxi|Физтех-Такси]]  | Агрегатор такси со скидкой на поездки в МФТИ |
 +
 +**Использование проектов инновационного практикума**
 +
 +Можно по согласованию с семинаристом и ментором проекта инновационного практикума.
 +
 +См. также [[design:OldCases|задачи прошлых лет]]
 +
 +===== Контрольная работа и устный ответ =====
 +
 +Контрольная работа может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания. 
 +  - Задача на проектирование с применением UML2, ER, DFD, MSA, GoF, SOLID.
 +  - Вопросы по методам проектирования по билетам для ответа устно
 +
 +Примерные критерии оценивания
 +
 +  * Правильность и количество решенных задач
 +  * Полнота и правильность ответа на вопросы по методам проектирования
 +  * Ответы на дополнительные вопросы по теме
 +  * Владение терминологией и методами проектирования
 +  * Способность принимать и обосновывать проектировочные решения
 +  * Способность находить и устранять ошибки в применении методов
 +
 +===== Оценки по курсу =====
 +
 +Критерии оценивания, итоговый балл
 +
 +ИБ = 0,2 * (ПЗ или ЛЗ)+ 0,3 * КЛК + 0,7 * (ПРЭ или ЭКЗ)
 +
 +ЛЗ + ПЗ - посещения лекций и работа на семинаре
 +
 +КЛК - оценка за коллоквиум
 +
 +ЭКЗ - устно-письменный экзамен в конце семестра
 +
 +ПРЭ - курсовой проект
 +
 +
 +
 +===== Литература =====
 +
 +  - Martina Seidl, Marion Scholz, Christian Huemer, Gerti Kappel. UML @ Classroom 
 +  - C. Larman. Applying UML and Patterns
 +  - Vaughn Vernon. Implementing Domain-Driven Design, (любое издание)
 +  - Sam Newman. Building Microservices
 +  - Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns
 +  - Ian Sommerville. Software Engineering 10th Ed или Roger Pressman. Software Engineering: A Practitioner's Approach 8th Ed.
 +  - UML diagrams reference, https://www.uml-diagrams.org
 +  - [[pps-book|UML. Сборник задач]]
 +
 +==== Инструменты моделирования ====
 +
 +**Modelio Community**
 +
 +https://www.modelio.org/downloads/download-modelio.html
 +
 +IDE для моделирования, с открытым исходным кодом, понимает UML2 и SysML в редакции Community Edition. Неплохой UI, в целом прост в использовании. Тем не менее, не полностью поддерживает все тонкости UML 2.4.1 или UML 2.5. Подходит для небольших и учебных проектов
 +
 +**Visual Paradigm Community Ed**
 +
 +https://www.visual-paradigm.com/download/community.jsp
 +
 +Бесплатная версия коммерческого IDE для моделирования ПО с помощью UML 2, помогает с ER-диаграммами и построением моделей по тексту. Требует регистрации при старте. Много фич и диаграммы, которые не спрятать и они требуют платной версии. Получается перегруженный интерфейс, сложнее в использовании.
 +
 +**Draw.io + VS Code Plugin**
 +
 +https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio
 +
 +Известный онлайн и офлайн инструмент для рисования диаграмм, поможет с UML2, ER диаграммами и пр. Дополнения помогут проверить согласованность моделей, но проверки и рефакторинги явно хуже чем у инструментов выше. Хорошо подходит для гибкого моделирования в правильных руках.
 +
 +**Другие рисовалки и средства моделирования**
 +
 +При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта,  а также ограничения лицензии. Для курса понадобятся минимум эти диаграммы: классов, вариантов использования, деятельности или состояний, компонентов.
 +
 +==== Еще релевантные источники и дополнительные ссылки ==== 
 +
 +Дополнительная литература:
 +
 +  - Нотация UML 2 {{design:uml2-notation.zip}}
 +  - Б. Мейер, Объектно-ориентированное конструирование программных систем. - Русская Редакция, 2005
 +  - Microsoft. Руководство Майкрософт по проектированию архитектуры приложений для Azure, [https://docs.microsoft.com/en-us/azure/architecture/guide/| на сайте Майкрософт]]
 +Интернет-источники:
 +  - Спецификация UML 2.5 на сайте OMG. (http://www.omg.org/spec/UML/2.2/)
 +
 +Классические статьи методам проектирования:
 +
 +  - (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive?
 +  - N. Wirth. Program Development by Stepwise Refinement. (http://www.inf.ethz.ch/personal/wirth/Articles/StepwiseRefinement.pdf)
 +  - D. Parnas. On the Criteria to be used in Decomposing System into Modules (http://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf)
 +  - D. Garlan, M. Shaw. An Introduction to Software Architecture (http://www.cs.cmu.edu/afs/cs/project/vit/ftp/pdf/intro_softarch.pdf)
 +  - Kent Beck, Ward Cunningham. A Laboratory For Teaching Object-Oriented Thinking / OOPSLA89 (http://c2.com/doc/oopsla89/paper.html)
 +  - Doug Rosenberg, Kendall Scott, The ICONIX Process, (http://www.informit.com/articles/printerfriendly.aspx?p=167902)
 +  - B. Liskov. Programming with abstract data types
 +  - Friedrich Steimann, Philip Mayer. Patterns of Interface-Based Programming
 +  - Rebecca Wirfs-Brock, Object-oriented design. A responsibility-driven approach
 +  - 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://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf)
 +  - IEEE Recommended practice for architectural description of software intensive systems, (http://www.win.tue.nl/~wsinmak/Education/2II45/software-architecture-std1471-2000.pdf)
 +  - M. Fowler. Who need an Achitect?, http://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
 +  - D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/
 +  - Frank DeRemer, Hans Kron. PROGRAMMING-IN-THE LARGE VERSUS PROGRAMMING-IN-THE-SMALL  (google it)
 +  - The Agile Method and Other Fairy Tales (google it)
 +  - A RATIONAL DESIGN PROCESS: HOW AND WHY TO FAKE IT (google it)
 +  - Edward V. Berard. Be Careful With "Use Cases"
 +  - (beware!)Chidamber Kemerer Metrics Suite. A Measurement Theory Perspective
 +  - McCabe. A complexity measure
 +
 +Паттерны:
 +  - Antipatterns Wiki, http://c2.com/cgi/wiki?AntiPatternsCatalog
 +  - Паттерны обработки ошибок, http://c2.com/cgi/wiki?ExceptionPatterns
 +  - Microservices patterns, https://microservices.io
 +  - GoF. Design Patterns: elements of reusable object-oriented software
 +  - Статья на c2.com про DoubleDispatch и DoubleDispatchExample, 
 +  - Jenifer Tidwell, Designing Interfaces
 +  - Scott Ambler, Process Patterns
 +  - Martin Fowler, Analysis Patterns
 +  - Martin Fowler, Patterns of Enterprise Application Architecture
 +  - G. Hohpe, Enterprise Integration Patterns
 +  - D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/
 +  - Pattern-Oriented Software Architecture (несколько томов), http://www.cs.wustl.edu/~schmidt/POSA/
 +  - C++ Idioms, http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms
 +  - Linda Rising - Patterns Almanac 2000, http://www.smallmemory.com/almanac/
 +
 +
 +===== Контакты ======
 +
 +**Хританков Антон Сергеевич**, автор курса, course [at] objectoriented.ru
 +
 +<html><br/><br/>
 +</html>
 +
 +В прошлом семинары по курсу вели
 +
 +**Межуев Игорь Юрьевич**
 +
 +**Андрианов Андрей Иванович**
 +
 +
 +**Ахтямов Павел Ибрагимович**
 +
 +**Старичков Никита Юрьевич**
 +
 +**Штукатуров Алексей Николаевич**
 +
 +**Сергей Зыков Викторович**
 +
 +**Шестаков Роман**
 +
 +**Ивахненко Андрей Александрович**
 +
 +