导读:本文根据实际使用情况,简要分析了精准测试和类Jacoco等传统白盒工具在设计理念、功能和应用场景的异同点,并阐述了覆盖率技术如何在新型企业开发体系中,发挥应有的重要作用。
覆盖率技术可以说是测试理论中最基本的技术体系,但由于传统覆盖率并没有很好的适应新型软件开发模型,导致应用场景越来越窄。比如:Jacoco等同类工具,仍停留在传统白盒覆盖技术的技术演化层面,目前基本仅适用在瀑布模式的开发体系下。最新的测试黑马技术—“精准测试”覆盖率功能是企业级、面向敏捷迭代场景、全新的覆盖率技术。它明确提出了用例层级覆盖率的概念,并将用例层级覆盖率技术广泛应用于智能的测试分析算法。
精准测试的专利技术之一:测试用例与代码的双向追溯,可以简单理解为:所有分析和计算依赖于测试用例维度的覆盖信息。它创新性的将覆盖率统计维度从全局维度显示,降维到了测试用例这一细节,使覆盖率的放大作用远超出原有能力。它如同放大镜一样,使测试分析、测试算法以及测试数据真正做到一览无余,不错过任何重要细节。
Jacoco是传统的白盒覆盖率工具,不具备将覆盖率与用例关联的功能,很遗憾的不具备精准测试的所有高级特性。下面仅就“覆盖率”这一功能,将精准测试与Jacoco为代表的传统白盒覆盖工具进行一个简单比对:
1 覆盖率分析能力PK
Jacoco:作为传统白盒功能的代表,它的应用模式是部署在后台,采集所有执行代码的覆盖率,所有用户请求和功能的覆盖数据为混合统计,范围仅围绕在看覆盖率上。但这种覆盖信息的弊端是:它从全系统维度来统计,导致颗粒度太大,无法详细定位和深度分析覆盖率的真正问题。
精准测试:可以像调焦距一样,在并发访问的后台服务中,将某个测试用例的执行路径分离出来,进行各种细致分析。它用例级的双向追溯的覆盖信息,带有执行时序,可以很快定位缺陷发生时刻代码的执行路径(类似于重现单步调试场景),与此同时,还可以对测试人员的用例执行情况,进行非常精确的代码级跟踪。
2 对于敏捷测试的响应能力PK
Jacoco:不适应于敏捷迭代过程对于覆盖率的企业级需求。当代码发生变更后,Jacoco将重新采集覆盖率,各个发布版本采集的结果孤立存在。现代企业通常每天会发布多个版本,孤岛式无对比分析的覆盖率结果,价值不大。因为每组测试执行通常是在每个版本上跑一部分用例,而不是瀑布模型下在一个版本上进行所有用例的测试。
精准测试:在覆盖率计算和应用上有累积覆盖率、增量覆盖率、相关覆盖率、高风险覆盖分析、可变分母覆盖等诸多创新办法,随时响应敏捷迭代需求。
1)累积覆盖率:精准测试可以将多个测试覆盖进行累计和投影,这样就无所谓中间发布多少个版本、每个版本上跑多少个用例,可以自由选择看一个阶段的总体覆盖率。
2)增量覆盖率:由于企业软件体量庞大,因此无论如何测试都很难满足100%覆盖率的要求。所以通常企业更关注的是增量覆盖率,即新发布版本相比上一个测试版本修改后的代码覆盖情况。精准测试由于每个版本发布的时候都有详细的代码静态分析数据支持,因此它可以智能标识版本差异,并将版本差异的代码覆盖进行高亮显示,帮助企业关注新增/调整代码部分的覆盖率。
3)相关覆盖率:精准测试创新性提出了相关覆盖率技术,即把一个功能模块相关的代码作为计算的分母计算覆盖率。这样非常有利于在敏捷迭代场景下,只测试部分功能的覆盖率分析。相关覆盖率可用于支持功能模块(用例分类)级别的覆盖率,从业务角度统计某一个功能模块相关代码范围的覆盖率,明确指出某一个功能范围的测试覆盖充分度,而不是传统的全局代码覆盖率。
4)高风险覆盖分析:精准测试支持基于静态数据和动态数据高风险的模块检出,引导用户把精力投入到最高风险的模块覆盖逻辑补充上。
5)可变分母覆盖:精准测试支持多种系列的企业级覆盖计算要求,例如通过界面设置,将某些确定不需要或者无法覆盖的代码(例如暂时保留的无效代码)从覆盖率计算结果中排出,整体重新进行覆盖率的计算。支持某一个代码路径下(某一程度模块)范围内的代码覆盖等高级特性。
3 覆盖率可视化能力 PK