北大测试全套课件和教案-第4章-白盒测试_第1页
北大测试全套课件和教案-第4章-白盒测试_第2页
北大测试全套课件和教案-第4章-白盒测试_第3页
北大测试全套课件和教案-第4章-白盒测试_第4页
北大测试全套课件和教案-第4章-白盒测试_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

白盒测试软件工程系引言静态测试和动态测试静态测试是指不运行程序进行的测试------只是检查和审阅。白盒测试和黑盒测试测试用例的设计中,通常会把白盒测试和黑盒测试结合起来使用anhuisoft@163.com本章主要内容4.1静态测试技术4.2白盒测试技术anhuisoft@163.com4.1静态测试技术4.1.1代码检查4.1.2静态结构分析4.1.3代码质量度量anhuisoft@163.com4.1.1代码检查代码检查包括代码走查、代码审查等anhuisoft@163.com代码走查有组织的代码走查在编码阶段去除错误的成本是在软件发布阶段去除错误成本的1/92全部的代码是否都需要走查最大的问题是劝说开发者要遵循一定的标准anhuisoft@163.com编码风格与规范好的风格对于好的程序设计具有关键性作用代码应该是清楚的和简单的-------具有直截了当的逻辑、自然的表达式、通行的语言使用方式anhuisoft@163.com代码审查代码审查和代码走查比较代码审查是提高代码质量的良药消除开发员的心理抵触代码审查要有目标代码审查清单anhuisoft@163.com代码审查和代码走查比较项目走查审查准备通读设计和编码应准备好需求描述文档、程序设计文档、程序的源代码清单、代码编码标准和代码缺陷检查表形式非正式会议正式会议参加人员开发人员为主项目组成员包括测试人员主要技术方法无缺陷检查表注意事项限时、不要现场修改代码限时、不要现场修改代码生成文档会议记录静态分析错误报告目标代码标准规范,无逻辑错误代码标准规范,无逻辑错误anhuisoft@163.com代码审查清单数据引用错误数据声明错误计算错误比较错误控制流程错误子程序参数错误输出错误其他检查anhuisoft@163.com4.1.2静态结构分析静态结构分析主要是以图形的方式表现程序的内部结构,例如函数调用关系图、函数内部控制流图。其中,函数调用关系图以直观的图形方式描述一个应用程序中各个函数的调用和被调用关系;控制流图显示一个函数的逻辑结构,它由许多节点组成,一个节点代表一条语句或数条语句,连接结点的叫边,边表示节点间的控制流向。anhuisoft@163.com4.1.3代码质量度量ISO/IEC9126国际标准所定义的软件质量包括六个方面:功能性、可靠性、易用性、效率、可维护性和可移植性。软件的质量是软件属性的各种标准度量的组合。anhuisoft@163.com4.2白盒测试方法白盒测试,也称为结构化测试、基于代码的测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。3581322.293419985680302829734315250*(1+0.015)*((1+0.015)^360-1)/0.015白盒测试—带上X光眼镜测试anhuisoft@163.com4.2白盒测试方法这个流程图,其中包括了一个执行达20次的循环。那么它所包含的不同执行路径数高达520条,若要对它进行穷举测试,覆盖所有的路径。假使测试程序对每一条路径进行测试需要1毫秒,同样假定一天工作24小时,一年工作365天,那么要想把如图所示的小程序的所有路径测试完,则需要3170年。anhuisoft@163.com4.2白盒测试方法由于对于不同复杂度的代码逻辑,可以衍生出许多种执行路径,只有选择适当的测试方法,才能帮助我们从代码的迷雾森林中找到正确的方向。anhuisoft@163.com4.2.1逻辑覆盖法白盒测试中的逻辑覆盖方法有以下6种:语句覆盖判定覆盖条件覆盖判定-条件覆盖条件组合覆盖路径覆盖anhuisoft@163.com例:实现一个简单的数学运算

