衡量模块独立性的两个定性标准
内聚和耦合
模块的独立程度可以由两个定性标准衡量,这两个标准分别是内聚和耦合。
耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。
– 耦合:
定义:
是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
分类:
(1)数据耦合:两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。
(2)控制耦合:如果传递的信息中有控制信息(尽管有时这种控制信息以数据形式出现)
(3)特征耦合:当把整个数据结构作为参数传递而被调用的模块只使用其中一部分数据元素时
(4)公共环境耦合:当两个或多个模块通过一个公共数据环境相互作用时
(5)内容耦合:最高程度的耦合;如果出现以下情况之一,两个模块就发生了内容耦合:
a. 一个模块访问另一个模块的内部数据
b. 一个模块不通过正常入口而转到另一个模块的内部c. 两个模块有一部分代码重叠(只可能出现在汇编语言)
d. 一个模块有多个入口(意味着一个模块有几种功能)
耦合设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。
– 内聚
定义:
标志着一个模块内哥哥元素彼此解和的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单的说,理想内聚只做一件事情。(内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的低耦合,内聚和耦合都是进行模块化设计的有利工具,但是内聚更重要)
分类:
A. 高内聚:
(1) 顺序内聚:如果一个模块内的处理元素和同一功能密切相关,而且这些处理必须顺序执行(9分)
(2) 功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能(10分)
B. 中内聚:
(1) 过程内聚:如果一个模块内的处理元素是相关的,而且必须经过特定的次序执行(5分)
(2) 通信内聚:如果模块中所有元素都使用同一输入数据和(或)产生统一输出数据(7分)
C. 低内聚:
(1) 偶然内聚:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。(0分)
(2) 逻辑内聚:如果一个模块完成的任务在逻辑上属于相同或相似的一类。(1分)
(3) 时间内聚:如果一个模块包含的任务必须在同一时间内执行(3分)