程序复杂性度量 程序复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少,开发周期的长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。 减少程序复杂性,可提高软件的简单性和可理解性,并使软件开发费用减少,开发周期缩短,软件内部潜藏错误减少 一、代码行度量法 度量程序的复杂性,最简单的方法就是统计程序的源代码行数。此方法基于两个前提: ( 1) 程序复杂性随着程序规模的增加不均衡地增长; ( 2) 控制程序规模的方法最好是采用分而治之的办法。将一个大程序分解成若干个简单的可理解的程序段。 方法的基本考虑是统计一个程序模块的源代码行数目,并以源代码行数做为程序复杂性的度量。若设每行代码的出错率为每 100 行源程序中可能有的错误数目, 例如每行代码的出错率为1%,则是指每 100 行源程序中可能有一个错误。 Thayer 曾指出,程序出错率的估算范围是从0.04%~ 7%之间,即每100 行源程序中可能存在0.04~ 7 个错误。他还指出, 每行代码的出错率与源程序行数之间不存在简单的线性关系。Lipow 进一步指出,对于小程序,每行代码的出错率为1.3%~1.8%; 对于大程序,每行代码的出错率增加到2.7%~3.2%之间,但这只是考虑了程序的可执行部分,没有包括程序中的说明部分。Lipow 及其他研究者得出一个结论:对于少于 100 个语句的小程序,源代码行数与出错率是线性相关的。随着程序的增大,出错率以非线性方式增长。所以,代码行度量法只是一个简单的,估计得很粗糙的方法。 二、McCabe 度量法 McCabe 度量法是一种基于程序控制流的复杂性度量方法。McCabe 定义的程序复杂性度量值又称环路复杂度,它基于一个程序模块的程序图中环路的个数。 如果把程序流程图中每个处理符号都退化成一个结点,原来联结不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图。 计算有向图G 的环路复杂性的公式: V(G)= m- n+ 2 其中,V( G) 是有向图G 中的环路个数 , m 是图G 中有向弧个数 , n 是图G 中结点个数。 以图9-5-1 为例,其中,结点数n= 11,弧数m= 12,则有 V( G)=m- n+ 2= 12- 11+ 2= 3。 即 McCabe 环路复杂度度量值为3 。它也可以看做由程序图中的有向弧所封闭的区域个数。 图 9-5-1 程序图的例子 当分支或循环的数目增加时,程序中的环路也随之增加,因此McCabe 环路复...