Dima,bAsIntegerDimcAsDoubleIf(a>0Andb>0)Thenc=c/aEndifIf(a>1orc>1)Thenc=c+1Endifc=b+canhuisoft@163.com1.语句覆盖基本思想是:设计若干测试用例,运行被测程序,使程序中每个可执行语句至少执行一次。1anhuisoft@163.com1.语句覆盖……续1只需设计一个测试用例:a=2,b=1,c=6;即达到了语句覆盖。anhuisoft@163.com1.语句覆盖……续2【优点】:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。【缺点】:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的。如在多分支的逻辑运算中无法全面的考虑。语句覆盖是最弱的逻辑覆盖。anhuisoft@163.com2.判定覆盖基本思想是:设计若干测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。1anhuisoft@163.com2.判定覆盖……续1a=2,b=1,c=6可覆盖判断M的Y分支和判断Q的Y分支;

a=-2,b=-1,c=-3可覆盖判断M的N分支和判断Q的N分支

。这两组测试用例可覆盖所有判定的真假分支。判断M判断Qanhuisoft@163.com2.判定覆盖……续2a=1,b=1,c=-3

可覆盖判断M的Y分支和判断Q的N分支

a=1,b=-2,c=3可覆盖判断M的N分支和判断Q的Y分支

同样的这两组测试用例也可覆盖所有判定的真假分支。判断M判断Qanhuisoft@163.com2.判定覆盖……续3【优点】:判定覆盖具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。【缺点】:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。anhuisoft@163.com3.条件覆盖基本思想是:设计若干测试用例,执行被测程序以后要使每个判断中每个条件的可能取值至少满足一次。1anhuisoft@163.com3.条件覆盖……续1判断M表达式:设条件a>0取真记为T1

假F1

条件b>0取真记为

T2

假F2判断Q表达式:设条件a>1取真记为T3

假F3条件c>1取真记为T4

