====== Курс Проектирование программных систем (осень 2019) ====== Консультация перед экзаменом - **ТОДО** Перейти в раздел **[[mdd:start|Библиотека по методам проектирования]]** Курс читается студентам 4 курса Факультета инноваций и высоких технологий (ФИВТ) школы ФПМИ Московского Физико-Технического Института (МФТИ). Осенний семестр 2019-2020 Форум по курсу (Q&A): * [[https://piazza.com/pps-fall2013/fall2019/ppsfall2019|Зарегистрироваться на курс (Piazza)]]. Ввести код ppsfall2019 * [[https://piazza.com/pps-fall2013/fall2019/ppsfall2019/home|Ссылка на форум (Piazza)]] ===== Описание курса ===== {{pps-program-2017.pdf|Программа курса}} Целью данного курса является ознакомление студентов с основами проектирования и формирование представления о существующих методологиях проектирования программного обеспечения. В процессе обучения, студенты овладевают принципами гибкого моделирования с использованием языка UML, а также основными принципами проектирования систем, такими как абстрагирование, сокрытие информации, модульность и другими. Студенты знакомятся со структурным и объектно-ориентированным подходами к проектированию. Темы и подробный план лекций выкладывается [[lectures2016|здесь]] ===== Семестровая контрольная работа ===== Проводится на семинаре **13.12.2019** и включает три части: - Тест на UML, вопросы похожи на те, что в экзамене OCUP-Fundamental. (см. google.com/search?q=zertifizierung.testfragen.fundamental.pdf) - Задачи на проектирование с применением UML. - Вопросы по методам проектирования. Список тем 2019 года {{exam_topics-2019.doc|здесь}} ===== Учебный проект ===== **[[courseproject|Описание учебных проектов и требований к ним.]]** Адрес для отправки решений заданий: **course [at] objectoriented.ru**. ==== Примеры и методички ==== * Пример модели (задание 1 + задание 2), демонстрирующий основные диаграммы и связи между элементами модели {{pps.spring2011-theater.zip|Театральная касса (пример)}}. * Пример отчета по первому заданию с подробными пояснениями по структуре и разделам {{pps-report-analysis-20121002.doc|Театральная касса (пример отчета)}} * Методичка по выполнению проектов с пояснениями и примерами {{uml-studreport.pdf|здесь}} * Критерии оценки заданий по проектам с пояснениями и рекомендациями {{uml-verification-proc.pdf|здесь}} * Методичка по SOLID {{ood-khritankov_-_20161207-fix.pdf|здесь}} * {{bigpicture.png|The Big Picture}} ==== Перечень задач (предварительный) ==== ^ # ^ Название ^ Описание ^ | 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|задачи прошлых лет]] ===== Формирование оценки по курсу ===== ==== Проектный трек ==== **Итоговый балл** формируется следующим образом: ИБ = 0,5 * ПР + 0,75 * КЗ, где ПР – оценка по десятибалльной шкале за активность на семинарах, выполнение текущих домашних заданий и домашнее чтение, КЗ – оценка по десятибалльной шкале за курсовые задания (нужно сдать оба). ==== Практический трек ==== **Итоговый балл** рассчитывается по формуле ИБ = 0,5 * ПР + 0,75 * КР, где ПР – оценка по десятибалльной шкале за активность на семинарах, выполнение текущих домашних заданий и домашнее чтение, КР – оценка по десятибалльной шкале за семестровую контрольную работу. **Соответствие баллов итоговой оценке по курсу** ^ Итоговый балл ^ Оценка за экзамен ^ Рекомендуемая оценка ^ | От 0 до 4.0 | Менее 5 | от 0 до 3 | | | от 5 до 8 | от 2 до 5 | | | от 8 до 10 | от 4 до 6 | | От 4.1 до 6.0 | Менее 5 | от 1 до 5 | | | от 5 до 7 | от 3 до 7 | | | от 7 до 10 | от 5 до 8 | | От 6.1 до 8.0 | Без сдачи | от 3 до 4 | | | Менее 4 | от 2 до 6 | | | от 4 до 6 | от 5 до 7 | | | от 6 до 10 | от 6 до 9 | | Свыше 8.1 | Без сдачи | от 5 до 8 | | | Менее 4 | от 4 до 7 | | | от 4 до 7 | от 6 до 10 | | | от 7 до 10 | от 9 до 10 | Получение итоговой оценки по курсу на экзамене без ответа на билет возможно в случае, если оценка за контрольную работу или задания не ниже 3 баллов. Решение о выставлении оценки без ответа принимает преподаватель по обращению студента непосредственно на экзамене до получения билета. ==== Теоретический трек ==== Количество мест на треке ограничено - 20 человек. Преимущество тем, кто записался раньше (по дням) и тем, у кого разработка ПО не является профильным предметом. **Условия**. Посещение всех кроме одной лекций и обязательная сдача экзамена. Допуск к экзамену по результатам ответа на несколько коротких вопросов по курсу. Посещать семинары, выполнять практические задания нет необходимости. ^ Экзамен ^ Итоговая ^ | От 0 до 4 | удовл (3-4) | | От 4 до 8 | хор (5-7) | | От 8 до 10 | отл (8+) | ===== Инструменты моделирования ===== Для подготовки заданий допускается использовать * Modelio, взять можно на сайте [[http://www.modelio.org/|www.modelio.org]] * ТОДО по решению семинариста ===== Литература ===== Основная литература: - М. Фаулер. UML. Основы. Третье издание. (любой издатель) - Ф. А. Новиков, Д. Ю. Иванов. Моделирование на UML. Теория, практика, видеокурс - Роберт С. Мартин. Гибкая разработка программ на Java и C++: принципы, паттерны и методики. - М.:Диалектика, 2017 - Грейди Буч, Джеймс Рамбо, Айвар Джекобсон. Язык UML. Руководство пользователя 2-е Изд. - Нотация UML 2 {{uml2-notation.zip|uml2-notation.zip}} - Гамма Э., Хелм Р., Джонсон Р. Приемы объектно-ориентированного проектирования. Паттерны проектирования, любое издание. - R. Pressman. Software Engineering: A Practitioner's Approach, 6th Ed. - McGraw Hill, 2005 - С. А. Орлов. Технологии разработки программного обеспечения. Разработка сложных программных систем. Для студентов и преподавателей высших учебных заведений. – Питер, 2004. – 527 с. - Л. Басс, П. Клементс, Р. Кацман. Архитектура программного обеспечения на практике. 2-е изд. – Л.:Питер, 2006, 576 с. - C. Амблер, Гибкие Технологии: Экстремальное Программирование и Унифицированный Процесс Разработки. - Питер, 2005 - Linda M. Laird and M. Carol Brennan. Software Measurement and Estimation: A Practical Approach Дополнительная литература: - Б. Мейер, Объектно-ориентированное конструирование программных систем. - Русская Редакция, 2005 - B. Liskov, J. Guttag. Program Development in Java: Abstraction, Specification and Object-Oriented Design. - Addison-Wesley, 2000 - Microsoft. Руководство Майкрософт по проектированию архитектуры приложений, [[http://download.microsoft.com/documents/rus/msdn/ры_приложений_полная_книга.pdf|на сайте Майкрософт]] Интернет-источники: - Введение в гибкое моделирование (www.agilemodeling.com) - INTUIT.RU: Интернет-Университет Информационных Технологий: Программирование: Объектно-ориентированное программирование ([[http://www.intuit.ru/catalog/se/objectprog/|http://www.intuit.ru/catalog/se/objectprog/]]) - InformIT. Статьи по ИТ и разработке (www.informit.com) - Спецификация UML 2.5 на сайте OMG. ([[http://www.omg.org/spec/UML/2.2/|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|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|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|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|http://c2.com/doc/oopsla89/paper.html]]) - Doug Rosenberg, Kendall Scott, The ICONIX Process, ([[http://www.informit.com/articles/printerfriendly.aspx?p=167902|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|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|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|http://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf]] - *D. Greer, Interactive Application Architecture, [[http://aspiringcraftsman.com/2007/08/25/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?AntiPatternsCatalog]] - Паттерны обработки ошибок, [[http://c2.com/cgi/wiki?ExceptionPatterns|http://c2.com/cgi/wiki?ExceptionPatterns]] - 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/|http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/]] - Pattern-Oriented Software Architecture (несколько томов), [[http://www.cs.wustl.edu/~schmidt/POSA/|http://www.cs.wustl.edu/~schmidt/POSA/]] - C++ Idioms, [[http://en.wikibooks.org/wiki/More_C++_Idioms|http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms]] - Linda Rising - Patterns Almanac 2000, [[http://www.smallmemory.com/almanac/|http://www.smallmemory.com/almanac/]] ===== Преподаватели ===== Контактный адрес: course [at] objectoriented.ru **Хританков Антон Сергеевич**, автор курса, читает лекции по курсу и ведет теоретический трек **Андрианов Андрей Иванович**, ведет семинары по курсу **Межуев Игорь Юрьевич**, ведет семинары по курсу В прошлом семинары по курсу вели **Ахтямов Павел Ибрагимович** **Старичков Никита Юрьевич** **Штукатуров Алексей Николаевич** **Сергей Зыков Викторович** **Шестаков Роман** **Ивахненко Андрей Александрович**