第7章_带上X光眼镜测试软件_第1页
第7章_带上X光眼镜测试软件_第2页
第7章_带上X光眼镜测试软件_第3页
第7章_带上X光眼镜测试软件_第4页
第7章_带上X光眼镜测试软件_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

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

文档简介

第7章带上X光眼镜测试软件,动态白盒测试,回顾:测试用例的设计,软件测试中最重要的是设计有效的测试用例完全发现软件中的错误是不可能的,如何发现尽可能多的错误?软件测试最关键的问题在给定的时间和成本下,在所有可能的测试用例中,哪个子集最有可能发现最多的错误?采用某种策略设计测试用例随机输入测试:低效有策略的黑盒测试和白盒测试,7.1动态白盒测试,动态白盒测试是指:通过查看代码功能(做什么)和实现方式(如何做)所得到的信息,确定哪些需要进行测试、如何进行测试。特点:通过代码决定测试方式并实际运行测试用例。重点:根据代码的编写结构(如分支、循环)来设计测试用例,因此又称为结构化测试。请回忆一下动态黑盒测试重点关注的是什么?,可以实现下列工作,直接测试底层函数、过程、子程序和函数库以完整的形式从顶层测试软件,并根据运行情况调整测试用例。可以获得运行期间变量和状态信息的访问权并进行监视,也可强制软件按正常测试难以实现的方式运行。估算测试时“命中”的代码量和具体代码,并调整测试尽量覆盖更多的代码。,测试和调试,编程时我们都会花很多时间调试代码,但是这和动态白盒测试有本质的差别。目标不同:调试一般是为了修正缺陷测试是为了寻找缺陷但使用的手段有很多相似之处,如编译、跟踪、设置断点,甚至为测试开发单独的代码。,提示,本章同样补充增加了大量的内容,和教材差异很大。教材内容基本不专门讲,大多涵盖在相应的部分了。本章结束后认真将教材内容看一遍。,主要的白盒测试技术,控制流测试数据流测试程序插桩程序变异测试白盒测试工具,7.2控制流测试,最主要的白盒测试技术之一根据程序的控制结构,应对每一条独立元素进行测试。在单元测试中大量使用基本任务是保证每条语句至少执行一次。设计测试用例是为了发现错误计算、不正确的比较和不适当的控制流造成的错误。,控制流覆盖准则,覆盖率:测试的完全程度如何?,覆盖率概念,如:一个程序总代码为100行,使用测试用例运行一次,执行了75行代码,则代码覆盖率75,控制流覆盖方法,逻辑覆盖:常见的六种覆盖方法语句覆盖判定覆盖(也称分支覆盖)条件覆盖(也称谓词覆盖)判定/条件覆盖条件组合覆盖路径覆盖,7.2.1语句覆盖,设计若干测试用例,使得程序中每条语句至少被执行一次。,设计原则:测试用例尽量少,覆盖率尽量高,举例,测试用例设计:,测试用例设计:,测试用例设计:,语句覆盖,优点:直观、简单、易自动化缺点:发现错误能力很“弱”对隐藏的条件和可能到达的隐式逻辑分支,无法测试,语句覆盖,例:ifelse结构,如右例所示:当A=2B=0X=3时,满足语句覆盖要求,但abd分支未测试。,控制流覆盖方法,逻辑覆盖:常见的六种覆盖方法语句覆盖判定覆盖(也称分支覆盖)条件覆盖(也称谓词覆盖)判定/条件覆盖条件组合覆盖路径覆盖,7.2.2判定覆盖,设计若干测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,保证程序中的每个分支至少执行一次,判定覆盖,测试用例设计:,(O),(A),(B),(D),当A=2B=0X=3时,即可满足语句覆盖要求,但abd分支未测试,判定覆盖测试用例:,判定覆盖,测试用例设计:,例3-2,测试用例设计:,判定覆盖,优点:发现错误能力比语句覆盖强缺点:对复合条件判断,只考虑整个判定条件的最终结果,而忽略每个条件的取值情况(若程序中的判定是由几个条件联合构成时,它未必能发现每个条件的错误)必然会遗漏部分测试情况。,控制流覆盖准则,逻辑覆盖:常见的六种覆盖方法语句覆盖判定覆盖(也称分支覆盖)条件覆盖(也称谓词覆盖)判定/条件覆盖条件组合覆盖路径覆盖,7.2.3条件覆盖,设计若干测试用例,使得判定中的每个条件的可能取值至少满足一次。,条件覆盖,测试用例设计:,(O),(A),(B),(D),判定覆盖测试用例设计未有B!=0的取值,条件覆盖,条件覆盖测试用例:,测试用例设计:,例3-2,测试用例设计:,例1:三角形问题(i、j、k为三边),1、列出所有的原子条件:(1)i=0;j=0;k=0(2)i+j=k;i+k=j;j+k=I(3)i=j;i=k;j=k2、设计测试用例,使得每个条件取一次真值和一次假值,设计测试用例如下表所示,边长=0时不构成三角形,条件覆盖,优点:发现错误能力比语句覆盖强缺点:条件覆盖并不能保证判定覆盖。对复合条件,条件覆盖只能保证每个条件的可能结果至少出现一次,而不考虑所有的判定结果,因此未必能覆盖全部分支。,控制流覆盖准则,逻辑覆盖:常见的六种覆盖方法语句覆盖判定覆盖(也称分支覆盖)条件覆盖(也称谓词覆盖)判定/条件覆盖条件组合覆盖路径覆盖,7.2.4判定条件覆盖,设计若干测试用例,使得判定中的每个条件的可能取值至少出现一次,且每个判断本身的判定结果也至少出现一次。实际就是考虑条件覆盖的基础上满足判定覆盖,判定条件覆盖,测试用例设计:,(O),(A),(B),(D),判定条件覆盖,条件覆盖测试用例设计也满足判定条件覆盖的要求:,判定覆盖测试用例设计未有B!=0的取值,测试用例设计:,例3-2,测试用例设计:,例2、三角形问题:判定条件覆盖,1、列出所有的原子条件:i=0j=0k=0i+j=ki+k=jj+k=ii=ji=kj=k2、列出所有的判定(1)i=0|j=0|k=0|i+j=k|i+k=j|j+k1)x=x+1;,实验三:逻辑覆盖测试用例的设计,NextDate函数的设计、实现和测试函数有3个参数:月份、日期和年;它们都具有整数值,且满足以下条件:1=月份=121=日期=3119000)3if(y=0)4a=b-3;5else6if(y=1)7a=b+5;8else9a=b*2;10 x=a;1112,对于路径覆盖,将会有多少可能的路径?对于Z路径覆盖,应该选择什么测试用例?,程序流程图和对应的控制流图,得到的基本路径并设计测试用例,根据控制流图可以很容易得到以下基本路径:路径1:1-11路径2:1-2-3-4-5-10-1-11路径3:1-2-3-6-8-9-10-1-11路径4:1-2-3-6-7-9-10-1-11对于每一路径,可以设计相应测试用例对于Z路径覆盖,只考虑0次和1次循环,4.如何使用覆盖率,覆盖率不是目的,只是一种手段你不可能对所有的覆盖率指标去进行测试而只考虑一种覆盖率指标也是不恰当的一般项目的覆盖率不可能100%,一般采取的标准是函数覆盖率90%,语句覆盖率100%,分支覆盖率85以上;路径覆盖率80以上。,第3章白盒测试,控制流测试数据流测试程序插桩程序变异测试白盒测试工具,7.3数据流测试简介,基本概念数据流测试是根据代码中变量的使用情况进行的测试,面向程序中的数据。早期的数据流分析常常集中于以下缺陷:变量被定义,但是从来没有使用(引用)所使用的变量没有被定义变量在使用之前被定义两次或多次(重复定义),数据流测试,两个概念1.变量的定义性出现:变量定义或被赋值节点nG(P)是变量vV的定义节点,记做DEF(v,n),当且仅当变量v的值由对应节点n的语句片段处定义。输入语句、赋值语句、循环控制语句和过程调用,都是定义节点语句的例子。如果执行对应这种语句的节点,那么该变量关联的存储单元的内容就会改变。,数据流测试,2.变量的引用性出现:变量数据被引用。节点nG(P)是变量vV的使用节点,记做USE(v,n),当且仅当变量v的值由对应节点n的语句片段处使用。计算性引用用于计算新数据(记做C-use)谓词性引用用于条件控制(记做P-use)输出语句、赋值语句、条件语句、循环控制语句和过程调用,都是使用节点语句的例子。如果执行对应这种语句的节点,那么该变量关联的存储单元的内容保持不变。,数据流覆盖准则,首先强调一点,数据流测试与数据流图没有任何的关系。数据流测试是关注变量接受值的点和使用(或引用)这些值的点的结构性测试形式。定义覆盖测试准则引用覆盖测试准则,定义覆盖测试准则,集合T满足程序P的全定义(alldefinition)准则,当且仅当对于所有变量vV,T包含从v的每个定义结点到v的一个引用的定义明确的路径。,定义覆盖示例,引用覆盖测试准则,集合T满足程序P的全引用(alluse)准则,当且仅当对于所有变量vV,T包含从v的每个定义结点到v的所有引用的定义明确的路径。引用覆盖要求检查每个定义的所有可传递到的引用。,第3章白盒测试,控制流测试数据流测试程序插桩程序变异测试白盒测试工具,7.4程序插桩,插桩:通过在源代码中加入记录信息语句,以便进行运行信息的追踪和调试,统计有关的运行资源状况。如print语句插桩技术是实现各种覆盖测试的必要手段,程序插桩举例,例:常用printf语句(c语言)计算x1+2+3+4+5+10程序段:x=0;for(inti=0;isetUp-testXXXX-tearDown-测试结束,完整的测试类结构,importjunit.frmework.TestCase;publicclassHelloTestextendsTestCaseprivateHellohello;/测试对象protectedvoidsetUp()/初始化方法super.setUp();hello=newHello()/初始化被测对象publicvoidtestMethod1()/被测试方法assertTrue(true);/断言potectedvoidtearDown()/撤销测试环境super.tearDown();,测试结果:Fail与exception,fail:期望出现的错误。产生原因:assert函数出错(如assertFalse(true));fail函数产生(如fail())。Exception:不期望出现的错误,属于unittest程序运行时抛出的异常。它和普通代码运行过程中抛出的runtime异常属于一种类型。对于assert、fail等函数请参见JUnit的javadoc。,importjunit.frmework.TestCase;publicclassTestSampleextendsTestCasprotectedvoidsetUp()/初始化publicvoidtestMethod1()trybooleanb=assertTrue(b);thrownewException(“Thisisatest.”);fail(“Unablepoint.”);/不可能到达catch(Exceptione)fail(“Yes,Icatchu”);/应该到达点potectedvoidtearDown()/撤销初始化,测试套件TestSuite,JUnit提供了一个对象TestSuite,使你可以一次进行多个测试。在JUnit中,Test、TestCase和TestSuite三者组成一种复合结构。通过组装自己的TestSuite,可以对添加到这个TestSuite中的所有TestCase进行调用。这些定义的TestSuite还可以组装成更大的TestSuite,这样同时也方便了对于不断增加的TestCase的管理和维护。,TestSuite,importjunit.framework.Test;importjunit.framework.TestSuite;publicclassTestAll/定义一个suite类publicstaticTestsuite()TestSuitesuite=newTestSuite(Runningalltests.);suite.addTestSuite(TestCase1.class);suite.addTestSuite(TestCase2.class);returnsuite;,创建良好的TestCase,书写TestCase时需要注意的问题:测试的独立性:一次只测试一个对象,方便定位出错的位置。一个TestCase,只测试一个对象;一个

温馨提示

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

最新文档

评论

0/150

提交评论