Курс Проектирование программных систем (осень 2022)
На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design).
А также, как анализировать и проверять требования, структурировать программы, почему интерфейс это не абстрактный класс, как разрабатывать большие системы из небольших сервисов, паттерны и приемы, используемые архитекторами и тим лидами.
Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту.
Для разработчиков, системных аналитиков и будущих архитекторов программного обеспечения.
Содержание
Примерный план
Неделя | Раздел | Тема |
---|---|---|
07/09 | INTRO+REQ | Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.) |
14/09 | DDD | Объектно-ориентированное моделирование. Системы типов. Абстрактные типы данных (ADT). Понятие о классах. Статическое представление модели UML2. Сравнение с моделями данных ER |
21/09 | DDD | Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области. |
28/09 | DDD+UML2 | Моделирование поведения. Согласованность моделей. Проектирование на основе обязанностей (метод CRC, RDD). |
05/10 | UML2 | Динамическое представление модели (кооперации, последовательности). Статическое представление модели (структурные классы, расширенные классы, пакеты) |
12/10 | UML2 | Динамическое представление модели. Схемы состояний. Представление деятельности. Action Language |
19/10 | UML2+PROC | Построение согласованных моделей. Big Picture UML2. Процесс гибкого моделирования по требованиям (на основе ICONIX+AM+DDD) |
26/10 | ARCH | Методы структурного проектирования (история, связность и сцепление, постепенное уточнение). Введение в архитектуру ПО (определение,стили). |
02/11 | ARCH+UML2 | Функциональная декомпозиция. Потоки данных DFD. UML 2. Диаграммы компонентов и размещения |
09/11 | MSA | Введение в микросервисную архитектуру. Ресурсы. Распределенные системы. Декомпозиция на окрестности и на сервисы. Гексагональная архитектура. Паттерны API и коммуникаций. Представление на диаграмме компонентов. |
16/11 | MSA | Паттерны, принципы SOLID в реализации микросервисов. Фреймворки. |
23/11 | MSA | Объектно-ориентированное проектирование. Применение паттернов проектирования. |
30/11 | ARCH+MSA | Измерения в проектировании. Метрики сложности программ, оценка качества дизайна для ООП, для MSA |
07/12 | MSA+PROC | Процесс продуктовой разработки от потребности к дизайну REQ+DDD+MSA. Повторение и подготовка к контрольной работе. |
14/12 | EXAM | Контрольная работа по курсу |
Учебный проект
Учебный проект - это ваш полигон, где вы практикуетесь в применении DDD к разработке микросервисных приложений. По проекту будет два задания, объединенные общей темой. Это может быть упрощенный аналог существующей системы, или ваш собственный проект, или часть дипломной работы.
Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, тим лидов и руководителей проектов.
Задание 1
Первое задание посвящено проработке требований применению DDD к предметной области, в которой проектируете систему. Прорабатываете и уточняете требования и рамки проекта. В итоге для дальнейшего моделирования с помощью Domain Driven Design нужны 3-4 вариантв использования или 5-6 историй пользователей.
Что можно будет освоить:
- анализ требований: use cases, job/user stories, модели потоков данных, структуры подсистем
- DDD: анализ повсеместного языка, выделение окрестностей, concept/noun phrase extraction, построение модели предметной области, анализ обязанностей и виды классов: service, entity, aggregate, value object, и т. д.
- UML2: диаграммы классов, вариантов использования, деятельности или последовательности.
Задание 2
В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, применить паттерны ООП для реализации микросервисов. В результате у вас получится модель реализации (design model) микросервисного приложения, реализующего требования из первого задания. В проекте нужно спроектировать 3-5 связанных микросервисов, совместно решающих задачи первого задания.
Что можно будет освоить:
- DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов
- MSA: OpenAPI для RESTful web services, hexagonal architecture, SOLID, GoF паттерны проектирования, Backend-for-Frontend и др.
- Data: ER диаграммы, схема при чтении, модели данных для NoSQL, в статике, в движении
- UML2: диаграммы компонентов, расширенные диаграммы классов
Результаты проекта
Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, релевантный опыт в применении методов проектирования. Понравившиеся методы можно забрать к себе на работу или вспомнить к собеседованию.
Задания по проекту выполняются на семинарах, защита проходит в виде доклада. Оценивается:
- согласованность и непротиворечивость требований и модели реализации
- правильность применения и понимание изученных методов, обоснованность решения
- вклад участников проекта в обший результат
Примеры тем проектов
В таблице примеры тем проектов, предлагавшихся в прошлые годы.
# | Название | Описание |
---|---|---|
1. | СмартРитейл | Интегрируем недоверчивых участников рынка ритейла с помощью блокчейна |
2. | Ok, Fridge | Холодильник доставит к дивану соки и воды под настроение, дозакажет в магазине |
3. | ЗалейсяIS | Управляем сетью авто-автозаправок, работающих без персонала |
4. | БезВрача | Контролируем соблюдение условий медицинского страхования, и вообще соблюдения правил ЗОЖ |
5. | Перетачка | Едем вместе на чужой машине и везем посылки. Система обеспечивает работу сервиса |
6. | Как?Никак! | Модернизированный CallЦентр, роботы отвечают на типовые вопросы и сами ведут FAQ |
7. | ДоставимВсе | Служба доставки формирует из товаров заказы и перемещает по маршрутам. Маршруты формируются вручную, автоматически как план, динамически. Учет веса и стоимости при планировании |
8. | Физтех-Такси | Агрегатор такси со скидкой на поездки в МФТИ |
Использование проектов инновационного практикума
Можно по согласованию с семинаристом и ментором проекта инновационного практикума.
См. также задачи прошлых лет
Контрольная работа
В 2022 году контрольная не проводится.
Для закрепления материала предлагается решить контрольную работу. Проводится на лекции 08.12.2021 и включает три части:
- Тест на UML, вопросы похожи на те, что в экзамене OCUP-Fundamental. (см. google.com/search?q=zertifizierung.testfragen.fundamental.pdf)
- Задача на проектирование с применением UML2, ER, DFD.
- Вопросы по методам проектирования.
Оценки по курсу
Критерии оценивания, итоговый балл
ИБ = 0,2 * ПЗ + 0,3 * ПР + 0,5 * КЗ + 0,25 * КР
ПЗ - посещения лекций и семинаров (допускается 2 пропуска)
ПР - работа на семинарах (активность на занятиях)
КЗ - оба задания
КР - контрольная работа
Литература
- 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
Инструменты моделирования
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 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
В прошлом семинары по курсу вели
Межуев Игорь Юрьевич
Андрианов Андрей Иванович
Ахтямов Павел Ибрагимович
Старичков Никита Юрьевич
Штукатуров Алексей Николаевич
Сергей Зыков Викторович
Шестаков Роман
Ивахненко Андрей Александрович