如何来衡量测试的质量呢?很多时候我们容易走入一个误区,那就是只统计测试案例数量,案例数量越多代表测试质量越好,但测试案例数量与测试质量并不是对等关系的,所以并不存在代表关系。分析代码覆盖率可以从另一个视角来对测试质量进行评估。Jacoco(Java Code Coverage)就是一种代码覆盖率的工具,它可以分析出代码的哪些部分被测到了,那些部分未被测试案例覆盖到,本文将通过一个实战小案例来为大家讲解一下Jacoco的使用与效果。
一、相关术语介绍:
JDK(Java Development Kit)是Java的开发工具包,是整个Java的核心,包括了Java运行环境、Java工具和Java基础类库;
Eclipse:一种常用的java开发工具。
EclEmma:一个基于 JaCoCo 的 Eclipse 插件,使用它开发人员可以直观地看到单元测试的覆盖情况。
代码覆盖:测试过程中根据需求文档和设计文档编写测试用例、执行测试;为了更加全面的覆盖,我们可能还需要理解被测程序的逻辑,需要考虑到每个函数的输入与输出,逻辑分支代码的执行情况,这个时候我们的测试执行情况就以代码覆盖率来衡量,可以理解为白盒覆盖。
二、环境准备
2.1 EclEmma插件安装
Eclipse下依次点击 Help->Eclipse Marketplace->搜索EclEmma:
安装成功后,在Window->Show View->Other中找到Coveage可以打开界面:
2.2 编写源码和测试案例
2.2.1 新建一个java工程
2.2.2 在工程中新建类
(1)新建一个源码的类:
注意:package包的名字要与工程名字一致;新建class类的名字要与java文件名字一致;
(2)新建一个测试案例的类:
2.2.4 给工程添加单元测试需要的jar包
这里我采用的是Junit的jar包,下载地址为:
https://blog.csdn.net/qq_38712932/article/details/85099192
下载后将jar包添加到工程下:
添加后如图所示:
2.3 执行测试案例
在工程下右键选择Coverage As -> JUnit Test:
2.4 查看测试结果
在执行结果中的Coverage项中可以看到测试结果:
代码覆盖情况如下:可以看到源码中执行到的代码和未执行的代码。其中,红底色代码为测试未覆盖的代码?;黄色为测试部分覆盖(通常是if和switch);绿色为测试已覆盖。
利用jacoco还可以生成图表报告文件,供管理者或工程师们方便的查看测试覆盖情况。File->Export->Java->Coverage Report->选择需要生成报告的测试源以及目标地址,即可生成图标报告。
生成报告如下:
其中:Instructions表示指令级,Missed Instructions表示未执行的指令;
Branches表示分支,Jacoco 对所有的 if 和 switch 指令计算了分支覆盖率;
Lines:该项指数在有调试信息的情况下计算,
Methods:表示抽象方法,若一个方法至少被执行了一条指令,就认为它被执行过。
Classes:表示类,每个类中只要有一个方法被执行,这个类就被认定为被执行。
三、总结
我们来总结一下:使用Jacoco测试代码覆盖率工具可以:
(1)分析未覆盖部分的代码,从而反推在前期测试设计是否充分,没有覆盖到的代码是否是测试设计的盲点,为什么没有考虑到?需求/设计不够清晰?测试设计的理解有误?工程方法应用后的造成的策略性放弃等等,之后可以进行补充测试用例设计。
(2)检测出程序中的废代码,可以逆向反推在代码设计中思维混乱点,提醒设计/开发人员理清代码逻辑关系,提升代码质量。
(3)代码覆盖率高不能说明代码质量高,但是反过来看,代码覆盖率低,那么代码质量基本上没有什么保障可言,所以Jacoco可以作为测试工程师自我审视工作的重要工具之一。
版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。