谷歌DeepMind一位工程师上周分享了个教训:他给文本清洗函数写了100%单元测试,结果这玩意儿上线后,把多语言训练数据洗成了"垃圾"。问题出在测试用例全是英语,而实际数据覆盖了100多种语言。

这位工程师用正则表达式处理文本,逻辑看起来滴水不漏:去空格、转小写、压缩空白、替换标点。测试全绿,代码合并,部署上线。直到模型训练出异常,团队才回头排查——阿拉伯语的连字符、中文的全角空格、泰语的元音符号,全被正则粗暴干掉了。

他在复盘里写了句挺扎心的:「我测试了代码,但没测试假设。」换句话说,100%覆盖率测的是代码路径,不是业务边界。那些藏在字符编码里的陷阱,单元测试根本碰不到。

这事在Hacker News上吵了三天。最损的一条评论是:"你的测试用例比你的代码还懂英语。"工程师最后把测试数据换成了真实语料采样,覆盖率掉到67%,但bug率归零。

现在那个函数注释里多了一行TODO:下次加一种语言,先找个母语者念一遍测试用例。