Лекции в осеннем семестре охватывают четыре темы:
- предмет программной инженерии;
- основные процессы разработки ПО;
- вспомогательные процессы разработки ПО;
- разработка современных программных систем.
Объяснение к нумерации лекций:
- Лекции взяты из предыдущего года, так что их номера могут не совпадать с фактическими.
- Лекции, пронумерованные как *, не входят в основной курс, но желательны к ознакомлению.
- Одной лекции может соответствовать несколько презентаций (обычно две). В таком случае части лекции нумеруются с использованием латинских букв, например, 3a и 3b.
1. Предмет программной инженерии
Темы для самостоятельной работы
- История разработки ПО в СССР и на Западе.
- Исторический обзор моделей жизненного цикла ПО.
- Парадигма Rapid Application Development.
- Сравнение моделей разработки, соответствующих гибкой методологии.
Контрольные вопросы
- Место и задачи программной инженерии.
- Место ПИ среди компьютерных наук.
- История развития программной инженерии в СССР и на Западе. Эволюция подхода к разработке компьютерных программ.
- Дисциплины программной инженерии.
- ПИ как наука. Связь программной инженерии с дисциплинами дискретной математики.
- Роль стандартов и повторного использования в разработке программного обеспечения.
- Сущность дисциплины управления ПИ.
- Стандарт жизненного цикла 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. Основные процессы разработки ПО
Темы для самостоятельной работы
- Способы представления требований к программным системам.
- Прикладные инструменты системного моделирования.
- Прикладные инструменты создания MV* архитектур.
- MV* архитектуры в веб-приложениях. MVC-фреймворки в языках программирования PHP, Python, Ruby. Фреймворк AngularJS.
- Встроенные и пользовательские реализации шаблонов проектирования в различных средах программирования.
- Функциональное программирование. Языки Haskell, Lisp.
- Логическое программирование. Язык программирования Prolog.
- История развития парадигмы императивного программирования. Модульное программирование.
- Среда аспектного программирования AspectJ.
- Парадигма агентного программирования.
- Прикладные инструменты создания лексических / синтаксических анализаторов.
- Средства рефлексии в языках программирования.
- Освоение инструментов модульного тестирования в современных средах разработки.
- Прикладные инструменты доказательства корректности программ.
- Инструменты рефакторинга программ в современных средах разработки.
Контрольные вопросы
- Роль инженерии требований в разработке ПО.
- Классификация требований к ПО. Пользовательские и системные требования.
- Функциональные и нефункциональные требования.
- Способы представления требований к ПО. Спецификация требований.
- Процесс инженерии требований.
- Инженерия требований в гибкой методологии разработки.
- Определение и цель моделирования программных систем.
- Представление программных систем в абстрактной форме. Язык моделирования UML.
- Контекстные диаграммы UML. Диаграммы деятельности.
- Модели взаимодействия UML. Диаграммы вариантов использования. Диаграммы последовательностей.
- Диаграммы классов UML. Отношения в диаграммах классов.
- Поведенческие модели UML. Диаграммы состояний.
- Роль архитектуры в разработке ПО.
- Связь между архитектурой и требованиями к ПО.
- Модель представлений архитектуры 4+1.
- Архитектура «модель — отображение — контроллер».
- Роль архитектур MV* в разработке веб-приложений и приложений с графическим интерфейсом.
- Многослойная архитектура программного обеспечения.
- Клиент-серверная архитектура.
- Конвейерная архитектура. Потоки *NIX как пример использования конвейерной архитектуры.
- Сущность объектно-ориентированного проектирования. Роль ООП в разработке современного программного обеспечения.
- Основные концепции ООП.
- Процесс проектирования в соответствии с ООП.
- Базовые составляющие шаблонов проектирования. Классификация шаблонов.
- Порождающие шаблоны проектирования. Шаблоны Singleton, Builder, Factory.
- Структурные шаблоны проектирования. Шаблоны Bridge, Decorator.
- Поведенческие шаблоны проектирования. Шаблоны Interator, Observer.
- Определение парадигмы программирования. Место парадигмы в разработке ПО.
- Классификация парадигм программирования.
- Историческое развитие парадигм программирования.
- Особенности декларативного программирования. Выполнение декларативных программ.
- Функциональное программирование. Чистые функции.
- Замыкания и функции высоких порядков как базовые компоненты функционального программирования.
- Шаблоны функционального программирования. Трансформация функций, шаблон MapReduce.
- Основные особенности логического программирования. Процедурная интерпретация.
- Элементы функционального программирования в современных ЯП (Python, JavaScript).
- Императивное программирование. Выполнение императивных программ.
- Структурное программирование, его базовые элементы.
- Модульное программирование как развитие структурного.
- Основные концепции объектно-ориентированного программирования. Полиморфизм, наследование и инкапсуляция.
- Особенности ООП на основе классов и прототипов.
- Компоненты повторного использования. Отличия компонентов от объектов.
- Особенности парадигмы компонентно-ориентированного программирования. Разработка компонентов и разработка с компонентами.
- Базовые понятия аспектно-ориентированного программирования.
- Сервис-ориентированная архитектура в рамках Web 2.0.
- Основы разработки и использования веб-сервисов.
- Основные понятия тестирования ПО.
- Виды тестирования. Тестирования по принципу белого, серого и черного ящика.
- Место тестирования в разных моделях жизненного цикла ПО.
- Уровни тестирования. Модульное, интеграционное и системное тестирование. Автоматизация тестирования.
- Разработка через тестирование (TDD). TDD как часть гибкой методологии.
- Тестирование после разработки.
- Процессы верификации и валидации ПО.
- Обзоры и инспекции кода. Области инспекции.
- Автоматизация статического анализа кода. Инструменты типа lint.
- Обзор формальных методов верификации программ; область их применения.
- Логика Хоара.
- Формальная проверка моделей. Символьное выполнение и абстрактная интерпретация программ.
- Связь между разработкой и эволюцией ПО. Внесение изменений в ПО.
- Особенности эволюции ПО в гибкой методологии разработки.
- Законы динамики эволюции ПО.
- Сопровождение ПО как частный случай эволюции. Типы сопровождения.
- Реинженерия программного обеспечения; цель и процессы реинженерии.
- Рефакторинг программного кода. Отличия между реинженерией и рефакторингом.
Литература
- Лаврищева Е.М., Петрухин В.А. Методы и средства программного обеспечения. — М:. Мин. образования РФ. — 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.
- 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.
- Papyrus for Eclipse
- Laravel
- Symfony
- Django
- Ruby on Rails
- AngularJS
- AspectJ project
- Java Pathfinder
- Java ANTLR
- jUnit
3. Дополнительные процессы разработки ПО
№ | Название | Ссылка |
---|---|---|
9a | Управление изменениями и версиями ПО | |
9b | Управление построением и выпусками | |
* | Документирование ПО | |
* | Инженерия качества | |
10 | Управление программным проектом |
Темы для самостоятельной работы
- Сравнение систем управления версиями ПО.
- Системы автоматического построения для современных сред разработки (Maven, Grunt, Gradle и др.).
- Системы зависимостей в современных средах разработки (Python setuptools, npm, Bower и др.).
- Системы генерации документации в языках программирования и создание плагинов для этих систем.
- Прикладные инструменты автоматизации процессов инженерии качества.
- Особенности планирования программного проекта в гибкой методологии разработки.
- Автоматизация усовершенствования процессов разработки ПО.
Контрольные вопросы
- Обзор процессов управления конфигурацией программного обеспечения.
- Идентификация элементов конфигурации.
- Процессы управления изменениями в разработке ПО. Запросы на изменение.
- Основные понятия управления версиями.
- Централизованные и распределенные системы управления версиями.
- Основы распределенного управления версиями на примере системы Git.
- Проблематика процессов построения программной системы. Виды инструментов построения.
- Основные понятия построения ПО. Цели и зависимости.
- Программа make.
- Программа Apache Ant.
- Основные принципы непрерывной интеграции.
- Жизненный цикл выпусков программного обеспечения.
- Версии ПО; их связь с системами управления версиями. Семантическая нумерация.
- Цели и проблематика управления программным проектом.
- Понятие рисков при разработке ПО. Категории и примеры рисков.
- Процессы управления рисками.
- Планирование проекта. Проектный план и другие планы в традиционной разработке ПО.
- Роль планирования в гибкой методологии разработки.
- Экспертные и алгоритмические методы оценки затрат на разработку.
Литература
- Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
- Основы инженерии качества программных систем / Андон Ф.И., Коваль Г.И., Коротун Т.М. и др. — К: Академпериодика. — 2007. — 680с.
- Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
- Tian J. Software quality engineering. — Hoboken, New Jersey: John Wiley & Sons. — 2005. — 440 p.
- Pressman R.S. Software engineering: a practitioner’s approach. — Basingstoke: Palgrave Macmillan. — 2005. — 880 p.
- Pfleeger S.L., Atlee J.M. Software engineering: theory and practice. — Upper Saddle River, New Jersey: Prentice Hall. — 2010. — 756 p.
- Duvall P.M., Matyas S., Glover A. Continuous integration: improving software quality and reducing risk. — Pearson Education. — 2007. — 336 p.
- Smart J.F. Jenkins: the definitive guide. — O’Reilly Media. — 2011. — 404 p.
- Sonatype Company. Maven: the definitive guide. — O’Reilly Media. — 2008. — 470 p.
- Chacon S. Pro Git. — Apress. — 2009. — 288 p.
- O’Sullivan B. Mercurial: the definitive guide. — O’Reilly Media. — 2009. — 284 p.
- Javadoc Tool
- Doxygen
- CMMI for development, version 1.3
- Grunt: the JavaScript task runner
- Npm
4. Разработка современных программных систем
Темы для самостоятельной работы
- Инверсия управления в современных платформах разработки.
- Интерфейсы внешних функций в средах программирования.
- Агрегационные типы данных в языках программирования.
- Функции первого класса.
- Смеси (traits, mixins) как промежуточное звено между интерфейсами и наследованием.
- Ковариантность и контравариантность типов данных в языках программирования.
- Средства межпроцессного взаимодействия в операционных системах.
- Особенности повторного использования ПО с открытым исходным кодом.
- Средства инженерии КПИ в современных средах разработки.
- Системы типа ActiveRecord и DataMapper в современных платформах разработки ПО.
- Децентрализованные сети. Internet of Things. Блокчейн.
- Платформы для разработки SOAP- и REST-сервисов.
- Асинхронный обмен данными с веб-сервисами. Веб-сокеты. Фреймворк Node.js.
- Анализ современных платформ IaaS, PaaS, SaaS.
- Знакомство с каркасами для распределенных вычислений (Hadoop, Spark).
- Базы данных NoSQL.
Контрольные вопросы
- Использование интерфейсов в программировании. Аппаратные и программные (в широком понимании) интерфейсы.
- Отличия и общие черты бинарных и программных интерфейсов (ABI и API).
- Бинарные программные интерфейсы: характеристика и области применения.
- Инверсия управления.
- Виртуализация как способ взаимодействия разноязычных программ.
- Интерфейс внешних функций.
- Взаимосвязь между интерфейсами и типами данных.
- Интерфейсы типов в парадигме ООП.
- Стандарт ISO 11404. Классификация типов данных.
- Генерируемые та агрегигрованные типы данных.
- Иерархии типов данных в языках программирования.
- Функции как тип данных.
- Безопасность типов и безопасность памяти.
- Сильная и слабая типизация.
- Статическая и динамическая типизация.
- Совместимость типов. Виды типизации по совместимости: структурная, номинальная, утиная.
- Приведения типов данных.
- Виды полиморфизма.
- Полиморфизм подтипов. Принцип подстановки Барбары Лисков.
- Полиморфизм и наследование в ООП.
- Ковариантность, контравариантность и инвариантность типов данных.
- Понятие интероперабельности. Проблемы, решаемые за счет интероперабельности.
- Межпроцессное взаимодействие в POSIX / System V.
- Общая характеристика и классификация промежуточного ПО (middleware).
- Удаленный вызов процедур (RPC) и его реализации.
- Общая структура системы CORBA.
- Язык описания интерфейсов OMG IDL.
- Очереди сообщений.
- Сервис-ориентированная архитектура, ее преимущества и недостатки.
- Понятие веб-сервисов. Разработка с веб-сервисами. Интеграция сервисов.
- SOAP-сервисы. Язык спецификации WSDL.
- Основные принципы архитектури REST.
- Особенности реализации REST-сервисов.
- Интерфейсы SOAP- та REST-сервисов в средах программирования. Синхронный и асинхронный вызов методов сервисов.
- Основные положения облачной архитектуры.
- Технологии, от которых зависит облачная архитектура.
- Уровни облачной архитектуры.
- Модели развертывания облачной архитектуры. Примеры открытых облачных сервисов.
- Обзор понятия BigData.
- Шаблон распределенной обработки данных MapReduce.
- Облачные файловые системы.
- Введение в облачные базы данных. Понятие NoSQL.
- Применение NoSQL-баз данных в облачных вычислениях.
- Каркасы облачных приложений. Apache Hadoop.
Литература
- Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
- Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
- Gamma E., Helm R., Johnson R., Vlissides J. Design patterns. — Upper Saddle River, New Jersey: Pearson Education. — 1994. — 395 p.
- Heineman G.T., Councill W.T. Component-based software engineering. — Boston, Massachusetts: Addison-Wesley. — 2001. — 818 p.
- Pressman R.S. Software engineering: a practitioner’s approach. — Basingstoke: Palgrave Macmillan. — 2005. — 880 p.
- Ахо А.В., Хопкрофт Дж., Ульман Дж.Д. Структуры данных и алгоритмы. — Изд. дом «Вильямс». — 2000. — 384 с.
- 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.
- Pfleeger S.L., Atlee J.M. Software engineering: theory and practice. — Upper Saddle River, New Jersey: Prentice Hall. — 2010. — 756 p.
- Szyperski C. Component software: beyond object-oriented programming. — Upper Saddle River, New Jersey: Pearson Education. — 2002. — 589 p.
- Abelson H., Sussman G.J., Sussman J. Structure and interpretation of computer programs. — Cambridge, Massachusetts: MIT Press. — 1996. — 684 p.
- Ho C., Harrop R., Schaefer C. Pro Spring. — Apress. — 2014. — 728 p.
- Aleksy M., Korthaus A., Schader M. Implementing distributed systems with Java and CORBA. — Springer. — 2005. — 346 p.
- Coulouris G.F., Dollimore J., Kindberg T. Distributed systems: concepts and design. — Upper Saddle River, New Jersey: Pearson Education. — 2011. — 927 p.
- Bell M. Service-oriented modeling. — Hoboken, New Jersey: John Wiley & Sons. — 2008. — 368 p.
- Fowler M. Patterns of enterprise application architecture. — Boston, Massachusetts: Addison-Wesley. — 2012. — 557 p.
- Buyya R., Broberg J., Goscinski A.M. Cloud computing: principles and paradigms. — Hoboken, New Jersey: John Wiley & Sons. — 2010. — 664 p.
- Krafzig D., Banke K., Slama D. Enterprise SOA: service-oriented architecture best practices. — Upper Saddle River, New Jersey: Prentice Hall. — 2005. — 382 p.
- Ho C., Harrop R., Schaefer C. Pro Spring. — Apress. — 2014. — 728 p.
- White T. Hadoop: the definitive guide, 4th ed. — O’Reilly Media. — 2015. — 756 p.
- CouchDB: the definitive guide. — O’Reilly Media. — 2010. — 272 p.
- Java EE at a glance
- Apache Spark — lightning-fast cluster computing
- Redis
- Heroku
- Java EE at a glance
- Goldt S., var der Meer S., Burkett S., Welsh M. The Linux Programmer’s Guide.