正在加载图片...
代码行数与出错率是线性相关的。随着程序的增大,出错率以非线性方式增长。所以,代码 行度量法只是一个简单的,估计得很粗糙的方法 (2) McCabe度量法 McCabe度量法是一种基于程序控制流的复杂 A开始 性度量方法。 McCabe定义的程序复杂性度量值又称 环路复杂度,它基于一个程序模块的程序图中环路的 个数 如果把程序流程图中每个处理符号都退化成 C输入 个结点,原来联结不同处理符号的流线变成连接不同 结点的有向弧,这样得到的有向图就叫做程序图 计算有向图G的环路复杂性的公式: L结束 其中,V(G)是有向图G中的环路个数,m是图G 中有向弧个数,n是图G中结点个数。 以图43为例,其中,结点数n=11,弧数m= 12,则有V(G)=m-n+2=12-11+2=3。即 Mccabe环路复杂度度量值为3。它也可以看做由程 序图中的有向弧所封闭的区域个数 H输入 当分支或循环的数目增加时,程序中的环路也 图43程序图的例子 随之增加,因此 Mccabe环路复杂度度量值实际上是 为软件测试的难易程度提供了一个定量度量的方法,同时也间接地表示了软件的可靠性。实 验表明,源程序中存在的错误数以及为了诊断和纠正这些错误所需的时间与 McCabe环路复 杂度度量值有明显的关系。 Myers建议,对于复合判定,例如(A=0)n(C=D)U(x=A)算做三个判定 利用 Mccabe环路复杂度度量时,有几点说明。 环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环数目增加时其复 杂度也增加。环路复杂度与程序中覆盖的路径条数有关。 环路复杂度是可加的。例如,模块A的复杂度为3,模块B的复杂度为4,则模块 与模块B的复杂度是 McCabe建议,对于复杂度超过10的程序,应分成几个小程序,以减少程序中的错误 Walsh用实例证实了这个建议的正确性。他发现,在 McCabe复杂度为10的附近,存在出错 率的间断跃变。 Mccabe环路复杂度隐含的前提是:错误与程序的判定加上例行子程序的调用数目成正 比。而加工复杂性、数据结构、录入与打乱输入卡片的错误可以忽略不计 (3) Halstead的软件科学 Halstead软件科学研究确定计算机软件开发中的一些定量规律,它采用以下一组基本的 度量值,这些度量值通常在程序产生之后得出,或者在设计完成之后估算出 ①程序长度,即预测的 Halstead长度 令n1表示程序中不同运算符(包括保留字)的个数,令n2表示程序中不同运算对象的 个数,令H表示“程序长度”,则有H=nl· logz nl+n2·logn2 这里,H是程序长度的预测值,它不等于程序中语句个数。在定义中,运算符包括: 算术运算符赋值符(=或:=) 数组操作符 逻辑运算符分界符(,或;或:)子程序调用符 关系运算符括号运算符 循环操作符等。11 代码行数与出错率是线性相关的。随着程序的增大,出错率以非线性方式增长。所以,代码 行度量法只是一个简单的,估计得很粗糙的方法。 (2) McCabe 度量法 McCabe 度量法是一种基于程序控制流的复杂 性度量方法。McCabe 定义的程序复杂性度量值又称 环路复杂度,它基于一个程序模块的程序图中环路的 个数。 如果把程序流程图中每个处理符号都退化成一 个结点,原来联结不同处理符号的流线变成连接不同 结点的有向弧,这样得到的有向图就叫做程序图。 计算有向图 G 的环路复杂性的公式: V (G)=m-n+2 其中,V(G)是有向图 G 中的环路个数,m 是图 G 中有向弧个数,n 是图 G 中结点个数。 以图 4.3 为例,其中,结点数 n=11,弧数 m= 12,则有 V(G)=m-n+2=12-11+2=3。即 McCabe 环路复杂度度量值为 3。 它也可以看做由程 序图中的有向弧所封闭的区域个数。 当分支或循环的数目增加时,程序中的环路也 随之增加,因此 McCabe 环路复杂度度量值实际上是 为软件测试的难易程度提供了一个定量度量的方法,同时也间接地表示了软件的可靠性。实 验表明,源程序中存在的错误数以及为了诊断和纠正这些错误所需的时间与 McCabe 环路复 杂度度量值有明显的关系。 Myers 建议,对于复合判定,例如(A=0)∩(C=D)∪(X='A')算做三个判定。 利用 McCabe 环路复杂度度量时,有几点说明。 ▪ 环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环数目增加时其复 杂度也增加。环路复杂度与程序中覆盖的路径条数有关。 ▪ 环路复杂度是可加的。例如,模块 A 的复杂度为 3,模块 B 的复杂度为 4,则模块 A 与模块 B 的复杂度是 7。 ▪ McCabe 建议,对于复杂度超过 10 的程序,应分成几个小程序,以减少程序中的错误。 Walsh 用实例证实了这个建议的正确性。他发现,在 McCabe 复杂度为 10 的附近,存在出错 率的间断跃变。 ▪ McCabe 环路复杂度隐含的前提是:错误与程序的判定加上例行子程序的调用数目成正 比。而加工复杂性、数据结构、录入与打乱输入卡片的错误可以忽略不计。 (3) Halstead 的软件科学 Halstead 软件科学研究确定计算机软件开发中的一些定量规律,它采用以下一组基本的 度量值,这些度量值通常在程序产生之后得出,或者在设计完成之后估算出。 ① 程序长度,即预测的 Halstead 长度 令 n1 表示程序中不同运算符(包括保留字)的个数,令 n2 表示程序中不同运算对象的 个数,令 H 表示“程序长度”,则有 H = n1  log2 n1 + n2  log2 n2 这里,H 是程序长度的预测值,它不等于程序中语句个数。在定义中,运算符包括: 算术运算符 赋值符(= 或 := ) 数组操作符 逻辑运算符 分界符(,或 ;或 : ) 子程序调用符 关系运算符 括号运算符 循环操作符等。 图 4.3 程序图的例子 C 输入 D E H 输入 K 输出 L 结束 A 开始 B F G J
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有