Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| pps-new [2020/09/02 16:40] – andrew_an | pps-new [2026/08/29 08:43] (current) – [Еще релевантные источники и дополнительные ссылки] user | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Курс Проектирование программных систем (осень | + | ====== Курс Проектирование программных систем (осень |
| - | Перейти в раздел | + | **Обновлено 17.11.2023** |
| - | Лекционный курс, состав тем: | + | На курсе вы узнаете как использовать язык моделирования UML2 в разработке распределенных приложений в микросервисной архитектуре (MSA) с применением метода предметно-ориентированного проектирования (Domain-Driven Design). |
| - | * Анализ и проверка требований в гибких и предписывающих моделях | + | А также, как анализировать |
| - | * Моделирование | + | |
| - | * Методы | + | |
| - | * Объектно-ориентированные методы и паттерны в проектировании | + | |
| - | * Микросервисная архитектура и технологии облачных | + | |
| - | * Специальные вопросы проектирования: проектирование UI, баз | + | |
| + | Практика предполагает выполнение и защиту двух заданий по командному курсовому проекту. | ||
| - | Реализация учебного проекта, дополнительно освещаемые темы: | + | Для разработчиков, системных аналитиков и будущих архитекторов |
| - | | + | **Содержание** |
| - | * Инструменты разработки | + | |
| - | | + | |
| + | * [[pps-new|Темы и план]] | ||
| + | * [[pps-new|Учебный проект]] | ||
| + | * [[pps-new|Контрольная работа]] | ||
| + | * [[pps-new|Критерии оценки по курсу]] | ||
| + | * [[pps-new|Литература и ссылки]] | ||
| + | * [[pps-new|Контакты]] | ||
| - | Спецсеминары, | + | ===== Примерный план ===== |
| - | * Спецсеминар по моделированию на UML 2 | + | ^ Неделя ^ Раздел ^ Тема ^ |
| - | * Спецсеминар по повторно-используемому дизайну и паттернам. | + | | 07/09 | INTRO+REQ | Введение в курс (качество ПО, цели курса). Кратко о требованиях. Сценарии. Фичи. Варианты использования (динамич. представл.) | |
| - | * Спецсеминар по разработке | + | | 15/09 | REQ | Потоки данных DFD. Разработка требований к продуктам. Элементы customer development. Персоны. Метод JTBD. Путешествия. Истории пользователей |
| + | | 22/09 | DDD+UML2 | Объектно-ориентированное моделирование. | ||
| + | | 29/09 | DDD | Выделение классов и построение моделей в Методы именных групп и Аббота, контрольные списки. Переход к статической модели UML. Повсеместный язык, сущности, агрегаты. Окрестности, предметные области. | | ||
| + | | 06/10 | DDD+UML2 | Моделирование | ||
| + | | 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 | Проектирование данных. Реляционная, размерностные, | ||
| + | | 14/12 | ARCH+MSA | Измерения в проектировании. Метрики сложности программ, | ||
| + | | 21/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-2 чел. по одному из направлений: | + | В таблице выше это задание |
| - | * приложения | + | |
| - | * микросервисы и облачные | + | |
| - | * приложения с открытым кодов на C++ | + | |
| - | Увеличение размера команды возможно | + | Что можно |
| - | ==== Задание 1 ==== | + | * анализ требований: use cases, job/user stories, модели |
| - | + | * DDD: анализ | |
| - | Выбрать тему, провести анализ | + | * UML2: диаграммы классов, вариантов использования, деятельности или |
| ==== Задание 2 ==== | ==== Задание 2 ==== | ||
| - | Реализовать | + | В этом задании нужно декомпозировать |
| - | ==== Задание | + | В таблице выше это задание |
| - | Провести рецензирование полученного от другой команды проекта. | + | Что можно будет освоить: |
| - | Получить рецензию на свой проект и внести доработки. | + | * DDD: декомпозиция и интеграция окрестностей (bounded context), моделирование |
| + | * MSA: OpenAPI для RESTful web services, hexagonal architecture, | ||
| + | * Data: ER диаграммы, | ||
| + | * UML2: диаграммы компонентов, расширенные диаграммы классов | ||
| + | ==== Результаты и оценивание проекта ==== | ||
| - | ==== Результаты проекта | + | Хорошо сделанный проект - это круче, чем типовое тестовое задание на архитектора программных систем, |
| - | * рабочая версия ПО в соответствии с постановкой задачи | + | Общие критерии |
| - | * репозиторий с кодом, документацией и историей выполнения согласно | + | |
| - | * результаты кросс-тестирования | + | Задания по проекту, |
| - | * выступление с докладом и защита проекта | + | |
| + | Если кратко, | ||
| + | |||
| + | * Согласованность | ||
| + | * Правильность применения методов проектирования | ||
| + | * Полнота | ||
| + | * Обоснованность и целесообразность принятых проектировочных решений | ||
| + | * Ошибки и недочеты в применении языков моделирования | ||
| + | * Вклад участников в общий результат | ||
| ==== Примеры тем проектов ==== | ==== Примеры тем проектов ==== | ||
| - | **ТОДО** Темы | + | В таблице примеры тем проектов, предлагавшихся в прошлые годы. |
| - | ===== Формирование оценки по курсу | + | ^ # ^ Название ^ Описание ^ |
| + | | 1. | [[design: | ||
| + | | 2. | [[design: | ||
| + | | 3. | [[design: | ||
| + | | 4. | [[design: | ||
| + | | 5. | [[design: | ||
| + | | 6. | [[design: | ||
| + | | 7. | [[design: | ||
| + | | 8. | [[design: | ||
| - | Итоговая оценка | + | **Использование проектов инновационного практикума** |
| - | При выставлении итоговой оценки учитываются результаты коллоквиума, выполнение заданий по проектам и участвие в спецсеминарах. | + | Можно по согласованию с семинаристом и ментором |
| - | ==== Теоретический трек ==== | + | См. также [[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. Сборник задач]] | ||
| - | - Книга по разработке ПО | + | ==== Инструменты моделирования ==== |
| - | - Книга по ОО проектированию и паттернам | + | |
| - | - По микросервисной архитектуре | + | |
| - | - По UML 2 | + | |
| - | Интернет источники | + | **Modelio Community** |
| - | | + | [[https:// |
| - | | + | |
| - | - по MDSD и Low-code | + | |
| - | - по проектированию UI | + | |
| + | IDE для моделирования, | ||
| - | ===== Контакты ====== | + | **Visual Paradigm Community Ed** |
| - | **Хританков Антон Сергеевич**, | + | [[https:// |
| + | |||
| + | Бесплатная версия коммерческого IDE для моделирования ПО с помощью UML 2, помогает с ER-диаграммами и построением моделей по тексту. Требует регистрации при старте. Много фич и диаграммы, | ||
| + | |||
| + | **Draw.io + VS Code Plugin** | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | Известный онлайн и офлайн инструмент для рисования диаграмм, | ||
| + | |||
| + | **Другие рисовалки и средства моделирования** | ||
| + | |||
| + | При выборе инструмента для моделирования обратите внимание на удобство UI, поддержку стандартов UML2 и др, функций экспорта и импорта, | ||
| + | |||
| + | ==== Еще релевантные источники и дополнительные ссылки ==== | ||
| + | |||
| + | Дополнительная литература: | ||
| + | |||
| + | - Нотация UML 2 {{design: | ||
| + | - Б. Мейер, Объектно-ориентированное конструирование программных систем. - Русская Редакция, | ||
| + | - Microsoft. Руководство Майкрософт по проектированию архитектуры приложений для Azure, [[https:// | ||
| + | |||
| + | Интернет-источники: | ||
| + | |||
| + | - [[http:// | ||
| + | |||
| + | Классические статьи методам проектирования: | ||
| + | |||
| + | - (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive? | ||
| + | - [[http:// | ||
| + | - [[http:// | ||
| + | - [[http:// | ||
| + | - [[http:// | ||
| + | - [[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 | ||
| + | - [[http:// | ||
| + | - [[http:// | ||
| + | - [[http:// | ||
| + | - [[http:// | ||
| + | - 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 | ||
| + | |||
| + | Паттерны: | ||
| + | |||
| + | - [[http:// | ||
| + | - [[http:// | ||
| + | - [[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 | ||
| + | - [[http:// | ||
| + | - [[http:// | ||
| + | - [[http:// | ||
| + | - [[http:// | ||
| + | |||
| + | ===== Контакты ===== | ||
| + | |||
| + | **Хританков Антон Сергеевич**, | ||
| + | |||
| + | В прошлом семинары по курсу вели | ||
| **Межуев Игорь Юрьевич** | **Межуев Игорь Юрьевич** | ||
| Line 122: | Line 246: | ||
| **Андрианов Андрей Иванович** | **Андрианов Андрей Иванович** | ||
| + | **Ахтямов Павел Ибрагимович** | ||
| + | |||
| + | **Старичков Никита Юрьевич** | ||
| + | |||
| + | **Штукатуров Алексей Николаевич** | ||
| + | |||
| + | **Сергей Зыков Викторович** | ||
| + | **Шестаков Роман** | ||
| + | **Ивахненко Андрей Александрович** | ||