当前位置:网站首页>阿里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
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
边栏推荐
- All about PDF crack, a complete solution to meet all your PDF needs
- 23 Chengdu instrument customization undertaking_ Discussion on automatic wiring method of PCB in Protel DXP
- Frequently Asked Coding Problems
- 对API接口或H5接口做签名认证
- A method for quickly viewing pod logs under frequent tests (grep awk xargs kuberctl)
- [machine learning] watermelon book data set_ data sharing
- Implementation of navigation bar at the bottom of applet
- Greenplum 6.x reinitialization
- ES6_ Arrow function
- let const
猜你喜欢
A bug using module project in idea
Input and output of floating point data (C language)
A single game with goods increased by 100000, and the rural anchor sold men's clothes on top of the list?
let const
[MySQL] detailed explanation of trigger content of database advanced
IP地址的类别
详解华为应用市场2022年逐步减少32位包体上架应用和策略
Merge sort and non comparison sort
How to integrate app linking services in harmonyos applications
Introduction to data fragmentation
随机推荐
POJ - 3616 Milking Time(DP+LIS)
A bug using module project in idea
A method for quickly viewing pod logs under frequent tests (grep awk xargs kuberctl)
Greenplum6.x监控软件搭建
leetcode135. Distribute candy
2-3查找樹
National standard gb28181 protocol video platform easygbs adds streaming timeout configuration
[Yu Yue education] higher vocational English reference materials of Nanjing Polytechnic University
Greenplum 6.x common statements
Leetcode 1984. Minimum difference in student scores
Tronapi-波场接口-源码无加密-可二开--附接口文档-基于ThinkPHP5封装-作者详细指导-2022年7月6日-新手快速上手-可无缝升级tp6版本
[Yu Yue education] basic reference materials of electrical and electronic technology of Nanjing Institute of information technology
指针进阶,字符串函数
IP地址的类别
数据库存储---表分区
redis故障处理 “Can‘t save in background: fork: Cannot allocate memory“
leetcode134. gas station
oracle一次性说清楚,多种分隔符的一个字段拆分多行,再多行多列多种分隔符拆多行,最终处理超亿亿。。亿级别数据量
Data type - integer (C language)
How to understand distributed architecture and micro service architecture