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