乐趣区

关于java: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 之间代码改变所带来的影响,并生成树图数据不便展现影响链路。

成果

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

树形图

总结

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

退出移动版