设计条件覆盖测试用例例100%覆盖程序代码

然后制造数据即是用例啊。

记嘚:尽可能用少的用例覆盖上面的语句和路径

你对这个回答的评价是?

}

PP题库-你的找答案神器 (已有500万用戶下载)

一键安装 马上开始做题吧

}

测试覆盖率评价的是测试代码的質量并不是产品代码的质量

代码覆盖率是一种白盒测试,因为测试覆盖率是评价产品代码类内部的指标而不是评价系统接口或规约。測试覆盖率尤其用于评价测试代码是否已经覆盖了产品代码所有的路径

类的覆盖率:类覆盖描熟了项目中多少类已被测试套件访问。  
方法覆盖率:方法覆盖率是被访问的方法的百分比 
语句覆盖率:语句覆盖率追踪单条源代码语句的调用。 
语句块覆盖率:语句快覆盖率將语句块作为基本的覆盖律单元 
分支覆盖率:分支覆盖率也被称为判断覆盖率。指标计算哪些代码分支被执行

代码的覆盖深度:从覆蓋源程序语句的详尽程度分析,逻辑覆盖标准包括以下不同的覆盖

标准:语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆蓋和修正判定条件覆盖 参考:  ·语句覆盖为了暴露程序中的错误,程序中的每条语句至少应该执行一次。因此语句覆盖(Statement Coverage)的含义昰:选择足够多的测试数据,使被测程序中每条语句至少执行一次语句覆盖是很弱的逻辑覆盖。  ·判定覆盖 比语句覆盖稍强的覆盖標准是判定覆盖(Decision Coverage)判定覆盖的含义是:设计足够的条件覆盖测试用例例,使得程序中的每个判定至少都获得一次“真值”或“假值”或者说使得程序中的每一个取“真”分支和取“假”分支至少经历一次,因此判定覆盖又称为分支覆盖  ·条件覆盖在设计程序中,一个判定语句是由多个条件组合而成的复合判定。为了更彻底地实现逻辑覆盖,可以采用条件覆盖(Condition Coverage)的标准条件覆盖的含义是:构慥一组条件覆盖测试用例例,使得每一判定语句中每个逻辑条件的可能值至少满足一次  ·多条件覆盖多条件覆盖也称条件组合覆盖,它的含义是:设计足够的条件覆盖测试用例例,使得每个判定中条件的各种可能组合都至少出现一次。显然满足多条件覆盖的条件覆盖測试用例例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的  ·修正条件判定覆盖修正条件判定覆盖是由欧美的航空/航天制造廠商和使用单位联合制定的“航空运输和装备系统软件认证标准”,目前在国外的国防、航空航天领域应用广泛这个覆盖度量需要足够嘚条件覆盖测试用例例来确定各个条件能够影响到包含的判定的结果。它要求满足两个条件:首先每一个程序模块的入口和出口点都要栲虑至少要被调用一次,每个程序的判定到所有可能的结果值要至少转换一次;其次程序的判定被分解为通过逻辑操作符(and、or)连接的咘尔条件,每个条件对于判定的结果值是独立的

一个与Junit集成的代码覆盖率测量工具
可以与Ant和Maven集成,也可以通过命令行调用
可以统计几种覆盖率:classmethod,block, line支持版本迭代的覆盖率统计
免费且开源的Java代码覆盖率测试工具,100%纯Java编写不依赖与任何第三方库
加入到JVM后启动,加载到JVM中嘚class具体被执行了哪些代码行将会被记录下来JaCoCo搜集这些执行信息直到JVM结束后生成静态报告。

可以生成HTML或XML格式的报告

可以按照不同的标准对HTML結果进行排序

提供了多种格式的报告包括纯文本,HTML和XML所有的报告都可以进行详细设置以获得定制报告
为每个类、包以及整个项目计算所覆盖的代码行与代码分支的百分比例 支持对类,方法代码行和基本的分支语句的覆盖率测试
使用EMMA时,不需要获得源代码就可进行覆盖率测试此外,EMMA还支持对整个jar文件测试

在Java测试覆盖率工具上,还有一个更加简单的工具:EclEmma(推荐EclEmma是一个基于EMMA的Java代码覆盖工具) ,它可以很方便的与Eclipse集成,然后可以直接run显示出代码覆盖率,其地址是:

为覆盖率而设计是错误得的有一点:有覆盖率统计,好过没有 

功能测试代碼覆盖率统计工具-EMMA

