软件的复杂性度量方法概述_第1页
软件的复杂性度量方法概述_第2页
软件的复杂性度量方法概述_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2.软件的复杂性度量方法概述根据软件的生命周期,Halstead复杂性度量和McCabe圈复杂度度量都属 于可以应用在软件测试阶段的度量技术。在基于程序体积的复杂性度量算法中,最具影响力的是20世纪70年代由 Halstead提出的软件科学度量理论2。Halstead从统计学和心理学的角度研究 软件复杂性,把程序看成由可执行的代码行词汇(操作符和操作数)组成的符号序 列。Halstead在其度量理论中采用一些基本的度量值来确定软件开发中的一些 定量规律,这些度量值通常在程序产生之后得出,或者设计完成之后算出。 Halstead的重要结论之一是:程序实际的Halstead长度值N可以由代码行词汇

2、 n算出。McCabe于1976年指出:应该用程序流图的圈数(Cycloramic number)来测 量程序的复杂性,并基于程序控制论和图论提出了经典的McCabe圈复杂性度量 理论。McCabe控制流图是一种简化的程序流程图,如果把流程图中的每个基本 框抽象为一个点,略去每个框的具体信息,就产生一个由结点和弧(或称为分支) 组成的图,称为控制流图。控制流图是有向图,可用G = 表示,其中V 表示结点集合,代表程序流程图中的基本框;E表示有向边,代表程序流程图中 的控制方向。图1则表示了一个典型程序及其相应的流程图:A: InPut(Seore);B: If Seore80F: Then P

3、rint( withdistinetion )G: End图1程序及其流程图为了讨论的方便,以下给出图论中的几个术语定义:强连通图:在有向图G中,任意两个结点x和y,都有一条从x到y的路径, 反之亦然。回路:指开始和终止于相同结点的路径。圈:指一个回路,其中所有结点(不包括开始结点)最多只出现一次。线性独立集:如果在一个集合中,任何一条路经都不是其他路径的线性组合, 则称该集合为线性独立集。圈的基集:即圈的最大线性独立集。在含有e条边和n个结点的图中,基集 有e - n + 1个圈。如果能够合理的编写程序,则总能够使控制流图中存在从开始结点(如图1 中的结点A)到达图中的其他每个结点的路径。一

4、般来说,控制流图不是强连通 的,因为不可能从其较低的一些结点到达较高的一些结点,但是,如果程序结构 中有一个包含整个程序的外循环,则存在一条从其中任意结点到开始结点的“出 口一入口”弧(如图1中的弧GA),该弧使控制流图变成强连通的,因为:从 开始结点能够到达程序图中的任意结点;从任意结点经“出口一入口”弧均可 回到开始结点。McCabe的圈复杂性度量就是考虑控制流图的圈的基集,因为在原始流图中 加了一条边,所以对于一个流图为G的程序模块,如果G有e条边和n个结点, 那么该程序模块的圈复杂度为:v(G) = e - n + 2更简单地说,设d是G中的 判定结点数,则v(G) = d + l。软

5、件工程的实践人员和研究人员一致认为:模块的圈数,即模块复杂度,与 模块中所存在的软件错误数或缺陷数,以及为了发现并改正它们所需的时间之间 存在着明显的联系。McCabe曾经指出:根据以往的经验,当一个模块的v超过 10时,这个模块可能就会出问题。Grady和他的研究小组关于v的结论是:模块 中允许的最大圈数为15(Grady, 1994)。Channel Tunnel铁路系统中的软件质量 保证规格要求:如果模块的圈数超过20,则该模块不合格。目前已提出的各种复杂性度量算法中,在软件工程界运用得比较多的是McCabe 的环计数和Halstead的软件科学度量法,我们称其为McCabe度量法和Ha

6、lstead 度量法。下面我们将连同最古老的代码行数度量法一起分别对它们进行简单介 绍。代码行数度量法代码行数度量法以程序的总代码行数作为程序复杂性的度量值。这种度量方 法有一个重要的隐含假定是:书写错误和语法错误在全部错误中占主导地位。然 而,由于这类错误严格来讲是私有的,不应把它们计入错误总数之中,在这种情 况下,这种度量方法的前提就不存在。因而,代码行数度量法是一种很粗糙的方 法,在实际应用中很少使用。McCabe度量法McCabe度量法以程序流程图的分析为基础,通过计算强连通的程序图中线 性无关有向环的个数,建立复杂性的度量。其计算公式为:V(G)=m-n+p,其中 V(G)是强连通有

7、向图G中的环数;m是G中的弧数;n是G中的节点数;p是G 中分离部分的数目。对于一个正常的程序来说,程序图总是连通的,即p=1。为了使之强连通, 我们可以从出口点到入口点画一条虚弧。实际上,我们常常采用另一种计算方法 来获得McCabe度量值,即对于单入口单出口模块(通常都属这种情况),我们只 需计算程序中判断语句个数加1即可得V(G)值。McCabe度量法实质上是对程序 控制流复杂性的度量,它并不考虑数据流,因而其科学性和严密性具有一定的局 限性。Halstead度量法Halstead度量法通过计算程序中的运算符和操作数的数量对程序的复杂性 加以度量。设n1表示程序中不同运算符的个数,n2表

8、示程序中不同操作数的个 数,N1表示程序中实际运算符的总数,N2表示程序中实际操作数的总数。令H 表示程序的预测长度,Halstead给出H的计算公式为:H=n1log2n1+n2log2n2; 令N表示实际的程序长度,其定义为:N=N1+N2。Halstead的重要结论之一是: 程序的实际长度N与预测长度非常接近。这表明即使程序还未编写完也能预先估 算出程序的实际长度N。Halstead还给出了另外一些计算公式,包括:程序容量: V=N log2(n1+n2),程序级别:L=(2/n1) * (n2/N2),编制程序所用的工作量:E A=V/L,程序中的错误数预测值:B=N log2(n1+n2)/3000。Halstead度量实际上只考虑了程序的数据流而没有考虑程序的控制流,因 而也不能从根本上反映程序的复杂性。需要说明一点的是,上述度量方法都是针对传统的结构化程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论