背景

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