精准测试的探索与实践 薛飞飞 资深测试开发工程师 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 01背景与目标 Content 目录 02精准测试核心理念 03精准测试实现方案 04平台建设与收益 05基于AIGC的精准测试探索 06未来演进 01 背景与目标 传统测试痛点 业务测试的现状 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 黑盒功能测试受主观人为因素太大 大量的回归测试用例,回归成本高 测试质量无客观数据可衡量 自动化用例无法更有针对性的发挥其价值 过程中存在大量重复无效且盲目的工作 敏捷模式下测试效率低下 测什么测的怎么样 用例怎么精简 量化变更影响范围 计算增量/全量覆盖率 定义有效覆盖率 辅助链路覆盖率 建立用例和代码关联关系 精准测试要解决的问题 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 02 精准测试核心理念 什么是精准测试? 精准测试的定义 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 精准测试是一套软件测试辅助分析系统,通过对测试过程进行监控,将采集到 的监控数据进行分析,得到精准的量化数据。利用这些数据促进测试过程的不断完善,形成度量及分析闭环,核心组件包括用例和代码的双向追溯、测试用例精简、测试用例自动生成等。 在测试用例执行过程中,自动建立任意运行模式的软件系统的用例和代码间高度关联的追溯机制,获取代码覆盖率并进行精准回归。 正向追溯 测试用例 代码 测试范围 逆向追溯 正向追溯 逆向追溯 通过去被测服务上收集测试覆盖率(全量/增量),建立测试用例与代码的关联关系,根据直观的覆盖率数据评估“我测的怎么样” 通过对指定方法、版本或分支进行代码diff找出差异代码,根据全链路分析找出受影响的服务/接口/方法;同时依赖代码和用例的关联知识库确定用例回归范围,从而准确评估“我要测什么” 精准测试核心思想 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 正向追溯案例 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 •获取测试用例对应的代码覆盖率 •建立测试用例与代码的关联关系,可追溯到接口、方法、代码行级别 逆向追溯案例 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 •代码(接口、方法、代码行)与测试用例执行信息自动关联 •通过逆向追溯可以快速找到变更代码对应的测试用例范围,协助QA评估测试范围 测试分析 更准确 测试执行 更高效 测试结果 更可信 范围可量化 用例可精简 测试可决策 影响范围 精准评估 测试用例 精准筛选 测试结果 精准度量 精准测试的核心理念 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 03 精准测试的实现方案 覆盖率+代码分析+用例代码关联 精准测试整体方案 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 服务端-调用链路分析方案 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 静态调用链路 动态调用链路 跨应用调用链 方案 基于ASM分析字节码,扫描每个方法体指令 采用javaagent对代码进行织入 结合内部已有的调用链Trace平台,汇总处 中的invoke指令,同时 理所有信息获取应用 补充桥接来解决部分多态问题,最终生成 间的调用链路情况(对于没有现成调用链 内部调用链 的公司可以参考skywalking 优势 服务无感知 记录一次请求经过的 / 可以获取应用内完整 所有内部方法,这样 的调用链数据 形成的内部方法调用链将会记录aop和多态执行的真正的方法 不足 存在多态和AOP问题,导致链路分析不准确 大量织入影响服务性能 / 服务端-调用链路分析流程 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 服务端-调用链路分析桥接器 抽象类和实现类桥接 变更代码 调用链路分析-案例 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 服务端-调用链路分析结果 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 服务端-覆盖率流程 全量覆盖率 增量覆盖率 有效覆盖率 链路覆盖率 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 覆盖率执行结果 服务端-有效覆盖率 当前痛点 •历史冗余废弃代码多,去测试覆盖意义不大 •全量代码量大,待覆盖范围广,很难有抓手 •用例已覆盖的逻辑到底有没被真实业务走到? •到底还有哪些真实业务场景没有被用例覆盖? “有效覆盖率” 真实业务关键逻辑追踪可视化 精准指导用例设计和测试覆盖,查漏补缺 辅助代码重构和冗余废弃代码治理 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 有效覆盖率效果 •有颜色:线上流量走过(参与统计) •无颜色:线上流量未走过(不参与统计) •绿色:线上和线下自动化流量都走过 •红色:代表线上流量覆盖率走过,线下自动化流量未覆盖 •黄色:为判断分支点(部分分支流程覆盖) 服务端-链路覆盖率 代码分析 diff 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 服务端-链路覆盖率 如何建立测试用例和代码之间的关联关系? 打标 在用例执行时,为每个用例加上唯一的用例标识 识别 1? 2? 用例 <-> 代码 4? 3? 在被测系统的入口处获取和识别到用例标识 存储 记录用例和代码之间的覆 盖关系数据 传递 实现用例标识在程序节点间传递 服务端-测试用例与代码关联方案 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 服务端-测试用例与代码关联 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 服务端-测试用例与代码关联 入口 链路/方法 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 移动端覆盖率 •插桩:配置、引入SDK •SDK:集成启动、收集、上报覆盖率功能、标识caseID •Server端:收集覆盖率文件,建立caseId与代码的映射关系,并持久化存储 覆盖率采集: •Android使用Jacoco •iOS使用LLVM 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 移动端-用例和代码关联 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 手动测试用例关联: 移动端-用例和代码关联 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 自动化测试用例关联: 测试过程 测试准入 研发过程 线上运行 测试准出 •辅助日常技术分析 •辅助系统重构和拆分 •辅助冗余废弃代码治理 •流水线触发自动生成版本变更影响范围分析报告 •流水线触发自动跑冒烟用 例并生成覆盖率报告 •精准测试用例推荐 •自动化+手工测试增量覆盖率计算 •指导用例精准补充 •建立用例和代码映射关系 •自动化建设程度量化、可视化 •全量覆盖率卡点 •变更行覆盖率卡点 •变更方法覆盖率卡点 •有效覆盖率卡点 •Top接口覆盖卡点 •回归用例筛选 •线上热点代码染色/跟踪 精准测试应用场景 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 天玑平台 精准测试SDK 04 平台建设及收益 平台架构设计 精准测试架构 公共部署 应用一键接入 私有化部署 各基建打通 组件化 业界通用接入方式 开源引入 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 平台能力 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 自动化指标 •核心服务平均全量行覆盖↑20%+ •有效测试行覆盖提升40%左右 拦截召回 •通过发布卡点拦截和召回有效缺陷10+/ 月,缺陷逃逸率降低15%+ 用例精简 •通过用例聚合分析排除无效或重复用例,使全量用例集精简10%+ 赋能研发 在商城、库存,交易,前台等多个大型技改项目中应用: •自动化:实现多个百万级代码工程的调用链路分析计算,准确率达到99%,分析效率在5分钟内 •工具化:实现了老旧服务的微服务拆分和代码迁移,解决了之前完全靠人肉分析搬迁的动作,在这个点上研发提效50%+ 质效提升 降本提效 •测试过程通过工具赋能,整体提效20%左右(测试分析、精简用例、减少无效的测试覆盖和回归动作等) 精准测试平台收益 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 05 基于AIGC的精准测试探索 基于AIGC生成自动化测试用例 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 1.接口定义->自动化测试用例 Prompt 基于AIGC生成自动化测试用例 2.调用链路->自动化测试用例 1.prompt长度受限 2.代码调用链较深时用例设计效果一般 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 06 未来演进 版本变更对全链路影响综合风险评估能力搭建 测试用例自动生成,健全用例知识库 多维信息融合建模的用例推荐算法 结合chatGPT能力,探索精准测试流程新方向 精准测试原子能力sdk的开源建设 未来规划 能力 提升 智能 化 开源 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 2023DevOps国际峰会暨BizDevOps企业峰会·北京站 Thanks DevOps时代社区荣誉出品