前言
代码覆盖率作为一个指导性指标,在一定程度上可以反映测试的完整性,是软件质量度量的一种手段。100%的代码覆盖率并不意味着应用程序100%没有错误。代码覆盖率作为一个质量目标没有任何意义,但是我们应该把它作为一种发现测试没有覆盖的代码的手段。
代码覆盖率的含义
1.了解测试情况
测试期间覆盖和未覆盖区域的可能风险。分析未覆盖的代码,反转测试设计是否充分,进一步明确测试设计阶段的问题。
2.查找死角、冗余代码和历史过时代码
有助于发现多个测试用例无法覆盖的代码,收集方法覆盖,为丢弃代码提供依据。
3.度量自动化用例
为自动化用例提供覆盖统计,分析覆盖报告并改进自动化用例。
4.准确的回报
建立代码调用关系,准确确定回归测试范围,避免完全回归造成的测试资源浪费。
代码覆盖率测量方法
1.声明覆盖范围(声明覆盖范围)
也称为行覆盖、段覆盖和基本块覆盖,这是最常见和最常用的覆盖方法,用来衡量被测代码中的每个可执行语句是否已经执行。语句覆盖常被批评为“最弱覆盖”,只覆盖代码中的执行语句,不考虑各种分支的组合等等。
2.决策覆盖范围
也称为分支覆盖、所有边界覆盖、基本路径覆盖和决策路径覆盖。它衡量程序中的每个决策分支是否都经过测试。这句话需要进一步理解,应该很容易和下面提到的条件覆盖相混淆。所以我们直接引入第三种覆盖方式,然后和判断覆盖进行对比,就可以了解他们之间是怎么回事了。
3.条件覆盖率(条件覆盖率)
条件覆盖度量测试中每个子表达式的结果是真还是假。
为了说明决策覆盖和条件覆盖之间的区别,让我们举一个例子,如果我们测试的代码如下:
int foo(int a,int b)
{
if(a & lt;10 || b <。10) //判断
{
返回0;//分支一
}
其他
{
返回1;//分支2
}
}
在设计判决覆盖案件时,我们只需要考虑判决结果真假的案件。因此,我们可以通过设计以下案例来实现100%的判断覆盖率:
Testcaes1: a = 5,b =任意数覆盖分支1
测试用例2: a =15,b =15覆盖分支2
在设计条件覆盖的情况下,我们需要考虑判断中每个条件表达式的结果。为了实现100%的覆盖率,我们设计了以下案例:
TestCase1: a =5,b =5true,trueTestCase4: a =15,b =15false,false
通过以上例子,我们应该清楚地理解决策覆盖和条件覆盖的区别。需要注意的是,条件覆盖并不在判断中对每个条件表达式的结果进行排列组合,只要每个条件表达式的结果为真、为假就OK。因此,我们可以推断,完全条件覆盖不能保证完全决策覆盖。举个例子,上面的例子,如果我把案例设计成这样:
测试用例1: a =5,b = 15,假分支1
TestCase1: a =15,b =5false,真分支1
我们可以看到,虽然我们完成了条件覆盖,但是我们没有完成判断覆盖,我们只覆盖了分支一。
4.路径覆盖(路径覆盖)
也称为预测预测。它测量函数的每个分支是否已经被执行。这句话也很好理解,就是所有可能的分支都执行一次。当有多个分支嵌套时,需要排列组合多个分支。可想而知,测试路径随着分支的数量呈指数增长。
Java代码覆盖原则
主流的代码覆盖工具都采用字节码插入方式,通过钩子记录代码执行轨迹信息。其中,字节码插入分为两种模式:On-The-Fly和Offine。动态模式的优点是无需修改源代码就能实时收集代码覆盖率信息。Offine模式的优点是系统启动时不需要打开代理,只有系统停止时才能获得代码覆盖。
即时插件Java代理
在JVM中,通过特定jar文件启动Instrumentation的代理由-javaagent参数指定。在加载每个类文件之前,代理判断文件是否已经被转换和修改。如果没有,它需要将探针插入类文件。当JVM执行代码时,可以实时获得代码覆盖率。典型代表:雅高
动态插桩分类装载机
自定义类加载器实现自己的类加载策略,并在类加载前将探针插入类文件。典型代表:艾玛
Offine桩插入
在测试之前,文件被插入到堆中,以生成插入到堆中的类文件或jar包。在执行了堆插入的类文件或jar包之后,覆盖信息将被生成到文件中。最后,将统一处理覆盖范围信息并生成报告。Offine有两种插桩:Replace:修改字节码生成新的类文件Inject:修改原来的字节码文件。典型代表:科伯图拉、雅克科
摘要
主要介绍代码覆盖率和Java覆盖率的统计原理。代码覆盖率统计是白盒测试和黑盒测试都必不可少的一部分,可以直接反映测试的缺失点(不是100%)。
最后,重申本文的开篇观点:
代码覆盖率统计是用来发现没有被测试覆盖的代码代码覆盖率统计不能完全用来衡量代码质量搜狗测试微信号:Qa _小明
搜狗测试QQ粉丝群:459645679
1.《覆盖率 浅谈代码覆盖率》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《覆盖率 浅谈代码覆盖率》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/shehui/675635.html