第5章白盒测试_第1页
第5章白盒测试_第2页
第5章白盒测试_第3页
第5章白盒测试_第4页
第5章白盒测试_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-3-1信息工程教研室 谷凌雁白盒测试白盒测试 白盒测试概念 测试覆盖标准逻辑驱动测试基本路径测试 把测试对象看做一个透明的盒子 白盒测试是根据被测程序的内部结构设计测试用例并完成测试的一种测试方法 白盒测试或逻辑驱动测试 基于一个应用代码的内部逻辑知识,测试覆盖全部代码、分支、路径和条件 白盒测试(结构测试)概念白盒测试 (结构测试)特点 可以构成测试数据使特定程序部分得到测试 有一定的充分性度量手段 可获得较多工具支持 通常只用于单元测试白盒测试的方法静态测试方法: 程序结构分析正式审查 同事审查 公开陈述 检验动态测试方法: 逻辑覆盖语句覆盖判定覆盖条件覆盖判定-条件覆盖条件组合

2、 路径覆盖通用代码审查清单 数据引用错误 数据声明错误 计算错误 比较错误 控制流程错误 子程序参数错误 输入、输出错误 其他错误代码覆盖率 采用白盒法进行测试时,考虑的是测试用例对程序内部逻辑的覆盖程度 最彻底的白盒法是覆盖程序中的每一条路径,但这往往无法实现 采用其它一些标准来量度覆盖的程度,并希望覆盖程度尽可能高些测试覆盖标准测试覆盖标准 上页小程序的流程图,其中包括了一个执行达20次的循环。那么它所包含的不同执行路径数高达520(1013)条,若要对它进行穷举测试,覆盖所有的路径。假使测试程序对每一条路径进行测试需要1毫秒,同样假定一天工作24小时,一年工作365 天, 那么要想把如图

3、所示的小程序的所有路径测试完,则需要3170年。逻辑驱动测试 语句覆盖 判定覆盖 条件覆盖 判定条件覆盖 条件组合覆盖路径覆盖例:实现一个简单的数学运算 Dim a,b As Integer Dim c As Double If (a0 And b0) Then c=c/a End if If (a1 or c1) Then c=c+1 End if1. c=b+c1.语句覆盖基本思想是:设计若干测试用例,运行被测程序,使程序中每个可执行语句至少执行一次。11.语句覆盖续1只需设计一个测试用例:a=2,b=1,c=6;即达到了语句覆盖。1.语句覆盖续2 【优点】【优点】 :可以很直观地从源代码

4、得到测试用例,无须细分每条判定表达式。 【缺点】【缺点】 :由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的。如在多分支的逻辑运算中无法全面的考虑。语句覆盖是最弱的逻辑覆盖。2.判定覆盖基本思想是:设计若干测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。12.判定覆盖续1a=2,b=1 ,c=6可覆盖判断M的Y分支和判断Q的Y分支; a=-2,b=-1 ,c=-3可覆盖判断M的N分支和判断Q的N分支 。 这两组测试用例可覆盖所有判定的真假分支。判断M判断Q2.判定覆盖续2a=1,b=1 ,c=-3 可覆盖判断M的

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

6、判断M表达式:设条件 a0 取真 记为 T1 假 F1 条件 b0 取真 记为 T2 假 F2 判断Q表达式:设条件 a1 取真 记为 T3 假 F3 条件 c1 取真 记为 T4 假 F4判断M判断Q3.条件覆盖续2测试用例覆盖条件具体取值条件a=2,b=-1,c=-2T1, F2, T3, F4a0,b1,c=1a=-1,b=2,c=3F1, T2, F3, T4a0,a1它覆盖了判定它覆盖了判定M M的的N分支和判断分支和判断Q Q的的Y分支。分支。我们用条件覆盖设计的思想就是让测试用例能覆盖T1、T2、T3、T4、F1、F2、F3、F4判断M判断Q3.条件覆盖续3 【优点】【优点】:增

