1、基于代码链路分析的精准测试体系2023 深圳站李华伟2015年加入阿里巴巴,先后数字娱乐事业群、优酷从事质量保障工作:优酷服务端研发效能专项负责人优酷基础业务测试团队负责人阿里巴巴-优酷-技术中心 技术专家嘉宾照片2023 深圳站目录CONTENTS背景介绍01 基于代码链路分析的精准测试02 代码链路完备性解决方案03 04 业务落地&相关资料2023 深圳站01背景介绍2023 深圳站认识精准测试基于变更内容识别、影响面分析的测试决策和执行过程测试用例业务代码用例执行正向关联逆向推荐2023 深圳站精准测试的目标尽可能少的测试资源尽可能多的业务功能交付2023 深圳站精准测试的2个关键问题
2、要不要测试变更代码有效性变更方法热度变更方法复杂度、耦合度要怎么测试业务代码逻辑有效测试覆盖业务接口、业务场景2023 深圳站02基于代码链路分析的精准测试2023 深圳站一句话描述以代码方法为观测对象,通过静态代码分析识别有效变更方法,通过线上动态采集获取方法调用链路,基于代码知识库、流量知识库精准分析代码变更影响的方法调用链路,基于影响链路推荐测试用例变更变更内容内容代码代码方法方法代码代码链路链路业务业务入口入口业务业务流量流量推荐分析匹配识别2023 深圳站代码调用链路现状 ABCDEFG方法依赖链路缺少代码控制流外部子调用链路服务A服务B服务C应用Rpc_A1Rpc_B1Rpc_A2
3、Rpc_C1缺少代码内部逻辑2023 深圳站代码方法调用链路更真实的业务反馈更准确的代码逻辑2023 深圳站方案架构图线上实时流量代码仓库研发流水线线下测试流量依赖数据SparrowSandbox依赖能力知识库主主干干代代码码知知识识库库文件名、类名、方法名方法修饰、方法注解方法入参、方法返回方法圈复杂度方法依赖度流流量量知知识识库库流量返回结果代码调用链路流量请求参数变变更更代代码码知知识识库库变更代码语义(空行、注释、日志、变量赋值、逻辑判断)变更文件变更类变更方法变更行决策中心代码链路分析平台能力采集配置静态分析动态采集静态分析变更风险决策测试用例推荐测试覆盖评估场景分析链路分析智能回放
4、自动化测试变更分析变更方法分析2023 深圳站流量采集能力-JVM-Sandboxvoid foo()/*do something */a();return;void foo()/BEFORE-EVENT try /*do something.*/LINE-EVENT invokestatic a()/RETURN-EVENT return;catch(Throwable cause)/THROWS-EVENT 插桩感知、干预核心事件:BEFORE、RETURN 和 THROWS,行事件:LINE2023 深圳站代码分析能力-Sparrow2023 深圳站知识库-主干代码知识库主干代码知识库:
5、方法全局身份标识变更方法、采集方法关联线上观测方法解析方法实现:圈复杂度、耦合度、代码行数注解返回类型类名、方法名入参类型修饰器2023 深圳站知识库-流量知识库-测试用例关联线上流量代码特征流量特征提取流量特征流量特征聚合特征组合业务场景关联代码链路关联请求参数特征请求结果特征代码链路特征业务特征流量聚合全场景测试用例2023 深圳站知识库-流量知识库-代码链路分析方法调用链路:变更方法影响业务入口、代码链路多维度链路热度、方法热度分析自定义代码链路视图入口1-12-22-32-73-43-53-62-102-143-113-123-131-81-91-152-16(fromDeep)-(f
6、romOffset)-(toDeep)-(toOffset)2023 深圳站知识库-变更代码知识库-变更内容分析主干分支主干分支变更分支变更分支2023 深圳站知识库-变更代码知识库-变更内容分析方法识别语义分析方法匹配影响分析 方法签名(xxx.howCodeChange(List)#List)变更后方法圈复杂度变更后方法圈复杂度 变更新增代码11行、删除代码0行 有效代码变更(条件判断6行)无效代码变更(注释3行、日志1行、空行1行)方法ID/新增方法 变更前方法圈复杂度变更前方法圈复杂度 入口入口ID、链路、链路ID 方法热度、链路热度方法热度、链