Программа курса ПИ (2016–2017 учебный год)

Лекции в осеннем семестре охватывают четыре темы:

Объяснение к нумерации лекций:

  • Лекции взяты из предыдущего года, так что их номера могут не совпадать с фактическими.
  • Лекции, пронумерованные как *, не входят в основной курс, но желательны к ознакомлению.
  • Одной лекции может соответствовать несколько презентаций (обычно две). В таком случае части лекции нумеруются с использованием латинских букв, например, 3a и 3b.

1. Предмет программной инженерии

Название Ссылка
1 Введение в программную инженерию PDF
2 Дисциплины программной инженерии PDF
* Области знаний SWEBOK — основные дисциплины PDF
* Области знаний SWEBOK — дисциплины управления PDF
3 Жизненный цикл программного обеспечения. Гибкая методология разработки PDF
Темы для самостоятельной работы
  1. История разработки ПО в СССР и на Западе.
  2. Исторический обзор моделей жизненного цикла ПО.
  3. Парадигма Rapid Application Development.
  4. Сравнение моделей разработки, соответствующих гибкой методологии.
Контрольные вопросы
  1. Место и задачи программной инженерии.
  2. Место ПИ среди компьютерных наук.
  3. История развития программной инженерии в СССР и на Западе. Эволюция подхода к разработке компьютерных программ.
  4. Дисциплины программной инженерии.
  5. ПИ как наука. Связь программной инженерии с дисциплинами дискретной математики.
  6. Роль стандартов и повторного использования в разработке программного обеспечения.
  7. Сущность дисциплины управления ПИ.
  8. Стандарт жизненного цикла ISO 12207.
  9. Категории процессов жизненного цикла.
  10. Определение и цели моделей жизненного цикла ПО.
  11. Каскадная модель жизненного цикла, ее преимущества и недостатки и области применения.
  12. Эволюционная модель жизненного цикла, ее преимущества и недостатки и области применения.
  13. Инкрементная модель жизненного цикла, ее преимущества и недостатки и области применения.
  14. Основные положения гибкого подхода к разработке ПО.
  15. Методы гибкой методологии разработки: непрерывная интеграция, парное программирование, разработка через тестирование.
  16. Виды гибкой методологии.
  17. Экстремальное программирование.
Литература
  1. Лаврищева Е.М. Методы программирования. Теория, инженерия, практика. — К.: Наукова думка. — 2006. — 451 с.
  2. Лаврищева Е.М., Петрухин В.А. Методы и средства программного обеспечения. — М:. Мин. образования РФ. — 2007. — 415 с.
  3. Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
  4. Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
  5. A Guide to the Project Management Body of Knowledge (PMBOK Guide), 5th ed. – Project Management Institute. — 2013. — 589 p.
  6. Guide to the Software Engineering Body of Knowledge, Version 3.0. / ed. by P. Bourque and R.E. Fairley. — IEEE Computer Society. — 2014.
  7. McConnell S. Rapid Development: Taming Wild Software Schedules. — Microsoft Press Books. — 1996. — 647 p.
  8. Kerr J.M., Hunter R. Inside RAD: How to Build a Fully Functional System in 90 Days or Less. — McGraw-Hill. — 1994. — 213 p.
  9. Shore J., Warden S. The art of agile development. — Sebastopol, California: O’Reilly Media. — 2008. — 409 p.
  10. Beck K., Andres C. Extreme programming explained. — Boston, Massachusetts: Addison-Wesley. — 2004. — 180 p.
  11. Martin R.C. Agile Software Development: Principles, Patterns, and Practices. — Pearson Education. — 2003. — 529 p.
  12. Software Engineering Body of Knowledge, Version 3.0.
  13. Selecting a development approach.

2. Основные процессы разработки ПО