7、加了对条件判定情况的测试,增加了测试路径。 【缺点】【缺点】:条件覆盖不一定包含判定覆盖。例如,我们刚才设计的用例就没有覆盖判断M的Y分支和判断Q的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。4.判定条件覆盖基本思想是:设计足够的测试用例,使得判断条件中的所有条件可能至少执行一次取值,同时,所有判断的可能结果至少执行一次。1判断M判断Q4.判定条件覆盖续1 按照判定条件覆盖的要求,我们设计的测试用例要满足如下条件:所有条件可能至少执行一次取值;所有判断的可能结所有判断的可能结果至少执行一次。果至少执行一次。要满足要满足T1、T2、 T3 、T4F1、 F2 、F3、

8、F44.判定条件覆盖续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、F44.判定条件覆盖续3 【优点】【优点】 :能同时满足判定、条件两种覆盖标准。 【缺点】【缺点】 :判定/条件覆盖准则的缺点是未考虑条件的组合情况。5.条件组合覆盖基本思想是:设计足够的测试用例,基本思想是:设计足够的测试用例,使使得所有可能的条件取值组合至少执行一得所有可能的条件取值组合至少执行一次次15.条件组合覆盖续1 按

9、照条件组合覆盖的基本思想,对于前面的例子,我们把每个判断中的所有条件进行组合,设计组合条件如表所示,而我们设计的测试用例就要包括所有的组合条件。编号覆盖条件取值判定条件取值具体条件取值1 T1,T2M取Y a0,b02 T1,F2M取N a0,b=03 F1,T2M取N a04 F1,F2M取N a= 0,b1,c16 T3,F4Q取Y a1,c=17 F3,T4Q取Y a18 F3,F4Q取N a=1,c 0 )5 6 If ( iType=0 )7x=y+2;8 else9 If ( iType=1 )10 x=y+10;11 else12 x=y+20;13 14 基本路径测试方法(续)

10、 画出控制流图: 如右图所示 计算环形复杂度: 10(条边)- 8(个节点)+ 2 = 4 导出独立路径(用语句编号表示) 路径1:414 路径2:46714 路径3:4691013414 路径4:4691213414467910121314路径覆盖的利弊 实现了所有路径的测试,发现错误能力强 某些条件错误可能无法发现 路径数庞大,不可能覆盖所有路径 用例数量的增加例1:有下面的C函数,用基本路径测试法进行测试 void Sort(int iRecordNum,int iType)o o int x=0;o int y=0;o while (iRecordNum- 0)o o if(0= =i

11、Type)o x=y+2; break;o elseo if (1= =iType)ox=y+10;o elseo x=y+20;o 1. 基本路径测试举例912基本路径测试举例第一步:第一步:画出控制流图流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。在流图中,每一个圆,称为流图的结点,代表一个或多个语句。一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构)。由边和结点限定的范围称为区域。

12、计算区域时应包括图外部的范围。基本路径测试-画控制流图出 画出其程序流程图和对应的控制流图如下467810111314467148101113程序流程图 控制流图991212基本路径测试 - 计算圈复杂度第二步:第二步:计算圈复杂度计算如下:流图中有四个区域;V(G)=10条边-8结点+2=4;V(G)=3个判定结点+1=4。4671481011132134基本路径测试 - 导出测试用例第三步:第三步:导出测试用例根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。) 路径1

13、:4-14 路径2:4-6-7-14 路径3:4-6-8-10-13-4-14 路径4:4-6-8-11-13-4-14根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。4671481011132134基本路径测试 - 准备测试用例第四步:第四步:准备测试用例 为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:基本路径测试 - 准备测试用例路径1:4-14输入数据:iRecordNum0,或者取iRecordNum 0)o o if(0= =iType)o x=y+2; break;o

