程序复杂性度量

程序复杂性度量

ID:37677004

大小:38.50 KB

页数:10页

时间:2019-05-28

程序复杂性度量_第1页
程序复杂性度量_第2页
程序复杂性度量_第3页
程序复杂性度量_第4页
程序复杂性度量_第5页
资源描述:

《程序复杂性度量》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、程序复杂性度量  程序复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少,开发周期的长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。  减少程序复杂性,可提高软件的简单性和可理解性,并使软件开发费用减少,开发周期缩短,软件内部潜藏错误减少  一、代码行度量法  度量程序的复杂性,最简单的方法就是统计程序的源代码行数。此方法基于两个前提:  (1)程序复杂性随着程序规模的增加不均衡地增长;  (2)控制程序规模的方法最好是采用分而治之的办法。将一个大程序分解成若干个简单的可理解的程序段。

2、  方法的基本考虑是统计一个程序模块的源代码行数目,并以源代码行数做为程序复杂性的度量。若设每行代码的出错率为每100行源程序中可能有的错误数目,例如每行代码的出错率为1%,则是指每100行源程序中可能有一个错误。  Thayer曾指出,程序出错率的估算范围是从0.04%~7%之间,即每100行源程序中可能存在0.04~7个错误。他还指出,每行代码的出错率与源程序行数之间不存在简单的线性关系。Lipow进一步指出,对于小程序,每行代码的出错率为1.3%~1.8%;对于大程序,每行代码的出错率增加到2.7%~3.2%

3、之间,但这只是考虑了程序的可执行部分,没有包括程序中的说明部分。Lipow及其他研究者得出一个结论:对于少于100个语句的小程序,源代码行数与出错率是线性相关的。随着程序的增大,出错率以非线性方式增长。所以,代码行度量法只是一个简单的,估计得很粗糙的方法。  二、McCabe度量法  McCabe度量法是一种基于程序控制流的复杂性度量方法。McCabe定义的程序复杂性度量值又称环路复杂度,它基于一个程序模块的程序图中环路的个数。  如果把程序流程图中每个处理符号都退化成一个结点,原来联结不同处理符号的流线变成连接不

4、同结点的有向弧,这样得到的有向图就叫做程序图。  计算有向图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环路复杂度度量值实际上是为软件测试的

5、难易程度提供了一个定量度量的方法,同时也间接地表示了软件的可靠性。实验表明,源程序中存在的错误数以及为了诊断和纠正这些错误所需的时间与McCabe环路复杂度度量值有明显的关系。  Myers建议,对于复合判定,例如(A=0)∩(C=D)∪(X='A')算做三个判定。  利用McCabe环路复杂度度量时,有几点说明。  ·环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环数目增加时其复杂度也增加。环路复杂度与程序中覆盖的路径条数有关。  ·环路复杂度是可加的。例如,模块A的复杂度为3,模块B的复杂度为4,则

6、模块A与模块B的复杂度是7。  ·McCabe建议,对于复杂度超过10的程序,应分成几个小程序,以减少程序中的错误。Walsh用实例证实了这个建议的正确性。他发现,在McCabe复杂度为10的附近,存在出错率的间断跃变。  ·McCabe环路复杂度隐含的前提是:错误与程序的判定加上例行子程序的调用数目成正比。而加工复杂性、数据结构、录入与打乱输入卡片的错误可以忽略不计。  三、Halstead的软件科学  Halstead软件科学研究确定计算机软件开发中的一些定量规律,它采用以下一组基本的度量值,这些度量值通常在程

7、序产生之后得出,或者在设计完成之后估算出。  1.程序长度,即预测的Halstead长度  令n1表示程序中不同运算符(包括保留字)的个数,令n2表示程序中不同运算对象的个数,令H表示“程序长度”,则有  H=n1·log2n1+n2·log2n2  这里,H是程序长度的预测值,它不等于程序中语句个数。在定义中,运算符包括:  算术运算符  赋值符(=或:=)    数组操作符  逻辑运算符  分界符(,或;或:)  子程序调用符  关系运算符  括号运算符      循环操作符等  特别地,成对的运算符,例如“B

8、EGIN…END”、“FOR…TO”、“REPEAT…UNTIL”、“WHILE…DO”、“IF…THEN…ELSE”、“(…)”等都当做单一运算符。  运算对象包括变量名和常数。   2.实际的Halstead长度  设N1为程序中实际出现的运算符总个数,N2为程序中实际出现的运算对象总个数,N为实际的Halstead长度,则有N=N1+N2  3.程序的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。