精准测试与开源工具Jacoco的覆盖率能力大PK

简介: 本文根据实际使用情况,简要分析了精准测试和类Jacoco等传统白盒工具在设计理念、功能和应用场景的异同点,并阐述了覆盖率技术如何在新型企业开发体系中,发挥应有的重要作用。

导读:本文根据实际使用情况,简要分析了精准测试和类Jacoco等传统白盒工具在设计理念、功能和应用场景的异同点,并阐述了覆盖率技术如何在新型企业开发体系中,发挥应有的重要作用。
 
覆盖率技术可以说是测试理论中最基本的技术体系,但由于传统覆盖率并没有很好的适应新型软件开发模型,导致应用场景越来越窄。比如:Jacoco等同类工具,仍停留在传统白盒覆盖技术的技术演化层面,目前基本仅适用在瀑布模式的开发体系下。最新的测试黑马技术—“精准测试”覆盖率功能是企业级、面向敏捷迭代场景、全新的覆盖率技术。它明确提出了用例层级覆盖率的概念,并将用例层级覆盖率技术广泛应用于智能的测试分析算法。
 
精准测试的专利技术之一:测试用例与代码的双向追溯,可以简单理解为:所有分析和计算依赖于测试用例维度的覆盖信息。它创新性的将覆盖率统计维度从全局维度显示,降维到了测试用例这一细节,使覆盖率的放大作用远超出原有能力。它如同放大镜一样,使测试分析、测试算法以及测试数据真正做到一览无余,不错过任何重要细节。
 
Jacoco是传统的白盒覆盖率工具,不具备将覆盖率与用例关联的功能,很遗憾的不具备精准测试的所有高级特性。
下面仅就“覆盖率”这一功能,将精准测试与Jacoco为代表的传统白盒覆盖工具进行一个简单比对:

1 覆盖率分析能力PK

Jacoco:作为传统白盒功能的代表,它的应用模式是部署在后台,采集所有执行代码的覆盖率,所有用户请求和功能的覆盖数据为混合统计,范围仅围绕在看覆盖率上。但这种覆盖信息的弊端是:它从全系统维度来统计,导致颗粒度太大,无法详细定位和深度分析覆盖率的真正问题。
 
精准测试:可以像调焦距一样,在并发访问的后台服务中,将某个测试用例的执行路径分离出来,进行各种细致分析。它用例级的双向追溯的覆盖信息,带有执行时序,可以很快定位缺陷发生时刻代码的执行路径(类似于重现单步调试场景),与此同时,还可以对测试人员的用例执行情况,进行非常精确的代码级跟踪。

2 对于敏捷测试的响应能力PK

Jacoco:不适应于敏捷迭代过程对于覆盖率的企业级需求。当代码发生变更后,Jacoco将重新采集覆盖率,各个发布版本采集的结果孤立存在。现代企业通常每天会发布多个版本,孤岛式无对比分析的覆盖率结果,价值不大。因为每组测试执行通常是在每个版本上跑一部分用例,而不是瀑布模型下在一个版本上进行所有用例的测试。
 
精准测试:在覆盖率计算和应用上有累积覆盖率、增量覆盖率、相关覆盖率、高风险覆盖分析、可变分母覆盖等诸多创新办法,随时响应敏捷迭代需求。
1)累积覆盖率:精准测试可以将多个测试覆盖进行累计和投影,这样就无所谓中间发布多少个版本、每个版本上跑多少个用例,可以自由选择看一个阶段的总体覆盖率。

2)增量覆盖率:由于企业软件体量庞大,因此无论如何测试都很难满足100%覆盖率的要求。所以通常企业更关注的是增量覆盖率,即新发布版本相比上一个测试版本修改后的代码覆盖情况。精准测试由于每个版本发布的时候都有详细的代码静态分析数据支持,因此它可以智能标识版本差异,并将版本差异的代码覆盖进行高亮显示,帮助企业关注新增/调整代码部分的覆盖率。
 
3)相关覆盖率:精准测试创新性提出了相关覆盖率技术,即把一个功能模块相关的代码作为计算的分母计算覆盖率。这样非常有利于在敏捷迭代场景下,只测试部分功能的覆盖率分析。相关覆盖率可用于支持功能模块(用例分类)级别的覆盖率,从业务角度统计某一个功能模块相关代码范围的覆盖率,明确指出某一个功能范围的测试覆盖充分度,而不是传统的全局代码覆盖率。
 
4)高风险覆盖分析:精准测试支持基于静态数据和动态数据高风险的模块检出,引导用户把精力投入到最高风险的模块覆盖逻辑补充上。

5)可变分母覆盖:精准测试支持多种系列的企业级覆盖计算要求,例如通过界面设置,将某些确定不需要或者无法覆盖的代码(例如暂时保留的无效代码)从覆盖率计算结果中排出,整体重新进行覆盖率的计算。支持某一个代码路径下(某一程度模块)范围内的代码覆盖等高级特性。

3 覆盖率可视化能力 PK

Jacoco:基于字节码插装,没有全面的程序静态分析过程,因此无法将覆盖率通过静态分析得到的可视化图形结合清晰展示覆盖率信息。另外,Jacoco必须提供源码才能看懂覆盖率。
 
精准测试:具有多种函数调用图,控制流程图上展示覆盖率信息,可以在没有源码的情况下,基于精准分析结果,结合动态覆盖率视图,清晰展示程序的覆盖和执行路径信息。

