Программная инженерия — Тематическое содержание дисциплины

Оглавление / Contents

  • Лекции
  • Лабораторные работы (ДО)
  • Контрольная работа (ИДО)
  • Расчетно-графическое задание

Раздел 1. Программная инженерия

Модуль 1. UML как средство поддержки процесса проектирования

Структура UML, статическая и динамическая составляющие модели. Составляющие элементы, механизмы, архитектура. Составные элементы: сущности, отношения, диаграммы. Виды сущностей: структурные сущности – класс, интерфейс, кооперация, прецедент, активный класс, компонент, узел; поведенческие сущности – взаимодействия, деятельности, автоматы; группирующая сущность – пакет, аннотационная сущность – примечание. Виды отношений: зависимость, ассоциация, агрегация, композиция, включение, обобщение, реализация. Отношения. Связи – отношения между объектами. Направленность связи, Сообщения. Ассоциации – отношения между классами. Свойства ассоциации: имя, кратность, навигация, атрибуты. Рефлексивные ассоциации, деревья и сети. Классы атрибутов ассоциаций (классы-ассоциации). Зависимости. Зависимости использования «use», «call», «parameter», «send» и «instantiate». Зависимости абстракции. Зависимости доступа. Виды диаграмм. Спецификации. Дополнения. Принятые деления: классификатор-экземпляр, интерфейс-реализация. Расширения: ограничения, стереотипы.

Диаграммы взаимодействия. Линия жизни, активности, сообщения, их виды. Комбинированные фрагменты и операторы. Включения, параметры, шлюзы. Продолжения. Их аналоги в программировании. Коммуникационные диаграммы. Диаграммы деятельности. Технология сетей Петри. Параллелизм. Поток управления, узел действия, ребро, узел управления, объектный узел, буферизация и в объектном узле. Объектные узлы – параметры, состояния объектных узлов. Контакты. Прерывающие ребра. Контакты исключений. Потоки объектов. Их аналоги в программировании  (фаза реализации). Диаграммы состояний. Конечные автоматы. Состояния. Переходы. События. Сигналы. Составные состояния. Подавтоматы. Предыстория.

Модуль 2. Предмет программной инженерии, жизненный цикл проекта, методологии проектирования и модели процессов ЖЦ

Свод знаний по программной инженерии SWEBOK  Жизненный цикл (ЖЦ) программного продукта и проекта. «Легкие» и «тяжелые» модели процессов разработки ПО. Обзор: «как получится», ГОСТы, RUP, Agile, XP. Модели жизненного цикла. Каскадная, итерационная и спиральная модели. Организационная и технологическая составляющие жизненного цикла. Роль UML  в формализации технологической составляющей. Моделирование, виды моделей. UML как средство описания различных аспектов «мысленной» модели проектируемой системы.

 

Унифицированный процесс UP. Фазы жизненного цикла: начало, уточнение, построение, внедрение. Содержание и результаты фаз. Итерация и ее рабочие потоки: требования, анализ, проектирование, реализация, тестирование, их содержание. Фаза начала. Видение проекта, глоссарий. Рабочий поток анализа предметной области. Диаграммы классов предметной области.

 

Требования. Место рабочего потока определения требований. Функциональные и нефункциональные, перечень. Атрибуты требований: приоритеты, состояние, трудоемкость, стабильность, риск, полезность. Способы извлечения и фильтрации требований. Актеры и роли. Прецеденты. Выявление актеров и прецедентов: бизнес-модель предметной области, модель требований, глоссарий проекта. Диаграммы прецедентов, детализация прецедентов, спецификации прецедентов. Отображение требований на прецеденты.

 

Архитектура как система представлений: представление классов, процессов, реализации, развертывания и прецедентов (требований). Классы анализа. Виды классов: граница, управление, сущность. Выявление классов анализа. Диаграммы устойчивости. Архитектурные аспекты технологического процесса проектирования (по SWEBOK)

 

Проектирование графического интерфейса (GUI). Основные аспекты. Архитектурное проектирование, основанное на GUI.

 

Примеры проектирования. Система выдачи ключей аудиторий. . Система подсчета рейтинга успеваемости

 

Экстремальное и гибкое программирование. Манифест экстремального программирования (XP). Гибкие (agile) технологии. SCRUM. Agile UP, ICONIX. SCRUM как технологический фреймворк.. Терминология. Спринт. Митинг. Собственник проекта. Команда. SCRUM-мастер. Беклог проекта и спринта.  Планирование спринта. Диаграмма сгорания. Оценка трудоемкости. Покер-планирование.

 

Модуль 3. Управление программными проектами – 4 часа

 

