当前位置:网站首页>阿里p8推荐,测试覆盖率工具—Jacoco,实用性极佳
阿里p8推荐,测试覆盖率工具—Jacoco,实用性极佳
2022-07-07 06:12:00 【软件测试呀】
测试覆盖率工具
测试过程中根据需求文档和设计文档编写测试用例、执行测试;为了更加全面的覆盖,我们可能还需要理解被测程序的逻辑,需要考虑到每个函数的输入与输出,逻辑分支代码的执行情况,这个时候我们的测试执行情况就以代码覆盖率来衡量。
覆盖率是衡量测试效果的一个辅助指标。
01、意义
分析未覆盖部分的代码,从而反推在前期测试设计是否充分,没有覆盖到的代码是否是测试设计的盲点,为什么没有考虑到?
需求/设计不够清晰、测试设计的理解有误、工程方法应用后的造成的策略性放弃等等,之后进行补充测试用例设计。
检测出程序中的废代码,可以逆向反推在代码设计中思维混乱点,提醒设计/开发人员理清代码逻辑关系,提升代码质量。
代码覆盖率高不能说明代码质量高,但是反过来看,代码覆盖率低,代码质量不会高到哪里去,可以作为测试自我审视的重要工具之一。
02、工具比较
市场上主流工具Emma、Cobertura、Jacoco、Clover(商用)。
Jacoco简介
Jacoco 是一个开源的覆盖率工具,针对的语言为java。它可以嵌入到Ant 、Maven中,也提供了EclEmma Eclipse插件。Jacoco主要通过代码注入(即Java Agent)方式来实现覆盖率的功能。
很多第三方的工具提供了对 Jacoco 的集成,如:Sonar、Jenkins、IDEA,下载地址:https://www.eclemma.org/jacoco/
01、覆盖率相关概念
Jacoco支持多种覆盖率的统计,包括:
行覆盖率(Lines):度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。
类覆盖率(classes)):度量计算class类文件是否被执行。
分支覆盖率(Branches,C1coverage):度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的 分支数量。
方法覆盖率(non-abstract methods):度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。
指令覆盖(Instructions,C0coverage):计数单元是单个java二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全 独立源码格式。
圈复杂度(CyclomaticComplexity):在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测 试案例没有完全覆盖到这个模块。
02、插桩及不同插桩模式
什么是插桩
程序插桩,最早是由J.C. Huang 教授提出的,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”,本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用)。
通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。
On-The-Fly和Offine比较
On-The-Fly模式是JVM通过 -javaagent参数指定jar文件启动代理程序,代理程序在ClassLoader装载一个class前判断是否修改class文件,并将探针插入class文件,探针不改变原有方法的行为,只是记录是否已经执行。
Offine模式就是在测试之前先对文件进行插桩,生成插过桩的class或jar包,测试插过桩的class和jar包,生成覆盖率信息到文件,最后统一处理,生成报告。
Offline模式适用于以下场景:
运行环境不支持java agent
部署环境不允许设置JVM参数
字节码需要被转换成其他虚拟机字节码,如Android Dalvik VM
动态修改字节码过程中和其他agent冲突
无法自定义用户加载类
房子要一层一层盖,知识要一点一点学。大家在学习过程中要好基础,多上手实操,话不多说,这里狠狠上一次干货!我熬夜整理好的各阶段(功能、接口、自动化、性能、测开)技能学习资料+实操讲解,非常适合私下里学习,比找资料自学高效多了,分享给你们。
领取关 w/x/g/z/h:软件测试小dao
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
边栏推荐
- Greenplum 6.x version change record common manual
- Composer change domestic image
- Greenplum6.x常用语句
- 使用AGC重签名服务前后渠道号信息异常分析
- Three usage scenarios of annotation @configurationproperties
- Gson converts the entity class to JSON times declare multiple JSON fields named
- mysql分区讲解及操作语句
- 登山小分队(dfs)
- [Chongqing Guangdong education] accounting reference materials of Nanjing University of Information Engineering
- FPGA knowledge accumulation [6]
猜你喜欢

Greenplum6.x搭建_安装

下载和安装orcale database11.2.0.4

Appeler l'interface du moteur de création du service multimédia de jeu Huawei renvoie le Code d'erreur 1002, le message d'erreur: les paramètres sont l'erreur

Teach you how to select PCB board by hand (II)

Greenplum 6.x build_ Environment configuration
![FPGA knowledge accumulation [6]](/img/db/c3721c3e842ddf4c1088a3f54e9f2a.jpg)
FPGA knowledge accumulation [6]

Greenplum 6.x common statements

调用华为游戏多媒体服务的创建引擎接口返回错误码1002,错误信息:the params is error

Input of mathematical formula of obsidan

MySQL introduction - crud Foundation (establishment of the prototype of the idea of adding, deleting, changing and searching)
随机推荐
National standard gb28181 protocol video platform easygbs adds streaming timeout configuration
POJ - 3616 Milking Time(DP+LIS)
【微信小程序:缓存操作】
[Yugong series] February 2022 U3D full stack class 008 - build a galaxy scene
2-3查找樹
Go write a program that runs within a certain period of time
2-3查找树
Gson转换实体类为json时报declares multiple JSON fields named
xray的简单使用
What is the method of manual wiring in PCB design in 22protel DXP_ Chengdu electromechanical Development Undertaking
let const
Sign and authenticate API interface or H5 interface
Frequently Asked Coding Problems
详解华为应用市场2022年逐步减少32位包体上架应用和策略
Laravel8 uses passport login and JWT (generate token)
MySQL introduction - crud Foundation (establishment of the prototype of the idea of adding, deleting, changing and searching)
Leetcode 1984. Minimum difference in student scores
23 Chengdu instrument customization undertaking_ Discussion on automatic wiring method of PCB in Protel DXP
redis故障处理 “Can‘t save in background: fork: Cannot allocate memory“
IP地址的类别