当前位置:首页 > 时尚生活

覆盖率 浅谈代码覆盖率

前言

代码覆盖率作为一个指导性指标,在一定程度上可以反映测试的完整性,是软件质量度量的一种手段。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

上一篇

生不生三胎专家建议 专家建议“开放三胎,放开三孩” 网友热议:不敢生

下一篇

石家庄:迅速进入战时状态 具体事件详情是怎样的

武汉科技学院外经贸学院 武汉纺织大学外经贸学院招生代码

武汉科技学院外经贸学院 武汉纺织大学外经贸学院招生代码

武汉纺织大学对外贸易经济合作学院是2002年经教育部批准成立的一所产学研结合的独立学院。目前在校生和专科生8000多人,分布在潜龙岛和武汉纺织大学的东湖、阳光、南湖校区。从2016年9月开始...

武汉外经贸学院 武汉纺织大学外经贸学院招生代码

武汉外经贸学院 武汉纺织大学外经贸学院招生代码

武汉纺织大学对外贸易经济合作学院是2002年经教育部批准成立的一所产学研结合的独立学院。目前在校生、专科生8000多人,分布在潜龙岛和武汉纺织大学的东湖、阳光、南湖校区。从2016年9月开始...

一斤铁和一斤棉花哪个重 测试|一斤棉花和一斤铁哪个重?答错了说明你“痴呆”!

一斤铁和一斤棉花哪个重 测试|一斤棉花和一斤铁哪个重?答错了说明你“痴呆”!

老年痴呆症的早期发现 只用一句话提问 赶紧和家人一起试试吧  一斤棉花和一斤铁哪个更重? ▼ “同样的重量” 标题已经告诉你了,重1公斤 什么?一斤铁更重? 粗略诊断是老傻逼,赶紧去医院!...

王者荣耀重名代码 王者荣耀怎么改重复名字 王者荣耀重复昵称代码大全

王者荣耀重名代码 王者荣耀怎么改重复名字 王者荣耀重复昵称代码大全

王者荣耀的重名怎么改?今天,我们边肖114婚姻网为您带来了王者荣耀重复昵称的完整代码。当你在王者荣耀游戏中遇到重名时,系统总会让你改名字。 当你在王者荣耀游戏中遇到重名的时候,系统总会让你不...

已怀孕测试图片 有没有怀孕?用这10个方法测测(内附图片)

  • 已怀孕测试图片 有没有怀孕?用这10个方法测测(内附图片)
  • 已怀孕测试图片 有没有怀孕?用这10个方法测测(内附图片)
  • 已怀孕测试图片 有没有怀孕?用这10个方法测测(内附图片)
饥荒海难代码大全 《饥荒》海难控制台代码大全

饥荒海难代码大全 《饥荒》海难控制台代码大全

游戏《饥荒》dlc沉船已经被很多伙伴玩过了,所以游戏中可能有很多玩家不知道如何使用控制台代码。为此,以下为玩家提供一个完整的DLC沉船控制台代码书。有需要的玩家赶紧去看看,希望能帮到你。 首...

逻辑思维能力测试20题 经典的逻辑思维能力测试题,据说只有2%的人能答出来~

逻辑思维能力测试20题 经典的逻辑思维能力测试题,据说只有2%的人能答出来~

点击上面蓝色的“摩登与经典”跟随我们,添加个人微信xdyjd2005小系列私聊。  1)爱因斯坦在20世纪初提出这个话题,据说全世界98%的人都答不上来。 在一条街上,有五栋房子被漆成五种颜...

一年级语文上册期中试卷 部编版一年级上册语文期中测试卷(有答案

  • 一年级语文上册期中试卷 部编版一年级上册语文期中测试卷(有答案
  • 一年级语文上册期中试卷 部编版一年级上册语文期中测试卷(有答案
  • 一年级语文上册期中试卷 部编版一年级上册语文期中测试卷(有答案