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


Оценка качества модульной программы


При проектировании модульной программы возникает необхо­димость оценки качества каждого модуля и всей программы, по­строенной по модульному принципу. Как уже отмечалось, одной из наиболее простых, но важных характеристик модуля является его сложность, которая в простейшем случае определяется числом строк кода (или числом операторов). Другой оценкой сложности модуля, которая широко используется на практике, выступает число условных операторов IF, которые позволяют оценить число путей выполнения программы. При разработке каждого модуля это число не должно превышать 10. Опыт разработки программной Продукции приводит к выводу, что схема модуляризации удовле­творительна, если минимальна сложность каждого модуля и если сложность равномерно распределена по всей программе. Следует избегать "зон повышенной сложности", т.е. модулей с существенно большей сложностью.

Кроме размера модуля, на сложность программы и простоту ее восприятия оказывают существенное влияние связи между внутрен­ними элементами каждого модуля и связи между модулями. Моду­ли связываются с помощью данных, а также структурой управления в программе. Явная связь между модулями появляется, когда между ними передаются данные в виде параметров, а косвенная связь, когда модули ссылаются на одни и те же данные. Для снижения сложности программы связи между модулями необходимо миними­зировать. Степень независимости между модулями принято описы­вать с помощью сцепления (coupling). При малом сцеплении модуль может быть легко понят без изучения другого, либо изменен без из­менений в других модулях.

Три фактора оказывают влияние на сцепление модулей:

1. Число элементов данных, передаваемых между ними (чем больше передается данных, тем сильнее сцепление).

2. Количество управляющих данных, передаваемых между моду­лями.

3. Число глобальных элементов данных, которые совместно ис­пользуются модулями.

Первый фактор — это число параметров, которые передаются в вызываемый модуль.
Часто передача многих параметров показыва­ет, что модуль выполняет не одну, а несколько функций. На слож­ность программы оказывает влияние не только число, но и тип передаваемых данных. Целесообразно в качестве передаваемых параметров использовать не структурные, а простые данные.

Совместно используемые данные — данные, которые явно упо­минаются в модуле, а не передаются в виде параметров. Наиболее ярким примером служат глобальные данные. Использование гло­бальных данных усложняет понимание и особенно изменение от­дельных модулей, так как их данные могут использоваться незамет­ным образом и разными путями. Между модулями различают не­сколько типов сцепления (5—7). Наилучшим, наиболее слабым, яв­ляется сцепление по данным, причем данные передаются явно в ка­честве параметров в виде простых переменных или массивов и ис­пользуются непосредственно для решения функциональной задачи модуля, а не для управления. Несколько хуже, когда модули связа­ны между собой через сложный структурный элемент данных (на­пример, запись). При этом вызываемый модуль использует только отдельные элементы записи. Такой вид сцепления называют сцепле­нием по образцу- Существенно более сильное сцепление между мо­дулями, когда они используют одну и ту же область глобальных данных (сцепление по общей области).

Другим показателем или мерой качества схемы модуляризации является связность (cohesion), которая определяет, как сильно между собой связаны элементы внутри модуля. Наиболее сильная и наилучшая связность — функциональная, которая характеризуется тем, что каждый элемент модуля служит необходимой и существен­ной частью для выполнения одной, и только одной функции. Такой модуль не может быть разбит на два других модуля, так как он вы­полняет одну специфическую функцию. Всего принято рассматри­вать 7 уровней связности. Ориентировочно функциональный уро­вень связности на практике можно определить, если описать функ­цию модуля в виде одного повелительного предложения.

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

 


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