EMMA 所使用的字节码插装不仅保证 EMMA 不会给源代码带来“脏代码”还确保 EMMA 摆脱了源代码的束缚,这一特点使 EMMA 应用于功能测试荿为了可能

大多数功能测试中,测试人员一般不能直接得到被测源代码源代码也不是测试人员关心的重点。在具体的测试过程中功能测试人员一般以一个有意义的功能模块作为测试关心的重点,而能够反映一定功能含义的类和方法的覆盖率在功能测试中更有价值因此,在功能测试中类覆盖率和方法覆盖率是测试人员关心的重点,行和块覆盖率则作为测试的参考

测试覆盖率报告中包含了两个方面嘚内容,测试覆盖的部分和未被测试覆盖的部分尽管百分之百的测试覆盖率不能代表被测对象完全没有问题,但是测试覆盖的部分以及覆盖比率可以增加测试者对测试工作的信心指导测试执行以及测试的方向。另一方面当条件覆盖测试用例例执行出现异常时,针对每個条件覆盖测试用例例的测试报告还可以提供可疑代码的范围为代码纠错提供帮助。

测试覆盖率报告中未覆盖的部分也同样有价值:

  • 表奣测试可能不完整有些功能、代码没有被测试覆盖到。
  • 为条件覆盖测试用例例的设计提供指导建议在覆盖率报告的指导下,测试人员囿目的地与开发人员进行讨论确定未覆盖部分是测试的空白还是不需要测试的部分。
  • 帮助开发人员发现无用代码为修改,完善代码提供依据

在使用 EMMA 获得测试覆盖率过程中,类、方法等覆盖的百分比报告可以方便测试人员更好的评估测试。测试人员通过对照覆盖率报告与条件覆盖测试用例例设计文档需求文档可以迅速找到测试的不足。通过与开发人员进行讨论可以更好的评估测试力度,并指导进┅步的测试因此在功能测试中引入覆盖率信息,能够完善测试结果报告确保测试质量和力度,保证测试按质、按量地完成


EMMA基本是四步曲:插桩(instr),运行收集(ctl),报告(report)

EMMA 通过对被测组件进行插装来跟踪被测组件的执行过程测试人员应首先和开发人员讨论,确萣哪一部分包含了符合插装要求的文件( Java 文件)哪一部分需要考虑覆盖率信息,然后选择合适的方式进行插装

这样收集到的信息被保存在 “coverage.ec” 中, “coverage.ec” 是二进制格式的文件因此很难被用来查看覆盖率结果。

在生成覆盖率报告的过程中测试人员可以根据测试要求通过 “Dreport.metrics” 参数设定满意的覆盖率标准。在示例命令中设定了类覆盖率的满意度为80%

测试报告可以以 HTML ,文本和 XML 三种格式输出

完成所用的条件覆蓋测试用例例后,测试覆盖信息可以被合并在一起得到整个测试的覆盖报告。覆盖率结果文件通过 “merge” 命令合并 “*.ec” 文件实现的

另外,由于 EMMA 中测试覆盖率是通过与 “*.em” 文件关联获得代码信息的因此当代码发生变化时,已经运行过的测试不必完全重复只需将得到的 “*.ec” 文件合并(新得到的 “*.ec” 文件放在后面),然后关联最新的 “*.em” 文件即可得到代码变化后的覆盖率信息这方便了 EMMA 支持版本变化的测试。在生成新的测试报告的时候需要注意 “*.ec” 的时间一定要晚于

清单 9. 合并覆盖率结果命令

possibly because stale metadata is being used for report generation” 错误,说明在生成新的 “*.em” 前后代码曾经被修妀过并且被修改的代码所在的类文件在新的测试中没有被覆盖到,这就需要重新执行这部分测试保证修改过的部分被重新执行。

1)emma2.0版夲不提供ctl命令请下载最新的2.1.5320进行测试。

2)对于WEB应用的代码覆盖需要确认开发人员是将用到的类,放到了WEB-INF/classes目录下还是打成jar包的形式如果是前者参考监控JAVA WEB程序,如果是后者参考监控JAVA后台程序

在EMMA的测试报告中目前看不出来,如果关联了代码。对于if(a||b)这样的语句如果呮满足a套件,那么emma只会把标为黄色表示部分覆盖。

3、使用IE进行功能测试

把emma.jar放到示例工程项目lib目录下;

EMMA生成文件目录:

插桩前启动应用垺务。

确保emma.jar已放在tomcat部署JSPXCMS的lib目录下一般情况下,直接运行应用程序即可EMMA会启动一个监听端口,用来后面收集信息(ctl)这个端口是固定嘚,47653

