代码变更风险可视化系统建设与实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 代码变更风险可视化系统建设与
实践
美团到家事业群
2. 自我介绍
刘桂来,2019年加入美团
在服务端质量保障体系建设上持续深耕与探索,当前主要负责履约
业务质量保障建设工作,在代码变更风险分析、自动化测试、测试
效能提升方面有丰富实战经验。
3. 目录
(一)软件系统风险与变更
(二)代码变更风险可视化(后羿)系统建设
(三)代码变更风险可视化(后羿)系统实践
(四)未来规划与展望
4. (一)软件系统风险与变更
5. 软件系统风险与变更
变更是软件系统进化的推动力,也是孕育风险的温床!
典型软件系统
外部变更 系统内部变更
用户流量变更 技术人员变更
迭代流程变更
用户需求变更
线上发布变更
系统配置变更
算法模型变更
政策法规变更
服务功能变更
性能调优变更
第三方服务变更
系统重构变更
系统服务变更
第三方组件变更
基础硬件变更
架构升级变更
运营商网络变更
机房集群变更
基础设施变更
云服务容器变更
操作系统变更
开发语言变更
6. 变更风险引发的典型线上事故
更
变
外部
更
变
置
配
更
变
码
代
更
变
为
人
更
变
码
代
7. 到家业务形态加剧变更风险蝴蝶效应
多业务
接入
多参与
方配合
用户
用户终端
业务
微服务
架构
用户终端
商家
商家终端
超长
业务链
超复杂
调用链
履约平台
业务平台
骑手
骑手终端
商家终端
履约系统
AA服务
分单系统
CC服务
BB服务
Service-F
Service-n
服务2
Service-G
Service-D
Service-C
其他…系统
DD服务
交易服务B
交易服务A
活动运营
美团内部
业务
骑手终端
交易系统
活动系统
活动配置
配置
强依赖
询价系统
结算系统
结算服务A
结算服务B
X工程
运力系统
Y算法
运力接入
运力筛选
结算系统
结算服务A
结算服务B
美团外部
业务
Service-N
业务配置中心
Service-H
Service-B
降级配置平台
灰度配置平台
Service-J
Service-K
算法配置平台
8. 变更风险的质量建设做功点
消息
http
interface
rpc
interface
事务
…
任务
…
链路
方法
分页
…
…
DB库表
系统内部变更引发故障占比较高,
且与代码变更有直接或间接关系。
多线程
…
类
Code
问题一:代码变更风险是否可以被可视化感知?
问题二:能否建立代码变更风险的质量保障体系?
Xml配置文件
代码特征树举例
Var变量
9. (二)代码变更风险可视化
(后羿)系统建设
10. 代码变更风险的质量保障建设思路
传
统
测
试
模
式
方
术
技
案
变更来源
变更了哪些特征?
需
求
文
档
变更了哪些链路?
典型问题一:对代码变更缺少全面可视化能力
……
代码
验证变更与实现一致性
Co
de
CR
过大:无效、重复
变更实现
例
用
试
测
(一)代码变更感知
•
•
•
•
业务
代码分析技术选型
支持代码不同存在形态
支持java多类型工程模式
……
过小:漏测、资损
典型问题二:影响范围评估更多依赖RD/QA经验
不清楚:盲测、低效
(二)代码特征刻画
•
•
•
•
支持基本特征(类..)
业务特征刻画(接口..)
调用链路分析(跨服务..)
……
(三)应用场景生态圈
•
•
•
•
变更影响面评估
风险特征预警与拦截
配置变更风险预警
……
11. 代码变更风险的质量保障整体方案
到家质量效能部打造的变更风险可视化系统,旨在全方位提升变更风险感知与拦截能力,赋能质效提升
业务应用层
智能化
风险库智能
挖掘
接口项缺失 配置项缺失 一致性校准 测试覆盖 方法级推荐 服务级推荐
任务项缺失 消息项缺失 默认值校准 影响接口 接口级用例 迭代级推荐
用例/流量智
能化推荐
测试策略智
能化推荐
影响接口评估 方法链路
跨服务链路 配置链路
专项测试方案
功能测试方案
代码结构化信
息输出
代码特征化标注
类结构化
标注 接口结构化
标注
链路结构化
标注 消息结构化
标准
中间件特征
DB类特征
多线程特征
分页类特征
到家BG
加强版codediff
特征刻画层
代码结构化标注
可视化应用场
景输出
测试提效
测试方案推荐
影响面评估
长期赋能
用例精准推荐
配置变更风险诊断
技术方案缺失项诊断
OpenApi层
算法类特征
异常类特征
消息类特征
资损类特征
美团公司
代码特征信息
输出
代码分析层
风险特征智
能化识别
静态字节码分析 动态链路分析 Jar包分析 跨服务链路分析
抽象语法树分析 定制化规则分析 rpc服务分析 web服务分析
AI技术(代码克隆、检索)
多module类型
单module类型
基础组件层
图数据库
ASM库
ES存储
JavaParser库
MYSQL
测试
行业
代码分析能力
输出
已落地
建设中
长期规划
12. 后羿可视化系统的关键流程
入口服务
任务消息processer
后羿主站
代码可视化(后羿)系统关键处理流程
feature分支
源码下载
可视化分析入口
(人工触发)
项目风险评估
项目风险评估
获取变更文件
获取变更方法
master分支
异
步
消
息
队
列
解析链路
字节码解析
部署服务包
解析属性
特征标注
变更方法快照
ES
特征识别
方法/接口链路
Graph DB
FSD平台
代码特征
组件化接入
自动触发分析
获取变更行号
可视化分析报告
特征标
注结果
调度任务/特征
Mysql
13. 后羿系统建设技术难点(一)- 代码分析技术
AST技术优势 ASM技术优势
• 主流识别技术框架
• 对变更代码识别效率高
• 技术落地门槛较低 •
•
•
•
AST典型问题 ASM典型问题
• Lambda表达式问题
• java泛型问题
• … • Java反射特性无法支持
• 技术门槛较高
• …
丰富的jvm指令集
方法调用链识别率高
java内部类识别率高
解决lambda、泛型识别
DLA技术优势
• 代码运行时识别
• 支持java反射特性
DLA典型问题
• 获取全部流量难度较大
• 工程落地难点较大
• …
动态链路分析
(DLA)
抽象语法树
(AST)
AST单发动机
(初期)
AST+ASM 双轮驱动
(当前)
字节码解析
(ASM)
AST+ASM+DLA 三驾马车
(长期)
14. 后羿系统建设技术难点(二)-海量关系数据存储
关系型数据库存储
(初期)
快速迭代、
应用范围小
亿级海量存储问题
(性能问题)
方法调用链路拓扑关系
查询性能极差
图(graph)数据库+MySQL
(解决方案)
MYSQL:调度任务与特征类型
图数据库:拓扑关系与属性
15. 后羿系统建设技术难点(三)-代码风险特征多样性
开发每个个性化特征
接口
后羿开发者
通用特征
任务
…
基础特征
个性特征
…
DB
后羿系统
限流
多线程
变量
配置
类
方法
分页
低效沟通、人力紧张、开发耗时大
资损
个性
特征
redo
需求
个性
特征
补偿
类型多
代码写法个性化
特征规则强业务属性
定制化开发特征识别组件
加载
各业务线QA
组件化开发框架
后羿系统
16. (三)代码变更风险可视化
(后羿)系统实践
17. 后羿质量保障应用场景生态全景图
代码分析能力输出,赋能其他
工具平台
开放
OpenAPI
重点识别代码风险特征,提供特
征风险的提前预警
技术
方案校准
诊断
解决技术方案缺失关键变更项
质量风险
增强版CR
评审
代码特征
风险预警
解决纯文本评审模式的低效与缺
少场景级评审的质量风险
质量保障
应用场景
(生态圈)
重点解决代码接口声明变更相关
质量风险预警
兼容性风
险诊断
解决代码配置变更带来的质量风
险
变更影响
面评估
配置变更
风险诊断
接口级用
例推荐
重点解决代码变更影响评估基本
靠人为经验的质量风险
通过用例精准推荐,提升影响
接口的测试效率
18. 后羿质量保障应用场景(一)-技术方案缺失项诊断
更新
及时性差
撰写
标准化低
接口变更缺失
关键测试场景
漏评估风险
测试关键
依赖输入
配置项变更缺
失
RD
需求文档
接口 任务
消息 配置
DB表字段 变更
缺失
诊断缺失项确
认拦截卡点
DB
识
别
撰
写
①解析方案wiki
技术方案
wiki
异步消息变更
缺失
后羿系统
定时任务变更
缺失
②代码变更关键项校准
后羿报告
技术方案缺失
诊断报告
QA
测试用例补充
19. 后羿质量保障应用场景(二)-增强版CR 评审新模式
聚焦编码规范与架构设计、 无法快速跳转到变更方法
QA参与感不足 上下游方法内(全文搜索)
传统CR四大痛点
纯文本逐行CR模式 方法跳转无法实时记录
业务场景变更风险感知弱 CR节奏被打乱,效率低
打破传统纯文本CR模式,建立以变更链路场景驱动CR的新方
法,真正解决在CR阶段感知质量风险的能力
20. 后羿质量保障应用场景(三)-变更影响范围评估
六大变更影响范围评估能力
跨端服务影响
跨端调用链路、跨端服务接口
跨端消息、跨端定时任务
通用风险特征
DB表、DB字段、SQL语句
多线程、事务、兼容性
分页、异常、递归、限流
代码基本属性
代码行、分支逻辑
类、变量、方法、工程文件
单服务影响
方法调用链路、接口特征、
消息特征、任务特征
定制化风险特征
算法特征、权限、配置
重试、消息补偿、推送消息
工程服务类型
单module工程、多module工程
RPC服务、http服务、jar包
21. 后羿质量保障应用场景(三)-影响面评估典型例子
22. 后羿质量保障应用场景(四)-配置变更风险诊断
线下&线上
配置不一致
配置默认值
编码错误
配置变更影响范
围不准确
配置测试
覆盖情况不可见
23. 后羿质量保障应用场景(五)-服务端兼容性风险诊断
服务A
(旧)
线上
兼容性风险
服务B
(旧)
入参
顺序
返回值
增加
入参
减少
入参
约束
入参
类型
入参
增加
返回值
约束
返回值
类型
影响因子
接口声明变更
(开发分支)
服务A
(升级) 服务A
(旧) 服务A
(升级)
测试 顺序发布引发兼容
(先提供方,后使用方) 并行发布引发兼容
(提供方+使用方)
服务B
(升级) 服务B
(旧)
引发场景
服务B
(升级)
兼容性测试 + 上线顺序评估
反射序列化线上
入参/返回值VO类
确认风险
间接引用
VO类1
间接引用
VO类N
成员变量
VO类1
间接引用
VO类2
间接引用
VO类N+1
成员变量
VO类2
参数
VO类
返回值
VO类
递归
反射序列化
入参/返回VO类
接口声明变更
差异性diff
接口兼容性
预警
24. 后羿质量保障应用场景(六)-接口级自动化用例推荐
用例推荐整体解决方案
代码变更
自动化用例量
识别变更方法
分析影响链路
分析影响接口
全量用例回归是
否效率低?
重大技术重构回
归哪些用例?
变更接口+
变更方法
RD自测保障用例
覆盖全吗?
基础组件升级选
哪些用例?
自动化用例典型四大痛点
获取自动化
用例测试计划
自动化用例
推荐结果
input:iface + method
return:命中查询条件的
流量TraceID列表
input:流量TraceID列表
return:命中查询条件的
自动化用例测试计划
智能代码覆盖率平台
基于历史流量覆盖,持续构建索引
<iface and method, TraceIDs>
一体化自动化平台
基于历史运行的自动化用例流量,
持续构建<流量TraceID,用例>
25. 后羿质量保障应用场景(七)-代码质量风险特征预警
这次改动影响了资损?没感知到呢
这次改动涉及新增接口调用,忘了验证返回异常场景了!
这次改动涉及到分页功能了吗?忘记验证了
这次改动还涉及重试场景验证?没感知到啊
代码质量风险特征解决方案
业务A风险特征 业务B风险特征
识别策略模型
识别策略模型
通用风险特征识别策略模型
业务C风险特征 业务D风险特征
识别策略模型
识别策略模型
后羿系统core分析服务
限流特征 算法特征 消息补偿特征 消息推送
集群化特征 rpc调用特征 金额单位特征 监控特征 权限认证特征
资损特征 随机数特征 限额控制特征 配置特征 数据库SQL特征 主从延迟特征 精度转换特征 线程安全特征
异常特征 分页特征 多线程认证 事务特征 DB表/字段
配置平台
资金安全平台 消息管理平台
mock工具 资金风险防控平台
异常测试平台 限流平台
工具赋能
定制化特征插件化组件(SDK)
重试特征 算法平台 异常特征测试
策略推荐 分页特征测试
策略推荐 配置特征测试
策略推荐
资损特征测试
策略推荐 事务特征测试
策略推荐 ……
策略赋能
26. 后羿质量保障应用场景(八)-开放OpenApi赋能
获取分析方法
批量获取分析方法
检索方法详情
获取分支代码
方法信息类
分支信息类
获取有报告分支
后羿系统四
大开放API
能力项
获取报告代码变更
获取报告方法变更
获取分析报告列表
报告信息类
链路拓扑类
检索方法下游链路
检索链路树形结构
检索链路上下方法
当前已开放支持的工具平台
接口管理平台 智能代码覆盖率 全息系统
自主工程交付系统 异常测试平台 一体化自动化平台
27. (四)未来规划与展望
28. 未来规划与展望
代码分析技术增强
01
02
动态链路分析技术(DLA)
提升分析准确性
风险特征识别技术
基于LLM的风险特征分析及测
试策略推荐
未来
规划与展望
开源 & 共享 & 赋能
开源系统代码分析能力、赋
能测试领域
04
03
03 丰富应用场景生态圈
探索更多质量保证落地应用场
景生态
29. Q&A
30. 招聘:质效建设&业务测试岗位
邮箱:liuguilai@meituan.com
——加入我们,一起用技术驱动质量与效能变革
更多技术干货
欢迎关注“美团技术团队”