Esc
输入关键词开始搜索
News

AI-Generated Smells: An Analysis of Code and Architecture in LLM- and Agent-Driven Development

AI-Generated Smells: An Analysis of Code and Architecture in LLM- and Agent-Driven Development

原文链接:https://arxiv.org/abs/2509.06233 数据与脚本:https://doi.org/10.5281/zenodo.19245562 作者:Yue Cai Zhu, Nikolaos Tsantalis, Peter C. Rigby 机构:Concordia University 发布日期:2026-05-05

速查卡

项目内容
一句话总结这篇论文最重要的发现不是“AI 代码质量不好”,而是 AI 会形成一套和人类不同、并且会随任务复杂度升级而迁移的技术债指纹。
大白话版简单任务里,AI 爱把逻辑全塞进超长函数;复杂项目里,AI 又会装作已经模块化,实际上只是把坏味道分散到更多文件里。
核心数字Qwen-Coder-480B 在 zero-shot 下 Long Method 11 次、few-shot 下 13 次;Gemini-2.5-pro 从 5 次升到 8 次;TLoC 与架构味道相关系数 ρ=0.94;ToF 与架构腐化相关 ρ=0.72;prompt specificity 对质量无显著影响 p>0.8。
评级A- — 它不是造新模型,而是在给 agent 编程时代建立“怎么量化坏味道”的第一批严肃框架。
代码论文提供 replication package
关键词code smells, architecture rot, Long Method, Temporal Field, MetaGPT, Modular Mirage, Volume-Quality Inverse Law

核心 Insight

这篇论文的核心洞察可以压成一句话:

AI 不会消灭技术债,它只会把技术债换一种形态重新制造出来。

而且这种“坏”不是随机的。论文证明它带有明显的机器风格:

  • 在简单算法题里,AI 倾向于把复杂逻辑塞进一个超长方法,形成 Long Method
  • 到复杂多文件项目里,这种坏味道又升级成 God Class、Too Many Branches、Potential Improper API Usage、Unstable Dependencies、Scattered Functionality
  • 更扎心的是,表面上文件变多了,模块拆开了,实际上只是形成作者所谓的 Modular Mirage(模块化幻觉)

为什么这个想法 work?

因为传统评价 AI 写代码,太容易只看:

  • 能不能跑
  • 测试过不过
  • lint 干不干净

但这些指标很容易错过真正的长期维护成本。论文把问题拉回软件工程本体:

  • 代码是不是可演进
  • 责任是不是分配合理
  • 架构是不是会在规模上来后迅速腐烂

这是 agent 编程进入生产环境前必须补的一课。

方法详解

整体架构

论文设计了一个双实验框架:

输入模型/agent → Experiment I:单文件算法题 → Experiment II:多文件 agent 生成项目 → PyExamine 静态分析 → 统计 code / structural / architectural smells

这样做的好处是能把“简单任务时怎么坏”和“复杂项目时怎么坏”放在同一条轴上看。

关键技术组件

组件 1:Experiment I — 算法题上的单模型代码味道审计

做什么: 建立 AI 代码质量的基础画像。

怎么做:

  • 使用 CodeContest 2022 数据集
  • 抽取 90 个问题
  • 对比模型包括:deepseek-coder-v2:16bLlama-3.3:70bqwen3-coder:30bqwen3-coder:480bGemini-2.5-pro
  • 同时抽样一组 human baseline 作为对照
  • 分别测 zero-shot 与 few-shot

组件 2:Experiment II — MetaGPT 生成全项目后的架构味道审计

做什么: 看 agent 从单文件跨到多文件系统时,坏味道会不会发生性质变化。

怎么做:

  • 采用 MetaGPT 作为多 agent 框架
  • 底层模型为 Qwen-Coder 480B
  • 设计 5 个应用场景
  • 每个场景有 4 轮递增复杂度 prompt
  • 统计:
    • ToF(Total Number of Files)
    • TLoC(Total Lines of Code)
    • AAC(Agent Action Count)

组件 3:PyExamine 静态味道检测

做什么: 统一、可重复地检测代码/结构/架构坏味道。

为什么选它: 论文强调 PyExamine:

  • 覆盖 Long Method、Large Class 等多种 smells
  • 静态分析,不依赖运行成功与否
  • 可以批量、标准化输出位置与类型

与现有方法的关键区别

维度常见 AI 代码评估本文方法为什么更好
关注点functional correctness / lintmaintainability / smells / architecture更接近真实工程代价
分析层级单任务结果单文件 + 多文件系统双层分析能看坏味道迁移
对照对象常无 human baseline有 human baseline能看 AI 与人类差异
干预变量只看模型还看 prompt specificity、体量、项目规模能定位退化来源

实验结果

主实验:算法题中的味道指纹

