简介:AI大规模参与编码已成行业现实,但随之而来的不是质量普涨,而是一种表面规整、内里失控的新型技术债。本文拆解AI代码制造屎山的四种典型模式,结合订单状态错乱的真实故障复盘,给出审查标准升级、架构门禁前置、测试策略补强等可落地的治理方案,帮助团队在享受效率红利的同时守住工程质量底线。
一、先接受现实:AI写代码已经是行业底座
关于“AI生成的代码会不会变成屎山”,最诚实的回答是:会,而且这个过程正在进行。但更值得讨论的是,这种新型屎山长什么样、与过去的屎山有何本质不同、以及工程团队能在流程上做什么。
从公开信息看,已有头部科技公司在财报会议上披露,其新增代码中约有一半由智能体生成、再由工程师审查;面向开发者的年度调查也显示,大量新入行的开发者注册当周就开始使用自动补全与代码生成工具;多项研发效能报告的结论趋于一致——AI参与编写的代码占比即便尚未过半,也已经逼近一半。这意味着行业争论的焦点,早已不是“要不要用”,而是“如何为这种开发模式善后”。
二、认知纠偏:AI时代的屎山,和过去长得不一样
很多开发者对“屎山”的理解停留在表层:缩进混乱、变量名叫a1、b2、单个函数上千行。按这个标准衡量,AI生成的代码堪称模范——语法无懈可击,命名符合规范,注释齐整,单看一个文件甚至称得上赏心悦目。
但真正让系统失控的工程灾难,从来不是缩进引起的。技术债的本质是“决策被跳过”:模块边界没人裁定、重复实现没人合并、全局状态没人约束、异常处理没人兜底。而AI恰恰在批量制造这类深层结构问题上效率惊人——它擅长在“局部看起来正确”的层面工作,而对全局一致性、并发语义、事务边界这些需要工程判断的问题,它会给出一个“看起来对”的答案。这才是新时代屎山的真正形态:不丑,但深。
三、一次真实故障:测试全绿的代码,三周后在线上爆炸
举个我们业务线上的真实案例(细节已脱敏)。某核心业务要做订单状态流转重构,由一位毕业不到两年的工程师负责。他将需求文档投喂给智能体,几分钟后拿到几百行状态机代码:单元测试全绿,页面点验通过,合并请求提交后,负责审查的导师看代码规整、注释齐全,跑通主流程便批准合入。
三周后,线上开始零星出现订单状态错乱的客诉:用户明明已付款,在特定并发场景下订单却被重置回“待支付”,并自动触发了库存释放逻辑。排查后确认,问题出在智能体生成的状态流转采用了无锁的“读—改—写”模式:
def on_payment_success(order_id):order = repo.get(order_id) # 两个并发请求都读到 PENDINGif order.status == "PENDING":order.status = "PAID" # 状态判断双双通过repo.save(order) # 后写入者覆盖先写入者stock.release(order.sku) # 库存释放可能被重复触发
每个函数单看都干净,命名清晰,测试都能过——因为单元测试永远不会并发地跑。如果是人工写出这类代码,有经验的审查者会本能地追问“并发下怎么办”;而面对一份格式完美的AI产出,同样的追问被“看起来很专业”的表象轻易跳过了。
四、AI制造技术债的四种典型模式
模块边界侵蚀。智能体的优化目标是“解决眼前这个文件的问题”,它倾向于就地取材:跨层直接调用、绕过接口直接改存储、把本该下沉的能力复制到调用处。单次变更看似最小侵入,几百次之后,架构分层名存实亡,任何一次重构都牵一发而动全身。
重复实现与逻辑漂移。同一段业务规则(金额计算、状态校验、限流判断)在不同会话里被反复生成,彼此略有出入。运行一段时间后,系统里并存着三四个“近似但不等价”的版本,一旦某个版本被发现有缺陷,你无法确定其他版本是否同样中招,只能全量排查。
隐式全局依赖。智能体看不到上下文窗口之外的共享状态,于是“顺手”读写全局变量、缓存键、环境配置。这类依赖不会出现在任何接口签名里,重构时等于在雷区里散步,静态分析也难以完整覆盖。
异常静默吞噬。AI深谙“优雅”的写法,一个try-catch加一行日志就消化掉所有非预期异常。错误并没有消失,只是在系统深处静默累积,最终以面目全非的形式在远端爆发——你看到的故障症状,距离真正的病灶可能隔着七八层调用。
再叠加一个放大器:分布式复制效应。同一个缺陷模式会被复制到几十个文件里,每个合并请求独立看都合理,整体上却千疮百孔,排查时修一处远远不够,还要回答“还有多少处同样的模式”。
五、为什么AI屎山的排查成本反而更高
第一,意图缺失。人工代码可以“考古”:提交记录、评审讨论、注释里的犹豫,都指向作者的思考过程。AI代码只有“格式正确的结果”,没有“为什么这么写”的痕迹,后来者只能从零推理设计意图。
第二,无指纹可循。人工屎山有“作者指纹”,顺着某个人的提交历史能摸清他的思维定式,排障时可以快速定位嫌疑范围。AI代码千人一面,规整得毫无个性,你失去了所有启发式线索。
第三,规模翻倍。单位时间的代码产量翻了几倍,绝对债务量随之翻倍,而审查、测试、运维的人力并没有同步增长,人均承载的债务密度实打实上升。
第四,审查警觉性被麻痹。人对混乱代码天然警惕,对漂亮代码天然信任。AI代码的规整,恰恰成了绕过审查直觉的通行证。
六、治理方案:把人留在关键决策位上
审查标准从“看顺眼”升级为“看结构”。对每个合并请求追加三问:这次变更是收敛还是扩散?是否引入了与现有逻辑重复的实现?每个被捕获的异常,是否有明确的处理策略而非仅记日志?命名、缩进、注释这类表面指标一律降权。
架构约束前置,用工具替代口头约定。模块依赖检查、分层调用校验、循环依赖检测、圈复杂度阈值,全部接入持续集成流水线,作为强制门禁而非建议项。越界代码进不了主干,就不需要事后说服任何人。这类代码扫描与流水线门禁能力,在主流云平台(如百度智能云)均有成熟对应,关键是把它接进强制流程,而不是停留在“建议使用”。
测试策略转向并发与边界。“单元测试全绿”在新模式下几乎不构成证据。核心状态机应当用表驱动测试穷举状态迁移矩阵;对资金、库存等关键链路补充并发测试、幂等测试与异常注入,让“看起来对”的代码在预发阶段就暴露问题,而不是在生产环境里教团队做人。
关键路径人工兜底。为代码划分风险等级:纯展示逻辑、工具脚本可以适度放宽;状态机、事务、资金、并发相关的代码,要求生成后逐行人工复核,并在合并请求中显式标注“AI生成”及关键决策点。这不是形式主义,而是给审查者亮起一盏黄灯。
技术债显性记账。把重复度、耦合度、告警密度纳入团队看板。看不见的债没人还,看得见的债才有资格进入迭代排期。债务一旦可见,治理就从“情怀问题”变成了“资源分配问题”。
七、结语:AI不生产bug,它只是技术债的加速器
回到最初的问题:AI生成的代码会成为看不懂的屎山吗?答案取决于一个更本质的判断——屎山的成因从来不是“写得烂”,而是“决策被跳过”。AI把“敲代码”的成本压到接近于零,但“做出正确架构决策”的成本一分都没有降;与此同时,它把跳过决策的速度也提升了几个量级。
所以,团队的竞争力正在从“产出有多快”转向“守得住什么”。审查标准、架构门禁、测试深度、债务账本——这四件事共同决定,你是站在效率红利之上,还是站在一座即将喷发的火山口上。