Название Ссылка
4a Инженерия требований PDF
4b Моделирование программных систем PDF
5a Архитектура ПО PDF
5b Объектно-ориентированное проектирование. Шаблоны проектирования PDF
6a Парадигмы программирования PDF
6b Парадигмы программирования. Развитие ООП PDF
* Языки программирования. Метапрограммирование PDF
7a Тестирование ПО PDF
7b Верификация и валидация PDF
8 Эволюция и сопровождение ПО PDF
Темы для самостоятельной работы
  1. Способы представления требований к программным системам.
  2. Прикладные инструменты системного моделирования.
  3. Прикладные инструменты создания MV* архитектур.
  4. MV* архитектуры в веб-приложениях. MVC-фреймворки в языках программирования PHP, Python, Ruby. Фреймворк AngularJS.
  5. Встроенные и пользовательские реализации шаблонов проектирования в различных средах программирования.
  6. Функциональное программирование. Языки Haskell, Lisp.
  7. Логическое программирование. Язык программирования Prolog.
  8. История развития парадигмы императивного программирования. Модульное программирование.
  9. Среда аспектного программирования AspectJ.
  10. Парадигма агентного программирования.
  11. Прикладные инструменты создания лексических / синтаксических анализаторов.
  12. Средства рефлексии в языках программирования.
  13. Освоение инструментов модульного тестирования в современных средах разработки.
  14. Прикладные инструменты доказательства корректности программ.
  15. Инструменты рефакторинга программ в современных средах разработки.
Контрольные вопросы
  1. Роль инженерии требований в разработке ПО.
  2. Классификация требований к ПО. Пользовательские и системные требования.
  3. Функциональные и нефункциональные требования.
  4. Способы представления требований к ПО. Спецификация требований.
  5. Процесс инженерии требований.
  6. Инженерия требований в гибкой методологии разработки.
  7. Определение и цель моделирования программных систем.
  8. Представление программных систем в абстрактной форме. Язык моделирования UML.
  9. Контекстные диаграммы UML. Диаграммы деятельности.
  10. Модели взаимодействия UML. Диаграммы вариантов использования. Диаграммы последовательностей.
  11. Диаграммы классов UML. Отношения в диаграммах классов.
  12. Поведенческие модели UML. Диаграммы состояний.
  13. Роль архитектуры в разработке ПО.
  14. Связь между архитектурой и требованиями к ПО.
  15. Модель представлений архитектуры 4+1.
  16. Архитектура «модель — отображение — контроллер».
  17. Роль архитектур MV* в разработке веб-приложений и приложений с графическим интерфейсом.
  18. Многослойная архитектура программного обеспечения.
  19. Клиент-серверная архитектура.
  20. Конвейерная архитектура. Потоки *NIX как пример использования конвейерной архитектуры.
  21. Сущность объектно-ориентированного проектирования. Роль ООП в разработке современного программного обеспечения.
  22. Основные концепции ООП.
  23. Процесс проектирования в соответствии с ООП.
  24. Базовые составляющие шаблонов проектирования. Классификация шаблонов.
  25. Порождающие шаблоны проектирования. Шаблоны Singleton, Builder, Factory.
  26. Структурные шаблоны проектирования. Шаблоны Bridge, Decorator.
  27. Поведенческие шаблоны проектирования. Шаблоны Interator, Observer.
  28. Определение парадигмы программирования. Место парадигмы в разработке ПО.
  29. Классификация парадигм программирования.
  30. Историческое развитие парадигм программирования.
  31. Особенности декларативного программирования. Выполнение декларативных программ.
  32. Функциональное программирование. Чистые функции.
  33. Замыкания и функции высоких порядков как базовые компоненты функционального программирования.
  34. Шаблоны функционального программирования. Трансформация функций, шаблон MapReduce.
  35. Основные особенности логического программирования. Процедурная интерпретация.
  36. Элементы функционального программирования в современных ЯП (Python, JavaScript).
  37. Императивное программирование. Выполнение императивных программ.
  38. Структурное программирование, его базовые элементы.
  39. Модульное программирование как развитие структурного.
  40. Основные концепции объектно-ориентированного программирования. Полиморфизм, наследование и инкапсуляция.
  41. Особенности ООП на основе классов и прототипов.
  42. Компоненты повторного использования. Отличия компонентов от объектов.
  43. Особенности парадигмы компонентно-ориентированного программирования. Разработка компонентов и разработка с компонентами.
  44. Базовые понятия аспектно-ориентированного программирования.
  45. Сервис-ориентированная архитектура в рамках Web 2.0.
  46. Основы разработки и использования веб-сервисов.
  47. Основные понятия тестирования ПО.
  48. Виды тестирования. Тестирования по принципу белого, серого и черного ящика.
  49. Место тестирования в разных моделях жизненного цикла ПО.
  50. Уровни тестирования. Модульное, интеграционное и системное тестирование. Автоматизация тестирования.
  51. Разработка через тестирование (TDD). TDD как часть гибкой методологии.
  52. Тестирование после разработки.
  53. Процессы верификации и валидации ПО.
  54. Обзоры и инспекции кода. Области инспекции.
  55. Автоматизация статического анализа кода. Инструменты типа lint.
  56. Обзор формальных методов верификации программ; область их применения.
  57. Логика Хоара.
  58. Формальная проверка моделей. Символьное выполнение и абстрактная интерпретация программ.
  59. Связь между разработкой и эволюцией ПО. Внесение изменений в ПО.
  60. Особенности эволюции ПО в гибкой методологии разработки.
  61. Законы динамики эволюции ПО.
  62. Сопровождение ПО как частный случай эволюции. Типы сопровождения.
  63. Реинженерия программного обеспечения; цель и процессы реинженерии.
  64. Рефакторинг программного кода. Отличия между реинженерией и рефакторингом.
