Лекции в осеннем семестре охватывают три темы:
NB. Лекции взяты из предыдущего года, так что их номера могут не совпадать с фактическими.
1. Предмет программной инженерии
Темы для самостоятельной работы
- История разработки ПО в СССР и на Западе.
- Исследование стандарта PMBOK.
- Анализ различий между различными версиями стандарта SWEBOK.
- Исторический обзор моделей жизненного цикла ПО.
- Парадигма Rapid Application Development.
- Сравнение моделей разработки, соответствующих гибкой методологии.
Контрольные вопросы
- Место и задачи программной инженерии.
- Место ПИ среди компьютерных наук.
- История развития программной инженерии в СССР и на Западе. Эволюция подхода к разработке компьютерных программ.
- Дисциплины программной инженерии.
- ПИ как наука. Связь программной инженерии с дисциплинами дискретной математики.
- Роль стандартов и повторного использования в разработке программного обеспечения.
- Сущность дисциплины управления ПИ.
- Основные области знаний в программной инженерии в соответствии со стандартом SWEBOK.
- Связь основных областей знаний SWEBOK с процессами разработки ПО.
- Составляющие проектирования ПО в соответствии со стандартом SWEBOK.
- Основные понятия тестирования ПО в соответствии со стандартом SWEBOK.
- Вспомогательные области знаний программной инженерии в стандарте SWEBOK.
- Связь вспомогательных областей знаний SWEBOK с процессами управления программным проектом.
- Основные понятия конфигурации ПО в соответствии со стандартом SWEBOK.
- Составляющие управления процессами в стандарте SWEBOK.
- Стандарт жизненного цикла ISO 12207.
- Категории процессов жизненного цикла.
- Определение и цели моделей жизненного цикла ПО.
- Каскадная модель жизненного цикла, ее преимущества и недостатки и области применения.
- Эволюционная модель жизненного цикла, ее преимущества и недостатки и области применения.
- Инкрементная модель жизненного цикла, ее преимущества и недостатки и области применения.
- Основные положения гибкого подхода к разработке ПО.
- Методы гибкой методологии разработки: непрерывная интеграция, парное программирование, разработка через тестирование.
- Виды гибкой методологии.
- Экстремальное программирование.
Литература
- Лаврищева Е.М. Методы программирования. Теория, инженерия, практика. — К.: Наукова думка. — 2006. — 451 с.
- Лаврищева Е.М., Петрухин В.А. Методы и средства программного обеспечения. — М:. Мин. образования РФ. — 2007. — 415 с.
- Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
- Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
- A Guide to the Project Management Body of Knowledge (PMBOK Guide), 5th ed. – Project Management Institute. — 2013. — 589 p.
- Guide to the Software Engineering Body of Knowledge, Version 3.0. / ed. by P. Bourque and R.E. Fairley. — IEEE Computer Society. — 2014.
- McConnell S. Rapid Development: Taming Wild Software Schedules. — Microsoft Press Books. — 1996. — 647 p.
- Kerr J.M., Hunter R. Inside RAD: How to Build a Fully Functional System in 90 Days or Less. — McGraw-Hill. — 1994. — 213 p.
- Shore J., Warden S. The art of agile development. — Sebastopol, California: O’Reilly Media. — 2008. — 409 p.
- Beck K., Andres C. Extreme programming explained. — Boston, Massachusetts: Addison-Wesley. — 2004. — 180 p.
- Martin R.C. Agile Software Development: Principles, Patterns, and Practices. — Pearson Education. — 2003. — 529 p.
- Software Engineering Body of Knowledge, Version 3.0.
- Selecting a development approach.
2. Проектирование программного обеспечения
№ | Название | Ссылка |
---|---|---|
7 | Инженерия требований | |
8 | Моделирование программных систем | |
9 | Архитектура ПО | |
10 | Объектно-ориентированное проектирование. Шаблоны проектирования |
Темы для самостоятельной работы
- Способы представления требований к программным системам.
- Прикладные инструменты системного моделирования.
- Прикладные инструменты создания MV* архитектур.
- MV* архитектуры в веб-приложениях. MVC-фреймворки в языках программирования PHP, Python, Ruby. Фреймворк AngularJS.
- Встроенные и пользовательские реализации шаблонов проектирования в различных средах программирования.
Контрольные вопросы
- Роль инженерии требований в разработке ПО.
- Классификация требований к ПО. Пользовательские и системные требования.
- Функциональные и нефункциональные требования.
- Способы представления требований к ПО. Спецификация требований.
- Процесс инженерии требований.
- Инженерия требований в гибкой методологии разработки.
- Определение и цель моделирования программных систем.
- Представление программных систем в абстрактной форме. Язык моделирования UML.
- Контекстные диаграммы UML. Диаграммы деятельности.
- Модели взаимодействия UML. Диаграммы вариантов использования. Диаграммы последовательностей.
- Диаграммы классов UML. Отношения в диаграммах классов.
- Поведенческие модели UML. Диаграммы состояний.
- Роль архитектуры в разработке ПО.
- Связь между архитектурой и требованиями к ПО.
- Модель представлений архитектуры 4+1.
- Архитектура «модель — отображение — контроллер».
- Роль архитектур MV* в разработке веб-приложений и приложений с графическим интерфейсом.
- Многослойная архитектура программного обеспечения.
- Клиент-серверная архитектура.
- Конвейерная архитектура. Потоки *NIX как пример использования конвейерной архитектуры.
- Сущность объектно-ориентированного проектирования. Роль ООП в разработке современного программного обеспечения.
- Основные концепции ООП.
- Процесс проектирования в соответствии с ООП.
- Базовые составляющие шаблонов проектирования. Классификация шаблонов.
- Порождающие шаблоны проектирования. Шаблоны Singleton, Builder, Factory.
- Структурные шаблоны проектирования. Шаблоны Bridge, Decorator.
- Поведенческие шаблоны проектирования. Шаблоны Interator, Observer.
Литература
- Лаврищева Е.М., Петрухин В.А. Методы и средства программного обеспечения. — М:. Мин. образования РФ. — 2007. — 415 с.
- Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
- Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
- Wiegers K., Beatty J. Software requirements. — Upper Saddle River, New Jersey: Pearson Education. — 2013. — 672 p.
- Fowler M. UML distilled. — Boston, Massachusetts: Addison-Wesley Professional. — 2007. — 175 p.
- Object-oriented analysis and design with applications / Booch G., Maksimchuck R.A., Engle M.W. et al. — Upper Saddle River, New Jersey: Pearson Education. — 2007. — 720 p.
- Gamma E., Helm R., Johnson R., Vlissides J. Design patterns. — Upper Saddle River, New Jersey: Pearson Education. — 1994. — 395 p.
- Hohpe G., Woolf B. Enterprise Integration Patterns. — Boston, Massachusetts: Addison-Wesley. — 2012. — 735 p.
- Fowler M. Patterns of enterprise application architecture. — Boston, Massachusetts: Addison-Wesley. — 2012. — 557 p.
- Meyer B. Object-oriented software construction. — Upper Saddle River, New Jersey: Prentice Hall. — 1997. — 1254 p.
- Jacobson I. Object-oriented software engineering: a use case driven approach. — Upper Saddle River, New Jersey: Pearson Education. — 1992. — 552 p.
- Papyrus for Eclipse
- Laravel
- Symfony
- Django
- Ruby on Rails
- AngularJS
3. Прикладная разработка программного обеспечения
Темы для самостоятельной работы
- Функциональное программирование. Языки Haskell, Lisp.
- Логическое программирование. Язык программирования Prolog.
- История развития парадигмы императивного программирования. Модульное программирование.
- Среда аспектного программирования AspectJ.
- Парадигма агентного программирования.
- Прикладные инструменты создания лексических / синтаксических анализаторов.
- Средства рефлексии в языках программирования.
- Освоение инструментов модульного тестирования в современных средах разработки.
- Прикладные инструменты доказательства корректности программ.
- Инструменты рефакторинга программ в современных средах разработки.
Контрольные вопросы
- Определение парадигмы программирования. Место парадигмы в разработке ПО.
- Классификация парадигм программирования.
- Историческое развитие парадигм программирования.
- Особенности декларативного программирования. Выполнение декларативных программ.
- Функциональное программирование. Чистые функции.
- Замыкания и функции высоких порядков как базовые компоненты функционального программирования.
- Шаблоны функционального программирования. Трансформация функций, шаблон MapReduce.
- Основные особенности логического программирования. Процедурная интерпретация.
- Элементы функционального программирования в современных ЯП (Python, JavaScript).
- Императивное программирование. Выполнение императивных программ.
- Структурное программирование, его базовые элементы.
- Модульное программирование как развитие структурного.
- Основные концепции объектно-ориентированного программирования. Полиморфизм, наследование и инкапсуляция.
- Особенности ООП на основе классов и прототипов.
- Компоненты повторного использования. Отличия компонентов от объектов.
- Особенности парадигмы компонентно-ориентированного программирования. Разработка компонентов и разработка с компонентами.
- Базовые понятия аспектно-ориентированного программирования.
- Сервис-ориентированная архитектура в рамках Web 2.0.
- Основы разработки и использования веб-сервисов.
- Цель и средства языков программирования.
- Синтаксис языков программирования. БНФ как средство кодирования синтаксиса.
- Виды семантики языков программирования. Отличия между синтаксисом и семантикой ЯП.
- Система типов как часть семантики ЯП. Обзор систем типов современных ЯП.
- Определение и цели метапрограммирования. Виды метапрограммирования.
- Рефлексия в ЯП.
- Предметно-специфические ЯП (DSL). Место DSL в разработке ПО.
- Основные понятия тестирования ПО.
- Виды тестирования. Тестирования по принципу белого, серого и черного ящика.
- Место тестирования в разных моделях жизненного цикла ПО.
- Уровни тестирования. Модульное, интеграционное и системное тестирование. Автоматизация тестирования.
- Разработка через тестирование (TDD). TDD как часть гибкой методологии.
- Тестирование после разработки.
- Процессы верификации и валидации ПО.
- Обзоры и инспекции кода. Области инспекции.
- Автоматизация статического анализа кода. Инструменты типа lint.
- Обзор формальных методов верификации программ; область их применения.
- Логика Хоара.
- Формальная проверка моделей. Символьное выполнение и абстрактная интерпретация программ.
- Связь между разработкой и эволюцией ПО. Внесение изменений в ПО.
- Особенности эволюции ПО в гибкой методологии разработки.
- Законы динамики эволюции ПО.
- Сопровождение ПО как частный случай эволюции. Типы сопровождения.
- Реинженерия программного обеспечения; цель и процессы реинженерии.
- Рефакторинг программного кода. Отличия между реинженерией и рефакторингом.
Литература
- Лаврищева Е.М., Петрухин В.А. Методы и средства программного обеспечения. — М:. Мин. образования РФ. — 2007. — 415 с.
- Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
- Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
- Abelson H., Sussman G.J., Sussman J. Structure and interpretation of computer programs. — Cambridge, Massachusetts: MIT Press. — 1996. — 684 p.
- Object-oriented analysis and design with applications / Booch G., Maksimchuck R.A., Engle M.W. et al. — Upper Saddle River, New Jersey: Pearson Education. — 2007. — 720 p.
- Hansen M.R., Rischel H. Functional programming using F#. — Cambridge: Cambridge University Press. — 2013. — 361 p.
- Clocksin W., Mellish C.S. Programming in Prolog, 5th ed. — Springer. — 2003. — 299 p.
- Dahl O.-J., Dijkstra E.W., Hoare C. Structured programming. — Academic Press. — 1972. — 220 p.
- Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ / Пер. с англ. под ред. А. Шеня. — М.: МЦНМО, 2002. — 960 с.
- Ахо А.В., Хопкрофт Дж., Ульман Дж.Д. Структуры данных и алгоритмы. — Изд. дом «Вильямс». — 2000. — 384 с.
- Heineman G.T., Councill W.T. Component-based software engineering. — Boston, Massachusetts: Addison-Wesley. — 2001. — 818 p.
- Szyperski C. Component software: beyond object-oriented programming. — Upper Saddle River, New Jersey: Pearson Education. — 2002. — 589 p.
- Jacobson I., Ng P.-W. Aspect-oriented software development with use cases. — Boston, Massachusetts: Addison-Wesley. — 2005. — 418 p.
- Myers G.J., Sandler C., Badgett T. The art of software testing. — Hoboken, New Jersey: John Wiley & Sons. — 2011. — 256 p.
- Fowler M., Beck K., Brant J., Opdyke W., Roberts D. Refactoring: improving the design of existing code. — Boston, Massachusetts: Addison-Wesley. — 2012. — 455 p.
- Fowler M. Domain-specific languages. — Upper Saddle River, New Jersey: Pearson Education. — 2010. — 640 p.
- AspectJ project
- Java Pathfinder
- Java ANTLR
- jUnit