当前位置:网站首页>阿里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
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
边栏推荐
- [Yu Yue education] C language programming reference of Zhongbei College of Nanjing Normal University
- 2-3 lookup tree
- let const
- Exercise arrangement 2.10, 11
- 路由信息协议——RIP
- Database storage - table partition
- [step on the pit] Nacos registration has been connected to localhost:8848, no available server
- Download and install orcale database11.2.0.4
- [hard core science popularization] working principle of dynamic loop monitoring system
- opencv之图像分割
猜你喜欢
IP地址的类别
下载和安装orcale database11.2.0.4
oracle一次性说清楚,多种分隔符的一个字段拆分多行,再多行多列多种分隔符拆多行,最终处理超亿亿。。亿级别数据量
ncs成都新電面試經驗
Are you holding back on the publicity of the salary system for it posts such as testing, development, operation and maintenance?
Greenplum6.x-版本变化记录-常用手册
AVL平衡二叉搜索树
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
Greenplum6.x重新初始化
In go language, function is a type
随机推荐
Greenplum 6.x version change record common manual
Basic data types and string types are converted to each other
[kuangbin] topic 15 digit DP
POJ - 3784 running medium
leetcode135. Distribute candy
All about PDF crack, a complete solution to meet all your PDF needs
redis故障处理 “Can‘t save in background: fork: Cannot allocate memory“
Tips for using jeditabletable
【微信小程序:缓存操作】
Pointer advanced, string function
Oracle makes it clear at one time that a field with multiple separators will be split into multiple rows, and then multiple rows and columns. Multiple separators will be split into multiple rows, and
[Yugong series] February 2022 U3D full stack class 008 - build a galaxy scene
Redis summary
Sign and authenticate API interface or H5 interface
Grpc, oauth2, OpenSSL, two-way authentication, one-way authentication and other column directories
SSM integration
Shell script for changing the current folder and the file date under the folder
Implementation method of data platform landing
Input of mathematical formula of obsidan
[MySQL] detailed explanation of trigger content of database advanced