Литература
  1. Лаврищева Е.М., Петрухин В.А. Методы и средства программного обеспечения. — М:. Мин. образования РФ. — 2007. — 415 с.
  2. Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
  3. Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
  4. Wiegers K., Beatty J. Software requirements. — Upper Saddle River, New Jersey: Pearson Education. — 2013. — 672 p.
  5. Fowler M. UML distilled. — Boston, Massachusetts: Addison-Wesley Professional. — 2007. — 175 p.
  6. 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.
  7. Gamma E., Helm R., Johnson R., Vlissides J. Design patterns. — Upper Saddle River, New Jersey: Pearson Education. — 1994. — 395 p.
  8. Hohpe G., Woolf B. Enterprise Integration Patterns. — Boston, Massachusetts: Addison-Wesley. — 2012. — 735 p.
  9. Fowler M. Patterns of enterprise application architecture. — Boston, Massachusetts: Addison-Wesley. — 2012. — 557 p.
  10. Meyer B. Object-oriented software construction. — Upper Saddle River, New Jersey: Prentice Hall. — 1997. — 1254 p.
  11. Jacobson I. Object-oriented software engineering: a use case driven approach. — Upper Saddle River, New Jersey: Pearson Education. — 1992. — 552 p.
  12. Abelson H., Sussman G.J., Sussman J. Structure and interpretation of computer programs. — Cambridge, Massachusetts: MIT Press. — 1996. — 684 p.
  13. 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.
  14. Hansen M.R., Rischel H. Functional programming using F#. — Cambridge: Cambridge University Press. — 2013. — 361 p.
  15. Clocksin W., Mellish C.S. Programming in Prolog, 5th ed. — Springer. — 2003. — 299 p.
  16. Dahl O.-J., Dijkstra E.W., Hoare C. Structured programming. — Academic Press. — 1972. — 220 p.
  17. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ / Пер. с англ. под ред. А. Шеня. — М.: МЦНМО, 2002. — 960 с.
  18. Ахо А.В., Хопкрофт Дж., Ульман Дж.Д. Структуры данных и алгоритмы. — Изд. дом «Вильямс». — 2000. — 384 с.
  19. Heineman G.T., Councill W.T. Component-based software engineering. — Boston, Massachusetts: Addison-Wesley. — 2001. — 818 p.
  20. Szyperski C. Component software: beyond object-oriented programming. — Upper Saddle River, New Jersey: Pearson Education. — 2002. — 589 p.
  21. Jacobson I., Ng P.-W. Aspect-oriented software development with use cases. — Boston, Massachusetts: Addison-Wesley. — 2005. — 418 p.
  22. Myers G.J., Sandler C., Badgett T. The art of software testing. — Hoboken, New Jersey: John Wiley & Sons. — 2011. — 256 p.
  23. Fowler M., Beck K., Brant J., Opdyke W., Roberts D. Refactoring: improving the design of existing code. — Boston, Massachusetts: Addison-Wesley. — 2012. — 455 p.
  24. Fowler M. Domain-specific languages. — Upper Saddle River, New Jersey: Pearson Education. — 2010. — 640 p.
  25. Papyrus for Eclipse
  26. Laravel
  27. Symfony
  28. Django
  29. Ruby on Rails
  30. AngularJS
  31. AspectJ project
  32. Java Pathfinder
  33. Java ANTLR
  34. jUnit

