您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第五章FYL(B-环形复杂度)
第五章系统测试主要内容:系统测试至少占据了制作过程的一半工作量,是成功地开发信息系统的重要保证之一。本章将对系统测试的方法和技术进行系统地介绍。第五章系统测试5.1系统测试概述5.2人工测试5.3测试数据的设计5.4模块测试5.5高级测试5.6测试计划和控制5.7程序复杂度的定量度量(新增)思考题5.7程序复杂程度的定量度量1、引言详细设计阶段设计出的模块质量如何?定性的衡量方法:依据软件设计的基本原理和概念可仔细衡量。定量的度量方法:目前许多定量度量方法还处于研究过程中。本节将要介绍的程序复杂程度定量度量方法是其中比较成熟的一种。2、重要性估算软件中错误的数量、软件开发所需的工作量把程序的复杂程度乘以适当常数即可估算出;比较两个不同的设计或两个不同算法的优劣依定量度量的结果;模块规模的精确限度依程序的定量的复杂程度下面着重介绍McCabe方法和Halstead方法。5.7.1McCabe方法1.流图McCabe方法(环形复杂度):根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量的结果称为程序的环形复杂度。流图(程序图):所谓流图实质上是“退化了的”程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。程序流程图退化为流图的方法结点:圆表示。代表一条或多条语句。程序流程图中的一个顺序的处理框序列和一个菱形判定框,可以映射成流图中的一个结点。边:箭头线。代表控制流。流图中一条边必须终止于一个结点,即使这个结点并不代表任何语句(实际上相当于一个空语句)。判定节点:包含条件的结点。从每个判定结点引出两条或多条边。区域:由边和结点围成的面积称为区域。计算区域数时应包括图外部未被围起来的那个区域。复杂度:区域数。复合条件的映射复合条件:即条件中包含了一个或多个布尔运算符:逻辑OR,AND,NAND,NOR。映射:把复合条件分解为若干个简单条件,每个简单条件对应流图中一个判定结点。例1、把流程图映射成流图图5.7-1(a)程序流程图12,34,568791011图5.7-2(b)流图3216784591011边结点区域R1R4例2、由PDL翻译成流图PDLProcedure:sort1:dowhilerecordsremain2:readrecord;ifrecordfield1=0;3:thenprocessrecord;storeinbuffer;incrementcounter;4:elseifrecordfield2=0;5:thenresetcounter;6:elseprocessrecord;storeinfile;7a:endifendif7b:enddo8:end1234567a7b8流图图5由PDL翻译成的流图例3、包含复合条件的PDL映射成流图...IFaORbTHENprocedurexELSEprocedureyENDIF...axby图5.2由包含复合条件的PDL映射成的流图判定节点2.计算环形复杂度的方法环形复杂度:定量度量程序的逻辑复杂度。计算环形复杂度:基于程序控制流的流图。3种方法(计算环形复杂度):(1)流图中的区域数等于环形复杂度。(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。(3)流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。3.环形复杂度的用途影响程序的环形复杂度的因素:程序控制流的复杂程度,即程序结构的复杂程度。程序内分支数或循环个数。当它们增加时,环形复杂度也随之增加。环形复杂度的用途是对测试难度的一种定量度量;能对软件最终的可靠性给出某种预测。环形复杂度的值域McCabe研究大量程序后发现,环形复杂度高的程序往往是最困难、最容易出问题的程序。实践表明,模块规模以V(G)≤10为宜,V(G)=10是模块规模的一个更科学更精确的上限。5.7.2Halstead方法Halstead方法:根据程序中:运算符+操作数的总数来度量程序的复杂程度令:N1为程序中运算符出现的总次数;N2为操作数出现的总次数;程序长度N定义为:N=N1+N25.7.2Halstead方法(续)详细设计完成之后,可知道程序中使用的:n1:不同运算符(包括关键字)的个数;n2:不同操作数(变量和常数)的个数。Halstead的预测程序长度公式:H=n1log2n1+n2log2n2验证表明:预测的长度H与实际长度N非常接近。Halstead的预测程序中包含错误个数的公式:E=Nlog2(n1+n2)/3000≈Hlog2(n1+n2)/3000对300条到12000条语句范围内的程序核实上述公式,发现预测的错误数与实际错误数相比误差≤8%。5.7.3控制结构测试1.基本路径测试TomMcCabe提出的一种白盒测试技术。用基本路径测试设计测试用例的方法:首先计算程序的环形复杂度;用该复杂度为指南定义执行路径的基本集合;从该基本集合导出的测试用例可以保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。用基本路径测试技术设计测试用例的步骤第一步,根据过程设计结果画出相应的流图。第二步,计算流图的环形复杂度。第三步,确定线性独立路径的基本集合。第四步,设计可强制执行基本集合中每条路径的测试用例。举例用基本路径测试技术测试下列的用PDL描述的求平均值过程。注意:为了正确地画出流图,这里将被映射为流图结点的PDL语句编了序号。PROCEDUREaverage;/*这个过程计算不超过100个在规定值域内的有效数字的平均值;同时计算有效数字的总和及个数。*/INTERFACERETURNSaverage,total.input,total.valid;INTERFACEACCEPTSvalue,minimum,maximum;TYPEvalue[1…100]ISSCALARARRAY;TYPEaverage,total.input,total.valid;minimum,maximum,sumISSCALAR;TYPEiISINTEGER;举例(程序主体部分-见黑板)1:i=1;total.input=total.valid=0;sum=0;2:DOWHILEvalue[i]-9993:ANDtotal.input1004:incrementtotal.inputby1;5:IFvalue[i]=minimum6:ANDvalue[i]=maximum7:THENincrementtotal.validby1;sum=sum+value[i];8:ENDIFincrementiby1;9:ENDDO10:IFtotal.valid011:THENaverage=sum/total.valid;12:ELSEaverage=-999;13:ENDIFENDaverage(1)流图如下。12345678910111213(2)计算流图的环形复杂度3种方法均可边:E=17结点:N=13判定结点数:P=5环形复杂度:V(G)=E-N+2=6V(G)=P+1=6区域:6判定结点:2、3、5、6和10。12345678910111213(3)确定线性独立路径的基本集合独立路径:指至少引入程序的一个新处理语句集合或一个新条件的路径;用流图术语描述:独立路径至少包含一条在定义该路径之前不曾用过的边。独立路径数:即环形复杂度。环形复杂度是确保程序中所有语句至少被执行一次所需的测试数量的上界。本例中求平均值过程,由于环形复杂度为6,因此共有6条独立路径。6条独立路径路径1:1-2-10-11-13路径2:1-2-10-12-13路径3:1-2-3-10-11-13路径4:1-2-3-4-5-8-9-2-...路径5:1-2-3-4-5-6-8-9-2-...路径6:1-2-3-4-5-6-7-8-9-2-...12345678910111213(4)设计可强制执行基本集合中每条路径的测试用例设计规则:应该选取测试数据使得在测试每条路径时都适当地设置好了各个判定结点的条件。注意:在测试过程中,执行每个测试用例并把实际输出结果与预期结果相比较。一旦执行完所有测试用例,就可以确保程序中所有语句都至少被执行了一次,而且每个条件都分别取过true值和false值。路径1的测试用例:路径1:1-2-10-11-13value[k]=有效输入值,其中ki,(i的定义见下面)value[i]=-999,其中2≤i≤100预期结果:基于k的正确平均值和总数。注意:路径1无法独立测试,必须作为路径4、5和6的一部分来测试。123456789101112131:i=1;total.input=total.valid=0;sum=0;2:DOWHILEvalue[i]-9993:ANDtotal.input100...9:ENDDO10:IFtotal.valid011:THENaverage=sum/total.valid;12:ELSEaverage=-999;13:ENDIFENDaverageFT路径2的测试用例:路径2:1-2-10-12-13value[1]=-999预期结果:average=-999,其他都保持初始值。123456789101112131:i=1;total.input=total.valid=0;sum=0;2:DOWHILEvalue[i]-9993:ANDtotal.input100...9:ENDDO10:IFtotal.valid011:THENaverage=sum/total.valid;12:ELSEaverage=-999;13:ENDIFENDaverageF路径3的测试用例:路径3:1-2-3-10-11-13试图处理101个或更多个值前100个数值应是有效输入值预期结果:前100个数的平均值,总数为100。注意:路径3也无法独立测试,必须作为路径4、5和6的一部分来测试。123456789101112131:i=1;total.input=total.valid=0;sum=0;2:DOWHILEvalue[i]-9993:ANDtotal.input100...9:ENDDO10:IFtotal.valid011:THENaverage=sum/total.valid;12:ELSEaverage=-999;13:ENDIFENDaverageT路径4的测试用例:路径4:1-2-3-4-5-8-9-2-...value[i]=有效输入值,其中i100,value[k]minimum,其中ki预期结果:基于k的正确平均值和总数。123456789101112131:i=1;total.input=total.valid=0;sum=0;2:DOWHILEvalue[i]-9993:ANDtotal.input1004:incrementtotal.inputby1;5:IFvalue[i]=minimum...8:ENDIFincrementiby1;9:ENDDO...TTF路径5的测试用例:路径5:1-2-3-4-5-6-8-9-2-...value[i]=有效输入值,其中i100,value[k]maxmum,其中ki预期结果:基于k的正确平均值和总数。12345678910111213TT1:i=1;total.input=total.valid=0;sum=0;2:DOWHILEvalue[i]-9993:ANDtotal.input1004:incrementtotal.inputby1;5:IFvalue[i]=minimum6:ANDvalue[i
本文标题:第五章FYL(B-环形复杂度)
链接地址:https://www.777doc.com/doc-5326128 .html