Основы проектирования программного обеспечения
2018/19 учебный год г., Математический, I курс2 семестр(ы)
Специальности:
- 09.03.04 - Программная инженерия.
Содержание лекционных занятий.
- Гл.0. Введение в процесс создания программного обеспечения (ПО). Роль проектирования. Примеры из структурного программирования.
- Гл.1. Задачи проектирования ПО.
- 1.1. Моделирование (абстракция и разделение полномочий). Модульная структура программы. (1) Способы уменьшения стыковки (coupling). (2) Способы увеличения связности (cohesion).
- 1.2. Архитектура ПО. Свойства для оценки архитектурных решений. (3) Примеры графовых моделей программ. (4) Примеры модульной структуры программы с использованием библиотек программных функций.
- 1.3. Детальное проектирование. Интерфейс пользователя (человеко-машинное взаимодействие). Компонентное проектирование. Разработка алгоритмов и структур данных.
- Гл.2. Модели проектирования ПО.
- 2.1. Визуальное моделирование и принцип декомпозиции (модульность).
- Анализ предметной области и моделирование данных. Модели архитектуры ПО. (1) Примеры для автономных программных приложений. (2) Примеры для мобильных сервисов. (3) Примеры для распределенных систем. (4) Примеры для систем управления автономными объектами. (5) Примеры для информационных систем. (6) Примеры для системного ПО.
- 2.3. Виды моделей. (1) Диаграмма сущность-связь. (2) Диаграмма потоков данных. (3) Структурные модели предметной области: глоссарий, онтология, представление объектов данных, диаграмма вариантов использования. (4) Модель конечных автоматов. (5) диаграмма последовательностей. (6) ОО-модели. (7) Формальные модели.
- Гл.3. Шаблоны проектирования ПО.
- 3.1. Спецификация. Архитектурные шаблоны. Порождающие шаблоны. Структурные шаблоны. Поведенческие шаблоны.
- 3.2. Кодогенерация. Встроенная в код спецификация.
- 3.3. Оценка решений проектирования ПО. (1) Метрики проектирования. (2) Аналитические модели. (3) Статический анализ кода и документации. (4) Экспериментальные измерения выполнения программы.
Содержание лабораторных работ.
- Тема 1. Модульная структура программы на уровне программных функций.
- Лаб.1.1. Разбор структуры программы (модульность) и сборка ПО (утилита make) на примере (https://www.gnu.org/software/hello/). Содержимое модулей. Сопровождающая документация. Используемые параметры сборки. Удаление.
- Лаб.1.2. Разбор структуры программы и сборка ПО. Взаимосвязь модулей и система имен (визуальная модель структуры). Способы связывания модулей (вызовы функций, разделяемые переменные). Введение новых функций в структуру ПО (инициализация, форматирование данных для вывода и т.п.).
- Лаб.1.3. Задача на подключение внешней библиотеки (создание окна с приветствием с помощью GTK+, обработка ошибок). Использование инструментов autoconf для конфигурации. Стили кодирования (K&R, GNU и др.).
- Лаб.1.4. Конфигурация сборки (кросс-компиляция, настройка на целевую аппаратуру, особенности вычислительной среды, модель пользователя). Демонстрация и обсуждение решений (спецификация структуры ПО и сборки).
- Тема 2-3. Визуальные модели проектирования ПО. Применение шаблонов при проектировании программ. Способы спецификации и возможности кодогенерации.
- Лаб.2-3.1. Обзор возможностей на примере https://www.gnu.org/software/hello/. Разработка спецификации и построение визуальных моделей проектирования.
- Лаб.2-3.2. Решение конкретной задачи анализа для существующего проекта с doxygen-спецификацией. Интерпретация получаемых визуальных моделей.
- Лаб.2-3.3. Разработка модели графического интерфейса для https://www.gnu.org/software/hello/ и генерация заготовок программного кода.
- Тема 4. Метрики проектирования. Использование для анализа атрибутов качества. Анализ метрик проектирования ПО на основе статического анализа кода.
- Лаб.4.1. Вычисление и интерпретация метрик программного кода.
Список литературы.
- Гецци К., Джазайери М., Мандриоли Д. Основы инженерии программного обеспечения / Пер. с англ. 2-е изд. СПб.: БХВ-Петербург, 2015. 832 с.
- Камаев В.А., Костерин В.В. Технологии программирования. Учебник, 2-е изд., перераб. и доп. М.: Высшая школа, 2006. 454 с.
- Макконнелл С. Совершенный код. Мастер-класс / Пер. с англ. — М. : Издательство «Русская редакция», 2010. — 896 стр.
- Мацяшек Л.А. Анализ требований и проектирование систем. М.: Издательский дом "Вильямс", 2002. 428с.
- Diehl S. Software Visualization: Visualizing the Structure, Behaviour, and Evolution of Software. Berlin Heidelberg: Springer-Verlag, 2007. 187 p.