版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章单元测试汇报人:小精灵4.1单元测试用例设计单元测试概念单元测试专注于验证软件中最小的可测试部分———单元的功能。这些单元通常是单个函数、方法或类。单元测试的目的是确保每个单元在隔离状态下按预期工作。单元测试用例设计单元测试用例设计单元测试通常使用白盒测试方法进行测试用例设计。单元测试与白盒测试区别(1)测试范围:单元测试关注单个单元的功能验证,而白盒测试则关注程序内部的逻辑和路径。(2)测试设计:单元测试可能不关心内部逻辑,只关注输入输出;白盒测试则需要深入理解内部逻辑来设计测试用例。(3)执行者:单元测试通常由开发人员执行,而白盒测试由开发人员或专业的测试人员执行。单元测试用例设计单元测试与白盒测试的联系(1)单元测试为白盒测试提供了测试对象和测试用例的基础,开发人员在进行单元测试时,如果对代码内部逻辑有深入理解,可以设计出更有效的白盒测试用例;(2)单元测试中可能包含白盒测试的元素,比如测试特定的内部逻辑分支或条件。白盒测试通过对代码的更深入分析,帮助发现单元测试中未覆盖到的潜在问题;(3)白盒测试和单元测试都关注软件的内部质量,两者结合可以提高整体的测试效果。4.2白盒测试白盒测试方法根据模块内部结构,基于程序内部逻辑结构,针对程序语句、路径、变量状态等来进行测试。单元测试主要采用白盒测试方法,辅以黑盒测试方法。白盒测试方法应用于代码评审、单元程序之中,而黑盒测试方法则应用于模块、组件等大单元的功能测试之中。白盒测试程序内部结构示意图白盒测试方法分类逻辑覆盖是通过对程序逻辑结构的遍历实现对程序的覆盖,它是一系列测试过程的总称,这组测试过程逐渐实现越来越完整的通路测试。逻辑覆盖标准包括以下不同的覆盖标准:语句覆盖(StatementCoverage,SC)、判定覆盖(Decision
Coverage,DC)、条件覆盖(ConditionCoverage,CC)、条件判定组合覆盖(Condition/DecisionCoverage,DC)、多条件覆盖(MultipleConditionCoverage,MCC)和修正条件判定覆盖(modifiedconditiondecisioncoverage,MCDC)。逻辑覆盖法示例代码的流程图语句覆盖语句覆盖,又称行覆盖(LineCoverage)、段覆盖(SegmentCoverage)、基本块覆盖(BasicBlockCoverage),这是最常用也是最常见的一种覆盖方式。其基本思想是设计若干个测试用例,运行被测程序,使程序中每一条可执行语句至少应该执行一次。为了使上述示例程序中的每条语句都能够至少执行一次,可以构造以下测试用例:a=T,b=T,c=T。其实语句覆盖对程序执行逻辑的覆盖率很低,这是语句覆盖法自身最严重的缺陷。例如,判定的第一个运算符&&错写成运算符||,或第二个运算符||错写成运算符&&,这时使用上述的测试用例仍然可以达到100%的语句覆盖,上述的逻辑错误无法被检测出来。因此一般认为语句覆盖是很弱的逻辑覆盖。逻辑覆盖法判定覆盖判定覆盖的基本思想是设计若干个测试用例,运行被测程序,使得程序中的每个判定至少都获得一次真值或假值,或者说使得程序中的每一个取真分支和取假分支至少经历一次,因此判定覆盖又称为分支覆盖。除了真假双值判定语句外,还有多值判定语句,如case语句,因此判定覆盖更一般的含义是:使得每一个判定获得的每一种可能的结果至少被满足一次。
两组测试用例不仅满足了判定覆盖,而且满足了语句覆盖,所以判定覆盖要比语句覆盖更强一些。如表所示,判定的第一个运算符&&错写成运算符||或第二个运算符||错写成运算符&&,这时使用上述测试用例仍可以达到100%的判定覆盖,仍然无法发现上述假设的逻辑错误。逻辑覆盖法a=T,b=T,c=Ta=F,b=F,c=F条件覆盖在程序设计中,一个判定语句可能是由多个条件组合而成的复合判定。条件覆盖的含义是:构造一组测试用例,使得每一个判定语句中的每个逻辑条件的可能值至少满足一次。a=F,b=T,c=Fa=T,b=F,c=Ta=F,b=T,c=Ta=T,b=F,c=F可以发现这两组测试用例可以满足条件覆盖,但却不能满足分支覆盖,为达到更高的覆盖率,需要同时兼顾条件覆盖和分支覆盖。逻辑覆盖法仔细分析可以发现,上述测试用例在满足条件覆盖的同时,把判定的两个分支也覆盖了。但是否可以说,达到了条件覆盖也就必然实现了判定覆盖呢?条件判定组合覆盖条件判定组合覆盖的含义是:设计足够的测试用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。选用以下的两组测试用例可以符合条件判定组合覆盖标准:a=T,b=T,c=Ta=F,b=F,c=F但是条件判定组合覆盖也存在一定的缺陷。例如,判定的第一个运算符&&错写成运算符||或第二个运算符||错写成运算符&&,如表所示,使用上述测试用例仍然可以达到100%的条件判定组合覆盖,无法发现这些逻辑错误。逻辑覆盖法多条件覆盖多条件覆盖也称条件组合覆盖,它的含义是:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然满足多条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的。判定语句中包含三个逻辑条件,每个逻辑条件有两种可能取值,因此共有23=8种可能的取值组合,对应的测试用例如表所示,这些测试用例能够保证多条件覆盖。逻辑覆盖法修正条件判定覆盖当程序中的判定语句包含多个条件时,运用多条件覆盖方法进行测试,其条件取值组合数目是非常大的。正条件判定覆盖在多条件的基础上进行数据的挑选,其挑选数据的要求是:程序的判定被分解为通过逻辑操作符(and、or)连接的bool条件,每个条件对于判定的结果值是独立的。8条满足多条件覆盖的测试用例基础上,按照修正条件判定覆盖的要求选择需要的测试用例,选择结果如表所示。逻辑覆盖法程序的控制流图控制流图是描述程序控制流的一种图示方式。在图形符号中,圆圈称为控制流图的一个结点,它表示一个或多个无分支的语句。基本路径测试法控制流图的图形符号程序的控制流图(a)所示的是一个程序流程图,它可以映射成(b)所示的控制流图。基本路径测试法复合逻辑下的控制流图控制流图的环路复杂性程序的环路复杂性即McCabe复杂性度量,在进行程序的基本路径测试时,从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。独立路径是指包括一组以前没有处理过的语句或条件的一条路径。从控制流图来看,一条独立路径是至少包含有一条在其他独立路径中从未有过的边的路径。(b)所示的控制流图中,一组独立的路径如下:pathl:1-11path2:1-2-3-4-5-10-1-11path3:1-2-3-6-8-9-10-1-11path4:1-2-3-6-7-9-10-1-11只要设计出的测试用例能够确保这些基本路径的执行,就可以使得程序中的每个可执行语句至少执行一次,每个条件的取真和取假分支也能得到测试。通常环路复杂性还可以简单地定义为控制流图的区域数。(b)所示的控制流图,它有4个区域,其环路复杂性V(G)=4;环路复杂性也可以通过控制流图中边的个数-节点的个数+2(11-9+2=4)来计算。环路复杂性是构成基本路径集的独立路径数的上界,通过计算环路复杂性可以得到应该设计的测试用例的数目。基本路径测试法基本路径测试法示例下面以一个简单的C函数为例,说明使用基本路径测试法设计测试用例的过程。基本路径测试法示例程序的程序流程图基本路径测试法示例1.以详细设计或源代码为基础,导出程序的控制流图基本路径测试法控制流图基本路径测试法示例2.计算控制流图G的环路复杂性V(G)V(G)=4(区域数);或:V(G)=3(判断节点数)+1=4;或:V(G)=12(边的个数)-10(节点个数)+2=4。3.导出独立路径(用代码行号表示)根据控制流图计算得到的环路复杂性,可知该程序的基本路径集中的路径条数为4,具体路径描述如下。路径1:4→13路径2:4→5→6,7→14→4→13路径3:4→5→8→9,10→14→4→13路径4:4→5→8→11,12→14→4→134.设计测试用例,确保基本路径集中的每条路径都被执行基本路径测试法基本路径测试法示例本示例的源程序代码:基本路径测试法此代码有错,试试用测试用例来找出程序中的错误4.3单元测试框架JunitJUnit是基于Java语言的单元测试框架,用于编写和运行可重复的自动化测试,由KentBeck和ErichGamma建立,逐渐成为源于KentBeck的xUnit家族中最为成功的一个。JUnit有其对应的扩展生态圈,多数Java开发环境都已集成JUnit作为单元测试工具。JUnit具备如下特点:①
开源框架,生态圈活跃;②
提供注解识别测试方法,提供断言检查预期结果;③
代码优雅简洁不复杂,提高编码速度;④
测试自动运行,显示测试进度,即时反馈报告;⑤
测试可以被组织为测试套件,包含多个测试用例,甚至包含其他的测试套件。JUnit目前最新版本为5,不过版本4仍然广泛使用。单元测试框架Junit4单元测试框架Junit4单元测试框架(1)规范。单元测试在设计时必须遵守以下编码规范。类名:测试类名由被测类名加Test后缀构成。例如:CalculatorTest。包名:测试类放在test源文件夹中,包名与被测类相同。例如:packagecn.sim.service。方法名:测试方法名由test前缀加被测方法名或标识符构成。例如:testAdd。返回值:测试方法没有返回值,因此使用void。例如:“publicvoidtestAdd();”。参数:测试方法没有参数。例如:“publicvoidtestAdd();”。Junit4单元测试框架(2)注解。注解(annotation)又称Java标注,是JDK5.0引入的一种注释机制,类、方法、变量、参数和包等都可以被标注。Junit4单元测试框架(3)断言。JUnit通过断言(assert)判断运行结果是否符合预期,所有断言都包含在orgj.unit.A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 溯溪应急预案公示(3篇)
- 物流运输应急预案假期(3篇)
- 甲醛泄露处置应急预案(3篇)
- 石墨接地模块施工方案(3篇)
- 窗户把手维修施工方案(3篇)
- 绵阳装电梯施工方案(3篇)
- 胶球清洗施工方案(3篇)
- 营销期间人员活动方案(3篇)
- 赛跑营销方案设计(3篇)
- 迪奥体验营销方案(3篇)
- T/CCS 025-2023煤矿防爆锂电池车辆动力电源充电安全技术要求
- 《农业法规普及讲座》课件
- 北京市科技计划项目(课题)结题经费审计工作底稿-参考文本
- 滋蕙计划申请书
- DB 5101-T 163-2023 成都市城市精细化管理规范
- 2024年互联网营销师(高级)职业鉴定理论考试题库(含答案)
- (高清版)JTGT D81-2017 公路交通安全设施设计细则
- (正式版)SHT 3551-2024 石油化工仪表工程施工及验收规范
- 高考物理一轮复习课件电磁感应单双杆模型图像问题
- 江苏理文化工有限公司年产30万吨聚氯乙烯、5万吨氯化聚氯乙烯装置及配套工程项目环评报告
- KYN28A-12安装配线工艺
评论
0/150
提交评论