软件测试 | 精准化测试

518 篇文章 3 订阅
514 篇文章 2 订阅
精准化测试自2019年起受到广泛关注,其中实时代码染色技术是一个重要突破。通过分析代码覆盖率和调用链,可以更精确地定位测试用例,提升测试效率。文章介绍了如何建立用例与代码的关联模型,以及如何利用工具如SonarQube和JaCoCo进行分析。精准化测试不仅用于测试团队,也是整个开发过程的重要支持,对于构建高效测试平台具有重要意义。
摘要由CSDN通过智能技术生成

精准化测试的发展历史

精准化测试在 2019 年开始大热,在此之前的 10 年里,已经陆续有很多人投入研究,蚂蚁金服的两位 同学周为、翟帅两位同学的实时代码染色技术,把精准化测试提高了一个新的高度,并迅速在业界大 热。

  • 百度利用覆盖率增量从回归数据中提取有效覆盖
  • 精准定位用例数据与覆盖率关系
  • 代码行为流建模
  • 星云测试
  • 有赞集成测试覆盖率统计实践
  • 蚂蚁金服的代码实时染色

代码调用链分析

常见的调用链分析方法主要有

  • 基于 AST 的语法树分析
  • 基于字节码分析

调用链的动态分析方法

  • 基于 gdb/jdb 的调试器分析
  • jvmti/jvmpi
  • jvm-sandbox、bytebuddy、btrace 共工具

代码覆盖率其实是一种丢失了时序结构的调用链数据。调用链的本质是一种具备调用节点顺序的列表, 覆盖率则是为了方便分析把列表降级成了集合。

调用链是一种图结构,可以适当的简化为树结构方便分析。根据代码的调用链,根据一些真实的项目做 了一个调用链的示意图,方便大家理解。

调用链就是一种带有分支的流程图。测试工程师提到的调用链,与架构师提到的调用链并不完全相同。 比如类似 skywalking、zipkin 之类的全链路 trace 系统是可以追踪代码的执行链路,多数可以到函数级 别,而测试工程师要分析代码的与业务之间的关系,需要追踪到代码行与分支级别。

用例与代码关联

建立关联关系的步骤

  • 执行用例
  • 获取用例对应的代码调用链
  • 建模分析

精准化的关键,其实就是对业务、用例、代码进行关联建模并追踪他们的变化。

首先建立(业务,用例,代码调用链)三者的关联数据表,可以简单理解为 python 的三元组,或者 java 的 hashmap。如果业务不清晰,可以暂时用用例代替业务,如果调用链没分析清楚,可以暂时用覆盖率数 据作为替代。

应用场景

精准化测试的用途

  • 根据代码变更定位用例范围
  • 更准确深入的覆盖被测业务
  • 白盒探索式测试
  • 从线上数据反推有效测试用例

当新版本发布的时候,代码会发生变化(数据变化是另外一大话题,暂时忽略),首先分析代码范围, 然后分析变化点散落在哪些用例中,这样就可以重点关注被影响波及的测试用例集合,这样比全面回归 测试能更高效精准的发现问题。

同时根据新增代码的变更范围,我们也可以了解到我们漏测的部分,并加强未覆盖新增代码的测试验 证。在白盒层面我们就可以建立起来具备快速探索与反馈的测试活动,有效避免漏测。

同样利用线上的数据,也可以帮助我们反推测试用例,比如百度曾经就利用覆盖率拆分技术,把为期 2 天的全量回归测试优化为 2 个小时的回归测试。把每个测试用例对应的覆盖率或者调用链拆分,根据 覆盖率的不同可以自动划分为不同的等价类,从每个等价类集合中取少数代表性用例即可。通过这种方 式,可以有效弥补人工设计用例的不足。

打造自己的精准化测试平台

越来越多的公司开始招聘测试开发工程师,甚至是研发工程师设计自己的精准化测试平台,精准测试虽 然起源于测试团队,但是他的应用价值是超越测试,横跨整个产品开发团队的,所以精准化测试的平台 会是大势所趋。

为了照顾很多中小公司的同学,霍格沃兹测试学院为大家研究出了一套简化的适合中小公司使用的平民 版精准化测试技术体系,可以用来简单的实现精准化测试方案

  • 使用 sonarqube 作为覆盖率与测试用例的分析平台
  • 使用 jacoco 作为代码覆盖率的分析工具
  • 使用 jacoco-cli 实现对单个用例的覆盖率收集
  • 使用 scanner 完成覆盖率导入
  • 调整 sonarqube 平台中覆盖率展示的信息,加入关联测试用例的展示,方便在未覆盖的代码附近可 以找到最接近的测试用例

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
近年来,APM进入了一个高速发展的快车道,分布式环境下的应用自动发现及动态调用链路分析作为APM的核心功能在APM的推广中也获得了广泛的使用,但在实践中,也暴露出了一些不足:完全基于运行态的分析模式决定了其只能获取到有实际调用的逻辑链路,大量没有埋点或未被触发的调用逻辑则成了“失落的世界”,无法触碰。 寻找这部分“失落的世界”对我们了解分布式环境下的应用全貌至关重要,天弘基金移动平台团队在这方面做了一些创新性的探索,我们跳出了传统APM的惯性思维,通过对海量代码中的调用关系的扫描分析来获取分布式环境下“前中后”台的完整调用链路,并在此基础上叠加动态调用链来构建精细的APM监控。 通过本专题,我将基于我们的实践来详细介绍“静态调用链路发现”的技术与手段,并探索运维及开发场景中如何将它和现有的APM能力进行结合。 -->听众受益: 1、了解分布式环境下APM的“优”与“缺”。 2、了解构建“静态调用链路发现”能力的技术与手段。 3、了解如何用创新性的思维拓展APM的应用场景。 -->个人简介: 李鑫,天弘基金(余额宝)移动平台首席架构师,负责移动平台总体技术架构设计。曾任当当网架构师,负责电商后端运作产品平台整体技术架构和研发团队管理;华为云计算专家,主导了华为软件多款云计算产品和服务的设计规划和构建工作。 个人技术涉及大规模分布式应用及治理、中间件云及服务(PaaS)、APM 监控、基础开发平台等领域,有多年大规模复杂系统架构实践经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值