Upload
ural-federal-university-named-after-first-president-of-russia-bn-yeltsin
View
2.906
Download
2
Embed Size (px)
Citation preview
1
Технология разработки
программного обеспечения
Часть 8.
Разработка структуры программы
и модульное программирование
• (©) Владислав Лавров, vlavrov.professorjournal.ru
2
8.1. Цель модульного программирования
Цель - упростить программную систему. Средство
борьбы со сложностью программ
Программный модуль это любой фрагмент
описания процесса, оформляемый как
самостоятельный программный продукт,
пригодный для использования в описаниях
процесса.
• (©) Владислав Лавров, vlavrov.professorjournal.ru
3
8.2. Основные характеристики программного модуля
• размер модуля,
• прочность модуля,
• сцепление с другими модулями,
• рутинность модуля (независимость от предыстории
обращений к нему).
Характеристики программного модуля [Г.Майерс]:
• (©) Владислав Лавров, vlavrov.professorjournal.ru
4
• Измеряется числом содержащихся в нем операторов или строк.
• Модуль не должен быть слишком маленьким или слишком
большим.
• Маленькие модули приводят к громоздкой модульной структуре
программы и могут не окупать накладных расходов, связанных с
их оформлением.
• Большие модули неудобны для изучения и изменений, они могут
существенно увеличить суммарное время повторных трансляций
программы при отладке программы.
• Обычно рекомендуются программные модули размером от
нескольких десятков до нескольких сотен операторов.
Размер модуля
• (©) Владислав Лавров, vlavrov.professorjournal.ru
5
Это мера его внутренних связей.
Чем выше прочность модуля, тем больше связей он может спрятать
от внешней по отношению к нему части программы и,
следовательно, тем больший вклад в упрощение программы он
может внести.
Прочность модуля
• (©) Владислав Лавров, vlavrov.professorjournal.ru
6
• Это такой модуль, между элементами которого нет осмысленных
связей.
• Такой модуль может быть выделен, например, при обнаружении в
разных местах программы повторения одной и той же
последовательности операторов, которая и оформляется в отдельный
модуль.
• Необходимость изменения этой последовательности в одном из
контекстов может привести к изменению этого модуля, что может
сделать его использование в других контекстах ошибочным.
Прочность модуля по совпадению
• (©) Владислав Лавров, vlavrov.professorjournal.ru
7
• Это модуль, выполняющий (реализующий)
одну какую-либо определенную функцию.
• При реализации этой функции такой модуль
может использовать и другие модули.
Функционально прочный модуль
• (©) Владислав Лавров, vlavrov.professorjournal.ru
8
• Это модуль, выполняющий (реализующий) несколько операций
(функций) над одной и той же структурой данных (информационным
объектом), которая считается неизвестной вне этого модуля.
• Для каждой из этих операций в таком модуле имеется свой вход со
своей формой обращения к нему.
• Такой класс следует рассматривать как класс программных модулей
с высшей степенью прочности.
Информационно прочный модуль
• (©) Владислав Лавров, vlavrov.professorjournal.ru
9
• Это мера его зависимости по данным от других модулей.
• Независимые модули могут быть модифицированы без
переделки других модулей
• Характеризуется способом передачи данных. Чем слабее
сцепление модуля с другими модулями, тем сильнее его
независимость от других модулей (тем лучше).
Сцепление модуля
• (©) Владислав Лавров, vlavrov.professorjournal.ru
10
Сцепление по содержимому. Таким является сцепление двух модулей,
когда один из них имеет прямые ссылки на содержимое другого модуля
(например, на константу, содержащуюся в другом модуле).
Сцепление по общей области это такое сцепление модулей, когда
несколько модулей используют одну и ту же область памяти.
Параметрическое сцепление это случай, когда данные передаются
модулю либо при обращении к нему как значения его параметров, либо
как результат его обращения к другому модулю для вычисления
некоторой функции.
Оценки степени сцепления модулей
• (©) Владислав Лавров, vlavrov.professorjournal.ru
11
• Это его независимость от предыстории обращений к нему.
• Модуль называется рутинным, если результат (эффект)
обращения к нему зависит только от значений его параметров (и
не зависит от предыстории обращений к нему).
• Модуль называется зависящим от предыстории, если результат
(эффект) обращения к нему зависит от внутреннего состояния
этого модуля, изменяемого в результате предыдущих обращений
к нему.
Рутинность модуля
• (©) Владислав Лавров, vlavrov.professorjournal.ru
12
• В большинстве случаев надо делать модуль рутинным, т.е.
независимым от предыдущих обращений.
• Зависящие от предыстории модули следует использовать
только в тех случаях, когда это необходимо для сцепления
по данным
• В спецификации зависящего от предыстории модуля
должна быть чётко сформулирована эта зависимость,
чтобы пользователи имели возможность прогнозировать
поведение такого модуля
Рутинность модуля (рекомендации)
• (©) Владислав Лавров, vlavrov.professorjournal.ru
13
8.3. Методы разработки структуры программы
В основу положен модульный подход
В качестве модульной структуры программы принято использовать древовидную структуру.
В узлах такого дерева размещаются программные модули, а направленные дуги (стрелки) показывают статическую подчиненность модулей, т.е. каждая дуга показывает, что в тексте модуля, из которого она исходит, имеется ссылка на модуль, в который она входит.
Модуль 1
Модуль 2
Модуль 4
Модуль 3
• (©) Владислав Лавров, vlavrov.professorjournal.ru
14
Спецификация программного модуля
1. Синтаксическую спецификацию его входов,
позволяющую построить на используемом языке
программирования синтаксически правильное
обращение к нему (к любому его входу)
2. Функциональную спецификацию модуля
(описание семантики функций, выполняемых этим
модулем по каждому из его входов).
Содержит:
• (©) Владислав Лавров, vlavrov.professorjournal.ru
15
1. Метод восходящей разработки
2. Метод нисходящей разработки
Методы разработки структуры программы
Классический (водопадный) подход
Модульная структура программы была разработана до
начала программирования (кодирования) модулей.
• (©) Владислав Лавров, vlavrov.professorjournal.ru
16
Модуль 1
Модуль 3
Модуль 4
Модуль 2
Модуль 51
2
3
4
5
Последовательность разработки
и тестирования
Методы восходящей разработки
• (©) Владислав Лавров, vlavrov.professorjournal.ru
17
Методы нисходящей разработки
Модуль 1
Модуль 3
Модуль 4
Модуль 2
Модуль 55
4
3
2
1
Последовательность разработки и тестирования
• (©) Владислав Лавров, vlavrov.professorjournal.ru
18
Модификация нисходящей разработки, при которой
модульная древовидная структура программы
формируется в процессе программирования модулей.
Методы разработки структуры программы
Конструктивный подход
• (©) Владислав Лавров, vlavrov.professorjournal.ru
19
1-й шаг разработки структуры программыКонструктивный подход
Текст головного модуля
Спецификация программы(головного модуля)
Спецификация 1-й подзадачи
Спецификация 2-й подзадачи
Спецификация 3-й подзадачи
• (©) Владислав Лавров, vlavrov.professorjournal.ru
20
Конструктивный подход
Текст головного модуля
Спецификация программы(головного модуля)
Спецификация 1-й подзадачи
Спецификация 2-й подзадачи
Спецификация 3-й подзадачи
Текст головного модуля 1-й подзадачи
Текст головного модуля 3-й подзадачи
Текст головного модуля 2-й подзадачи
Спецификация 2.1-й подзадачи
Спецификация 2.1-й подзадачи
2-й шаг разработки структуры программы
• (©) Владислав Лавров, vlavrov.professorjournal.ru
21
Модификация восходящей разработки, при которой при
которой модульная структура программы
формируется в процессе программирования модуля.
Для заданной предметной области выделяются типичные
функции, каждая из которых может использоваться
при решении разных задач в этой области, и
специфицируются, а затем и программируются
отдельные программные модули, выполняющие эти
функции.
Методы разработки структуры программы
Архитектурный подход
• (©) Владислав Лавров, vlavrov.professorjournal.ru
22
Классификация методов разработки структуры программ
Методы разработки структуры программы
Нисходящие Восходящие
Классический подход
Конструктивный подход
Классический подход
Архитектурный подход
• (©) Владислав Лавров, vlavrov.professorjournal.ru
23
8.4. Контроль структуры программы
1. Статический контроль.
2. Смежный контроль.
3. Сквозной контроль.
• (©) Владислав Лавров, vlavrov.professorjournal.ru