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

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

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-20 00:48:04
至今健在的开国将帅只剩一位,虽然已102岁高龄,但好在身体健朗

至今健在的开国将帅只剩一位,虽然已102岁高龄,但好在身体健朗

听风喃
2026-10-16 15:22:21
唏嘘,郎平再赴上海看望汤淼,19年没断过,周苏红也有情有义!

唏嘘,郎平再赴上海看望汤淼,19年没断过,周苏红也有情有义!

体坛侃侃球
2026-10-19 09:50:17
上海又捡到宝了?麦基从质疑到统治内线,这么下去内线实力暴涨!

上海又捡到宝了?麦基从质疑到统治内线,这么下去内线实力暴涨!

篮球资讯达人
2026-10-19 22:07:03
1939年,李德返回苏联后,对在中国的老婆和年幼的儿子不管不顾

1939年,李德返回苏联后,对在中国的老婆和年幼的儿子不管不顾

古书记史
2026-01-12 21:59:25
“天生的主任医师料子!”女儿挑芝麻视频火了,网友:前途亮得睡不着

“天生的主任医师料子!”女儿挑芝麻视频火了,网友:前途亮得睡不着

熙熙说教
2026-10-18 14:24:05
一个家庭最大悲哀,就是人到70多岁,却还在和外人随便说6件事

一个家庭最大悲哀,就是人到70多岁,却还在和外人随便说6件事

游戏收藏指南
2026-10-20 00:34:31
出轨女子第二波聊天记录曝光,虎狼之词惊呆吃瓜网友,她嫌丢人开始批量投诉了

出轨女子第二波聊天记录曝光,虎狼之词惊呆吃瓜网友,她嫌丢人开始批量投诉了

汉史趣闻
2026-09-01 17:55:01
记者假扮俄军工买家,一开口要500台,中国公司开价1950万元

记者假扮俄军工买家,一开口要500台,中国公司开价1950万元

桂系007
2026-10-15 16:31:21
美国话音刚落,巴铁宣布封关,双向封锁已成型?就等伊朗认输

美国话音刚落,巴铁宣布封关,双向封锁已成型?就等伊朗认输

民间胡扯老哥
2026-10-19 06:59:05
为什么说“下一个伯德”全都失败了?因为根本没人能复制这种怪物

为什么说“下一个伯德”全都失败了?因为根本没人能复制这种怪物

贵州小娟
2026-10-19 18:45:12
不管你信不信,能吃能喝的老人,基本在71岁,已经不做这4件事了

不管你信不信,能吃能喝的老人,基本在71岁,已经不做这4件事了

新时代的两性情感
2026-10-19 03:06:11
李小冉节目上首谈前夫,坦诚公开离婚的原因,谈及过往委屈到落泪

李小冉节目上首谈前夫,坦诚公开离婚的原因,谈及过往委屈到落泪

铁锤妹妹是只猫
2026-09-12 05:20:00
雷佳音近况公开,留及肩长卷发,网友:与早年“陈俊生”形象判若两人

雷佳音近况公开,留及肩长卷发,网友:与早年“陈俊生”形象判若两人

韩小娱
2026-10-17 16:11:30
太突然,风向变了?很多人开始批评孙颖莎,再次印证了樊振东的话

太突然,风向变了?很多人开始批评孙颖莎,再次印证了樊振东的话

探长影视解说
2026-10-19 19:28:32
德米凯利斯:曾和迪奥曼德谈过几次,他明确表示想再进一步

德米凯利斯:曾和迪奥曼德谈过几次,他明确表示想再进一步

懂球帝
2026-10-19 22:02:18
1日内双喜临门!76人2大悍将即将复出,詹姆斯和恩比德能松口气了

1日内双喜临门!76人2大悍将即将复出,詹姆斯和恩比德能松口气了

包饺子ai剪辑
2026-10-19 19:10:33
欧洲领导人:如果我们想早上吃牛角包、喝咖啡,就必须支持乌克兰

欧洲领导人:如果我们想早上吃牛角包、喝咖啡,就必须支持乌克兰

麓谷隐士
2026-10-19 00:10:04
新型穷人正席卷中国社会:有房子,身价千万,对城市没有归属感

新型穷人正席卷中国社会:有房子,身价千万,对城市没有归属感

铭记历史呀
2026-10-18 10:38:20
看看加拿大老人退休后的生活,再看看中国老人,真的没法比!

看看加拿大老人退休后的生活,再看看中国老人,真的没法比!

江启
2026-10-15 23:33:12
2026-10-20 03:16:49
爬虫饲养员
爬虫饲养员
业余养了只叫“龙虾”的AI爬虫,主业是给互联网打工。
188文章数 86关注度
往期回顾 全部

科技要闻

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

头条要闻

中国留学生披旭日旗事件最新进展:目前已被遣返

头条要闻

中国留学生披旭日旗事件最新进展:目前已被遣返

体育要闻

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

娱乐要闻

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

财经要闻

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

汽车要闻

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

态度原创

本地
房产
游戏
手机
公开课

本地新闻

因新荣记出圈,这座浙东小城才是吃货天堂

房产要闻

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

《龙之信条2:黑暗觉者》评测:天若有情天亦老"/> 主站 商城 论坛 自运营 登录 注册 简体中文 简体中文 English 《龙之信条2:黑暗觉...

手机要闻

2026年三季度印度智能手机市场遇冷,iPhone销量下滑20%

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版