3. Дополнительные процессы разработки ПО

Название Ссылка
9a Управление изменениями и версиями ПО PDF
9b Управление построением и выпусками PDF
* Документирование ПО PDF
* Инженерия качества PDF
10 Управление программным проектом PDF
Темы для самостоятельной работы
  1. Сравнение систем управления версиями ПО.
  2. Системы автоматического построения для современных сред разработки (Maven, Grunt, Gradle и др.).
  3. Системы зависимостей в современных средах разработки (Python setuptools, npm, Bower и др.).
  4. Системы генерации документации в языках программирования и создание плагинов для этих систем.
  5. Прикладные инструменты автоматизации процессов инженерии качества.
  6. Особенности планирования программного проекта в гибкой методологии разработки.
  7. Автоматизация усовершенствования процессов разработки ПО.
Контрольные вопросы
  1. Обзор процессов управления конфигурацией программного обеспечения.
  2. Идентификация элементов конфигурации.
  3. Процессы управления изменениями в разработке ПО. Запросы на изменение.
  4. Основные понятия управления версиями.
  5. Централизованные и распределенные системы управления версиями.
  6. Основы распределенного управления версиями на примере системы Git.
  7. Проблематика процессов построения программной системы. Виды инструментов построения.
  8. Основные понятия построения ПО. Цели и зависимости.
  9. Программа make.
  10. Программа Apache Ant.
  11. Основные принципы непрерывной интеграции.
  12. Жизненный цикл выпусков программного обеспечения.
  13. Версии ПО; их связь с системами управления версиями. Семантическая нумерация.
  14. Цели и проблематика управления программным проектом.
  15. Понятие рисков при разработке ПО. Категории и примеры рисков.
  16. Процессы управления рисками.
  17. Планирование проекта. Проектный план и другие планы в традиционной разработке ПО.
  18. Роль планирования в гибкой методологии разработки.
  19. Экспертные и алгоритмические методы оценки затрат на разработку.
