人类编写代码 vs AI生成代码:质量、漏洞与复杂度的大规模比较研究

最近国外有人对AI生成的代码和人工编写的代码差异做了开创性的研究。以下是对论文《Human-Written vs. AI-Generated Code: A Large-Scale Study of Defects, Vulnerabilities, and Complexity》的中文简报总结:


📌 研究主题

本论文系统性地比较了人类开发者与三种主流大型语言模型(ChatGPT、DeepSeek-Coder、Qwen-Coder)生成的代码质量,涵盖三个关键维度:

  • 软件缺陷(Defects)
  • 安全漏洞(Security Vulnerabilities)
  • 结构复杂度(Code Complexity)

研究对象包括超过 50 万个 Python 和 Java 代码样本,使用标准化工具和框架进行分析。


🔍 核心发现与要点

1️⃣ 缺陷分析(Defect Analysis)

  • AI生成代码更简洁但更重复,常见问题包括:
    • 未使用的变量和参数
    • 硬编码调试语句
    • 类结构不完整
  • 人类代码更复杂,缺陷集中在:
    • 控制流逻辑错误
    • 异常处理不当
    • 接口调用问题
  • 使用 Orthogonal Defect Classification (ODC) 框架对缺陷进行标准化分类。

2️⃣ 安全漏洞分析(Security Vulnerability)

  • AI代码更容易引入高风险漏洞,尤其是:
    • 命令注入(CWE-78)
    • 硬编码凭证(CWE-798)
    • 信息泄露(CWE-532)
  • DeepSeek-Coder 在 Java 中表现最差,触发最多漏洞类型(51种CWE)。
  • 人类代码在安全性上整体优于AI代码,漏洞数量和种类均较少。

3️⃣ 结构复杂度分析(Code Complexity)

  • AI代码平均行数、圈复杂度(CCN)、Token数量均显著低于人类代码:
    • Python:AI代码平均少 6.75 行,少 63.74 个 Token
    • Java:AI代码结构更浅,函数命名更冗长但语义不一定更清晰
  • 人类代码使用更多独特Token,展现更丰富的语言表达和逻辑结构。

📊 实际说明与应用建议

维度人类代码AI代码
缺陷类型接口、算法、异常处理变量赋值、未使用参数、类结构问题
安全漏洞少量高风险漏洞多种高频高危漏洞,重复率高
复杂度高结构复杂度,语义丰富简洁但重复,逻辑覆盖浅

✅ 建议:

  • 在使用AI代码助手时,应加强代码审查流程,特别是安全性和结构完整性方面。
  • 对AI生成代码应采用专门的质量保障策略,而非沿用人类开发的评估标准。
  • AI生成代码适合快速原型开发,但不宜直接用于生产环境,尤其是安全敏感系统。

引用:Human-Written vs. AI-Generated Code: A Large-Scale Study of Defects, Vulnerabilities, and Complexity

作者: oliver

全栈开发者与创业合伙人,拥有十余年技术实战经验。​AI编程践行者,擅长以产品思维打造解决实际问题的工具,如书签系统、Markdown转换工具及在线课表系统。信仰技术以人为本,专注氛围编程与高效协作。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注