模块的内聚

上一篇 / 下一篇  2009-07-26 12:46:34 / 个人分类:软件工程

模块的内聚

模块的内聚反映模块内部联系的紧密程度。如果一个模块内部相关性很高,而且都是为了同一个功能,我们就说它的内聚程度高。模块的内聚可以分以下七类:

1、偶然内聚

如图7.5所示,模块P,Q,R,S都有某些共同的操作,为了节约空间,减少程序量,把这些共同的操作抽出来,组成一个模块T。实际上这些语句间没有什么联系。这种联系就是偶然型的。在计算机内存小的时代,人们强调缩短程序长度,往往会引起这种情况。这种偶然性内聚的模块不便于修改。例如,模块P要将"B:=A"改为"E:=A",但这一修改可能不适合其他模块。

图7.5偶然内聚


2.逻辑内聚

将几个逻辑上相似的功能放在一个模块中,模块内联系就是逻辑型内聚。如7.4(a)中的模块"取平均成绩或最高成绩"就属这一类,把"取平均成绩"和"取最高成绩"这两个相似的功能放在一起而组成一个模块。图7.6是这个模块的程序流程图。它需要模块A传递一个开关量,根据开关量判定执行哪一个分支。这样做的想法也是出于节约空间,缺点是修改困难。如果现在不仅要知道最高成绩是多少,而且还要打印出获得最高成绩的学生姓名,这一修改就很难适应"取平均成绩"的要求。


图7.6 逻辑内聚


3.时间内聚

这是指与时间有关的联系,即把需要有限时间间隔内处理的成分放在同一模块内,例如一些初始化模块。这种模块的内聚程度比前两种稍高一些,但仍是一种低的内聚。

4。步骤内聚

模块内的元素属于同一个公共步骤单元,则称为步骤内聚。步骤内聚模块的内聚程度比时间内聚模块高。

5,通信内聚

通信内聚是指模块内的成分引用共同的数据。 根据数据流程图容易判断一个模块是不是通信内聚。通信内聚的聚合程度较高,找不到更高的内聚结构时,这种结构是完全可以接受的。

6。顺序内聚

顺序内聚是指模块中某个成分的输出是另一模块的输入。与通信内聚相比,顺序内聚的内聚程度更高。因为不论从数据的角度还是从执行的顺序来看,模块内各成分的关系都更紧密。但是与功能内聚相比,其内聚程度要低。

7.功能内聚

若一个模块包括并且仅包括为完成一个具体任务所需要的所有成分,则这个模块是功能内聚的。这种模块的聚合程度是最高的。结构化设计的目标就是获得这种模块。

判断一个模块是否功能内聚,简单有效的办法是:从调用者的角度看,能用一个短语简单明确地描述这个模块做什么(不是怎么做!),分析这个短语就可以发现这个模块是完成一个具体任务,还是多个任务,或者做一些彼此无关的杂事??“解方程”、“求平方根”、“计算利息”都是具体任务。

功能内聚模块的好处是界面清晰,所以容易理解。由于一个模块一个功能,因而复用性好。

耦合和内聚的概念是Stevens等人提出的,是测量一个模块化系统好坏的标志。按他们的观点,给上述七种内聚评分为:功能内聚10分,顺序内聚9分,通信内聚7分,步骤内聚5分,时间内聚3分,逻辑内聚1分,偶然内聚0分。前面三种是可以接受的,后面四种则要尽可能避免。


TAG: 软件工程 内聚

 

评分:0

我来说两句

Open Toolbar