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 [2020/09/01 17:07]
127.0.0.1 external edit
pps-new [2023/12/08 05:00] (current)
user [Примерный план]
Line 1: Line 1:
-====== Курс Проектирование программных систем (осень 2020) ======+====== Курс Проектирование программных систем (осень 2023) ======
  
-Перейти в раздел **[[mdd:start|Библиотека по методам проектирования]]**+**Обновлено 17.11.2023**
  
-Лекционный курссостав тем:+На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design). 
  
-  * Анализ и проверка требований в гибких и предписывающих моделях разработки ПО +А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.
-  * Моделирование программного обеспечения с применением UML 2, потоков данных, структурных схем и др. +
-  * Методы структурного проектирования архитектуры ПО +
-  * Объектно-ориентированные методы и паттерны в проектировании +
-  * Микросервисная архитектура и технологии облачных приложений +
-  * Специальные вопросы проектирования: проектирование UI, баз данных, применение MDSD и Low-code подходов+
  
 +Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.
  
-Реализация учебного проекта, дополнительно освещаемые темы:+Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.
  
-  Процессы и практики реализации проектов +*одержание**
-  * Инструменты разработки и ведения работ +
-  Реализация CI/CD и элементы DevOps+
  
 +  * [[#Примерный план|Темы и план]]
 +  * [[#Учебный проект|Учебный проект]]
 +  * [[#Контрольная работа|Контрольная работа]]
 +  * [[#Оценки по курсу|Критерии оценки по курсу]]
 +  * [[#Литература|Литература и ссылки]]
 +  * [[#Контакты|Контакты]]
  
-Спецсеминары, проводимые в рамках курса+===== Примерный план =====
  
-  * Спецсеминар по моделированию на UML 2 +^ Неделя ^ Раздел ^ Тема ^ 
-  * Спецсеминар по повторно-используемому дизайну и паттернам. SOLIDGRASP +| 07/09 | INTRO+REQ | Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.) | 
-  * Спецсеминар по разработке cloud-native приложенийDocker kubernetes+| 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-2 чел. по одному из направлений: +Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.
-  * приложения класса предприятия на языке Java +
-  * микросервисы и облачные приложения на Python +
-  * приложения с открытым кодов на C+++
  
-Увеличение размера команды возможно по согласованию с преподавателем.+В таблице выше это задание включает этапы 1-3.
  
-==== Задание 1 ==== +Что можно будет освоить: 
- +  * анализ требований: use casesjob/user stories, модели потоков данных, структуры подсистем 
-Выбрать тему, провести анализ требований, определить заинтересованные стороны, договориться о кросс-проверке проекта.+  * DDD: анализ повсеместного языкавыделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д. 
 +  * UML2: диаграммы классов, вариантов использования, деятельности или последовательности.
  
 ==== Задание 2 ==== ==== Задание 2 ====
  
-Реализовать версию системы в соответствии с принятым процессом разработки. +В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.
  
-==== Задание 3 ====+В таблице выше это задание включает этапы 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 неделю до даты доклада.  
-  * выступление с докладом и защита проекта+ 
 +Если кратко, то оцениваются следующие харатеристики выполненного проекта 
 +  * Согласованность разных представлений в составе проекта между собой 
 +  * Правильность применения методов проектирования 
 +  * Полнота выполнения проекта и следование рекомендациям 
 +  * Обоснованность и целесообразность принятых проектировочных решений 
 +  * Ошибки и недочеты в применении языков моделирования 
 +  * Вклад участников в общий результат
  
 ==== Примеры тем проектов ==== ==== Примеры тем проектов ====
  
-**ТОДО** Темы будут уточнены позднее. Можно предложить свою тему. Требования: можно сделать за 2-3 недели, есть заитересованные пользователи.+В таблице примеры тем проектов, предлагавшихся в прошлые годы. 
  
-===== Формирование оценки по курсу =====+^#^Название^Описание^ 
 +|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 * (ПРЭ или ЭКЗ) 
 + 
 +ЛЗ + ПЗ - посещения лекций и работа на семинаре 
 + 
 +КЛК - оценка за коллоквиум 
 + 
 +ЭКЗ - устно-письменный экзамен в конце семестра 
 + 
 +ПРЭ - курсовой проект
  
  
Line 99: Line 151:
 ===== Литература ===== ===== Литература =====
  
-**ТОДО** +  - 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. Сборник задач]]
  
-  - Книга по разработке ПО +==== Инструменты моделирования ====
-  - Книга по ОО проектированию и паттернам +
-  - По микросервисной архитектуре +
-  - По UML 2+
  
-Интернет источники+**Modelio Community**
  
-  - разработка облачных приложений +https://www.modelio.org/downloads/download-modelio.html 
-  - расширенные вопросы применения UML + 
-  - по MDSD и Low-code +IDE для моделирования, с открытым исходным кодом, понимает UML2 и SysML в редакции Community Edition. Неплохой UI, в целом прост в использовании. Тем не менее, не полностью поддерживает все тонкости UML 2.4.1 или UML 2.5. Подходит для небольших и учебных проектов 
-  - по проектированию UI+ 
 +**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> 
 + 
 +В прошлом семинары по курсу вели
  
 **Межуев Игорь Юрьевич** **Межуев Игорь Юрьевич**
  
-**Андрианов Андрей Игоревич**+**Андрианов Андрей Иванович** 
 + 
 + 
 +**Ахтямов Павел Ибрагимович** 
 + 
 +**Старичков Никита Юрьевич** 
 + 
 +**Штукатуров Алексей Николаевич** 
 + 
 +**Сергей Зыков Викторович** 
 + 
 +**Шестаков Роман** 
 + 
 +**Ивахненко Андрей Александрович**