开始听到代码覆盖率这个词的时候只觉得不陌生但是至于是怎么个意思在哪看到过就不太记得了,当我开始去研究代码覆盖率测试工具时才进一步的去查,这才明白代码覆盖率是指:代码覆盖程度的一种度量方式,是描述程序中源代码被测试的比例和程度。可能这样说还是有些抽象。下面通过代码覆盖率的常用指标和测试工具上具体展示一下代码覆盖率:
一、常用指标
1、语句覆盖:被测试代码中的每一个可执行语句是否被执行到,语句覆盖是为“最弱的覆盖”,对一些控制结构的代码他不能真正表示是否完全覆盖到。
2、判定覆盖:度量程序中每一个判定的分支是否都被测试到。
3、条件覆盖:度量判定中的每个子表达式结构true和false是否被测试到。
注:由于判定覆盖和条件覆盖理解起来很不形象,就简单比较一下判定覆盖和条件覆盖:
int foo(int a, int b)
{
if (a < 10 || b < 10) // 判定
{
return 0; // 分支一
}
else
{
return 1; // 分支二
}
}
判定覆盖只需要考虑判定结果为true和false两种情况:
TestCaes1: a = 5, b=任意数字 覆盖了分支一
TestCaes2:a = 15, b = 15 覆盖了分支二
条件覆盖只需要考虑判定中的每一个条件表达式结果:
TestCase3: a = 5, b = 5 true, true
TestCase4: a = 15, b= 15 false, false
通过实例可以知道判定覆盖和条件覆盖的差别:判定覆盖是要求覆盖到每一个分支语句,而条件覆盖只是将条件表达式的结果true和false都测试到了就可以了。
4、路径覆盖:度量是否方法的每一个分支都被执行到了,也就是要求所有可能的分支都执行一遍。路径覆盖也被称作是最强的覆盖。
其实还有很多种覆盖方式,这里就不再详细介绍了。
二、代码覆盖率测试报告
由于项目是用maven管理的,自己对maven只是略知一二,对单元测试的工具也只是知道一点点儿皮毛,所以都是慢慢摸索,记得在看maven视频的时候听到过关于测试工具的使用,所以又回去看了看,最终选择了先用cobertura测试工具试一试:Cobertura是一种开源工具,通过检测基本地的代码,并观察在测试包运行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率,除了找出位测试到的代码并发现bug外,Cobertura还可以通过标记无用的。执行不到的代码来优化代码。
在maven中使用起来其实很方便,只需要在pom文件正添加相应的引用即可:
<!-- 代码覆盖率测试版本号控制******陈丽娜**start**** --> <cobertura.version>2.6</cobertura.version> <!-- 代码覆盖率测试版本号控制******陈丽娜**end***** --> <!-- 执行单元测试的插件*********陈丽娜******start***2015-2-10***** --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${maven-surefire-plugin.version}</version> <configuration> <forkCount>3</forkCount> <reuseForks>true</reuseForks> <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin> <!-- 执行单元测试的插件*********陈丽娜******end***2015-2-10***** --> <!-- 代码生成覆盖率报告*******陈丽娜****start*******2015-2-10************ --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>${cobertura.version}</version> <configuration> <formats> <format>html</format> <format>xml</format> </formats> </configuration> <executions> <execution> <id>cobertura</id> <phase>test</phase> <goals> <goal>cobertura</goal> </goals> </execution> </executions> </plugin> <!-- 代码生成覆盖率报告*******陈丽娜****end********2015-2-10************ -->
这样在执行完test之后就可以在生成测试报告的时候同时在target的site中同时生成代码覆盖率测试报告:
打开index可以看到代码股概率报告:
点进去可以看到具体的代码覆盖情况:
在一篇博客中看到这样一句话:Cobertura是敏捷程序员工具箱中新增的一个重要工具。通过生成代码覆盖率的具体数值,Cobertura将单元测试从一种艺术转变为一门科学。它可以寻找测试覆盖中的空隙,直接找到 bug。测量代码覆盖率使您可以获得寻找并修复 bug所需的信息,从而开发出对每个人来说都更健壮的软件。