假F4判断M判断Qanhuisoft@163.com3.条件覆盖……续2测试用例覆盖条件具体取值条件a=2,b=-1,c=-2T1,F2,T3,F4a>0,b<=0,a>1,c<=1a=-1,b=2,c=3F1,T2,F3,T4a<=0,b>0,a<=1,c>1它覆盖了判定M的N分支和判断Q的Y分支。我们用条件覆盖设计的思想就是让测试用例能覆盖T1、T2、T3、T4、F1、F2、F3、F4判断M判断Qanhuisoft@163.com3.条件覆盖……续3【优点】:增加了对条件判定情况的测试,增加了测试路径。【缺点】:条件覆盖不一定包含判定覆盖。例如,我们刚才设计的用例就没有覆盖判断M的Y分支和判断Q的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。anhuisoft@163.com4.判定-条件覆盖基本思想是:设计足够的测试用例,使得判断条件中的所有条件可能至少执行一次取值,同时,所有判断的可能结果至少执行一次。1anhuisoft@163.com判断M判断Q4.判定-条件覆盖……续1按照判定-条件覆盖的要求,我们设计的测试用例要满足如下条件:所有条件可能至少执行一次取值;所有判断的可能结果至少执行一次。要满足T1、T2、T3、T4F1、F2、F3、F4anhuisoft@163.com4.判定-条件覆盖……续2测试用例覆盖条件覆盖判断a=2,b=1,c=6T1,T2,T3,T4M的Y分支和Q的Y分支a=-1,b=-2,c=-3F1,F2,F3,F4M的N分支和Q的N分支判断M判断Q要满足T1、T2、T3、T4F1、F2、F3、F4anhuisoft@163.com4.判定-条件覆盖……续3【优点】:能同时满足判定、条件两种覆盖标准。【缺点】:判定/条件覆盖准则的缺点是未考虑条件的组合情况。anhuisoft@163.com5.条件组合覆盖基本思想是:设计足够的测试用例,使得所有可能的条件取值组合至少执行一次1anhuisoft@163.com5.条件组合覆盖……续1按照条件组合覆盖的基本思想,对于前面的例子,我们把每个判断中的所有条件进行组合,设计组合条件如表所示,而我们设计的测试用例就要包括所有的组合条件。编号覆盖条件取值判定条件取值具体条件取值1T1,T2M取Ya>0,b>02T1,F2M取Na>0,b<=03F1,T2M取Na<=0,b>04F1,F2M取Na<=0,b<=05T3,T4Q取Ya>1,c>16T3,F4Q取Ya>1,c<=17F3,T4Q取Ya<=1,c>18F3,F4Q取Na<=1,c<=1anhuisoft@163.com5.条件组合覆盖……续2测试用例覆盖条件覆盖判断覆盖组合a=2,b=1,c=6T1,T2,T3,T4M取Y分支,Q取Y分支1,5a=2,b=-1,c=-2T1,F2,T3,F4M取N分支,Q取Y分支2,6a=-1,b=2,c=3F1,T2,F3,T4M取N分支,Q取Y分支3,7a=-1,b=-2,c=-3F1,F2,F3,F4M取N分支,Q取N分支4,8要满足1、2、3、4、5、6、7、8条件组合anhuisoft@163.com5.条件组合覆盖……续3【优点】:条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。【缺点】:线性地增加了测试用例的数量。anhuisoft@163.com6.路径覆盖基本思想是:设计所有的测试用例,来覆盖程序中的所有可能的执行路径。1anhuisoft@163.com6.路径覆盖……续1测试用例覆盖组合覆盖路径a=2,b=1,c=61,51-2-4a=1,b=1,c=-31,81-2-5a=-1,b=2,c=34,71-3-4a=-1,b=-2,c=-34,81-3-5anhuisoft@163.com6.路径覆盖……续2【优点】:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。【缺点】:需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。anhuisoft@163.com从前面的例子我们可以看到,采用任何一种覆盖方法都不能满足我们的要求,所以,在实际的测试用例设计过程中,可以根据需要将不同的覆盖方法组合起来使用,以实现最佳的测试用例设计。anhuisoft@163.com条件组合覆盖结合路径覆盖测试用例覆盖条件覆盖路径覆盖组合a=2,b=1,c=6T1,T2,T3,T4P1:(1-2-4)1,5a=1,b=1,c=-3T1,T2,F3,F4P2:(1-2-5)1,8a=-1,b=2,c=3F1,F2,F3,T4P3:(1-3-4)4,7a=-1,b=-2,c=-3F1,F2,F3,F4P4:(1-3-5)4,8a=2,b=-1,c=-2T1,F2,T3,F4P3:(1-3-4)2,6a=-1,b=2,c=3F1,T2,F3,T4P3:(1-3-4)3,7anhuisoft@163.com4.2.3程序结构分析程序的结构形式是白盒测试的主要依据。这一部分将从控制流分析和数据流分析的不同方面讨论如何分析程序结构。我们的目的是要在程序中找到隐藏的错误。控制流分析数据流分析anhuisoft@163.com控制流分析由于非结构化程序会给测试带来许多不必要的困难,所以业界要求写出的程序具有良好的结构。控制流图程序结构的基本要求anhuisoft@163.com控制流图程序流程图又称框图,是我们最熟悉,也是最容易理解的一种程序控制结构的图形表示了。在这种图上的框里面常常标明了处理要求或者条件,但是,这些标注在做路径分析时是不重要的。为了了更加突出控制流的结构,需要对程序流程图做一些简化。在图4-2种我们给出了简化的例子。其中(a)图示一个含有两个出口判断和循环的程序流程图,我们把它简化成(b)的形式,称这种简化了的程序流程图叫做控制流图。anhuisoft@163.com控制流图……续在控制流图中只有两种图形符号,它们是:节点:以标有编号的圆圈表示。它代表了程序流程图中矩形框表示的处理、菱形表示的两个到多个出口判断以及两条到多条流线相交的汇合点。控制流线或弧:以箭头表示。它与程序流程图中的流线是一致的,表明了控制的顺序。为了方便讨论,控制流线通常标有名字,如图中所标的a、b、c等。图4-2(a)(b)anhuisoft@163.com控制流图……续2为了使控制流图在机器上表示,我们可以把它表示成矩阵的形式,称为控制流图矩阵。图4-3表示了图4-2的控制流图矩阵,这个矩阵有5行5列,是由该控制图中5个节点决定的。矩阵中6个元素a、b、c、d、e和f的位置决定了它们所连接节点的号码。例如,弧d在矩阵中处于第3行第4列,那是因为它在控制流图中连接了节点3至节点4。这里必须注意方向,图中节点4到节点3没有弧,所以矩阵中第4行第3列也就没有元素。图4-3anhuisoft@163.com除了用程序流程图可以转化成控制流图以外,还可以把伪代码表示的处理过程转化成控制流图。根据程序建构控制流图很容易。例如:三角形伪代码实现过程转化成了控制流图anhuisoft@163.comanhuisoft@163.com有的时候,我们可以把几个节点合并成一个,合并的原则是:若在一个节点序列中没有分支,则我们可以把这个序列的节点都合并成一个节点。anhuisoft@163.comanhuisoft@163.com包含复合条件的伪代码转化成控制流图anhuisoft@163.com程序结构的基本要求我们对于程序结构提出以下4点基本要求,这些要求是,写出的程序不应该包含:转向并不存在的标号;没有用过的语句标号;从程序入口进入后无法达到的语句;不能达到停机语句的语句。anhuisoft@163.com数据流分析在单元测试中,数据仅仅在一个模块或者一个函数种流通。但是,数据流的通路往往涉及多个集成模块,甚至于整个软件,所以我们有必要进行数据流的测试,尽管它非常耗时。数据流分析最初是随着编译系统要生成有效的目标代码而出现的,这类方法主要用于优化代码。数据流测试是指一个基于通过程序的控制流,从建立的数据目标状态的序列中发现异常的结构测试方法。数据流测试用作路径测试的“真实性检查”。anhuisoft@163.com数据流分析……续早期的数据流分析常常集中于现在叫做定义/引用异常的缺陷:变量杯定义,但是从来没有使用。所使用的变量没有被定义。变量在使用之前被定义了两次。因为程序内的语句因变量的定义和使用而彼此相关,所以用数据流测试方法更能有效地发现软件缺陷。但是,在度量测试覆盖率和选择测试路径的时候,数据流测试很困难。anhuisoft@163.com4.2.4路径测试1.DD-路径测试(决策到决策路径测试)2.基本路径测试anhuisoft@163.comDD-路径测试在讨论DD-路径测试之前,我们先要了解什么叫做链,在这里,链出现在有向图中,是一条起始节点和终止节点不同的路径,并且每个节点的出度=1,入度=1。也有一种长度为0的退化链情况,意思就是这条连只有一个节点和0条边。anhuisoft@163.comDD-路径测试……续DD-路径是控制流图中的一条链,只要满足下列五种情况之一:由一个节点组成,入度=0;由一个节点组成,出度=0;由一个节点组成,入度>=2或者出度>=2;由一个节点组成,入度=1并且出度=1;长度>=1的最大链。anhuisoft@163.comDD-路径测试……续2为了便于理解,我们用图4-4三角形伪代码映射成的控制流图来说明这五种情况。anhuisoft@163.com节点DD-路径名称定义情况4第一15-8A59B310C411D412E313F314H315I416J317K418L419M320N321G422O323最后2图4-4anhuisoft@163.comDD-路径测试……续3提出DD-路径的目的很多质量机构都把DD-路径覆盖作为测试覆盖的最低可接受级别。E.F.Miller发现,当通过一组测试用例满足DD-路径覆盖要求时,可以发现全部缺陷中的大约85%(Miller1991)。如果每一条DD-路径都被遍历,则我们知道每个判断分支都被执行,其实就是遍历DD-路径图中每条边。对于if类的语句,这意味着真、假分支都要覆盖。对于CASE语句,则每个子句都要覆盖。anhuisoft@163.comDD-路径测试……续4DD-路径定义:给定采用命令式语言编写的一段程序,其DD-路径是有向图。其中,节点表示其程序图的DD-路径,边表示连续DD-路径之间的控制流。在实践中,手工为最多大约100行源代码的程序生成DD-路径图是可行的。若超过这种规模,大多数测试人员会借助工具完成。anhuisoft@163.com基本路径测试基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。anhuisoft@163.com基本路径测试……续基本路径测试法包括以下5个方面:程序的控制流图:描述程序控制流的一种图示方法。程序环形复杂性:环形复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本独立路径数目边。导出测试用例:通过程序的控制流图导出基本路径集,列出程序的独立路径。准备测试用例,确保基本路径集中的每一条路径的执行。图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。anhuisoft@163.com基本路径测试……举例下面我们通过一个实例来说明基本路径测试。例:请看以下代码,它由C++语言书写。把它转化成图形矩阵,最后使用基本路径测试法为变量temp设计测试用例,使之满足基本路径覆盖要求。anhuisoft@163.com基本路径测试……举例voidReadPara(CStringtemp){

if(temp==">=")

m_oper.SetCurSel(0);

else

{

if(temp==">")

m_oper.SetCurSel(1);

else

{

if(temp=="==")

m_oper.SetCurSel(2);

else

{

if(temp=="<=")m_oper.SetCurSel(3);

else

{

if(temp=="<")

m_oper.SetCurSel(4);

else

m_oper.SetCurSel(5);

}

}

}

}return;}anhuisoft@163.com1.画出这段代码的控制流图,如4-9所示:2.根据控制流图,计算环路复杂度V(G)=22-18+2=6。3.导出测试用例,列出路径:Path1:2-3-4-27-28Path2:2-3-7-8-26-27-28Path3:2-3-7-11-12-25-26-27-28Path4:2-3-7-11-15-16-24-25-26-27-28Path5:2-3-7-11-15-19-20-23-24-25-26-27-28Path6:2-3-7-11-15-19-22-23-24-25-26-27-28图4-9控制流图anhuisoft@163.com4.设计测试用例根据第3步中给出的路径,下面设计测试用例列在表4-9中。5.图形矩阵的画法在前面我们已经讲过,这里不再赘述。传入参数预期调用Path1ReadPara(”>=”)m_oper.SetCurSel(0)Path2ReadPara(”>”)m_oper.SetCurSel(1)Path3ReadPara(”==”)m_oper.SetCurSel(2)Path4ReadPara(”<”)m_oper.SetCurSel(3)Path5ReadPara(”<=”)m_oper.SetCurSel(4)Path6ReadPara(”+”)m_oper.SetCurSel(5)anhuisoft@163.com4.2.5程序插桩在软件测试中,常常要用到一种“插桩”技术,通过在源代码中加入记录信息语句,以便进行运行信息的追踪和调试,统计有关的运行资源状况。anhuisoft@163.com程序插桩……续

想做插桩,可以思考以下几点:

(1)如果出现在语句中包含了return语句,怎么在它前面插入指定语句?同时保证语句的语法合法性?

例如:

for

(

j=0;j<10000;j++)

{

if

(

j

==

k)

return

;

<-----

不能直接在之前插入,否则意义全变了;

}anhuisoft@163.com程序插桩……续2

(2)当出现需要在for

循环语句、while循环语句中进行插入信息时候,很可能会导致程序运行时间非常长,是否有办法改进“插桩”机制?

(3)是否可以由用户进行指定,比如for

语句、

温馨提示

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

最新文档

评论

0/150

提交评论