背景
随着业务的日趋复杂,做全量回归也越来越困难
为了更加精确的定位后台项目改动所造成的影响,回归范围划定精确,提升测试效率
需要对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之间代码改动所带来的影响,并生成树图数据方便展示影响链路。
效果
工具集成至公司质量平台,运行效果如下
树形图
总结
具体实现已封装上传pypi,欢迎大家试用,提供意见反馈 jcci
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。