分析 diff 上下游调用的工具/想法

susanml 测试交流1 112字数 853阅读模式

背景与效果

在研发流程中无论是 code review、MR 基本都绕不开 code diff 的存在,而人眼很难准确评估 diff 的影响规模。

文章源自玩技e族-https://www.playezu.com/193343.html

linkediff 可以在无需编译的情况下对你的代码进行解析,指出 diff 的影响范围:文章源自玩技e族-https://www.playezu.com/193343.html

文章源自玩技e族-https://www.playezu.com/193343.html

通过脑图可以看到:文章源自玩技e族-https://www.playezu.com/193343.html

  • 对 UTGen.java 发生了三块变更
  • 64-216 行这块影响了 methodsToCases 方法
  • 这个方法调用了近 40 个方法,并被 2 个方法调用

他同时也生成易处理的 JSON 文件便于与其他系统(如 CI)配合。文章源自玩技e族-https://www.playezu.com/193343.html

使用

当前只支持 java 项目。文章源自玩技e族-https://www.playezu.com/193343.html

进入你自己的工程

git clone https://github.com/jacoco/jacoco
cd jacoco

执行分析

通过 docker

docker run --rm -v `pwd`:/usr/src/app williamfzc/linkediff:v0.2.1 linkediff run

常规方式

你需要安装 Python3 及 coca。文章源自玩技e族-https://www.playezu.com/193343.html

pip3 install linkediff
linkediff init

你会在你的项目目录下看到 .linkediff.json 配置文件,将其中 coca_cmd 指向 coca 可执行文件 的路径即可。文章源自玩技e族-https://www.playezu.com/193343.html

linkediff run

结果

在运行完成后你可以看到一些结果文件,如 ldresult.json, ldresult.xmind。结合自身需要进一步处理即可。文章源自玩技e族-https://www.playezu.com/193343.html

设计与讨论

智能 diff 功能存在我的 TODO 里很久了,之前的设计是:文章源自玩技e族-https://www.playezu.com/193343.html

  • tree-sitter(这里选型有很多)转 ast graph
  • ast graph -> 更高层级的、通用 graph
  • raw diff 生成
  • 代入 graph 抠出整条调用上下游

而后来偶然发现了 coca ,发现已经将第二步与第四步完成了。所以趁着休息日摸鱼把这个最小可体验版本写(拼)出来了。

这个版本可能只会被用于验证价值与试水,如果有一定使用场景再考虑具体选型与适配。当前版本自由参与,结构也非常简单,欢迎 PR 但请不要花费太多时间。欢迎各类建议。

项目地址

https://github.com/williamfzc/linkediff软件功能测试点

玩技站长微信
添加好友自动发送入群邀请
weinxin
rainbow-shownow
玩技官方公众号
官方微信公众号
weinxin
PLAYEZU
 
    • 陈恒捷
      陈恒捷 9

      末尾看到欢迎 PR ,但文章里除了 coca 仓库地址外,没见到这个 linkediff 项目地址,是漏贴了?ok 补上啦太强了好贴 看了下代码,我觉得 coca 的静态分析不太靠谱,不如试试比较成熟的那几个成熟指的是哪几个呢,coca 用的就是 antlr4parser 倒不是关键,静态分析写的太简陋了,这里面 corner case 挺多的。java 领域比较成熟的框架 soot 或者 wala这些都要编译且与 java 耦合,场景不太一致

    匿名

    发表评论

    匿名网友
    确定