14、 elseo if(1= =iType)o x=y+10;o elseo x=y+20;o 1. 例2:下例程序流程图描述了最多输入50个值(以1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112123456789111012R1R2R3R4R5R6开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1a

15、verage= 1 返回FFFTTT12和345和6789101112步骤步骤1:导出过程的流图导出过程的流图步骤步骤2:2:确定环形复杂性度量确定环形复杂性度量V(G)V(G):1)V(G)= 6 (个区域)2)V(G)=EN+2=1612+2=6其中E为流图中的边数,N为结点数;3)V(G)=P+1=5+1=6 其中P为谓词结点的个数。在流图中,结点2、3、5、6、9是谓词结点。123456789111012R1R2R3R4R5R6步骤步骤3 3:确定基本路径集合确定基本路径集合(即独立路径集合)。于是可确定6条独立的路径:路径1:1-2-9-10-12路径2:1-2-9-11-12路径3

16、:1-2-3-9-10-12路径4:1-2-3-4-5-8-2路径5:1-2-3-4-5-6-8-2路径6:1-2-3-4-5-6-7-8-2123456789111012R1R2R3R4R5R6步骤步骤4 4:为每一条独立路径各为每一条独立路径各设计一组测试用例,以便设计一组测试用例,以便强迫程序沿着该路径至少强迫程序沿着该路径至少执行一次。执行一次。1)路径1(1-2-9-10-12)的测试用例: scorek=有效分数值,当k i ; scorei=1, 2i50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。开始 i =1,n1=n2=0,sum

17、=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和67891011122)路径2(1-2-9-11-12)的测试用例: score 1 = 1 ; 期望的结果:average = 1 ,其他量保持初值。3)路径3(1-2-3-9-10-12)的测试用例: 输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1a

18、verage= 1 返回FFFTTT12和345和67891011124)路径4(1-2-3-4-5-8-2)的测试用例: scorei=有效分数,当i50; scorek0, k i ;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。5)路径5的测试用例: scorei=有效分数, 当i100, k i ;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTT

19、T12和345和67891011126)路径6(1-2-3-4-5-6-7-8-2)的测试用例: scorei=有效分数, 当i50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112 例3.第一步:第一步:导出控制流图第二步:第二步:计算环形复杂度1)V(G)= 4 (个区域)2)V(G)=EN+2=108+2=4 其中E为流图中的边数,N为结点数;3)V(

20、G)=P+1=3+1=4 其中P为谓词结点的个数。在流图中,结点7、9、11是谓词结点。第三步:第三步:确定基本路径集 路径1:7-18 路径2:7-9-10-16-7-18 路径3:7-9-11-15-16-7-18 路径4:7-9-11-13-14-15-16-7-18第四步:第四步:为每一条路径设计测试用例白盒测试的主要目的: 保证一个模块中的所有独立路径至少被执行一次; 对所有的逻辑值均需要测试真、假两个分支; 在上下边界及可操作范围内运行所有循环; 检查内部数据结构以确保其有效性。本章小结 控制流图有以下几个特点: (1)具有唯一入口结点,表示程序段的开始语句; (2)具有唯一出口结

21、点,表示程序段的结束语句; (3)结点由带标号的圆圈表示,表示一个或多个无分支的源程序语句; (4)控制边由带箭头的直线或弧表示,代表控制流的方向。本章小结白盒测试: 逻辑覆盖+路径覆盖 覆盖标准从低到高分别是: 语句覆盖:是一个比较弱的测试标准,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。它是最弱的逻辑覆盖,效果有限,必须与其它方法交互使用。 判定覆盖(也称为分支覆盖):执行足够的测试用例,使得程序中的每一个分支至少都通过一次。判定覆盖只比语句覆盖稍强一些,但实际效果表明,只是判定覆盖,还不能保证一定能查出在判断的条件中存在的错误。因此,还需要更强的逻辑覆盖准则去检验判断内部条件。条件覆盖:执行足够的测试用例,使程序中每个判断的每个条件的每个可能取值至少执行一次;条件覆盖深入到判定中的每个条

温馨提示

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

评论

0/150

提交评论