Java 代码改动影响范围分析

背景

随着业务的日趋复杂,做全量回归也越来越困难
为了更加精确的定位后台项目改动所造成的影响,回归范围划定精确,提升测试效率
需要对 Java 代码提交影响面进行分析

调研

除了少量相关英文文献,未从 Google 文献和 github 查找相关开源成熟的技术和方案。

文献:Chianti: A Tool for Change Impact Analysis of Java Programs

通过文献,结合个人开发经验,决定自主实现,主要面临的问题是 Java 文件解析和 diff 信息解析。

经过 Google 搜索找到了 python 相关的解析库,遂决定使用 python 开发此功能。

实现

大致原理同 Idea 的 Find Usage 一致,通过代码改动定位代码影响,并不断遍历受影响的类和方法直至找到最上层的 controller 层

代码主要由 python 编写,主要涉及 2 个库:

  • javalang java 文件语法解析库
  • unidiff git diff 信息解析库

通过 javalang 语法解析获取每个 Java 文件的 import class extends implements declarators methods 等信息

通过 unidiff 解析 git diff 信息(diff file, added_line_num, removed_lin_num)

然后根据文件增删的代码行去判断影响了哪些类和方法,不断遍历受影响的类和方法直至找到最上层的 controller 层

通过传入项目 git 地址 分支 两次的 commit id,即可分析出两次 commit id 之间代码改动所带来的影响,并生成树图数据方便展示影响链路。

效果

工具集成至公司质量平台,运行效果如下

树形图

总结

github项目地址:https://github.com/baikaishuipp/jcci

具体实现已封装上传 pypi,欢迎大家试用,提供意见反馈 jcci

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值