支付系统的代码审查平均每条PR(Pull Request,代码合并请求)要过4轮,Bug还是漏了。
这是Anthropic工程师上周放出的实测:他们把公司最敏感的支付服务丢给Claude Code,让它独立完成重构。结果Claude揪出7个生产级Bug,其中3个已在线上跑了超过1000天。
「我们以为查干净了」
Anthropic的支付模块处理着订阅、退款、发票三大核心链路。代码库不算老,2019年重构过一次,此后由5人小组维护。
团队有套成熟的防线:单元测试覆盖率87%,集成测试每天跑两遍,Code Review(代码审查)强制两人签字。去年Q3还做过专项审计,报告写着「未发现重大风险」。
Claude Code进场的方式很直接——工程师只给了两条指令:「理解现有架构」和「在不改变行为的前提下优化结构」。没有测试用例提示,没有漏洞清单,相当于闭卷考试。
48小时后,Claude输出了一份37页的分析报告。7个Bug被分类标注:2个竞态条件(Race Condition,多线程执行时序冲突)、3个空指针陷阱、1个金额计算精度丢失、1个异常分支未回滚。
最隐蔽的那个藏在退款重试逻辑里。当第三方支付网关超时,系统会标记为「待人工处理」,但异步回调可能在30分钟后抵达——这时候如果运营同事刚好点了「强制退款」,同一笔订单会被退两次。
「这个场景我们测过」,维护组负责人后来承认,「但测试脚本没覆盖到网关超时+人工介入的时序组合」。Bug从2021年上线至今,触发过11次,财务对账时人工抹平了差额,没人追问根因。
Claude的排查路径:从「读注释」到「猜意图」
工程师公开了部分交互日志。Claude的第一步让不少人意外——它花了20分钟通读代码里的TODO注释和提交历史,试图还原「当初为什么这么写」。
「作者在这里加了锁,但注释说『临时方案,后续优化』。后续没有提交记录,说明临时方案成了永久方案。」这是Claude对竞态条件#1的分析原文。
第二步是画调用图。Claude自动生成了支付流程的状态机,标出所有异步边界——第三方回调、定时任务、消息队列。它发现有两处状态迁移缺少校验:「理论上,订单从PROCESSING(处理中)到REFUNDED(已退款)需要经过CONFIRMED(已确认),但代码允许直接跳转」。
第三步最像人类审计员的思路:找「看起来不对劲的数字」。Claude注意到一个常量定义MAX_RETRY = 5,但重试间隔用的是指数退避——第5次重试会在16小时后触发,而支付网关的订单有效期只有24小时。「第5次重试几乎必然失败,这个参数组合可能是复制粘贴的遗留」。
整个过程中,Claude没有运行任何测试。它靠静态分析+模式识别完成了排查,相当于一个不用打断点的高级工程师。
资深工程师为什么漏了
7个Bug里有4个被明确标记过。
竞态条件#2在2022年的Code Review中曾被指出,评审意见写的是「当前并发量低,暂不处理」。空指针陷阱#1的Jira(项目管理工具)工单至今处于「Backlog(待排期)」状态,优先级P3。
这不是能力问题,是注意力分配问题。支付系统每月迭代2-3个版本,工程师的带宽被新功能占满。老代码只要没报警,就不会有人主动翻开。
Claude的优势恰恰在这里——它没有OKR(目标与关键成果)压力,不会觉得「这个Bug优先级低,先放一放」。它的分析是穷举式的,每个分支都走到底。
但Anthropic团队也强调了边界:Claude没找到逻辑漏洞之外的隐患。比如那个金额精度丢失的Bug,根因是浮点数运算,Claude建议改用Decimal类型,但没发现上游接口传入的字段本身就是Float——这是架构层面的历史包袱,需要人工决策是否值得推倒重来。
行业反应:从「玩具」到「审计员」
测试发布后,Stripe和Adyen的工程师在Hacker News(技术社区)跟帖。一个高赞评论算了一笔账:「我们6人安全团队年成本约180万美元,如果Claude Code能替代30%的审计工作量,ROI(投资回报率)是正的」。
也有冷思考。Square的前架构师指出,Claude找到的是「已知模式内的Bug」——竞态、空指针、精度问题都是教科书案例。真正的风险往往来自业务规则的隐性冲突,比如「退款金额能否超过原订单」这种需要读运营手册才能判断的场景。
Anthropic的回应很克制。他们在技术博客里写:「我们不建议用Claude Code替代人工审查,但它适合作为第一轮筛子,把明显的问题先过滤掉,让人类专注于需要业务理解的判断。」
目前这7个Bug已全部修复。那个退款重试的漏洞,补丁是加了一个幂等校验键——听起来简单,但涉及3个下游系统的接口改造,排期排到了下个月。
支付系统的代码又跑起来了。只是现在每次部署前,团队会多跑一道Claude的静态分析。没人说得清这是更信任AI了,还是更不信任自己了。
热门跟贴