软件测试实践教程电子课件第2章白盒测试_第1页
软件测试实践教程电子课件第2章白盒测试_第2页
软件测试实践教程电子课件第2章白盒测试_第3页
软件测试实践教程电子课件第2章白盒测试_第4页
软件测试实践教程电子课件第2章白盒测试_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、第2章 白盒测试n2.1 白盒测试概述n2.2 白盒测试的测试用例设计方法 n2.3 白盒测试的典型案例 n2.4 白盒测试的工具 2.1 白盒测试概述n白盒测试又称为结构测试,主要是根据被测程序的内部结构设计测试用例。白盒测试根据测试方法可以分为静态白盒测试和动态白盒测试。 n静态白盒测试是指在不执行的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程。n动态白盒测试是指测试运行中的程序,并利用查看代码功能和实现方式得到的信息来确定哪些需要测试,哪些不要测试,如何开展测试,从而设计和执行测试,找出软件缺陷的过程。 2.2 白盒测试的测试用例设计方法n白盒测试的测试用例设计

2、方法主要为逻辑覆盖测试,逻辑覆盖测试包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖和路径覆盖 .语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖2.3 白盒测试的典型案例 例1nIf (a1) and (b=0) then x=x/a if(a=2) or (x1) then x=x+1语句覆盖n选择足够的测试用例,使程序中的可执行语句至少执行一次。n例子中要设计一个能通过ace的测试用例即可,a=2 b=0 x=3 n语句覆盖较弱,测试不充分,无法发现程序中某些逻辑运算符和逻辑条件的错误。判定覆盖n执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”和“假”值,或者说使得

3、程序中取“真”分支和取“假”分支至少经历一次。n例子:路径ace和abd,或通过路径acd和abe,即可达到判定覆盖标准。nX1错写为x1,为真,记为t1; a1,为假,记为-t1; b=0,为真,记为t2; b=0 ,为假,记为-t2; 第二个判定:a=2,为真,记为t3; a=2,为假,记为-t3; x1,为真,记为t4; x1 ,为假,记为-t4;n下面第一组测试用例既判定覆盖,又条件覆盖;第二组测试用例条件覆盖,但没有判定覆盖。判定/条件覆盖n要求设计足够多的测试用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且 每个判定本身的判定结果(真/假)至少出现一次。例子测试用例A

4、 b x执行路径覆盖条件A1 and b=0A=2Or X1用例12 0 3aceT1,t2,t3,t4T T用例21 1 1abd-t1,-t2,-t3,-t4FF 条件组合覆盖n执行足够的测试用例,使得每个判定种条件的各种可能组合都至少出现一次。n例子中的条件组合:n1)a1,b=0 记为t1,t2n2)a1,b0 记为t1,-t2n3)a=1,b=0 记为-t1,t2n4)a = 1,b0 记为-t1,-t2n5) a = 2,x1记为t3,t4n6) a = 2,x=1记为t3,-t4n7) a 2,x1记为-t3,t4n8) a 2,x3)&(z5) ) j=x*y+10; /语句块

5、2 j=j%3; /语句块3X3 & z5执行语句块执行语句块3FFTTabd语句覆盖n要实现DoWork函数的语句覆盖,只需设计一个测试用例就可以覆盖程序中的所有可执行语句。测试用例输入为: x=4、y=5、z=5 程序执行的路径是:abdn分析: 语句覆盖可以保证程序中的每个语句都得到执行,但发现不了判定中逻辑运算的错误,即它并不是一种充分的检验方法。例如在第一个判定(x3)&(z5错误写为y3)&(z3 取真值记为T1,取假值记为-T1 条件z5) ): 条件x=4 取真值记为T3,取假值记为-T3 条件y5 取真值记为T4,取假值记为-T4条件覆盖(续)n根据条件覆盖的基本思想,要使上

6、述4个条件可能产生的8种情况至少满足一次,设计测试用例如下: 测试用例 执行路径 覆盖条件 覆盖分支 x=4、y=6、z=5 abd T1、T2、T3、T4 bd x=2、y=5、 z=15 ace -T1、-T2、 -T3、-T4 cen分析:上面这组测试用例不但覆盖了4个条件的全部8种情况,而且将两个判定的4个分支b、c、d、e也同时覆盖了,即同时达到了条件覆盖和判定覆盖。条件覆盖(续)n说明:虽然前面的一组测试用例同时达到了条件覆盖和判定覆盖,但是,并不是说满足条件覆盖就一定能满足判定覆盖。如果设计了下表中的这组测试用例,则虽然满足了条件覆盖,但只是覆盖了程序中第一个判定的取假分支c 和

