Разработка сложных программных изделий

       

Программные модули и схема модуляризации


Модуль — это какая-либо процедура или функция, написанная '.етствии с определенными правилами. Модуль разрабатыва-• последовательность   [ораторов, ограниченных точкой '[кой выхода.'icpHoro ящика", которая

"Черный ящик" — ,[, выходы и функция, :                                    льно, как реализован

сам процесс, т.е. "черный ящик" может быть использован без пони­мания его содержания.

Модуль должен обладать следующими свойствами:

1. Каждый модуль представляет одну логическую задачу.

2. Модуль замкнутый и простой.

3. Модуль дискретен и обозрим.

4. Модуль отдельно тестируется и отлаживается.

5. Каждый модуль реализуется применительно к одной незави­симой функции программы.

6. Каждый модуль имеет одну точку входа и одну точку выхода.

7. Модули могут объединяться в более крупные модули без зна­ния особенностей их внутреннего содержания.

8. Модули должны иметь хорошо определенные интерфейсы, при этом управляющие связи осуществляются через их точки входа и выхода.

Разделение программы на модули — один из эффективных путей управления сложностью и способ построения структурных программ. Структурная программа, построенная по модульному принципу, обладает определенными свойствами:



1. Программа разделяется на ряд модулей, упорядоченных ие­рархически в соответствии с их логическими связями и связями по последовательности выполнения.

2. Последовательность (поток) выполнения программы от моду­ля к модулю ограничивается жесткой схемой: управление должно передаваться к модулю в единственную его точку входа и покидать модуль в его точке выхода и всегда должно возвращаться к вызы­вающему модулю.

3. Конструкция модуля стандартизуется в соответствии с тради­ционными правилами модуляризации, а в качестве составных бло­ков в модуле должны использоваться только последовательность, выбор и повторение (цикл). Оператор безусловного перехода GO TO целесообразно использовать только для перехода непосред­ственно в точку выхода.


4. Структурная программа должна быть документирована, т.е. содержать информацию о модуле в тексте исходного кода в виде комментариев. Описание общей функции программы, пояснение функций каждого модуля, описание структур данных, а также свя­зей модуля с другими модулями программы обязательно.

При построении модульной программы важным представляется выбор размера модуля. В качестве грубого руководящего указания используется размер модуля в строках кода или в числе операторов. В разных источниках приводятся разные оценки, обобщая их, можно сказать, что модуль не должен содержать более 50 строк кода. (Иногда предлагают ограничивать число строк размером эк­рана видеотерминала.)

Мера сложности модуля также играет важную роль. Существует несколько подходов к количественной оценке сложности. Одна из наиболее удобных и распространенных — оценка с помощью так называемого цикломатического числа, равного числу путей выпол­нения программы. Таким образом, сложность программы или мо­дуля равна числу операторов IF + 1. Если в условном операторе используется сложное логическое выражение, то подсчитывается число простых операций сравнения-

Структура взаимосвязей модулей программы называется схемой модуляризации. На рис. 1 представлен пример возможной трехуров­невой схемы распределения модулей программы. Главная цель мо­дуляризации — получение хорошей схемы, которая должна быть адекватной составным частям решаемой проблемы. Качество схемы модуляризации оценивается простотой и эффективностью ее реали­зации. Разработка схемы модуляризации — процесс эвристический, позволяющий получить несколько вариантов решения, среди кото­рых должен быть выбран наилучший.

1-й уровень иерархии

2-й уровень иерархии

3-й уровень иерархии

Модуль А вызывает модули В, С, D

Модуль А является родительским по отношению к модулям В, С, D, которые являются дочерними по отношению к А

Рис. 1.

Схема модуляризации

Естественное требование модульного программирования — ие­рархическое упорядочение модулей.


Иерархическая организация модулей определяется следующим образом (см. рис. I):

1. Первый уровень содержит один модуль, который называется корневым. Он представляет общую функцию программы на высшем уровне.

2. Второй уровень иерархии содержит модули, которые более подробно определяют функцию корневого модуля.

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

4. Схема взаимосвязей модулей определяет потоки управления в структурной программе.

Между модулями существуют отношения активизации, т.е. один модуль может вызывать другой. Так, если модуль А вызывает мо­дуль В, то это означает, что управление передается от модуля А к модулю В. Модуль А называется вызывающим, или родительским, а модуль В — вызываемым, или дочерним. Иногда их называют со­ответственно "отец — сын". В структурной программе существуют следующие правила для потока управления:

1. Выполнение программы начинается с корневого модуля.

2. Модуль выполняется только тогда, когда он вызывается ро­дительским модулем.

3. Дочерний модуль не может вызывать родительский и не может вызывать сам себя.

4. Управление программой должно входить в модуль в точку входа и покидать модуль в точке выхода.

5. Управление всегда возвращается к вызывающему модулю, когда вызванный модуль выполнит свою функцию.

6. Наименьшая программа состоит из единственного корневого модуля, все остальные содержат один корневой и один или более модулей другого уровня. За исключением корневого, все остальные модули должны иметь, по крайней мере, одного родителя. Если мо­дуль имеет несколько родительских модулей, то он называется общим.

7. Каждая ветвь иерархической схемы модуляризации заканчи­вается терминальным модулем.

Как и всякая иерархическая структура, схема модуляризации ха­рактеризуется глубиной — числом уровней иерархии, и широтой — числом модулей на определенном уровне. Важной характеристикой,

определяющей сложность программ и качество схемы модуляриза­ции, является понятие веера управления, который равен числу дочер­них модулей, вызываемых родительским модулем.Очень высокие или низкие значения веера управления в схеме модуляризации слу­жат показателями плохой схемы модуляризации. В общем случае веер управления не должен превышать 10, а в качестве близкого к оптимальному на практике рассматривают число 7. Целесообразно строить схему модуляризации, в которой веер управления имеет не­большие отклонения от этого числа для всех родительских модулей.


Содержание раздела