Основы проектирования программного обеспечения
2017/18 учебный год г., Математический, I курс2 семестр(ы)
Специальности:
- 09.03.04 - Программная инженерия.
- Крышень Михаил Александрович <kryshen@cs.karelia.ru>
- Марченков Сергей Александрович <marchenk@cs.karelia.ru>
Содержание лекционных занятий.
- Гл.0. Введение в процесс создания программного обеспечения (ПО). Роль проектирования. Примеры из структурного программирования.
- Гл.1. Задачи проектирования ПО.
- 1.1. Архитектура ПО. Моделирование (абстракция и разделение полномочий). Пример веб-системы вычислительных сервисов. Свойства для оценки архитектурных решений.
- 1.2. Детальное проектирование. Интерфейс пользователя (человеко-машинное взаимодействие). Компонентное проектирование. Разработка алгоритмов и структур данных.
- 1.3. Методы проектирования: модели, шаблоны, оценка.
- Гл.2. Модели проектирования ПО.
- 2.1. Визуальное моделирование и принцип декомпозиции (модульность).
- 2.2. Анализ предметной области. Моделирование данных.
- 2.3. Моделирование вычислений и алгоритмы. Моделирование поведения.
- Гл.3. Шаблоны проектирования ПО.
- 3.1. Спецификация. Архитектурные шаблоны. Порождающие шаблоны. Структурные шаблоны. Поведенческие шаблоны.
- 3.2. Кодогенерация. Встроенная в код спецификация.
- Гл.4. Оценка решений проектирования ПО.
- 4.1. Атрибуты качества решения задачи проектирования. Метрики проектирования.
- 4.2. Статический анализ кода и экспериментальные измерения выполнения программы.
Содержание практических занятий.
- Тема 1. Модульная структура программы. Анализ на примерах из структурного программирования.
- 1.1. Способы уменьшения стыковки (coupling). Способы увеличения связности (cohesion).
- 1.2. Примеры графовых моделей программ. Примеры модульной структуры программы с использованием библиотек программных функций.
- Тема 2. Модели проектирования ПО. Анализ на примерах существующего ПО.
- 2.1. Описание архитектуры ПО. Описание архитектуры. (1) Примеры для автономных программных приложений. (2) Примеры для мобильных сервисов. (3) Примеры для распределенных систем. (4) Примеры для систем управления автономными объектами. (5) Примеры для информационных систем. (6) Примеры для системного ПО.
- 2.2. Модели для описания решений детального проектирования (как развитие примеров по архитектуре ПО). (1) Примеры интерфейсов для взаимодействия программных модулей. (2) Примеры интерфейсов пользователя. (3) Примеры решений с применением программных библиотек и повторно используемого кода. (4) Примеры проектирования алгоритма. (5) Примеры проектирования структуры данных.
- Тема 3. Шаблоны проектирования ПО.
- Виды моделей. (1) Диаграмма сущность-связь. (2) Диаграмма потоков данных. (3) Структурные модели предметной области: глоссарий, онтология, представление объектов данных, диаграмма вариантов использования. (4) Модель конечных автоматов. (5) диаграмма последовательностей. (6) ОО-модели. (7) Формальные модели.
- Тема 4. Оценка решений проектирования ПО.
- Модели оценивания. (1) Анализ графовых моделей. (2) верификация моделей. (3) Аудит (инспектирование) кода. (4) Автоматический статический анализ кода. (5) Анализ документации. (6) Экспериментальные измерения работы ПО.
Содержание лабораторных работ.
- Тема 1. Модульная структура программы на уровне программных функций.
- Лаб.1.1. Разбор структуры программы (модульность) и сборка ПО (утилита make) на примере (https://www.gnu.org/software/hello/). Содержимое модулей. Сопровождающая документация. Используемые параметры сборки. Удаление.
- Лаб.1.2. Разбор структуры программы и сборка ПО. Взаимосвязь модулей и система имен (визуальная модель структуры). Способы связывания модулей (вызовы функций, разделяемые переменные). Введение новых функций в структуру ПО (инициализация, форматирование данных для вывода и т.п.).
- Лаб.1.3. Система контроля версий (git) для локального управления программным кодом.
- Лаб.1.4. Задача на подключение внешней библиотеки (создание окна с приветствием с помощью GTK+, обработка ошибок). Использование инструментов autoconf для конфигурации. Стили кодирования (K&R, GNU и др.).
- Лаб.1.5. Конфигурация сборки (кросс-компиляция, настройка на целевую аппаратуру, особенности вычислительной среды, модель пользователя). Демонстрация и обсуждение решений (спецификация структуры ПО и сборки).
- Тема 2. Визуальные модели проектирования ПО. Способы спецификации и возможности кодогенерации.
- Лаб.2.1. Обзор возможностей на примере https://www.gnu.org/software/hello/. Разработка спецификации и построение визуальных моделей проектирования.
- Лаб.2.2. Решение конкретной задачи анализа для существующего проекта с doxygen-спецификацией. Интерпретация получаемых визуальных моделей.
- Тема 3. Применение шаблонов при проектировании программ. Возможности кодогенерации на примере разработки интерфейса пользователя.
- Лаб.3.1. Разработка модели графического интерфейса для https://www.gnu.org/software/hello/ и генерация заготовок программного кода.
- Тема 4. Метрики проектирования. Использование для анализа атрибутов качества. Анализ метрик проектирования ПО на основе статического анализа кода и экспериментальных измерений.
- Лаб.4.1. Вычисление и интерпретация метрик программного кода.
- Лаб.4.2. Использование результатов тестирования для анализа качества решений проектирования.
Список литературы.
- Гецци К., Джазайери М., Мандриоли Д. Основы инженерии программного обеспечения / Пер. с англ. 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.