Лекции в весеннем семестре охватывают три темы:
NB. Лекции взяты из предыдущего года, так что их номера могут не совпадать с фактическими.
1. Дополнительные процессы разработки ПО
Темы для самостоятельной работы
- Сравнение систем управления версиями ПО.
- Системы автоматического построения для современных сред разработки (Maven, Grunt, Gradle и др.).
- Системы зависимостей в современных средах разработки (Python setuptools, npm, Bower и др.).
- Системы генерации документации в языках программирования и создание плагинов для этих систем.
- Прикладные инструменты автоматизации процессов инженерии качества.
- Особенности планирования программного проекта в гибкой методологии разработки.
- Автоматизация усовершенствования процессов разработки ПО.
Контрольные вопросы
- Обзор процессов управления конфигурацией программного обеспечения.
- Идентификация элементов конфигурации.
- Процессы управления изменениями в разработке ПО. Запросы на изменение.
- Основные понятия управления версиями.
- Централизованные и распределенные системы управления версиями.
- Основы распределенного управления версиями на примере системы Git.
- Проблематика процессов построения программной системы. Виды инструментов построения.
- Основные понятия построения ПО. Цели и зависимости.
- Программа make.
- Программа Apache Ant.
- Основные принципы непрерывной интеграции.
- Жизненный цикл выпусков программного обеспечения.
- Версии ПО; их связь с системами управления версиями. Семантическая нумерация.
- Роль документирования в процессах разработки программного обеспечения.
- Типы документации. Документация на продукты и процессы разработки.
- Особенности документирования в гибкой методологии разработки.
- Основные принципы создания документации. Форматы документации.
- Инструменты документирования и генерирования документации в языках программирования и средах разработки.
- Основы инженерии качества программного обеспечения. Оценка качества.
- Составные процессы управления качеством ПО.
- Роль стандартов в разработке программных систем. Стандарт ISO 9001.
- Обеспечение качества. Инспекции кода и парное программирование.
- Модели и характеристики качества ПО.
- Понятие метрик качества.
- Цели и проблематика управления программным проектом.
- Понятие рисков при разработке ПО. Категории и примеры рисков.
- Процессы управления рисками.
- Планирование проекта. Проектный план и другие планы в традиционной разработке ПО.
- Роль планирования в гибкой методологии разработки.
- Экспертные и алгоритмические методы оценки затрат на разработку.
- Проблематика усовершенствования процессов разработки ПО.
- Процесс усовершенствования разработки.
- Измерение и анализ процессов разработки.
- Внесение изменений в процессы разработки.
- Многоуровневые и непрерывные модели CMMI.
Литература
- Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 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
2. Интероперабельность и КПИ
Темы для самостоятельной работы
- Инверсия управления в современных платформах разработки.
- Интерфейсы внешних функций в средах программирования.
- Агрегационные типы данных в языках программирования.
- Функции первого класса.
- Смеси (traits, mixins) как промежуточное звено между интерфейсами и наследованием.
- Ковариантность и контравариантность типов данных в языках программирования.
- Средства межпроцессного взаимодействия в операционных системах.
- Особенности повторного использования ПО с открытым исходным кодом.
- Средства инженерии КПИ в современных средах разработки.
Контрольные вопросы
- Использование интерфейсов в программировании. Аппаратные и программные (в широком понимании) интерфейсы.
- Отличия и общие черты бинарных и программных интерфейсов (ABI и API).
- Бинарные программные интерфейсы: характеристика и области применения.
- Инверсия управления.
- Виртуализация как способ взаимодействия разноязычных программ.
- Интерфейс внешних функций.
- Взаимосвязь между интерфейсами и типами данных.
- Интерфейсы типов в парадигме ООП.
- Стандарт ISO 11404. Классификация типов данных.
- Генерируемые та агрегигрованные типы данных.
- Иерархии типов данных в языках программирования.
- Функции как тип данных.
- Безопасность типов и безопасность памяти.
- Сильная и слабая типизация.
- Статическая и динамическая типизация.
- Совместимость типов. Виды типизации по совместимости: структурная, номинальная, утиная.
- Приведения типов данных.
- Виды полиморфизма.
- Полиморфизм подтипов. Принцип подстановки Барбары Лисков.
- Полиморфизм и наследование в ООП.
- Ковариантность, контравариантность и инвариантность типов данных.
- Понятие интероперабельности. Проблемы, решаемые за счет интероперабельности.
- Межпроцессное взаимодействие в POSIX / System V.
- Общая характеристика и классификация промежуточного ПО (middleware).
- Удаленный вызов процедур (RPC) и его реализации.
- Общая структура системы CORBA.
- Язык описания интерфейсов OMG IDL.
- Очереди сообщений.
- Понятие повторного использования в разработке ПО. Виды повторного использования.
- Факторы, влияющие на внедрение повторного использования. Примеры областей разработки с повторным использованием.
- Каркасы приложений (application frameworks). Использование каркасов для разработки веб-приложений.
- Технологические линии разработки ПО.
- Разработка для повторного использования. COTS.
- Основы программной инженерии с компонентами повторного использования.
- Характеристики КПИ и способы их достижения.
- Интерфейсы КПИ.
- Модели КПИ. Использование и развертывание компонентов.
- Особенности разработки компонентов для повторного использования.
- Композиции КПИ. Роль языков спецификации в создании и тестировании композиций.
Литература
- Лаврищева Е.М. Программная инженерия. Учебник. — К.: Академпериодика. — 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.
- Java EE at a glance
- Goldt S., var der Meer S., Burkett S., Welsh M. The Linux Programmer’s Guide.
3. Разработка современных программных систем
Темы для самостоятельной работы
- Системы типа ActiveRecord и DataMapper в современных платформах разработки ПО.
- Децентрализованные сети. Internet of Things. Блокчейн.
- Платформы для разработки SOAP- и REST-сервисов.
- Асинхронный обмен данными с веб-сервисами. Веб-сокеты. Фреймворк Node.js.
- Анализ современных платформ IaaS, PaaS, SaaS.
- Знакомство с каркасами для распределенных вычислений (Hadoop, Spark).
- Базы данных NoSQL.
Контрольные вопросы
- Способы представления данных в программах. Задача хранения данных.
- Процесс сериализации данных. Сериализация в языках программирования.
- Понятие схемы данных. Верификация в соответствии со схемой.
- Формат XML. Инструменты для работы с XML.
- Формат JSON. Инструменты для работы с JSON.
- Объектно-реляционные отображения.
- Шаблоны ActiveRecord и DataMapper.
- Преимущества и недостатки распределенных приложений.
- Модели взаимодействия в распределенных системах на основе процедурных вызывов и сообщений.
- Модель «клиент — сервер». Тонкие и толстые клиенты.
- Многоуровневая клиент-серверная архитектура и ее использование в веб-приложениях.
- Архитектура распределенных компонентов.
- Одноранговая (peer-to-peer) архитектура.
- Сервис-ориентированная архитектура, ее преимущества и недостатки.
- Понятие веб-сервисов. Разработка с веб-сервисами. Интеграция сервисов.
- 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.
- Hohpe G., Woolf B. Enterprise Integration Patterns. — Boston, Massachusetts: Addison-Wesley. — 2012. — 735 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