Differences
This shows you the differences between two versions of the page.
| 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 | Методы объектно-ориентированного анализа. Методы именных групп и Аббота, | ||
| + | | 02/10 | DDD+UML2 | Моделирование сценариев в системе. | ||
| + | | 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 | Паттерны, | ||
| + | | 11/12 | MSA+DATA | Проектирование данных. Реляционная, | ||
| + | | | ARCH | Вариативная тема: Проектирование интеллектуальных микросервисов, | ||
| + | | | ARCH+MSA | Вариативная тема: Измерения в проектировании. Метрики сложности программ, | ||
| + | | 18/12 | EXAM | **Дифференцированный зачет, контрольная и защита проектов по курсу** | | ||
| + | |||
| + | |||
| + | ===== Учебный проект ===== | ||
| + | |||
| + | Учебный проект - это ваш полигон, | ||
| + | По проекту будет два задания, | ||
| + | |||
| + | Выполнение учебного проекта по интересной теме позволит упорядочить знания и умения в проектировании и разработке ПО, жизненно необходимые для старших разработчиков, | ||
| + | |||
| + | Примерная таблица этапов проекта и применяемых методов проектирования. | ||
| + | |||
| + | ^# | ||
| + | | 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 к предметной области, | ||
| + | |||
| + | В таблице выше это задание включает этапы 1-3. | ||
| + | |||
| + | Что можно будет освоить: | ||
| + | * анализ требований: | ||
| + | * DDD: анализ повсеместного языка, выделение окрестностей, | ||
| + | * UML2: диаграммы классов, | ||
| + | |||
| + | ==== Задание 2 ==== | ||
| + | |||
| + | В этом задании нужно декомпозировать систему на сервисы и продумать для них API, переложить на микросервисную архитектуру (MSA), применив архитектурные паттерны для API, работы с реляционными и нереляционными данными, | ||
| + | |||
| + | В таблице выше это задание включает этапы 4-6. | ||
| + | |||
| + | Что можно будет освоить: | ||
| + | * DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование сервисов и ресурсов | ||
| + | * MSA: OpenAPI для RESTful web services, hexagonal architecture, | ||
| + | * Data: ER диаграммы, | ||
| + | * UML2: диаграммы компонентов, | ||
| + | |||
| + | |||
| + | ==== Результаты и оценивание проекта ==== | ||
| + | |||
| + | Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, | ||
| + | |||
| + | Общие критерии оценивания приведены в методичке {{uml-verification-proc.pdf|Критерии оценивания проектов}} | ||
| + | |||
| + | Задания по проекту, | ||
| + | |||
| + | Если кратко, | ||
| + | * Согласованность разных представлений в составе проекта между собой | ||
| + | * Правильность применения методов проектирования | ||
| + | * Полнота выполнения проекта и следование рекомендациям | ||
| + | * Обоснованность и целесообразность принятых проектировочных решений | ||
| + | * Ошибки и недочеты в применении языков моделирования | ||
| + | * Вклад участников в общий результат | ||
| + | |||
| + | ==== Примеры тем проектов ==== | ||
| + | |||
| + | В таблице примеры тем проектов, | ||
| + | |||
| + | ^# | ||
| + | |1.| [[design: | ||
| + | |2.| [[design: | ||
| + | |3.| [[design: | ||
| + | |4.| [[design: | ||
| + | |5.| [[design: | ||
| + | |6.| [[design: | ||
| + | |7.| [[design: | ||
| + | |8.| [[design: | ||
| + | |||
| + | |||
| + | |||
| + | ===== Коллоквиум, | ||
| + | |||
| + | Коллоквиум проводится в середине курса и служит для определения дальнейшей траектории участия в курсе. При успешной сдаче коллоквиума вознкиает возможность сдавать итоговый проект по курсу вместо контрольной работы и устного ответа. | ||
| + | - Одна задача на анализ и проектирование | ||
| + | - Одна из пройденных тем по курсу по билетам для ответа устно | ||
| + | |||
| + | Контрольная работа при сдаче дифференцированного зачета может быть предложена тем студентам, | ||
| + | - Две задачи на анализ проектирование с применением 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: | ||
| + | - UML diagrams reference, https:// | ||
| + | - [[pps-book|UML. Сборник задач]] | ||
| + | |||
| + | ==== Инструменты моделирования ==== | ||
| + | |||
| + | **Modelio Community** | ||
| + | |||
| + | https:// | ||
| + | |||
| + | IDE для моделирования, | ||
| + | |||
| + | **Visual Paradigm Community Ed** | ||
| + | |||
| + | https:// | ||
| + | |||
| + | Бесплатная версия коммерческого IDE для моделирования ПО с помощью UML 2, помогает с ER-диаграммами и построением моделей по тексту. Требует регистрации при старте. Много фич и диаграммы, | ||
| + | |||
| + | **Draw.io + VS Code Plugin** | ||
| + | |||
| + | https:// | ||
| + | |||
| + | Известный онлайн и офлайн инструмент для рисования диаграмм, | ||
| + | |||
| + | **Другие рисовалки и средства моделирования** | ||
| + | |||
| + | При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта, | ||
| + | |||
| + | ==== Еще релевантные источники и дополнительные ссылки ==== | ||
| + | |||
| + | Дополнительная литература: | ||
| + | |||
| + | - Нотация UML 2 {{design: | ||
| + | - Б. Мейер, Объектно-ориентированное конструирование программных систем. - Русская Редакция, | ||
| + | - Microsoft. Руководство Майкрософт по проектированию архитектуры приложений для Azure, [https:// | ||
| + | Интернет-источники: | ||
| + | - Спецификация UML 2.5 на сайте OMG. (http:// | ||
| + | |||
| + | Классические статьи методам проектирования: | ||
| + | |||
| + | - (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive? | ||
| + | - N. Wirth. Program Development by Stepwise Refinement. (http:// | ||
| + | - D. Parnas. On the Criteria to be used in Decomposing System into Modules (http:// | ||
| + | - D. Garlan, M. Shaw. An Introduction to Software Architecture (http:// | ||
| + | - Kent Beck, Ward Cunningham. A Laboratory For Teaching Object-Oriented Thinking / OOPSLA89 (http:// | ||
| + | - Doug Rosenberg, Kendall Scott, The ICONIX Process, (http:// | ||
| + | - B. Liskov. Programming with abstract data types | ||
| + | - Friedrich Steimann, Philip Mayer. Patterns of Interface-Based Programming | ||
| + | - Rebecca Wirfs-Brock, | ||
| + | - 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, | ||
| + | - IEEE Recommended practice for architectural description of software intensive systems, (http:// | ||
| + | - M. Fowler. Who need an Achitect?, http:// | ||
| + | - D. Greer, Interactive Application Architecture, | ||
| + | - Frank DeRemer, Hans Kron. PROGRAMMING-IN-THE LARGE VERSUS PROGRAMMING-IN-THE-SMALL | ||
| + | - 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:// | ||
| + | - Паттерны обработки ошибок, | ||
| + | - Microservices patterns, https:// | ||
| + | - 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, | ||
| + | - Pattern-Oriented Software Architecture (несколько томов), | ||
| + | - C++ Idioms, http:// | ||
| + | - Linda Rising - Patterns Almanac 2000, http:// | ||
| + | |||
| + | |||
| + | ===== Контакты ====== | ||
| + | |||
| + | **Хританков Антон Сергеевич**, | ||
| + | |||
| + | < | ||
| + | </ | ||
| + | |||
| + | В прошлом семинары по курсу вели | ||
| + | |||
| + | **Межуев Игорь Юрьевич** | ||
| + | |||
| + | **Андрианов Андрей Иванович** | ||
| + | |||
| + | |||
| + | **Ахтямов Павел Ибрагимович** | ||
| + | |||
| + | **Старичков Никита Юрьевич** | ||
| + | |||
| + | **Штукатуров Алексей Николаевич** | ||
| + | |||
| + | **Сергей Зыков Викторович** | ||
| + | |||
| + | **Шестаков Роман** | ||
| + | |||
| + | **Ивахненко Андрей Александрович** | ||
| + | |||
| + | |||