7、第二个判定的取真分支d,不满足判定覆盖的要求。 测试用例 执行路径 覆盖条件覆盖分支x=2、y=6、z=5 acd-T1、T2、 -T3、T4 cdx=4、y=5、z=15 acdT1、-T2、 T3、-T4 cd判定/条件覆盖n判定/条件覆盖实际上是将判定覆盖和条件覆盖结合起来的一种方法,即:设计足够的测试用例,使得判定中每个条件的所有可能取值至少满足一次,同时每个判定的可能结果也至少出现一次。n根据判定/条件覆盖的基本思想,只需设计以下两个测试用例便可以覆盖4个条件的8种取值以及4个判定分支。 测试用例 执行路径 覆盖条件覆盖分支x=4、y=6、z=5 abdT1、T2、 T3、T4 bd

8、x=2、y=5、z=15ace-T1、-T2、 -T3、-T4 ce判定/条件覆盖(续)n分析:从表面上看,判定/条件覆盖测试了各个判定中的所有条件的取值,但实际上,编译器在检查含有多个条件的逻辑表达式时,某些情况下的某些条件将会被其它条件所掩盖。因此,判定/条件覆盖也不一定能够完全检查出逻辑表达式中的错误。 例如:对于第一个判定(x3)&(z3和z3为假,则编译器将不再检查z5)来说,若条件x=4满足,就认为该判定为真,这时将不会再检查y5,那么同样也无法发现这个条件中的错误。组合覆盖n组合覆盖的目的是要使设计的测试用例能覆盖每一个判定的所有可能的条件取值组合。n对DoWork函数中的各个判

9、定的条件取值组合加以标记: 1、x3, z3, z=10 记做T1 -T2,第一个判定的取假分支 3、x=3, z10 记做-T1 T2,第一个判定的取假分支 4、x=10 记做-T1 -T2,第一个判定的取假分支 5、x=4, y5 记做T3 T4,第二个判定的取真分支 6、x=4, y5 记做-T3 T4,第二个判定的取真分支 8、x!=4, y 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 例4 (续) : 基本路径测试方法(续)n画出控制流图: 如右图所示n导出独立路

10、径(用语句编号表示) 路径1:414 路径2:46714 路径3:4691013414 路径4:4691213414467910121314例4(续) : 基本路径测试方法输入数据预期输出测试用例1irecordnum = 0itype = 0 x = 0y = 0测试用例2irecordnum = 1itype = 0 x = 2y = 0测试用例3irecordnum = 1itype = 1x = 10y = 0测试用例4irecordnum = 1itype = 2x = 0y = 20n设计测试用例:2.3 白盒测试的典型案例 例5n最多输入100个值(-999为结束标志) ,计算落

