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

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

NB. Лекции взяты из предыдущего года, так что их номера могут не совпадать с фактическими.

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

Название Ссылка
1 Введение в программную инженерию PDF
2 Дисциплины программной инженерии PDF
3 Области знаний SWEBOK — основные дисциплины PDF
4 Области знаний SWEBOK — дисциплины управления PDF
5 Жизненный цикл программного обеспечения PDF
6 Гибкая методология разработки PDF
Темы для самостоятельной работы
  1. История разработки ПО в СССР и на Западе.
  2. Исследование стандарта PMBOK.
  3. Анализ различий между различными версиями стандарта SWEBOK.
  4. Исторический обзор моделей жизненного цикла ПО.
  5. Парадигма Rapid Application Development.
  6. Сравнение моделей разработки, соответствующих гибкой методологии.
Контрольные вопросы
  1. Место и задачи программной инженерии.
  2. Место ПИ среди компьютерных наук.
  3. История развития программной инженерии в СССР и на Западе. Эволюция подхода к разработке компьютерных программ.
  4. Дисциплины программной инженерии.
  5. ПИ как наука. Связь программной инженерии с дисциплинами дискретной математики.
  6. Роль стандартов и повторного использования в разработке программного обеспечения.
  7. Сущность дисциплины управления ПИ.
  8. Основные области знаний в программной инженерии в соответствии со стандартом SWEBOK.
  9. Связь основных областей знаний SWEBOK с процессами разработки ПО.
  10. Составляющие проектирования ПО в соответствии со стандартом SWEBOK.
  11. Основные понятия тестирования ПО в соответствии со стандартом SWEBOK.
  12. Вспомогательные области знаний программной инженерии в стандарте SWEBOK.
  13. Связь вспомогательных областей знаний SWEBOK с процессами управления программным проектом.
  14. Основные понятия конфигурации ПО в соответствии со стандартом SWEBOK.
  15. Составляющие управления процессами в стандарте SWEBOK.
  16. Стандарт жизненного цикла ISO 12207.
  17. Категории процессов жизненного цикла.
  18. Определение и цели моделей жизненного цикла ПО.
  19. Каскадная модель жизненного цикла, ее преимущества и недостатки и области применения.
  20. Эволюционная модель жизненного цикла, ее преимущества и недостатки и области применения.
  21. Инкрементная модель жизненного цикла, ее преимущества и недостатки и области применения.
  22. Основные положения гибкого подхода к разработке ПО.
  23. Методы гибкой методологии разработки: непрерывная интеграция, парное программирование, разработка через тестирование.
  24. Виды гибкой методологии.
  25. Экстремальное программирование.
Литература
  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. Проектирование программного обеспечения

Название Ссылка
7 Инженерия требований PDF
8 Моделирование программных систем PDF
9 Архитектура ПО PDF
10 Объектно-ориентированное проектирование. Шаблоны проектирования PDF
Темы для самостоятельной работы
  1. Способы представления требований к программным системам.
  2. Прикладные инструменты системного моделирования.
  3. Прикладные инструменты создания MV* архитектур.
  4. MV* архитектуры в веб-приложениях. MVC-фреймворки в языках программирования PHP, Python, Ruby. Фреймворк AngularJS.
  5. Встроенные и пользовательские реализации шаблонов проектирования в различных средах программирования.
Контрольные вопросы
  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.
Литература
  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. Papyrus for Eclipse
  13. Laravel
  14. Symfony
  15. Django
  16. Ruby on Rails
  17. AngularJS

3. Прикладная разработка программного обеспечения

Название Ссылка
11 Парадигмы программирования. Декларативное программирование PDF
12 Парадигмы программирования. Императивное программирование PDF
13 Парадигмы программирования. Развитие ООП PDF
14 Языки программирования. Метапрограммирование PDF
15 Тестирование ПО PDF
16 Верификация и валидация PDF
17 Эволюция и сопровождение ПО PDF
Темы для самостоятельной работы
  1. Функциональное программирование. Языки Haskell, Lisp.
  2. Логическое программирование. Язык программирования Prolog.
  3. История развития парадигмы императивного программирования. Модульное программирование.
  4. Среда аспектного программирования AspectJ.
  5. Парадигма агентного программирования.
  6. Прикладные инструменты создания лексических / синтаксических анализаторов.
  7. Средства рефлексии в языках программирования.
  8. Освоение инструментов модульного тестирования в современных средах разработки.
  9. Прикладные инструменты доказательства корректности программ.
  10. Инструменты рефакторинга программ в современных средах разработки.
