如何让AI写的代码更靠谱?7个高效AI编码准则了解一下

本文来源sonarsource.com,由SonarQube中国授权合作伙伴——创实信息翻译整理,旨在帮助开发团队更高效、更安全地利用AI编码,加速开发。

英文原作者:Tariq Shaukat,Sonar CEO

过去一年间,AI编码已经从新鲜事物演变成必要工具。然而,当前关于AI编码的讨论大多聚焦于“体验式编码(vibe coding)”这类相对“从零开始”的应用场景。但绝大多数的企业和开发者并不在这种理想的场景下工作。他们面对的是庞大而陈旧的代码库,规模可能达到数百万甚至数十亿行。在这些环境中,任何错误——无论是漏洞还是安全问题——代价都极其高昂。据估计,不良软件每年造成的损失超过2万亿美元。

这些巨型代码库本可以通过AI编程工具获益,但必须以负责任的方式加以利用。在这方面,AI编程与常规编程并无二致:

  • 需要确保代码没有明显的bug或漏洞,且具有良好的性能和稳健性;

  • 需要确认所有第三方库都是安全的、最新的且获得了适当的许可;

  • 需要确保新代码具有可读性,便于人类和大语言模型(LLMs)评估审查,以降低意外风险;

  • 需要确保代码具有可维护性,避免代码库因AI代码的增加而变得越来越脆弱。

企业内部需要建立起一套清晰的AI编码使用最佳实践。对此,Sonar作为领先的代码质量与安全解决方案提供商,从实际客户经验出发,提出了企业应该培养的7个AI编程“习惯”。

黄金法则:开发者必须承担责任

“谁搞砸,谁负责”是著名的Pottery Barn法则。在AI编码领域,它应该变成:如果你接受了 AI生成的代码,一旦它出问题,你必须负责。不可否认的是,AI代码存在责任危机。一些客户表示,他们的开发者接受了超过95%的AI生成的拉取请求,代码几乎没有经过严格审查——这反映出了责任缺失。每个企业都应该遵守这个黄金法则:无论代码是人工写的还是AI生成的,开发者都要对其负责。

详细记录项目上下文

使用Mermaid图、项目结构文件、设计文档等,开发者和架构师早已驾轻就熟。而在AI编码时代,更应该“宁多勿少”。清晰、全面的项目文档能够概述项目目标和设计方式,帮助开发者确保新代码符合整体架构,也为AI编码工具和代理提供必要的上下文,以便更高效地在代码库上运行。

代码尽可能保持简单

代码熵增是真实威胁。缺乏维护的代码库将会变得越来越混乱,而可读性差的代码库几乎不可维护(或者说极其困难)。任何使用AI编码的团队都必须制定简洁的规则,在提示LLM时加入约束条件并验证其执行。常见的约束包括:

A:所有函数长度不得超过 X 行(如 50-100 行);

B:尽量减少认知复杂度(也可以使用循环复杂性);

C:代码重复率要尽可能低。

严禁冗余代码

这是软件开发的入门常识,但对AI编码尤为关键。LLM经常会生成一些实际上未被使用的代码,比如无用引用。这类冗余代码不仅会增加理解和维护代码库的难度,还会带来极大的安全隐患。

例如,攻击者可能会诱导LLM添加一些看似无害的依赖项或引用,这些依赖项和引用现在虽然未被调用,但将来可能会被恶意使用,从而造成严重的安全漏洞。这就是所谓的“后门”或“潜伏代理”注入,它只是LLM被恶意操控形成新型攻击的一个例子,说明了为什么安全代码必须高质量且贴合实际用途。

全面分析机制

AI生成的代码量非常庞大,所产生的问题通常隐蔽难查。你不只是要检查拼写错误或分号错位,还要确保没有复杂的bug或已知漏洞,并且确保AI引入的第三方库获得了合法授权,并且被良好维护。开发者的人工审查不可或缺,但这也会加重负担,扼杀他们的工作效率和幸福感。没有开发者愿意成为AI的拷贝编辑器,没有合适的工具,他们就难以应对AI代码中潜藏的大量复杂问题。因此,为开发者配备合适的工具,以帮助识别和筛选问题至关重要。这些工具应该是确定性的、值得信赖且透明的,用以弥补AI输出的非确定性。

强制单元测试

所有企业都应该设立高标准的测试覆盖率,对AI生成的代码进行全面的单元测试,并持续执行测试。另外,测试必须提前编写,不能由生成代码的同一个AI来编写,防止AI“学会作弊”来通过测试。

严格代码评审

分析代码中的问题只是解决方案的一部分。唯有通过严格的代码审查制度,才能确保AI编程规范被全面落实。如果不遵循最佳实践,拉取请求一定会失败,开发人员需要能够迅速纠正问题。这就需要开发团队有严格的纪律,以及好用的工具来促进检查并使其自动化。

这些AI编码习惯本质上就是现代软件开发的最佳实践。在AI普及的今天,这些“最佳实践”已经不再是“可有可无”,而是“必不可少”。你今天引入的代码可能会在未来数年,甚至数十年内持续存在。

AI编码模型和工具正在迅速改进,但无论它们多么强大,企业仍然必须确保代码是安全的、可持续维护的,技术债务是可控的。正如健康管理中的格言所说:“预防胜于治疗。”好习惯就是最好的预防。

SonarQube的AI功能如何保障你的代码开发效率与质量?

SonarQube AI Code Assurance(AI代码保障)能够帮助开发人员识别和验证AI生成的代码。可以在代码评审阶段自动运行,帮助组织评估这些最佳实践是否被应用在AI生成的代码中。若发现严重问题,拉取请求将无法通过,并会明确指出导致失败的所有问题。

在2025.1 LTA中,SonarQube Server可以自动检测GitHub项目中由GitHub Copilot创建的代码。SonarQube Server为包含AI生成代码的项目提供实时质量评估和通过/失败的标记,确保只有高质量的AI生成代码才能投入生产。您可以使用Sonar推荐的AI Code Assurance质量门,或使用您自己的质量门,来确保所有AI代码符合您的严格要求。

免费试用SonarQube或了解更多:

请咨询SonarQube中国授权合作伙伴-创实信息,我们提供SonarQube企业版的免费试用、咨询、销售、安装部署、技术支持等一站式服务。

了解SonarQube:https://www.shcsinfo.com/sonarqube

联系方式:021-61210910、customer@shcsinfo.com