Литература
  1. Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
  2. Основы инженерии качества программных систем / Андон Ф.И., Коваль Г.И., Коротун Т.М. и др. — К: Академпериодика. — 2007. — 680с.
  3. Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
  4. Tian J. Software quality engineering. — Hoboken, New Jersey: John Wiley & Sons. — 2005. — 440 p.
  5. Pressman R.S. Software engineering: a practitioner’s approach. — Basingstoke: Palgrave Macmillan. — 2005. — 880 p.
  6. Pfleeger S.L., Atlee J.M. Software engineering: theory and practice. — Upper Saddle River, New Jersey: Prentice Hall. — 2010. — 756 p.
  7. Duvall P.M., Matyas S., Glover A. Continuous integration: improving software quality and reducing risk. — Pearson Education. — 2007. — 336 p.
  8. Smart J.F. Jenkins: the definitive guide. — O’Reilly Media. — 2011. — 404 p.
  9. Sonatype Company. Maven: the definitive guide. — O’Reilly Media. — 2008. — 470 p.
  10. Chacon S. Pro Git. — Apress. — 2009. — 288 p.
  11. O’Sullivan B. Mercurial: the definitive guide. — O’Reilly Media. — 2009. — 284 p.
  12. Javadoc Tool
  13. Doxygen
  14. CMMI for development, version 1.3
  15. Grunt: the JavaScript task runner
  16. Npm

4. Разработка современных программных систем

Название Ссылка
11 Интерфейсы в программировании PDF
12a Интерфейсы и типы данных: общие положения PDF
12b Интерфейсы и типы данных: системы типов данных PDF
13 Интероперабельность PDF
* Хранение данных в приложениях PDF
14 Сервисная архитектура приложений. Веб-сервисы PDF
15 Введение в облачные вычисления PDF
Темы для самостоятельной работы
  1. Инверсия управления в современных платформах разработки.
  2. Интерфейсы внешних функций в средах программирования.
  3. Агрегационные типы данных в языках программирования.
  4. Функции первого класса.
  5. Смеси (traits, mixins) как промежуточное звено между интерфейсами и наследованием.
  6. Ковариантность и контравариантность типов данных в языках программирования.
  7. Средства межпроцессного взаимодействия в операционных системах.
  8. Особенности повторного использования ПО с открытым исходным кодом.
  9. Средства инженерии КПИ в современных средах разработки.
  10. Системы типа ActiveRecord и DataMapper в современных платформах разработки ПО.
  11. Децентрализованные сети. Internet of Things. Блокчейн.
  12. Платформы для разработки SOAP- и REST-сервисов.
  13. Асинхронный обмен данными с веб-сервисами. Веб-сокеты. Фреймворк Node.js.
  14. Анализ современных платформ IaaS, PaaS, SaaS.
  15. Знакомство с каркасами для распределенных вычислений (Hadoop, Spark).
  16. Базы данных NoSQL.
Контрольные вопросы
  1. Использование интерфейсов в программировании. Аппаратные и программные (в широком понимании) интерфейсы.
  2. Отличия и общие черты бинарных и программных интерфейсов (ABI и API).
  3. Бинарные программные интерфейсы: характеристика и области применения.
  4. Инверсия управления.
  5. Виртуализация как способ взаимодействия разноязычных программ.
  6. Интерфейс внешних функций.
  7. Взаимосвязь между интерфейсами и типами данных.
  8. Интерфейсы типов в парадигме ООП.
  9. Стандарт ISO 11404. Классификация типов данных.
  10. Генерируемые та агрегигрованные типы данных.
  11. Иерархии типов данных в языках программирования.
  12. Функции как тип данных.
  13. Безопасность типов и безопасность памяти.
  14. Сильная и слабая типизация.
  15. Статическая и динамическая типизация.
  16. Совместимость типов. Виды типизации по совместимости: структурная, номинальная, утиная.
  17. Приведения типов данных.
  18. Виды полиморфизма.
  19. Полиморфизм подтипов. Принцип подстановки Барбары Лисков.
  20. Полиморфизм и наследование в ООП.
  21. Ковариантность, контравариантность и инвариантность типов данных.
  22. Понятие интероперабельности. Проблемы, решаемые за счет интероперабельности.
  23. Межпроцессное взаимодействие в POSIX / System V.
  24. Общая характеристика и классификация промежуточного ПО (middleware).
  25. Удаленный вызов процедур (RPC) и его реализации.
  26. Общая структура системы CORBA.
  27. Язык описания интерфейсов OMG IDL.
  28. Очереди сообщений.
  29. Сервис-ориентированная архитектура, ее преимущества и недостатки.
  30. Понятие веб-сервисов. Разработка с веб-сервисами. Интеграция сервисов.
  31. SOAP-сервисы. Язык спецификации WSDL.
  32. Основные принципы архитектури REST.
  33. Особенности реализации REST-сервисов.
  34. Интерфейсы SOAP- та REST-сервисов в средах программирования. Синхронный и асинхронный вызов методов сервисов.
  35. Основные положения облачной архитектуры.
  36. Технологии, от которых зависит облачная архитектура.
  37. Уровни облачной архитектуры.
  38. Модели развертывания облачной архитектуры. Примеры открытых облачных сервисов.
  39. Обзор понятия BigData.
  40. Шаблон распределенной обработки данных MapReduce.
  41. Облачные файловые системы.
  42. Введение в облачные базы данных. Понятие NoSQL.
  43. Применение NoSQL-баз данных в облачных вычислениях.
  44. Каркасы облачных приложений. Apache Hadoop.
