网易首页 > 网易号 > 正文 申请入驻

一行代码改动,到底能炸出多少测试?他做了个工具

0
分享至

一行代码改完,你盯着 diff 看了三秒:这玩意儿还会影响什么?这个问题不好回答。diff 只告诉你改了什么,不会告诉你哪些函数在调用它,也不会告诉你哪些测试可能跟着遭殃。


有人干脆把它做成了工具。IMPACT,一个 Python 的 PR 审查工具,作者用它参加了 WeMakeDevs 和 FalkorDB 的 Graph Hacks 活动。思路很直接:把代码之间的调用关系存进 FalkorDB,再顺着这些关系走一遍,生成一张能点开看的图。

先拿一个小仓库开刀

作者没有一上来就啃大项目,而是找了个小的结账仓库。里面有定价、购物车、结账、收据,还有几个测试——刚好够让一处改动穿过好几个文件。

然后他故意把优惠券计算改坏了。改之前是取小计和优惠券金额中的较小值,改之后直接等于优惠券金额。结果很直观:一张 30 美元的券用在 20 美元的购物车上,总价变成负数。收据测试期望 0,拿到的是 -1000;结账测试直接抛错,因为它拒绝向用户收取负数金额;而正常优惠券的测试照样通过。

一行改动,三种结局。作者想要的是:让 IMPACT 从代码关系里把这些测试找出来,并且说清楚为什么挑中它们。图负责选出相关测试,测试运行器负责记录真实结果。

顺着调用关系往回走

IMPACT 把文件和函数存进 FalkorDB,只要一个函数调用了另一个函数,就记一条 CALLS 连接。在演示里,结账流程最终会经由购物车和定价代码,走到被改动的 apply_coupon 函数。

apply_coupon 一变,IMPACT 就沿着这些连接反向遍历。它找到七个可达的调用方,其中三个是测试。有一条测试路径长达四次调用——这种东西光看 diff 是看不出来的。

背后是一条 Cypher 查询,从调用方出发,沿着 CALLS 关系走 1 到 4 跳,找到被改动的函数,返回调用方 id、是否为测试、路径长度和路径上的节点。HTML 报告用的也是这些路径:点开一个测试,就能顺着连接一路追回被改的代码。

过程并不顺。作者一开始卡在连不上 FalkorDB,后来又得修一条最短路径查询,改成 FalkorDB 能接受的语法。现在跑审查之前,doctor 命令会先检查连接和图查询。

该找谁来看这段代码

演示里还多问了一个问题:谁熟悉这块代码,它当初为什么这么写?

为此作者造了一份小型的虚构公司数据集,把一个代码文件连到它的负责人、她所在的团队,以及三条来源记录:一条关于优惠券上限的决策、一张关于负数扣款的客服工单、一段团队聊天。IMPACT 把这些连接和调用图一起放进 FalkorDB。问它 apply_coupon 的事,它会建议 Maya Chen 作为审查人,并指出这个建议背后的记录。

同样的上下文也会出现在 HTML 报告里,就在测试路径旁边。作者说得很清楚:这只是个想法演示,人和文档都是合成的,还没有接进真实公司的 Slack 或工单系统。

AI 那部分是可选的

作者起初以为,黑客松里的 AI agent 非得是个聊天机器人不可。做下来发现,对 IMPACT 有用的动作其实是决定看什么、先跑哪个测试。

AI 这一步可以跳过。模型调用一个 FalkorDB 工具,查看受影响的代码,挑一个测试优先检查。IMPACT 会验证这个选择确实和改动有连接,然后由测试运行器给出真实的通过、失败或报错结果。不填 AI API key,图分析和测试选择照样能跑。

放到真实 PR 上试试

坏掉的结账演示够用,但作者还想看看 IMPACT 对一个修复会怎么说。他把结账代码放进另一个示例仓库,开了一个给超大优惠券加上限的 PR。

IMPACT 从图里挑出三个测试,在两个提交上分别跑。两个在基线提交上失败、在 PR 上通过;正常优惠券那个测试两边都通过。这比一份“该跑哪些测试”的清单信息量大:能看出这次改动到底修没修好它该修的那些情况。

接着他把同一套审查搬进了 GitHub Actions。一个 Python PR 会启动临时的 FalkorDB 实例,生成图和报告,对比测试结果,然后更新 PR 上的评论。这个流程不需要 AI key,图和测试结果就够了。

他还拿一个更大的 HTTPie PR 试了试。IMPACT 找到 18 个测试目标,展开成 43 个用例:34 个通过,9 个依赖远程服务的用例被跳过,没有失败。小结账例子适合讲清思路,这个例子让他看到了代码量大得多的时候报告长什么样。

作者也交代了局限:解析器目前还是静态 Python 分析,动态调用和运行时导入可能被漏掉,所以一条调用路径只代表可能的影响。他打算继续在不同仓库上试,把覆盖不到的地方补上。

IMPACT 报名了两个赛道:一个顺着代码图帮人审查改动,另一个把代码背后的人和决策也连进来。对天天审 Python PR 的人来说,能看到通往某个建议测试的路径,还能看到当初那个决定的原因,确实比只给一份测试清单要有用。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
俄罗斯专家把话挑明了:如果中国铁了心要对日本动手,那就只有两个选择,要么不出手,要么一击毙命!

俄罗斯专家把话挑明了:如果中国铁了心要对日本动手,那就只有两个选择,要么不出手,要么一击毙命!

回京历史梦
2026-10-11 16:35:06
蓝营告急!彰化县长民调出炉!陈素月32%大幅领先魏平政16%!

