GitHub Copilot的代码补全速度比人类快17倍,但一位开发者在逐行审阅1000行AI生成代码后,发现了比"跑不通"更隐蔽的问题。Hussain Shamlooh的实验始于一个简单的好奇:当没人仔细检查的时候,这些工具到底在产出什么?
从"工具使用者"变成"代码质检员"
Shamlooh最初只是用ChatGPT和Copilot辅助个人项目。和其他开发者一样,他习惯了AI的即时反馈——输入注释,几秒内得到完整函数。转折点发生在某天他意识到:自己正在把AI当作黑箱使用,却从未打开看过里面。
他开始设计对照实验。同一道算法题,分别扔给不同工具;同一功能需求,用Python、JavaScript、Go各生成一遍。不是为了比较谁更快,而是为了看清代码的"肌肉纹理"——变量命名习惯、边界条件处理、错误处理逻辑。
1000行代码审阅后,Shamlooh总结出三类隐蔽缺陷:表面正确的幻觉代码、过度工程化的冗余实现、以及最危险的——看似合理实则错误的安全处理。
最危险的陷阱:正确的废话
第一类问题最容易被忽略。AI生成的代码能运行,测试用例能通过,但实现逻辑与需求存在微妙偏差。Shamlooh举了一个典型例子:要求"实现用户输入验证",AI返回了完善的正则表达式和错误提示,却漏掉了对空字符串的特殊处理——一个在产品环境中必然触发的边界条件。
「它看起来完成了任务,」Shamlooh在回顾中写道,「但完成的是任务的字面描述,而非真实意图。」这种"正确的废话"比明显的语法错误更难排查,因为它不会触发任何警报。
第二类是过度工程化。AI倾向于使用设计模式、抽象层和泛型,即使简单场景也包装得臃肿不堪。Shamlooh统计发现,约34%的生成代码包含不必要的抽象,平均比手写版本多出40%的行数。
安全幻觉:比漏洞更可怕的是"看起来安全"
第三类让Shamlooh真正感到不安。AI在处理敏感操作时,会生成看似专业的安全代码——密码哈希、输入转义、权限检查——但细节处存在致命缺陷。
他展示了一个SQL查询示例:代码使用了参数化查询(正确的做法),却在日志记录环节直接拼接了用户输入,形成隐蔽的注入通道。「安全不是布尔值,」Shamlooh指出,「但AI的输出往往给人这种错觉。」
更深层的问题在于认知负荷转移。当AI以流畅的代码风格呈现结果时,开发者的审阅警觉性会下降。Shamlooh用了一个精妙的类比:「就像校对一篇语法完美的文章,你会自动跳过拼写检查,却可能错过事实性错误。」
实验结束后,Shamlooh没有放弃AI工具,但改变了使用方式。他现在强制要求自己对每段生成代码进行"反向工程"——先独立思考实现方案,再与AI输出对比,而非直接采纳。
这个习惯让他的编码速度下降了约15%,但缺陷率降低了近一半。最后一个细节来自他的实验笔记:在某次测试中,他向三个不同工具提出相同的并发控制需求,得到的实现分别基于锁、通道(channel)和原子操作——三种方案在特定场景下都是正确的,但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.