一个开源工具发布了,1558个测试全部通过,覆盖率数字漂亮得可以截图发推。但其中一个认证守卫从头到尾就没真正执行过——一次导入静默失败,测试套件依然全绿,一条未认证的读取路径就这样出了门。最后抓住它的,是一个在真实容器里跑真实流程的Docker测试。不是单元测试,也不是那个覆盖率数字。
所以当我说"测试证据已经变成我能拿出手的最重要的东西"时,我不是以"我已经想明白了"的姿态在说。我是以"被自己的绿色对勾坑过"的姿态在说,而且被坑完之后反而更确信、更好奇了。这个反应连我自己都有点意外。
![]()
测试曾经只是"该做的家务"
职业生涯的大部分时间,测试就是那种"做完它,正事才能上线"的东西。我写测试,我要求团队写测试,我推行覆盖率门槛,但说实话,我从没觉得测试能说明关于"我"的任何事。代码是手艺,架构是手艺,测试是卫生习惯,像用牙线——你应该做,但没人会为此夸你。
今年这个认知悄悄翻了个面,我花了一阵子才注意到。现在我做东西时,很大一部分代码是AI智能体敲的。代码出现得很快,经常快过我仔细读它的速度。然后我发现,看自己的仓库时,让我兴奋的部分变了。代码看起来没问题,它几乎总是看起来没问题,而"看起来没问题"已经变得很廉价。现在真正感觉属于我的、智能体替不了我的那部分,是"这东西在现实里确实做到了我声称的事"的证据。这个转变让做东西变得更有趣,而不是更无聊。
我现在会拿出来给人看的三样东西
如果要挑一个项目放到我尊重的人面前,我不会去拿最聪明的代码。我会拿三样东西,全都跟"证明"有关。
- 测试数量,以及它在哪里跑。我的智能体控制平面发布v0.1.0时带了925个测试,我学会了同时报两个覆盖率数字:笔记本上93%,CI里95.45%。因为这两个数字之间的差距本身也是信息。
- 实地测试报告:我拿这个工具跑了什么、跑了多少案例、什么坏了。有一个规划工具,意味着170个真实目标、花了0.49美元——跑起来很便宜,设计起来一点都不便宜。
- 失败清单:bug、漏掉的地方、工具至今还做不到的事。这一条是我现在最看重的。
最后这条花了我一些时间才适应。有一种老本能,大概来自多年在管理层会议室里的经验:先讲优势,弱点等别人问再说。公开一份失败清单是反着来的。发布了几次之后我发现,失败清单恰恰是大家读得最仔细的部分,因为它证明其余内容不是营销。最好的对话也是从这里开始的。
有用的做法:让陌生人能核查我的证据
我开始把实地测试报告、测试报告、安全审计直接提交进仓库:公开、带链接、带日期。一个我没预料到的结果,成了今年发生在我身上最好的事之一。一位读者公开审计了我的一个发布版本。他先写下自己预期会看到什么,再对照已发布的产物逐条检查,然后记录下每一处"我的发布说明和我自己的证据对不上"的地方。
他找到了真实的矛盾。引擎大体是对的,但我讲的那个关于它的故事有一部分是错的。我的第一反应是缩了一下,我觉得这很正常。第二反应是一天之后到来的:感激。因为那是我收到过的最严格的一次评审,而它之所以能发生,只是因为证据就摆在那里供他核查。你没法审计一种感觉。你可以审计一份报告,而"可被审计"和"我是对的"是两种非常不同的感受。
把"它通过了"当成一个待证的主张
做AI这件事教会我:一个自信的答案和一个正确的答案,在有人核查之前长得一模一样。不知从什么时候起,这条教训从"我怎么看待模型输出"迁移到了"我怎么看待自己的输出"。一次绿色的运行,现在是一个我必须去支撑的主张。跑了什么?对着什么数据跑的?报告在哪?
我做那个"两个模型辩论一个拉取请求"的评审引擎时,在信任它产出的任何一个数字之前,先修了13个bug,其中包括一个连接操作把我的数据集从2333行静默压缩到359行。这些都不是什么聪明的架构bug,全都是"你看得还不够仔细"的bug,而它们之所以可见,只是因为我逼自己去要证据,而不是接受绿色。
没用的做法:大数字照样骗过了我
回到那1558个测试。这个bug里我觉得最有意思的不是bug本身——导入会失败,这很正常。有意思的是我放松了。我看到一个很大的绿色数字,就感到安全,而那种感觉恰恰是我花了好几个月告诉别人不要相信的东西。一个大测试数可以和大README一样,轻轻松松变成表演。现在我把一个大的绿色数字当成一场对话的开始,而不是结束。
另一件事是:任何一个我拿来炫耀的指标,我最终都会把它注水。覆盖率一旦变成值得骄傲的东西,就立刻变成值得为它本身而增长的东西。在我一个仓库里,一个函数体只有"pass"的测试混进了套件——它永远不可能失败,也永远抓不到任何东西。同一个项目里,一个测试框架在65个文件中的57个里找不到任何断言可跑,然后把"0/0"报告成了成功。这两处都是代码评审抓到的,我的指标没抓到。我对此感到一种奇怪的安心:认真读代码的人在这里依然重要。
而在AI参与进来之后,给一个指标注水的成本几乎为零。你一个下午就能生成一千个测试。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
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.