指南

如何审查AI生成的代码

要审查AI生成的代码,先看改动了什么——哪些文件以及为什么改动——然后在阅读任何代码之前,亲自测试其行为。之后,检查AI代码最常出错的地方:服务器端缺少权限检查、密钥暴露给浏览器、未经验证的输入、不存在的软件包或函数,以及对你从未要求改动的内容所做的编辑。

AI写出的代码通常能运行,而且看起来很整洁。这使人很容易在没有真正检查的情况下就批准。本指南提供一套审查流程,无论你是否精通阅读代码,都同样适用。

根据风险调整审查力度

并非每个改动都需要同样的关注。

改动类型审查方式
文字、颜色、布局在桌面端和手机端的预览中查看
新页面或新功能测试流程;略读改动过的文件
登录、权限、付款、个人数据仔细阅读、实际测试,并考虑让第二个人审查
数据库结构、删除数据、数据迁移阅读改动内容,在副本上测试,并先做备份

第1步:查看改动了什么

在评判代码之前,先获取改动的清单:

  • 如果项目在Git中,查看差异:自上次提交以来改动的文件和行。参阅如何在AI构建的应用中使用Git。
  • 或者直接询问AI:

列出你在上一次改动中修改过的每个文件,并用一句话解释每个文件改动了什么以及为什么。

这一阶段的危险信号:与请求无关的文件、被删除的文件、你没有要求的配置或依赖项改动。

第2步:先测试行为

阅读代码告诉你它应该做什么;测试则告诉你它实际做了什么。在阅读之前:

  • 以普通用户的身份,在桌面端和手机尺寸的屏幕上试用这一改动。
  • 输入错误的数据:空字段、超长文本、负数、过去的日期。
  • 在未登录状态下试用,并以另一个用户的身份试用。
  • 重新运行最重要的流程:注册、登录、主要操作、付款。

如果测试失败,你就节省了阅读代码的时间——清楚地报告问题,并让AI去修复。参阅如何撰写好的错误报告。

第3步:在服务器端检查权限

这是最重要的检查项。AI工具常常只是在页面中隐藏了按钮,却让服务器对任何请求该操作的人都照单全收。

对于每一个读取或修改数据的路由或函数,都要问:

  • 它是否检查用户已登录?
  • 它是否检查该用户被允许访问这条记录?
  • 这项检查是否在服务器端,而不仅仅是在页面中?

对于你新增或修改过的每个API路由,告诉我它在服务器端做了什么权限检查,并引用对应的代码行。标出任何没有权限检查的路由。

然后进行测试:以用户A登录,记下某条记录的ID,再以用户B登录并请求该记录。AI构建应用的安全检查清单包含完整的测试方法。

第4步:查找暴露的密钥

  • 在改动过的文件中搜索任何看起来像密钥或密码的内容。
  • 检查密钥是否从环境变量中读取,并且只在服务器端代码中使用。
  • 注意密钥变量上是否带有VITE_或NEXT_PUBLIC_等公开前缀——这些变量会被打包进浏览器代码中。

参阅如何安全地保管API密钥。

第5步:检查输入和错误处理

  • 服务器端验证。 浏览器端的检查可以被绕过。必填字段、长度、格式和允许的值,也应由服务器进行检查。
  • 数据库查询使用参数,而不是把用户输入直接拼接成查询文本。
  • 错误不被吞掉。 一个什么都不做的try/catch会隐藏故障。错误应被记录,用户应看到简明的提示。
  • 不向用户显示内部细节——堆栈跟踪和数据库错误应当记录在日志中。

第6步:确认代码是真实的

AI模型有时会生成看起来正确、但引用了不存在事物的代码。

  • 软件包: 每个新增依赖都应是真实存在、有人维护、且名称完全正确的包。要警惕那些看起来像热门包拼写错误的名称。
  • 函数和API选项: 如果代码调用了你从未见过的库函数或外部API选项,请查阅官方文档。
  • 占位代码: 搜索TODO、mock、fake、硬编码的示例数据,或返回固定值的函数。

你新增了任何软件包吗?对于每一个,请给出确切的名称、用途,以及我们是否可以不用它。

第7步:检查代码是否契合

代码可以正常运行,但仍可能让应用在日后更难修改:

  • 重复。 同样的逻辑复制到多处,会逐渐产生差异。
  • 一致性。 代码应遵循应用其他部分已经使用的模式。
  • 规模。 一个20行的请求却生成了600行代码,值得提出疑问。
  • 死代码。 与新版本并存、被遗留下来的旧版本。

由于这次改动,项目中是否有现在已不再使用的代码,或在其他地方存在重复的逻辑?不要做任何修改,只需列出来。

常见误区

  • 因为看起来整洁就批准。 整洁的代码仍可能跳过权限检查。
  • 只阅读不测试。 先测试,再阅读。
  • 只测试正常路径。 尝试错误的输入、错误的用户以及未登录的状态。
  • 忽略无关的文件改动。 询问每个文件为什么被改动。
  • 完全信任自我审查。 把AI的审查当作初步检查,并通过测试加以确认。
  • 一次审查整整一周的改动。 应在改动发生时,对小的改动逐一审查。

检查清单

  • 我知道哪些文件被改动了、为什么改动,并且没有与之无关的改动。
  • 该改动在桌面端和手机端均可正常工作,包括输入错误数据、未登录以及以其他用户身份操作的情况。
  • 每个数据路由都在服务器端检查了登录状态和数据归属。
  • 代码和浏览器打包文件中没有密钥。
  • 输入在服务器端经过验证;查询使用了参数。
  • 错误被记录而非被吞掉,且不会向用户显示详细信息。
  • 新增的软件包真实且确有必要;不存在虚构的函数或占位代码。
  • 高风险的改动经过了仔细阅读,并在需要时由第二个人审查。

在Mythex上审查代码

  • 提问模式可以在不编辑代码的情况下回答关于代码的问题——非常适合“解释每一处改动”和“哪些路由缺少权限检查”这类提示。参阅聊天。
  • 代码视图在所有套餐中都会显示文件树、编辑器和终端(免费套餐为只读,Pro套餐可编辑),方便你亲自阅读改动的内容。参阅代码编辑器。
  • **/test**会让智能体以用户身份在预览中操作,并报告有问题的流程。
  • 检查点可以让你回退未通过审查的改动。

如果由开发人员为你进行审查,如何与开发人员合作完成AI构建的应用涵盖了交接事宜;如果审查中发现了错误,请参阅如何调试AI构建的应用。

常见问题

如果我不是开发人员,能审查AI生成的代码吗?

很多内容你都可以审查。检查改动是否符合你的要求,测试重要的流程,尝试访问其他用户的数据,并要求AI用平实的语言解释每个改动过的文件。涉及付款、敏感数据或安全的部分,请让开发人员也来看一看。

AI生成的代码最常见的问题有哪些?

服务器端缺少权限检查,把密钥放在了浏览器可以读取的地方,服务器端未验证输入,使用了不存在的软件包或函数,错误被悄悄吞掉,以及修改了你没有要求改动的文件。

我可以让AI审查它自己的代码吗?

可以,它常常能发现真正的问题,尤其是当你提出具体问题时,例如哪些路由缺少权限检查。把它的结果当作初步审查,而不是保证,并通过测试来确认它的发现。

代码审查应该花多长时间?

应根据风险程度来决定。文字或样式的改动只需在预览中快速看一下。涉及登录、付款、权限或数据库的改动则值得仔细阅读、实际测试,必要时请第二个人来审查。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)