模型Zero-shot Long MethodFew-shot Long Method其他关键观察
deepseek-coder-v2(16b)22相对温和
Llama3(70b)00更短,但往往是没把复杂逻辑做出来
Qwen Coder(30b)77程序性膨胀明显
Qwen Coder(480b)1113最高,few-shot 反而更糟
Gemini-2.5-pro58同样出现 few-shot 恶化
Human baseline11但有 4 次 Temporal Field

解读:

  • 人类 baseline 的典型坏味道是 Temporal Field:状态封装差,但方法本身不长;
  • AI 的典型坏味道是 Long Method:状态收进去了,但逻辑全堆在一个过程块里;
  • 这就是论文提出的 Reasoning-Complexity Trade-off / Paradox:模型越强,越倾向于“硬啃复杂边界情况”,结果函数更臃肿。

Few-shot 为什么没救场

模型Zero-shot LMFew-shot LM变化
Qwen Coder(480b)1113+2
Gemini-2.5-pro58+3

论文的判断很重要:few-shot 示例并没有显著改善代码卫生,反而可能因为给了更多“完整展开”的信号,让模型写得更长、更满。

主实验:复杂系统中的坏味道迁移

论文在 Experiment II 里看到味道谱系发生明显切换:

  • Long Method 不再是主角
  • 变成 Too Many Branches (TMB)
  • High Response for a Class (RFC)
  • Potential Improper API Usage (PAU)
  • Scattered Functionality (SF)
  • Unstable Dependencies (UD)

作者把这类现象总结为:

  1. God Class Syndrome:逻辑被集中到 manager 类里;
  2. Redundant Implementation:外部调用逻辑被反复 inline 重写;
  3. Modular Mirage:文件分开了,但语义上没分工,相关行为碎了一地。

可扩展性分析

最关键的数据在相关性分析:

变量与架构味道相关性解释
TLoCρ = 0.94代码量越大,架构腐化几乎线性恶化
ToFρ = 0.72文件数越多,也明显更坏
结构味道相关ρ = 0.59中高相关
代码味道相关ρ = 0.53也相关,但不如架构层明显

论文因此提出 Volume-Quality Inverse Law

代码量与文件数一旦上去,当前 agent 维持一致架构视野的能力会快速坍塌。

更狠的是:

  • functional correctness 与结构质量解耦
  • 更详细的 prompt 没显著帮助,p > 0.8

也就是:

  • 跑通不代表结构好
  • 多写点需求不代表 agent 就更懂架构

复现评估

维度评分(1-5)详细说明
数据可得性⭐⭐⭐⭐90 题样本、human baseline、MetaGPT prompt 均给了 replication package。
代码可得性⭐⭐⭐⭐Zenodo package 已公开。
算力需求⭐⭐⭐Experiment II 用到 Qwen-Coder 480B,不算低。
工程复杂度⭐⭐⭐重在数据流水线、静态分析与统计,不是难在模型微调。
预期收益⭐⭐⭐⭐⭐对所有做 agent coding、自动编程评估、代码治理的人都非常有参考价值。

复现建议: 先复现实验 I 的 90 题 smell pipeline,再用一个轻量 agent 框架做实验 II 缩小版,验证 TLoC 与架构味道是否也近似同向增长。

批判性分析

局限性

  1. Experiment II 只用 MetaGPT:结论未必可无缝推广到所有 agent coding 框架。
  2. 只看首次产物:论文明确承认没有做“测试后反复 debug/self-correct”闭环,因此更像测模型天然写作偏好,而非最终极限能力。
  3. 静态分析也有误报边界:作者自己指出 FE、PSS 在算法题语境下会误报,所以最终重点放在更可靠的指标上。
  4. 场景仍是受控实验:真实企业仓库、多人协作、长期演化项目可能出现更复杂的 rot 模式。

改进方向

  1. Architecturally-aware agents:让 agent 内置 architect 角色或硬性设计约束。
  2. Refactoring agents / self-healing agents:不是只会写,还要会闻到哪里臭、主动重构。
  3. Longitudinal software evolution benchmarks:做更长时间尺度的开放式项目演化测试。
  4. Semantic cohesion metrics:未来不只看文件拆得开不开,还要测语义是不是黏在一起。

独立观察

  1. 这篇论文最值钱的地方,不是告诉我们“AI 还不够好”,而是告诉我们“AI 坏起来有稳定模式”。
  2. 很多团队今天在 agent coding 上的体感痛点——巨型函数、万能 manager、文件看似多但职责混乱——这篇论文几乎全都点名了。
  3. “模块化幻觉”这个概念很强,因为它准确描述了今天很多 agent 代码:目录很像样,架构其实是空心的。

对领域的影响

这篇工作会逼着自动编程赛道从“谁一次写对更多题”转向“谁能在规模上去之后还写得能维护”。

短期内最该调整的,不是 prompt 花样,而是评测体系:

  • 要看 smell density
  • 要看 architectural decay
  • 要看 ToF/TLoC 上升时质量怎么崩
  • 要看 agent 有没有自我重构能力

否则大家只会继续把能跑但会烂掉的代码,误当成工程胜利。