背景
随着业务的日趋简单,做全量回归也越来越艰难
为了更加准确的定位后盾我的项目改变所造成的影响,回归范畴划定准确,晋升测试效率
须要对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