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

 

导读:本文根据实际使用情况,简要分析了精准测试和类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)软件示波器可实时传输测试过程中的数据,对于传输过程中测试执行覆盖率采集是否有效,可进行可视化的故障排查。

 

posted @ 2019-08-12 14:03  星云精准测试  阅读(1912)  评论(2编辑  收藏  举报