蓝营告急!彰化县长民调出炉!陈素月32%大幅领先魏平政16%!

補懂事的孩紙
2026-10-19 22:49:43
哈兰德更新社媒:感谢小蜘蛛、恩佐和鲁利向我安利了马黛茶

哈兰德更新社媒:感谢小蜘蛛、恩佐和鲁利向我安利了马黛茶

林子说事
2026-10-19 16:27:32
杭州94岁抗美援朝老兵一身腱子肉,一口气能做50个俯卧撑,最大的烦恼就是手机:每天接不完的电话,手抖抖钱就没了……

杭州94岁抗美援朝老兵一身腱子肉,一口气能做50个俯卧撑,最大的烦恼就是手机:每天接不完的电话,手抖抖钱就没了……

都市快报橙柿互动
2026-10-19 17:45:27
机关事业退休全部补贴明细、职级、年龄、标准一次性讲清楚

机关事业退休全部补贴明细、职级、年龄、标准一次性讲清楚

娱乐洞察点点
2026-10-18 17:35:56
加州共和党州长候选人:若当选,一年内清空无家可归者营地

加州共和党州长候选人:若当选,一年内清空无家可归者营地

大洛杉矶LA
2026-10-19 05:22:56
网友吐槽:人到中年 怎么都是虎背熊腰!结果评论区炸出一堆显眼包

网友吐槽:人到中年 怎么都是虎背熊腰!结果评论区炸出一堆显眼包

兰妮搞笑分享
2026-10-18 19:11:52
发现没?凡是长期不祭祖的家庭,过个十年八年,往往会有变化

发现没?凡是长期不祭祖的家庭,过个十年八年,往往会有变化

云霄纪史观
2026-10-16 03:47:18
两名15岁女高中生运毒被抓:与贩毒集团头目是朋友,为几万元报酬用旧衣物包裹运输毒品!香港警方:检获32公斤K粉,涉1200万港元

两名15岁女高中生运毒被抓:与贩毒集团头目是朋友,为几万元报酬用旧衣物包裹运输毒品!香港警方:检获32公斤K粉,涉1200万港元

极目新闻
2026-10-19 15:53:42
负债千亿!有省会城市地铁,开始暴雷了?

负债千亿!有省会城市地铁,开始暴雷了?

西部城市
2026-10-19 13:02:51
历史不会重演,但会惊人相似:中国黄金价格极可能重走2015年老路

历史不会重演,但会惊人相似:中国黄金价格极可能重走2015年老路

浩渺青史
2026-10-17 01:48:48
深圳男篮逆转江苏,王浩然复出13+5,贺希宁10分庞峥麟16分,史密斯爆发

深圳男篮逆转江苏,王浩然复出13+5,贺希宁10分庞峥麟16分,史密斯爆发

中国篮坛快讯
2026-10-19 21:46:26
吉村卓:业界现在人手严重不足。

吉村卓:业界现在人手严重不足。

孤独的独角兽影视
2026-10-19 11:40:20
引体向上,一个被低估的王牌动作!隔天练一遍,这些好处不请自来

引体向上,一个被低估的王牌动作!隔天练一遍,这些好处不请自来

增肌减脂
2026-10-19 18:48:33
刘德华《白衣逆行者》积压6年终于定档,有望刷新票房新低

刘德华《白衣逆行者》积压6年终于定档,有望刷新票房新低

光影新天地
2026-10-17 14:26:20
《伟大的长征》拍出了最好的遵义会议,于和伟贡献教科书级表演!

《伟大的长征》拍出了最好的遵义会议,于和伟贡献教科书级表演!

电和影
2026-10-19 20:02:06
北控92-105上海,廖三宁34分4板4助,张镇麟28分3板4助

北控92-105上海,廖三宁34分4板4助,张镇麟28分3板4助

侧身凌空斩
2026-10-19 21:29:04
王曼昱等三人拟记大功!

王曼昱等三人拟记大功!

五星体育
2026-10-19 14:56:06
内娱要变天了?5位全新AI艺人正式成团出道,持证上岗、拍剧营业

内娱要变天了?5位全新AI艺人正式成团出道,持证上岗、拍剧营业

娱说瑜悦
2026-10-18 17:38:48
5年1.39亿美元!雷霆提前续约顶级3D华莱士 上季入选最佳二防

5年1.39亿美元!雷霆提前续约顶级3D华莱士 上季入选最佳二防

醉卧浮生
2026-10-19 10:40:52
2026-10-19 23:31:00
爬虫饲养员
爬虫饲养员
业余养了只叫“龙虾”的AI爬虫,主业是给互联网打工。
243文章数 86关注度
往期回顾 全部

科技要闻

王晟:近千亿资金涌入后 具身智能开始退烧

头条要闻

男子在稻城高反死亡 多人称其姐姐不愿出钱请马帮救援

头条要闻

男子在稻城高反死亡 多人称其姐姐不愿出钱请马帮救援

体育要闻

从NBA退役10年后,他真去警局上班了

娱乐要闻

奚梦瑶回应重返维密:还是很开心的

财经要闻

黄奇帆之子往事:从广微系到魏桥的跳跃

汽车要闻

不知道二代海鸥多好玩? 上赛道跑两圈 很过瘾的

态度原创

家居
亲子
房产
旅游
手机

家居要闻

2026建博会(广州) 公装联探展交流活动

亲子要闻

39万消费者突然涌入Babycare直播间

房产要闻

最新房价:海口,三亚齐跌!

旅游要闻

千城百县看中国丨河南开封:菊香满城宋韵浓

手机要闻

「星芒」一揽子新品定了!华为要加码性价比手机了?

无障碍浏览 进入关怀版