自动化工具 获取受到影响接口地址

panpan · 2022年08月19日 · 最后由 Thirty-Thirty 回复于 2022年08月23日 · 7160 次阅读

自己写的一个工具,有大佬的话可以提点意见

1、获取代码,对比根据两次提交代码差异,分析获取到受影响接口 URL
2、目前只写到了相同分支,不同 commitId;不同的 tag,不同分支尚未进行。
3、jgit 拉取代码到本地,解析并获取到方法之间的调用关系,对比代码方法之间的调用关系,获取到差异,依次向上反推到接口层并获取到 URL 地址
https://gitee.com/panpan009/api-diff

共收到 8 条回复 时间 点赞

老哥能不能说说实现逻辑

精准测试?

层次太高给不了建议😜

大概看了下,有几个点想交流下,谈不上建议哈:

  1. 从实现逻辑看,没太理解为何必须拉代码后,还得编译成 jar 包再解析?我理解静态的调用链信息获取,应该用 java 文件结合抽象语法树解析,就足够了。
  2. 拼接 class 和 method 的 Mapping 注解 url 时,条件是 classUrl!=null&&methodUrl!=null ,而 controller 并不一定有 class 级别的 mapping 声明,如果没有的话,不知道会不会引起遗漏?(从下面逻辑大致来看,好像如果 class 没有 mapping 声明,是不会产生对应的数据的,即 classUrl 可能为 null ?)因为没有本地跑,所以只是一个猜测哈,如果有说错请见谅。
  3. 从实际使用角度,光拿到 url 其实还不大够,可能会存在单个 url 有多个 http method 的情况,加上 http method 会更佳。
  4. 建议项目加个 readme ,否则大家都不知道怎么用。
陈恒捷 回复

感谢大佬指点,我想想优化

陈恒捷 回复

开发的时候,没想的很齐全,谢谢指点,我再看看

陈恒捷 回复

简单看了下楼主的实现,楼主使用的是 java-callgraph2,这个工具是使用字节码分析的调用链,因此要求拉代码后再编译成 jar 包。
我之前用 ASM 写了一个跟楼主类似的工具,但是只处理 invokeXXX 指令遇到多态和覆写时无法获取真实的被调用者 (java-callgraph2 貌似处理的不全),而且使用起来不仅要源码还要字节码确实蛋疼,后来索性直接写了个 idea 的插件,依托 idea 提供的 api 全在源码层面分析了😂

加个 readme 吧,具体阐述下这个工具的用途,适用范围,限制条件等

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册