程序代码模块的内聚与耦合和测试的关系

上一篇 / 下一篇  2006-12-11 15:49:39

E"Al A:Trz0     首先我们引出内聚与耦合的两个概念.内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。耦合(Coupling)是模块之间依赖程度的度量。内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。模块设计追求高内聚,低耦合。

zYA F"e051Testing软件测试网[k? b2VY cF1Y

51Testing软件测试网/K3FC\7~ OZ y(Y
    内聚按强度从低到高有以下几种类型:

!N u0eTnF$L0

qA+MK1pDW5l0
L iXY.jA1M|y5Yg0(1)偶然内聚。如果一个模块的各成分之间毫无关系,则称为偶然内聚。51Testing软件测试网~2I'L4ET9Hr
(2)逻辑内聚。几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。51Testing软件测试网z4S9i*l*h4Vu-B P b
(3)时间内聚。如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。51Testing软件测试网&_NA%aq:qS
(4)过程内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。51Testing软件测试网/XO,f'j[}(t@,BG3D(z
(5)通信内聚。如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。
6]7W*Y,Dy,J&R0(6)顺序内聚。如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。
}2Y}]A:V U0(7)功能内聚。模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚51Testing软件测试网9p xZpB%[hT!|

!Xr8eS6er^,@M0    耦合的强度依赖于以下几个因素:51Testing软件测试网z(H#ad7|8o*j M

)Q;~Z j o0
*O-g9Z!^ ?X-{7N0(1)一个模块对另一个模块的调用;51Testing软件测试网;UVxNHZ5P(|
(2)一个模块向另一个模块传递的数据量;
z gC-r z0(3)一个模块施加到另一个模块的控制的多少;51Testing软件测试网x'n%hD5z
(4)模块之间接口的复杂程度。51Testing软件测试网-jPc R{k(bq

51Testing软件测试网.V`UN(R M"r9gv@]

51Testing软件测试网&JVP0P i-Y4g|$N@3y
    耦合按从强到弱的顺序可分为以下几种类型:51Testing软件测试网CpZ0g?*k T&~

} W9E$J9tZe0
HC;A$K)l K{@1[.V0(1)内容耦合。当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。
%X7bACi!Wu/i0(2)公共耦合。两个以上的模块共同引用一个全局数据项就称为公共耦合。
X |9dM ~}%[[ {|0(3)控制耦合。一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号的模块的动作根据信号值进行调整,称为控制耦合。
|JPu@0(4)标记耦合。模块间通过参数传递复杂的内部数据结构,称为标记耦合。此数据结构的变化将使相关的模块发生变化。
t?7lN S(b[0(5)数据耦合。模块间通过参数传递基本类型的数据,称为数据耦合。51Testing软件测试网bO CrLPIz+|t
(6)非直接耦合。模块间没有信息传51Testing软件测试网g3I2k$?G?

xZ5c&^3]#e AIA!ul(S0     然后我们通过测试的角度来看一下这两个度量在测试中的意义:51Testing软件测试网oQ'i"mJ:\0v

(S FpgH l-_+M0高内聚的模块,互相之间依赖性比较少,某个模块一但出现问题的时候,能把错误控制在一个模块内.不会因为一个模块出了问题,而影响了其他功能模块.保证了其他功能的完整性,不会影响用户的其他操作,能让给用户带来的麻烦降低到最低限度.程序员也能快速的定位出问题所在的模块,进行问题修改.模块之间没有太多的牵连,更便于程序员的问题修改.在问题修改后,也不会给其他功能模块带来太多的影响.测试人员在做单元或集成测试的时候,能够更容易把里面的程序模块之间的逻辑理清楚,能设计出高覆盖率的用例把程序代码后模块接口都能完全覆盖测试到.也能让测试人员在做回归测试时,降低一定的风险.51Testing软件测试网`[ oZ(r)M5l!E

51Testing软件测试网 m5]|9zM H

耦合性高的模块,相互之间依赖性比较多,模块与模块之间的关系也比较复杂.就容易出现,一个程序模块出现了问题,导致其他功能模块都不能正常运行.而且由于关系的复杂性,给程序员定位及修改问题带来一定的不便.也影响了用户的所有操作,给用户带来更大损失.而且由于模块之间的复杂关系,即便程序员修改了一个问题后,也不能保证不会带来更多的缺陷.给测试人员做单元和集成测试带来了太多的不便.需要花大量的时间去理清内部的逻辑.在这样的情况下,可能也会给测试工作带来遗漏的地方,留下隐患.测试人员也要花更多的时间进行回归测试,来保证系统程序符合规定要求了.无形中给项目带来了更多的风险.51Testing软件测试网`!rI,o'H#?8?` ieE

(lS Z%@-Z0 

%SJ,co#?K;? A0

TAG:

w342678881的个人空间 引用 删除 w342678881   /   2011-09-13 10:16:42
5
 

评分:0

我来说两句

Open Toolbar