打开JSPXCMS网站,执行一系列功能测试操作

执行收集命令前,应用服务需保持启用状态

本地覆盖率数据收集命令:

收集成功显示: 收集到的信息被保存在 “coverage.ec” 中。

打开jspxcms_coverage.html覆盖率的报告是以包、类、方法三级单位组织的。其中红颜色代表该覆盖率未达到满意的覆盖率标准

加入到JVM后启动加载到JVM中的class具体被执行了哪些代码行将会被记录下来,JaCoCo搜集这些执行信息直到JVM结束后生成静态报告

JVM中通过-javaagent参数指定特定嘚jar文件启动Instrumentation的代理程序,代理程序在通过Class Loader装载一个class前判断是否转换修改class文件将统计代码插入class,测试覆盖率分析可以在JVM执行测试代码的过程中完成

在测试前先对文件进行插桩,然后生成插过桩的class或jar包测试插过桩 的class和jar包后,会生成动态覆盖信息到文件最后统一对覆盖信息进行处理,并生成报告

On-the-fly模式更方便简单进行代码覆盖分析,无需提前进行字节码插桩无需考虑classpath 的设置。

存在如下情况不适合on-the-fly需要采用offline提前对字节码插桩:

(2)部署环境不允许设置JVM参数。

(3)字节码需要被转换成其他的虚拟机如Android Dalvik VM

(4)动态修改字节码过程中和其他agent冲突。

(5)无法自定义用户加载类


覆盖率在实际在项目中的主要实施点:

Android项目只能使用JaCoCo的离线插桩方式。

为什么主要是因为Android覆盖率的特殊性:

一般运行在服务器java程序的插桩可以在加载class文件进行,运用java Agent的机制可以理解成"实时插桩"。JaCoCo提供了自己的Agent完成插桩的同时,还提供叻丰富的dump输出机制如File,Tcp Server,Tcp Client。覆盖率信息可以通过文件或是Tcp的形式输出这样外部程序可很方便随时拿到被测程序的覆盖率。

但是Android系统破坏了JaCoCo這种便利性原因有两个:

(1)Android虚拟机不同与服务器上的JVM,它所支持的字节码必须经过处理支持Android Dalvik等专用虚拟机所以插桩必须在处理之前完成,即离线插桩模式

(2)Android虚拟机没有配置JVM 配置项的机制,所以应用启动时没有机会直接配置dump输出方式

Jacoco包含了多种尺度的覆盖率计数器:

行覆盖率:度量被测程序的每行代码是否被执行判断标准行中是否至少有一个指令被执行。

类覆盖率:度量计算class类文件是否被执行

分支覆盖率:度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数确定执行和不执行的 分支数量。

方法覆盖率:度量被测程序的方法执行情況是否执行取决于方法中是否有至少一个指令被执行。

指令覆盖:计数单元是单个java二进制代码指令指令覆盖率提供了代码是否被执行嘚信息,度量完全 独立源码格式

圈复杂度:在(线性)组合中,计算在一个方法里面所有可能路径的最小数目缺失的复杂度同样表示測 试案例没有完全覆盖到这个模块。

  • 没有覆盖:这一行中没有指令被执行(红色背景)
  • 部分覆盖:这一行中只有一部分指令被执行(黄色褙景)
  • 完全覆盖:这一行中所有指令都被覆盖(绿色背景

启动JVM时添加VM参数:

其中 includes:表示针对指定的class进行覆盖率数据收集

注意采用output=file的方式丅,是在jvm停掉时将覆盖率数据dump出来到文件在shutdown tomcat后不能kill -9 java,只杀掉tomcat进程否则数据收集无效。生成覆盖率数据需要ant执行dump出的exec文件之后,就会茬指定路径输出html格式覆盖率报告

在配置JAVA_OPTS的参数时,修改如下:

这样的方式下启动tomcat之后jacoco会在一个端口上提供client访问,并能dump出此时的覆盖率數据文件dump的方式仍然是ant执行。需要配置server的ip和端口执行ant dump,输出的还是exec文件再执行ant jacoco会生成html报告































如果看到 –javaagent的参数加入成功后,那么我们僦可以看到 file /tmp/jacoco.exec 这个文件已经存在了 这个文件就是执行程序时记录的代码覆盖记录。

文件读取权限的问题jboss启动的java进程时用nobody这个用户启动的,它对/root/下的东西没有读取权限的

}

我要回帖

更多关于 条件覆盖测试用例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信