11、在指定范围内的值的个数总和平均值。n1 Float sum=0;total=0nfloat average(value,min,max)nfloat value100;nint min,max;nint num,I; float ave;n I=0; num=0;n2,3 while (valuei!=-999 & nummin & valuei0n11 ave=sum/total;nelsen 12 ave=-999;n 13 return(ave); n例5(续):控制流图例5(续):路径分析n路径1:跳过整个循环q执行路径:1-2-10-12-13q测试用例输入为数组第一个元素就为-99

12、9:value1= -999 q期望结果:ave= -999n路径2:只循环一次,且是在指定范围内的值q执行路径:1-(2-3-4-5-6-7-8-9)-2-10-11-13q测试用例输入为数组第一个元素为有效值,第二个元素就为-999:value1=有效输入 value2= -999q期望结果:值的个数为1,和就是第一个数的值。n路径3:只循环一次,且是不在指定范围内的值q执行路径:1-(2-3-4-5-8-9)-2-10-12-13q测试用例输入为数组第一个元素为不在指定范围内的某个值,第二个元素就为-999: value2= -999q期望结果: ave= -999n路径4:循环两次,q

13、执行路径:1-(2-3-4-5-6-7-8-9)2-2-10-11-13qvalue1和value2为有效输入,value3= -999 q期望结果:基于数组前两个元素的正确平均值n路径5:循环两次,q执行路径:1-(2-3-4-5-6-7-8-9)- (2-3-4-5-8-9)-2-10-11-13qvalue1在指定范围,value2为有效输入但不在指定范围,value3= -999 q期望结果:基于数组第一个元素的正确平均值n路径6:循环两次,q执行路径:1-(2-3-4-5-8-9)- (2-3-4-5-6-7-8-9)-2-10-11-13qvalue1不在指定范围,value2在指

14、定范围,value3= -999 q期望结果:基于数组第二个元素的正确平均值n路径6:循环两次,q执行路径:1-(2-3-4-5-8-9)2 -2-10-12-13qvalue1 和value2都不在指定范围,value3= -999 q期望结果: ave= -999n路径7:循环m次q执行路径:1- (2-3-4-5-6-7-8-9)m -2-10-11-13q Value1valuem均为有效输入,m100,valuem+1=-999q期望结果: 基于前m次有效值的正确平均值n路径8:循环m次q执行路径:1- (2-3-4-5-6-7-8-9)i (2-3-4-5-8-9)m-i-2-10

15、-11-13q Value1valuei均为有效输入且在指定范围,im100,Valuei+1valuem 不在指定范围,valuem+1=-999q期望结果: 基于前i次有效值的正确平均值n路径9:循环m次q执行路径:1- (2-3-4-5-6-7-8-9)m-2-10-12-13q Value1value m 为有效值但不在指定范围,valuem+1=-999q期望结果: ave= -999n路径10:循环99次q执行路径:1- (2-3-4-5-6-7-8-9)99-2-10-11-13qValue1value99均为有效输入且在指定范围,value100=-999q期望结果:基于前99

16、个值的正确平均值n路径11:循环99次q执行路径:1- (2-3-4-5-8-9)99-2-10-11-13qValue1value99均为有效输入但不在指定范围,value100=-999q期望结果: ave= -999n路径12:循环99次q执行路径:1- (2-3-4-5-6-7-8-9)i-(2-3-4-5-8-9)99-i-2-10-11-13qValue1valuei均为有效输入且在指定范围,Valuei+1value99均为有效输入但不在指定范围,value100=-999,i99 q期望结果: 基于前i次有效值的正确平均值n路径13: 循环100次q1-(2-3-4-5-6-7

17、-8-9)100-2-3-10-11-13qValue1value100均为有效输入且在指定范围q期望结果:基于100个数的正确平均值n路径14: 循环100次q1-(2-3-4-5-8-9)100-2-3-10-11-13qValue1value100均为有效输入但不在指定范围q期望结果: ave= -999n路径15: 循环100次q1-(2-3-4-5-6-7-8-9)i-(2-3-4-5-8-9)100-i-2-3-10-11-13qValue1valuei均为有效输入且在指定范围,Valuei+1value100均为有效输入但不在指定范围,i100q期望结果:基于前i个数的正确平均值

18、例5(续):测试用例输入数据预期输出测试用例1value1= -999ave= -999测试用例2value1=50 value2= -999ave=50测试用例3value1=5 value2= -999ave= -999测试用例4value1=50 value2= 100 value3= -999ave=75测试用例5value1=5value2= 100 value3= -999ave=100测试用例6value1=5value2= 9 value3= -999ave= -999测试用例7value1到value50均为100 value51= -999Ave为前50个数的平均值测试用例

19、8value1到value40均为100value41到value50均为5value51= -999Ave为前40个数的平均值测试用例9value1到value50均为1 value51= -999ave= -999测试用例10value1到value99均为100 value100= -999Ave为前99个数的平均值测试用例11value1到value99均为1 value100= -999ave= -999测试用例12value1到value60均为100value61到value99均为5value51= -999Ave为前60个数的平均值测试用例13value1到value100均

20、为90 Ave为100个数的平均值测试用例14value1到value100均为9ave= -999测试用例15value1到value70均为100value71到value100均为5Ave前70个数的平均值2.4 白盒测试的工具 2.4.1 工具的分类l静态测试工具静态测试工具直接对代码进行分析,不需要运行代码,也不需要对代码编译链接,生成可执行文件。静态测试工具一般是对代码进行语法扫描,找出不符合编码规范的地方,根据某种质量模型评价代码的质量,生成系统的调用关系图等。静态测试工具的代表有Telelogic公司的Logiscope软件、PR公司的PRQA软件。l动态测试工具动态测试工具与

21、静态测试工具不同,动态测试工具的一般采用“插桩”的方式,向代码生成的可执行文件中插入一些监测代码,用来统计程序运行时的数据。其与静态测试工具最大的不同就是动态测试工具要求被测系统实际运行。动态测试工具的代表有Compuware公司的DevPartner软件、Rational公司的Purify系列。2.4 白盒测试的工具 2.4.2 JUnit 简介n支持的语言qSmalltalk, Java, C+, Perl, Python, etc.n支持的集成开发环境qJBuilder , VisualAge for Java, etc.JUnit isJUnit is notscope单元测试 整合测

22、试testware骨干、架构完整系统level工具方法论test case手动产生 自动产生test driver / script部份手写 全自动Junit框架run()TestfNamesetUp()runTest()tearDown()run()TestCaserun()addTest()TestSuite*TestResultjunit.frameworkassertTrue()assertEquals().Assertjunit.textui.TestRunnerjunit.swingui.TestRunner框架包中的主要类说明Interface Test主要方法:countTes

23、tCases:统计TestCases 数目;run:运行测试并将结果返回到指定的TestResult 中Class Assert:Assert 是一个静态类,它提供的方法都是Static 的,最常用的是: .assertTrue:assert 的替代方法,判断一个条件是否为真.assertEquals:用于判断实际值和期望值是否相同(Equals),可 以是各种JAVA对象。.assertNotNull:判断一个对象是否不为空.assertNull:判断一个对象是否为空.assertSame:判断实际值和期望值是否为同一个对象( =),注意和assertEquals区分 assert. assertEquals()框架包中的主要类说明3.Class TestCase使用者最主要使用的类,.countTestCases:返回TestCase 数目.run:运行TestCase,如果没有指定结果存储TestResu

温馨提示

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

评论

0/150

提交评论