Литература
  1. Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
  2. Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
  3. Gamma E., Helm R., Johnson R., Vlissides J. Design patterns. — Upper Saddle River, New Jersey: Pearson Education. — 1994. — 395 p.
  4. Heineman G.T., Councill W.T. Component-based software engineering. — Boston, Massachusetts: Addison-Wesley. — 2001. — 818 p.
  5. Pressman R.S. Software engineering: a practitioner’s approach. — Basingstoke: Palgrave Macmillan. — 2005. — 880 p.
  6. Ахо А.В., Хопкрофт Дж., Ульман Дж.Д. Структуры данных и алгоритмы. — Изд. дом «Вильямс». — 2000. — 384 с.
  7. 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.
  8. Pfleeger S.L., Atlee J.M. Software engineering: theory and practice. — Upper Saddle River, New Jersey: Prentice Hall. — 2010. — 756 p.
  9. Szyperski C. Component software: beyond object-oriented programming. — Upper Saddle River, New Jersey: Pearson Education. — 2002. — 589 p.
  10. Abelson H., Sussman G.J., Sussman J. Structure and interpretation of computer programs. — Cambridge, Massachusetts: MIT Press. — 1996. — 684 p.
  11. Ho C., Harrop R., Schaefer C. Pro Spring. — Apress. — 2014. — 728 p.
  12. Aleksy M., Korthaus A., Schader M. Implementing distributed systems with Java and CORBA. — Springer. — 2005. — 346 p.
  13. Coulouris G.F., Dollimore J., Kindberg T. Distributed systems: concepts and design. — Upper Saddle River, New Jersey: Pearson Education. — 2011. — 927 p.
  14. Bell M. Service-oriented modeling. — Hoboken, New Jersey: John Wiley & Sons. — 2008. — 368 p.
  15. Fowler M. Patterns of enterprise application architecture. — Boston, Massachusetts: Addison-Wesley. — 2012. — 557 p.
  16. Buyya R., Broberg J., Goscinski A.M. Cloud computing: principles and paradigms. — Hoboken, New Jersey: John Wiley & Sons. — 2010. — 664 p.
  17. Krafzig D., Banke K., Slama D. Enterprise SOA: service-oriented architecture best practices. — Upper Saddle River, New Jersey: Prentice Hall. — 2005. — 382 p.
  18. Ho C., Harrop R., Schaefer C. Pro Spring. — Apress. — 2014. — 728 p.
  19. White T. Hadoop: the definitive guide, 4th ed. — O’Reilly Media. — 2015. — 756 p.
  20. CouchDB: the definitive guide. — O’Reilly Media. — 2010. — 272 p.
  21. Java EE at a glance
  22. Apache Spark — lightning-fast cluster computing
  23. Redis
  24. Heroku
  25. Java EE at a glance
  26. Goldt S., var der Meer S., Burkett S., Welsh M. The Linux Programmer’s Guide.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *