其他
基于代码链路分析的精准测试体系
The following article is from 阿里巴巴技术质量 Author 李华伟(正辰)
导读:随着业务规模的增长,服务端的架构和功能趋近复杂化,代码变更上线也越来越快,面对需要快速上线的功能,测试资源无法参与每个变更的交付过程,变更要不要测、要怎么测?成为服务端交付质量和效率最关键问题,为此,优酷质量保障团队开始了服务端精准测试的探索,经过半年的技术沉淀和体系搭建,形成了具备变更内容识别、变更影响分析、测试能力推荐、测试覆盖评估的精准测试体系。
1. "要不要测、要怎么测?"引发的思考
这次变更代码有多少是空行、多少是注释、多少是有效代码,是不是对原有代码逻辑产生了影响? 这次变更方法是新增还是修改,变更方法的圈复杂度高不高、代码耦合度高不高,是不是线上热度调用方法?
这次变更影响了哪些业务逻辑、代码链路,是否要做接口全量回归测试? 要能完整覆盖这次变更影响的业务逻辑、代码链路,需要执行哪些测试用例?
2. 基于代码链路分析的精准测试体系
以应用Java方法为观测对象,通过静态分析识别变更的Java方法,通过动态采集获取线上Java方法调用链路,然后基于代码知识库的方法匹配,精准分析变更影响的Java方法调用链路,并基于影响的链路推荐测试流量,评估测试覆盖率的测试体系
2.1 实现方案
2.2 数据中心
主干代码知识库
变更代码知识库
流量知识库
2.3 决策引擎
代码链路分析
变更风险决策
测试用例推荐
2.4 平台能力
变更分析
场景分析
链路分析
智能回放、自动化测试
3. 核心能力解决方案
由于采集机异常下线、采集限流等问题,导致采集流量无法有效覆盖线上实际流量模型,导致应用代码调用链路不完备 由于人工配置采集方法的差异性,导致无业务意义方法(get\set等)被采集,而关键链路上的方法没有采集,导致代码调用链路不完整 静态代码分析可以获取变更文件、类、方法、代码行信息,但不知道变更代码语义,无法准确识别变更有效性,导致变更分析不准确
3.1 代码调用链路采集完备性
流量采集智能调度
应用核心方法自动解析
3.2 变更代码语义精准识别
4. 落地效果和未来展望
4.1 落地效果
4.2 未来展望
代码质量治理:利用主干代码知识库和调用链路分析结果,持续治理3高(圈复杂度高、代码耦合度高、线上调用热度高)方法的代码质量,提升优酷代码健康分 变更免测评估:基于变更代码知识库、调用链路分析结果、测试用例推荐结果,持续优化变更风险分析模型,减少低风险变更(变更方法圈复杂度低、线上调用热度低、推荐用例覆盖率高)对测试资源的占用,提升服务端变更免测率
感谢
Sandbox:https://github.com/alibaba/jvm-sandbox Sparrow:https://gangfan.github.io/assets/papers/sparrow.pdf