Контрольные вопросы
  1. Определение парадигмы программирования. Место парадигмы в разработке ПО.
  2. Классификация парадигм программирования.
  3. Историческое развитие парадигм программирования.
  4. Особенности декларативного программирования. Выполнение декларативных программ.
  5. Функциональное программирование. Чистые функции.
  6. Замыкания и функции высоких порядков как базовые компоненты функционального программирования.
  7. Шаблоны функционального программирования. Трансформация функций, шаблон MapReduce.
  8. Основные особенности логического программирования. Процедурная интерпретация.
  9. Элементы функционального программирования в современных ЯП (Python, JavaScript).
  10. Императивное программирование. Выполнение императивных программ.
  11. Структурное программирование, его базовые элементы.
  12. Модульное программирование как развитие структурного.
  13. Основные концепции объектно-ориентированного программирования. Полиморфизм, наследование и инкапсуляция.
  14. Особенности ООП на основе классов и прототипов.
  15. Компоненты повторного использования. Отличия компонентов от объектов.
  16. Особенности парадигмы компонентно-ориентированного программирования. Разработка компонентов и разработка с компонентами.
  17. Базовые понятия аспектно-ориентированного программирования.
  18. Сервис-ориентированная архитектура в рамках Web 2.0.
  19. Основы разработки и использования веб-сервисов.
  20. Цель и средства языков программирования.
  21. Синтаксис языков программирования. БНФ как средство кодирования синтаксиса.
  22. Виды семантики языков программирования. Отличия между синтаксисом и семантикой ЯП.
  23. Система типов как часть семантики ЯП. Обзор систем типов современных ЯП.
  24. Определение и цели метапрограммирования. Виды метапрограммирования.
  25. Рефлексия в ЯП.
  26. Предметно-специфические ЯП (DSL). Место DSL в разработке ПО.
  27. Основные понятия тестирования ПО.
  28. Виды тестирования. Тестирования по принципу белого, серого и черного ящика.
  29. Место тестирования в разных моделях жизненного цикла ПО.
  30. Уровни тестирования. Модульное, интеграционное и системное тестирование. Автоматизация тестирования.
  31. Разработка через тестирование (TDD). TDD как часть гибкой методологии.
  32. Тестирование после разработки.
  33. Процессы верификации и валидации ПО.
  34. Обзоры и инспекции кода. Области инспекции.
  35. Автоматизация статического анализа кода. Инструменты типа lint.
  36. Обзор формальных методов верификации программ; область их применения.
  37. Логика Хоара.
  38. Формальная проверка моделей. Символьное выполнение и абстрактная интерпретация программ.
  39. Связь между разработкой и эволюцией ПО. Внесение изменений в ПО.
  40. Особенности эволюции ПО в гибкой методологии разработки.
  41. Законы динамики эволюции ПО.
  42. Сопровождение ПО как частный случай эволюции. Типы сопровождения.
  43. Реинженерия программного обеспечения; цель и процессы реинженерии.
  44. Рефакторинг программного кода. Отличия между реинженерией и рефакторингом.
Литература
  1. Лаврищева Е.М., Петрухин В.А. Методы и средства программного обеспечения. — М:. Мин. образования РФ. — 2007. — 415 с.
  2. Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 2008. — 319 с.
  3. Sommerville I. Software engineering, 9th ed. — Boston, Massachusetts: Addison-Wesley. — 2011. — 790 p.
  4. Abelson H., Sussman G.J., Sussman J. Structure and interpretation of computer programs. — Cambridge, Massachusetts: MIT Press. — 1996. — 684 p.
  5. 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.
  6. Hansen M.R., Rischel H. Functional programming using F#. — Cambridge: Cambridge University Press. — 2013. — 361 p.
  7. Clocksin W., Mellish C.S. Programming in Prolog, 5th ed. — Springer. — 2003. — 299 p.
  8. Dahl O.-J., Dijkstra E.W., Hoare C. Structured programming. — Academic Press. — 1972. — 220 p.
  9. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ / Пер. с англ. под ред. А. Шеня. — М.: МЦНМО, 2002. — 960 с.
  10. Ахо А.В., Хопкрофт Дж., Ульман Дж.Д. Структуры данных и алгоритмы. — Изд. дом «Вильямс». — 2000. — 384 с.
  11. Heineman G.T., Councill W.T. Component-based software engineering. — Boston, Massachusetts: Addison-Wesley. — 2001. — 818 p.
  12. Szyperski C. Component software: beyond object-oriented programming. — Upper Saddle River, New Jersey: Pearson Education. — 2002. — 589 p.
  13. Jacobson I., Ng P.-W. Aspect-oriented software development with use cases. — Boston, Massachusetts: Addison-Wesley. — 2005. — 418 p.
  14. Myers G.J., Sandler C., Badgett T. The art of software testing. — Hoboken, New Jersey: John Wiley & Sons. — 2011. — 256 p.
  15. Fowler M., Beck K., Brant J., Opdyke W., Roberts D. Refactoring: improving the design of existing code. — Boston, Massachusetts: Addison-Wesley. — 2012. — 455 p.
  16. Fowler M. Domain-specific languages. — Upper Saddle River, New Jersey: Pearson Education. — 2010. — 640 p.
  17. AspectJ project
  18. Java Pathfinder
  19. Java ANTLR
  20. jUnit

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

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