4 覆盖率统计能力 PK

Jacoco:以行覆盖和分支覆盖为主。Jacoco是传统行覆盖,基本上每行都需要进行插装。在结合代码展示覆盖的视图方面,无法取得程序的深入静态信息,因此一般只能再代码视图上以颜色表达是否覆盖。
 
精准测试:支持覆盖率计算可视化、多覆盖率算法标准及深度的数据分析。
1)支持覆盖率计算可视化,覆盖率是如何计算的都表达的非常清晰(贡献覆盖率的分子分母对应的程序元素、数量),方便用户去深入理解覆盖率的含义和信息。
 
2)精准测试支持更加深度的条件以及条件组合级别以及航天级MC/DC的覆盖率标准。精准测试提供的语句覆盖是基本块覆盖,一个顺序的代码段因为有静态分析结果的支撑,只需要一个插装点。
 
3)精准测试对程序的静态结构有深度的分析数据,因此它的代码展示视图很清晰,程序结构都可以绘制出来,代码覆盖率视图看起来非常清晰。例如中间没有跳转的基本块会在展示效果上绘制为一个整体,并有是否覆盖标识,而不是每行都要进行标识。

5 高度产品化特性 PK

Jacoco:属于开源范畴,采用字节码插装(指令层级),插装后的代码不可见不可维护,出现问题后很难排查原因,很难定位和修复,商用使用风险较高。每次获取一次覆盖数据都需要访问一个网页地址显示的重新生成。
Jacoco的应用模式是部署在后台采集,无前端显示。出现异常时,测试人员无法知晓自己执行的测试用例是否有效。

精准测试:由星云测试(www.teststars.cc) 主导研发,自主可控。在产品化特性有不可比拟的优越性:
1)基于源码插装,插装代码可见且开放,非常利于企业应用排查问题和进行流程整合等。万一出现特殊语法问题引起插装问题,用户可以随时查看并自行处理,不会因为极个别情况影响产品应用。

2)覆盖率信息是实时汇总的,通过客户端可以由多个有查看权限的用户(包括开发、测试以及管理人员)实时查阅。
 
3)软件示波器可实时传输测试过程中的数据,对于传输过程中测试执行覆盖率采集是否有效,可进行可视化的故障排查。

相关文章
|
30天前
|
前端开发 测试技术 Python
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
本文分享了使用Selenium进行UI自动化测试的全过程,包括开发环境部署、代码实现、思路分析和难点解析。作者通过一个实际案例,讲述了如何利用Selenium处理前端生成报告失败的问题,以及在UI自动化中定位元素和处理元素不唯一的情况。同时,文章强调了解决问题思路的重要性,鼓励读者开拓思维,寻找不同的解决方案。
78 4
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
|
1月前
|
前端开发 jenkins 测试技术
自动化测试介绍,为何 Apifox 是进行自动化测试的最佳工具
自动化测试利用专用软件执行测试用例,比手动测试更高效准确。Apifox是一款集API文档、调试与自动化测试于一体的工具,提供一体化解决方案,简化API变更管理。其强大的测试功能支持丰富的断言及测试场景组合,便于模拟真实业务流程。Apifox还提供详尽的测试报告与分析功能,有助于快速定位问题。此外,它能轻松集成到CI/CD流程中,并支持定时任务及多分支管理,极大提升了测试效率和团队协作。相较于其他工具,Apifox以其全面的功能和友好的界面脱颖而出。
|
2天前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
11 4
|
19天前
|
监控 安全 Linux
如何利用Kali Linux进行网站渗透测试:最常用工具详解
如何利用Kali Linux进行网站渗透测试:最常用工具详解
55 6
|
19天前
|
安全 Linux 测试技术
Kali Linux预装的自动化渗透测试工具
Kali Linux预装的自动化渗透测试工具
28 2
|
22天前
|
测试技术
基于LangChain手工测试用例转Web自动化测试生成工具
该方案探索了利用大模型自动生成Web自动化测试用例的方法,替代传统的手动编写或录制方式。通过清晰定义功能测试步骤,结合LangChain的Agent和工具包,实现了从功能测试到自动化测试的转换,极大提升了效率。不仅减少了人工干预,还提高了测试用例的可维护性和实用性。
31 4
|
27天前
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
|
30天前
|
测试技术 API
软件测试:Postman 工具的使用。开发及测试均需要掌握的测试工具
这篇文章详细介绍了Postman工具的各个模块功能,包括创建请求、集合、环境、自动化测试等,并解释了如何使用Postman进行GET、POST、PUT和DELETE等常见HTTP请求的测试。
|
1月前
|
测试技术 Android开发 iOS开发
Appium 是一个开源的自动化测试框架,它支持多种平台和多种编程语言
Appium是一款开源自动化测试框架,支持iOS和Android多平台及多种编程语言。通过WebDriver协议,开发者可编写自动化测试脚本。在iPhone上实现屏幕点击等操作需安装Appium及其依赖,启动服务器,并设置所需的测试环境参数。利用Python等语言编写测试脚本,模拟用户交互行为,最后运行测试脚本来验证应用功能。对于iPhone测试,需准备真实设备或Xcode模拟器。
59 1
|
27天前
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之计算测试用例的分支覆盖率如何解决
SpringBoot单元测试快速写法问题之计算测试用例的分支覆盖率如何解决