Управление проектом как специфическая деятельность и разновидность менеджмента. Функциональная, проектная и матричная структура организации, разрабатывающей ПО. Функциональная классификация участников проекта, возможности совмещения функций. Управление проектом на разных фазах. Фаза инициации (начала). Структура и содержание концепции: финансовая и стратегическая ценность, риски, обоснование выполнимости (прототипирование), цели и результаты, допущения и ограничения, ключевые участники, ресурсы, оценка трудоемкости и сроков. Результаты завершения фазы инициации по UP. Фаза анализа. Иерархическая структура работ (ИСР). Планирование управления содержанием, организационной структуры, управления конфигурацией и управления качеством. Базовое расписание проекта. Диаграммы Ганта, критический путь. Результаты завершения фазы анализа по UP

 

Управление рисками. Определение и характеристики риска. Шкалы оценивания последствий и вероятности. Способы идентификации. Реакция на риски. Наиболее вероятные риски по Боэму и Архипенкову. Качественные оценки рисков. Количественные оценки: анализ чувствительности, дерево решений, имитационное моделирование. Управление, направленное на снижение рисков.

 

Модуль 4. Тестирование ПО – 6 часов

Понятие программной ошибки. Философия ошибок. Классификационные характеристики ошибок. Отладка, инспекция и тестирование как этапы поиска ошибок. Обзор и основная классификация распространенных программных ошибок (дефектов), документирование и анализ ошибок. Ошибки вычислений и преобразований. Ошибки структурирования кода. Ошибки форматов входных данных. Ошибки форматов внутренних  данных и  соглашений по данным. Ошибки сборки, конфигурирования, размещения. Ошибки использования ресурсов. Ошибки, связанные с ограничениями по ресурсам. Ошибки реактивности и производительности. Ошибки параллелизма и синхронизации. Ошибки распределенных систем и протоколов. Ошибки пользовательского  интерфейса

 

Отладка и инспекция программного кода. Сущность отладки. Приемы отладки. Инспекция как неформальный анализ программного кода. Логический и временной анализ. Методы инспектирования.

 

Сущность тестирования. . Экономическая сторона тестирования. Методологическая сторона тестирования. Невозможность исчерпывающего тестирования. Алгоритмически неразрешимые проблемы тестирования и инспекции. Понятие теста, тестового набора. Критерии выбора тестов: структурный (белый ящик), функциональный (черный ящик), стохастический, мутационный.

 

Структурное тестирование. Тестирование операторов, условий (решений) и путей. Комбинационное тестирование.  Пример. Функциональное тестирование. Классы эквивалентности по входным данным. Проектирование тестового покрытия. Классы эквивалентности по граничным условиям. Примеры.

 

Модульное и интеграционное тестирование как фазы процесса конструирования. Средства автоматизации тестирования при конструировании (JUnit).Тестирование, совмещенное с проектированием (TDD-Test Driven Development). Технологический цикл. Паттерны тестирования. Приемы рефакторинга.

2

Раздел 2. Инженерный подход к проектированию ПО (Инжиниринг ПО)

Модуль 1. Базовые элементы инженерного подхода

Семейства программ и фреймворки. Обзор JavaEE как средства разработки, отладки и тестирования распределенных приложений на Java. Реинжиниринг и рефакторинг. Системы контроля версии, сборки кода.

 

Технологические  вопросы проектирования на Java. Выполнений заданий асинхронно к GUI. Событийное программирование. Слушатели событий и CallBack-вызовы. Распределение компонентов. Клиент-серверные приложения: тонкий и толстый клиент. Обработка ошибок и исключительных ситуаций, управление отказоустойчивостью и надежностью. Разделение представления и сущности: концепция модель-вид-контроллер.

 

Метрики программного кода. Средства оценки качества программного кода.

 

Модуль 2. Шаблоны проектирования - 6 часов

Сущность шаблонов (паттернов) проектирования как элементов абстрагирования. Виды шаблонов, их назначение, примеры использования. Базовые шаблоны: делегирование, интерфейс, абстрактный класс, обратный вызов.

 

Производящие шаблоны: builder, factory, prototype, singleton, object pool, разделяющие шаблоны - filter

 

Структурные шаблоны:  adapter, bridge, composite, decorator, facade,  flyweight, proxy

 

Шаблон model-view-controller (MVC)

 

Поведенческие шаблоны: command, interpreter, iterator, mediator, momento, observer, state, starategy, template, visitor

 

Шаблоны параллелизма: session, worker thread,

successive update, router, transaction, single threaded execution, lock object, guarded suspension, balking, scheduler, read/write lock,two-phase termination, double buffering, asynchronous processing

 

