Слайд 1Разработка структуры программы. Модульное программирование.
Отвагин Алексей Владимирович, доцент каф. ЭВМ,
к.т.н., а. 505-5
Слайд 208/13/2019
Содержание
Понятие модульного программирования
Основные характеристики модуля
Методы разработки структуры программы
Контроль структуры
Слайд 308/13/2019
Цель модульного программирования
Упрощение структуры ПС
Отображение архитектуры ПС
Повышение качества разработки
Сокращение пространства
поиска ошибок
Слайд 408/13/2019
Понятие модульного программирования
Модуль – любой фрагмент описания процесса, оформляемый как
самостоятельный программный продукт
Модуль может входить во многие процессы, если он
должным образом документирован
Модульное программирование – разработка ПС в виде совокупности модулей
Слайд 508/13/2019
Процессы модульного программирования
Разделение – выделение отдельных модулей на основе их
характеристик (отношения между элементами, интенсивности взаимодействия и т.д.)
Программирование – разработка
модулей индивидуальными программистами или группами (проходит параллельно)
Интеграция – проверка взаимодействия модулей в реальной среде
Слайд 608/13/2019
Схема модульного программирования
Слайд 708/13/2019
Схема реализации модуля
Слайд 808/13/2019
Свойства модулей
Являются критериями оценки качества модуля
Часто выражаются количественно
Основные свойства:
Размер
Прочность
Сцепление
Рутинность
Слайд 908/13/2019
Размер модулей
Измеряется числом содержащихся операторов или строк (в зависимости от
языка)
Маленький модуль – большие потери на документирование
Большой модуль – неудобно
изменять и повторно транслировать
Слайд 1008/13/2019
Прочность модулей
Определяет меру внутренних связей между элементами модуля
Различают несколько степеней
прочности
Прочность по совпадению – модуль, между элементами которого нет осмысленных
связей
Слайд 1108/13/2019
Прочность модулей
Функционально прочный модуль – выполняет одну определенную функцию
Может содержать
вспомогательные функции
Рекомендуется к использованию в структурном проектировании
Слайд 1208/13/2019
Прочность модулей
Информационно прочный модуль – выполняет операции над определенной структурой
данных, известной только внутри модуля
Высшая степень прочности
Рекомендуется к использованию в
ООП
Слайд 1308/13/2019
Сцепление модулей
Определяет меру зависимости по данным от других модулей и
характеризует способ передачи данных
Сцепление по содержимому – прямые ссылки на
содержимое другого модуля (константы)
Сцепление по общей области – использование общей области памяти для взаимодействия
Параметрическое сцепление – передача данных или их возврат в виде параметров при обращении
Слайд 1408/13/2019
Рутинность
Определяет независимость модуля от предыстории обращений к нему
Рутинный модуль –
эффект обращения зависит только от переданных параметров
Зависящий от предыстории модуль
– эффект обращения определяется внутренним состоянием модуля
Слайд 1508/13/2019
Рекомендации по обеспечению рутинности
Желательно использовать только рутинные модули
Зависящие от предыстории
модули используются только для обеспечения параметрического сцепления
Зависимости от предыстории должны
четко отражаться в спецификации
Слайд 1608/13/2019
Метрики IEEE для оценки модуля
Пусть s – это число отдельных
операторов в программе (например, *,+,-)
Пусть v – число отдельных операндов
в программе
S – общее число операторов, V – общее число операндов
Оценки:
Предполагаемая длина программы
s*(log S) + v*(log V)
Сложность программы
s*V/(2*v)
Слайд 1708/13/2019
Цикломатическая метрика
Пусть N – это число операторов в программе
Пусть E
– число переходов между операторами
Цикломатическая сложность: E-N+1
Слайд 1808/13/2019
Разработка структуры программы
Структура представляется в виде дерева, где каждый модуль
может использовать или использоваться другими
Деревья могут иметь сросшиеся ветви
Слайд 1908/13/2019
Пример структуры программы
Слайд 2008/13/2019
Спецификация модуля
Синтаксическая
Функциональная или семантическая
Представляет модуль законченной единицей
Может быть формализована
Слайд 2108/13/2019
Методы разработки структуры ПС
Определяются направлением и способом обхода дерева
Восходящая и
нисходящая разработка
Комбинированный метод
Направленная разработка
Слайд 2208/13/2019
Восходящая разработка
Строится структура в виде дерева
Движение начинается от наименьших модулей
Тестирование
в том же порядке
Порядок разработки кажется естественным
Слайд 2308/13/2019
Недостатки восходящей разработки
Для программирования модуля не обязательна готовность всех используемых
им модулей (можно заменить заглушками)
Часто возникает проблема перепроектирования модулей высшего
уровня
Для отладки модуля создается специальный стенд (программа, моделирующая внешнюю среду)
Слайд 2408/13/2019
Нисходящая разработка
Строится структура в виде дерева
Движение начинается от головного модуля
Модуль
начинает разрабатываться, если уже готов модуль, обращающийся к нему
Тестирование в
том же порядке
Слайд 2508/13/2019
Преимущества нисходящей разработки
Использование имитаторов или заглушек
Естественное формирование внешней среды
Возможность реализовать
сложные тесты
Меньшая вероятность перепроектирования
Слайд 2608/13/2019
Другие подходы
Восходящая и нисходящая разработка – классические подходы, требующие наличия
готовой структуры программы
Структура может формироваться в ходе разработки:
Конструктивный подход
Архитектурный подход
Слайд 2708/13/2019
Конструктивный подход
Является модификацией нисходящей разработки
Выделяются направления разработки и формируются ветви
дерева
Отсутствующие модули и ветви заменяются имитаторами
Слайд 2808/13/2019
Архитектурный подход
Является модификацией восходящей разработки
Основная цель – повышение уровня языка
разработки за счет создания крупных абстракций
Готовые модули параметризуются и допускают
повторное использование
Слайд 2908/13/2019
Комбинированный метод (сэндвич)
Дерево обходят в двух направлениях – сверху и
снизу
Сочетает достоинства и недостатки классических подходов
Достаточно широко применяется
Слайд 3008/13/2019
Классификация методов разработки структуры