【代码可视化实践】代码变更影响分析 | 京东云技术团队

1.前言

笔者前文"浅析代码可视化"中讲述了代码可视化的基本实现原理,并给出了一些业界的应用场景。由于涉及原理和技术范围较广,以笔者能力难以做到面面俱到,为了减少信息传递偏差,便给出了一些信息来源供读者深入阅读。不过针对文中提到应用场景中的一些小的功能点,可以拿出来详尽的分析一下实现方案,以小见大。因此本文将针对代码可视化在代码变更影响分析上的应用做较详细的阐述,希望能对大家有所帮助。

2.场景

先用2个常见的开发场景来还原描述为什么我们需要"代码变更影响分析"。

场景1:修改了方法①逻辑,以为只会影响入口A便只回归了相关的场景,上线后发现影响了入口B的逻辑,造成了线上事故;

场景2:修改了方法②逻辑,并回归了所有已知的流量入口,但上线一段时间后出现了大量异常告警,原来是影响了定时任务和MQ消费逻辑;

其他等等......

"代码变更影响分析"具体的可以描述为:如何感知代码改动造成功能逻辑变化的影响范围,具体到影响了哪些类、方法、入口以及调用拓扑。

3.方案

针对需求,下面给出一种基于源码静态分析的实现方案。

4.实现

下面阐述基于Java8的具体实现方案

4.1 方法调用拓扑生成

  • 基本思路

使用JGit拉取远程仓库到本地后使用JavaParser对源码进行分析,从而得到类、方法和方法调用信息,基于此构建方法调用拓扑图。

  • 实现步骤

步骤一:使用JGit将远程仓库拉取到本地

步骤二:设置JavaParser配置并解析项目所有源码文件

步骤三:遍历所有类文件获取类、方法和方法调用信息

步骤四:识别项目入口类和方法(示例代码仅实现了spring http入口识别)

步骤五:将入口方法作为起始节点,基于方法和调用关系生成方法调用拓扑图

(用来解析的代码示例在src/main/java/com/analysis/code/example包下)

4.2 代码变更影响分析

  • 基本思路

通过Git Diff获取变更影响了哪些Java类文件,然后对变更前后的类文件进行源码解析得到类方法列表并对比前后差异得到变更影响的方法节点,最后结合之前生成的方法拓扑信息得到变更影响拓扑图。

  • 实现步骤

步骤一:使用JGit获取分支变更影响了哪些文件

步骤二:使用JavaParser对变更前后的Java文件进行解析,获取变更前后类的方法列表

步骤三:依次对照变更前后方法体信息(去除了注释影响,并格式化了代码),得到变更影响了哪些方法

步骤四:结合方法拓扑生成变更影响结果

5.总结

越早评估出改动的影响面将更容易把风险扼杀在摇篮里,以更小的成本避免事故的发生。本文提供了一种"代码变更影响分析"功能的粗粒度实现方案,综合运用了Git、源码分析、可视化图表等技术。不过针对愈发复杂的业务现状,文中描述的功能还比较初级,还需要按场景进行针对性的增强和细化,从而真正做到对开发者有帮助。

6.参考

JavaParser

JGit-CookBook

Graphviz

Graphviz-Java

作者:京东科技 谢骁

来源:京东云开发者社区 转载请注明来源

相关推荐
qq_218753314 小时前
常用Git命令
java·git
4277240016 小时前
IDEA使用git不提示账号密码登录,而是输入token问题解决
java·git·intellij-idea
利刃大大1 天前
【Git】五、多人协作
git
B站计算机毕业设计超人1 天前
计算机毕业设计Python+DeepSeek-R1高考推荐系统 高考分数线预测 大数据毕设(源码+LW文档+PPT+讲解)
大数据·python·机器学习·网络爬虫·课程设计·数据可视化·推荐算法
YaHuiLiang1 天前
一切的根本都是前端“娱乐圈化”
前端·javascript·代码规范
界面开发小八哥1 天前
可视化工具SciChart如何结合Deepseek快速创建一个React仪表板?
react.js·信息可视化·数据可视化·原生应用·scichart
逸Y 仙X1 天前
Git常见命令--助力开发
java·大数据·git·java-ee·github·idea
B站计算机毕业设计超人1 天前
计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+LW文档+PPT+讲解)
大数据·hadoop·爬虫·机器学习·课程设计·数据可视化·推荐算法
wgslucky1 天前
pipeline 使用git parameter插件实现动态选择分支构造
git
春天姐姐1 天前
vue3项目开发总结
前端·vue.js·git