Лабораторная работа 1. Анализ предметной области, разработка видения. Для выбранного варианта разработать следующие документы фазы исследования проекта (ТП моделирование предметной области и разработка требований).

  • Глоссарий для значимых элементов предметной области;
  • Словесное описание бизнес-процессов предметной области, перечень «возможных» бизнес-процессов (если проект не имеет конкретного аналога);
  • Бизнес-требования – особенности проекта, обеспечивающие его привлекательность, предполагаемые отличия от аналогов, возможности коммерческого использования, способы монетизации
  • Границы проекта – перечень бизнес-процессов, поддерживаемых и не поддерживаемых системой
  • Перечень пользователей проекта
  • Диаграмму классов предметной области

Анализ предметной области выполняется в одной из трех вариантов:

  • Проект полностью воспроизводит бизнес-процессы предметной области;
  • Проект меняет технологическую схему и бизнес-процессы предметной области (расшифровать в бизнес-требованиях)
  • Проект не базируется на материальном технологическом процессе или предлагается собственная модель бизнес-процессов (не имеет точных аналогов)

Лабораторная работа 2. Разработка модели прецедентов. Разработать модель прецедентов, кратко описать роли и содержание прецедентов, расписать сценарии 2-3 наиболее значимых прецедентов, основываясь на модели предметной области

Лабораторная работа 3. Разработка требований. Определить полный перечень функциональных и нефункциональных требований к системе. На его основе разработать документ «Спецификация требований к ПО».

Лабораторная работа 4. Разработка прототипа графического интерфейса. Для всех приложений с учетом их функционала и имеющихся прецедентов разработать систему окон графического интерфейса пользователя (GUI) и диаграммы классов (или граф связей) оконных классов. Обосновать принятые решения требованиями из «Спецификации требований к ПО». Дополнить спецификацию с учетом выполненного проектирования.

Лабораторная работа 5. Разработка архитектуры системы. Разработать архитектуру системы, оформив результат в виде документа, включающего в себя:

  • Общее архитектурное решение: архитектурные модели, компоненты (подсистемы), слои.  Стили реализации отдельных компонент и подсистем;
  • Структуру программного кода (языки реализации, пакеты, основные классы) - диаграмма пакетов и классов реализации;
  • Структуру программных компонент и артефактов – БД, файлов данных, конфигурационных файлов, служб и сторонних библиотек (диаграмма компонентов);
  • Средства коммуникаций, протоколы, форматы и стандарты обмена и хранения данных.
  • Описание внутреннего параллелизма и синхронизации программных компонент.

Лабораторная работа 6. Реализация прецедента. Для одного из сценариев, разработанного в л.р.2 проиллюстрировать  его реализацию в разработанной архитектуре (диаграмма устойчивости, диаграмма последовательности или коммуникационная диаграмма)

Лабораторная работа№7. Оценка трудоемкости и стоимости программного проекта. На основе имеющихся данных оценить объем программного кода. Произвести оценку трудоемкости и сроков реализации методами PERT и COCOMO II.

Лабораторная работа№8. Разработка бизнес-плана программного проекта. Определить этапы реализации, деятельности, структур команды разработчиков и план исполнения отдельных работ (деятельностей).

Для выбранного варианта разработать следующие документы фазы исследования проекта (тех. процессы моделирования предметной области, разработки требований, проектирования):

  1. Глоссарий для значимых элементов предметной области;
  2. Описание бизнес-процессов предметной области - словесное + UML-диаграммы деятельности
  3. Видение проекта:  бизнес-требования – особенности проекта, обеспечивающие его привлекательность,предполагаемые отличия от аналогов, возможности коммерческого использования,способы монетизации. Границы проекта – перечень бизнес-процессов, поддерживаемых и не поддерживаемых системой. Перечень пользователей проекта
  4. Диаграмму классов представления предметной области в программном проекте
  5. Диаграмму прецедентов, кратко описать роли и содержание прецедентов, расписать сценарии 2-3 наиболее значимых прецедентов, основываясь на модели предметной области
  6. Разработка требований. Определить полный перечень функциональных и нефункциональных требований к системе. На его основе разработать документ «Спецификация требований к ПО»
  7. Структуру базы данных серверного приложения
  8. Структуру графического интерфейса приложений

Расчетно-графическое задание выполняется в виде разработки одного из  шаблонов проектирования. Пояснительная записка должна содержать:

  • Учебно-методический материал по шаблону (учебники, учебные пособия, лекционный материал – краткое описание)
  • Материал по практике применения шаблона (форумы, тематические сайты)
  • Описание разработки
  • Результаты тестирования

Все сторонние материалы должны быть снабжены корректно оформленными библиографическими ссылками.