软件复杂性(转有删减)
上一篇 /
下一篇 2007-06-08 16:07:57
/ 个人分类:软件测试
1 软件复杂性
n9Ng9B3rv3Yr0
1.1 软件复杂性的基本概念51Testing软件测试网0M3GTc/YF
];D
软件复杂性度量的参数很多,主要有:
U+b$r'x/NA0 (1) 规模,即总共的指令数,或源程序行数。
NP!B,fO0 (2) 难度,通常由程序中出现的操作数的数目所决定的量来表示。
!kH$w M@tCI#F5n:|0 (3) 结构,通常用于程序结构有关的度量来表示。51Testing软件测试网+f.y/AD
P%C
(4) 智能度,即算法的难易程度。51Testing软件测试网VZ Dq$TTFK
软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。
4B``/`
VC+o0
要求复杂性度量满足以下假设:
P } ?Kh6c\G0 (1) 它可以用来计算任何一个程序的复杂性。
ZZ"ST+P1W0 (2) 对于不合理的程序,例如对于长度动态增长的程序,或者对于原则上无法排错的程序,不应当使用它进行复杂性计算。
J h3D^"|%QYP0 (3) 如果程序中指令条数、附加存储量、计算时间增多,不会减少程序的复杂性。
-P3Y!r)E6z0
1.2 McCabe度量法51Testing软件测试网5Y2EX"@/?2x5L
McCabe度量法是由Thomas McCabe提出的一种基于程序控制流的复杂性度量方法。McCabe复杂性度量又称环路度量。它认为程序的复杂性很大程度上取决于程序的复杂性。单一的顺序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。这种方法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。程序图是退化的程序流程图。也就是说,把程序流程图的每一个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图。51Testing软件测试网!L2? NYkPo
程序图仅描述程序内部的控制流程,完全不表现对数据的具体操作分支和循环的具体条件。因此,它往往把一个简单的IF语句与循环语句的复杂性看成是一样的,把嵌套的IF语句与CASE的复杂性看成是一样的。下面给出计算环路复杂性的方法,51Testing软件测试网3i9SnWi}t h!A
在一个强连通的有向图G中,环的个数V(G)由以下公式给出:
;\KC6c0d&o+L0 V(G)=m-n+2p p=1
其中,V(G)是有向图G中环路数,m是图G中弧数,n是图G中结点数,p是图G中强连通分量个数。在一个程序中,从程序图的入口点总能到达图中任何一个结点,因此,程序总是连通的,但不是强连通的。为了使图成为强连通图,从图的入口点到出口点加一条用虚线表示的有向边,使图成为强连通图。这样就可以使用上式计算环路复杂性了。51Testing软件测试网A&e.@&E