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 [2025/09/15 11:27] (current)
user old revision restored (2025/09/02 08:59)
Line 1: Line 1:
 +====== Курс Проектирование программных систем (осень 2025) ======
 +
 +**Обновлено 31.08.2025**
 +
 +На курсе вы узнаете:
 +
 +  - как проводить анализ требований с применением гибких методов и UseCase 2.0, основы разработки технических заданий
 +  - основы языка моделирования UML2 и станете разбираться в продвинутых вопросах его применения
 +  - методы предметного-ориентированного проектирования (Domain-Driven Design, DDD) и их применение для создания микросервисных приложений (MSA) 
 +  - фундаментальные методы разработки архитектуры программных систем, структурный анализ и проектирование
 +  - паттерны и приемы разработки облачных приложений (cloud-native applications), разработки распределенных систем и согласования состояний узлов
 +
 +
 +Практика предполагает решение задач на семинарах, выполнение и защиту двух заданий по командному курсовому проекту.
 +
 +Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.
 +
 +**Содержание**
 +
 +  * [[#Примерный план|Темы и план]]
 +  * [[#Учебный проект|Учебный проект]]
 +  * [[#Коллоквиум, контрольная работа и устный ответ|Коллоквиум и диффзачет]]
 +  * [[#Оценки по курсу|Критерии оценки по курсу]]
 +  * [[#Литература|Литература и ссылки]]
 +  * [[#Контакты|Контакты]]
 +
 +===== Примерный план =====
 +
 +^ Неделя ^ Раздел ^ Тема ^
 +| 04/09 | INTRO+REQ | Введение, цели и содержание курса. Кратко о требованиях. Понятие о качестве ПО. Сценарии. Фичи. Варианты использования (динамич. представл.) |
 +| 11/09 | REQ | Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей и истории задач. Процесс разработки требований. |
 +|       | REQ | Вариативная тема: Структура и содержание технического задания по ГОСТ 19. |
 +| 18/09 | DDD+UML2 | Моделирование в ООП. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Структуры программы в UML2. Сравнение с моделями данных ER. |
 +| 25/09 | DDD | Методы объектно-ориентированного анализа. Методы именных групп и Аббота, контрольные списки. Основные понятия и приемы предметно-ориентированного проектирования (DDD). Повсеместный язык, сущности, агрегаты. Окрестности, предметные области. |
 +| 02/10 | DDD+UML2 | Моделирование сценариев в системе.  Структура в динамике. Взаимодействия, кооперации, последовательности в UML2. Проектирование на основе обязанностей (метод CRC, RDD). Согласованность моделей. | 
 +| 09/10 | UML2 | Моделирование динамики. Конечные автоматы и схемы состояний. Управление сложностью, пакеты и профили. |
 +| 16/10 | UML2 | Моделирование процессов и алгоритмов. Сети Петри и модели деятельности (activity). Язык действий в UML2. |
 +| 23/10 | UML2+PROC | Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD) |
 +| 30/10 | EXAM | **Коллоквиум. Сдача теоретического минимума по моделированию и анализу требований.** | 
 +| 06/11 | ARCH | Методы структурного проектирования, метрики связности и сходства (сцепления), постепенное уточнение. Методы структурного анализа. Введение в архитектуру ПО (определение, архитектурные стили). | 
 +| 13/11 | ARCH+UML2 | Введение в микросервисную архитектуру. Ресурсы. Решетки типов. Задача совместимости. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Нотация C4, физические DFD и UML 2. Диаграммы компонентов и размещения.  |
 +| 20/11 | MSA | Синхронизация и согласованность данных в распределенных системах. Модели вычислений и алгоритмы согласования. Паттерны SAGA и 2PC. |
 +| 27/11 | MSA | Приемы и паттерны объектно-ориентированного проектирование для облачных приложений. Паттерны API и коммуникаций. Представление на диаграмме компонентов. |
 +| 04/12 | MSA | Паттерны, принципы SOLID в реализации микросервисов. Применение паттернов проектирования. |
 +| 11/12 | MSA+DATA | Проектирование данных. Реляционная, размерностные, нереляционные модели. Применение для MSA. Основы Kubernetes, элементы KOF и разработка CRD |
 +|       | ARCH | Вариативная тема: Проектирование интеллектуальных микросервисов, поставка и сервинг моделей. |
 +|       | ARCH+MSA | Вариативная тема: Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA |
 +| 18/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|Физтех-Такси]]  | Агрегатор такси со скидкой на поездки в МФТИ |
 +
 +
 +
 +===== Коллоквиум, контрольная работа и устный ответ =====
 +
 +Коллоквиум проводится в середине курса и служит для определения дальнейшей траектории участия в курсе. При успешной сдаче коллоквиума вознкиает возможность сдавать итоговый проект по курсу вместо контрольной работы и устного ответа.
 +  - Одна задача на анализ и проектирование 
 +  - Одна из пройденных тем по курсу по билетам для ответа устно
 +
 +Контрольная работа при сдаче дифференцированного зачета может быть предложена тем студентам, кто не набрал достаточно баллов для получения оценки автоматом. В составе письменной контрольной работы на лекции будут предложены примерные задания. 
 +  - Две задачи на анализ проектирование с применением 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>
 +
 +В прошлом семинары по курсу вели
 +
 +**Межуев Игорь Юрьевич**
 +
 +**Андрианов Андрей Иванович**
 +
 +
 +**Ахтямов Павел Ибрагимович**
 +
 +**Старичков Никита Юрьевич**
 +
 +**Штукатуров Алексей Николаевич**
 +
 +**Сергей Зыков Викторович**
 +
 +**Шестаков Роман**
 +
 +**Ивахненко Андрей Александрович**
 +
 +