你需要理解 AI 生成的代码吗?

发布: (2026年1月2日 GMT+8 13:02)
19 min read
原文: Dev.to

Source: Dev.to

请提供您希望翻译的文章正文内容,我将按照要求保留链接、格式和技术术语,仅翻译正文部分为简体中文。

Part 3 of 4: Agentforce Vibes Series

这场辩论起源于我关注的一个 Salesforce 开发者 Slack 频道。有人让 Agentforce Vibes 为 Account 对象编写一个更新触发器,粗略审查了生成的代码,看到测试通过后就直接部署到生产环境。另一位开发者回复道:

“你在不了解代码细节的情况下就部署?这很危险。”

原帖作者反驳:

“只要测试通过且能正常工作,我真的需要懂每一行代码吗?”

为什么现在讨论这个问题很重要

这已经不再是理论上的问题。随着 AI 代码生成成为常规实践,所有使用这些工具的开发者都会面临同一个抉择:我需要理解这段代码吗,还是可以完全信任 AI 正确生成它?

诚实的答案比两极化的观点更为细致。

  • 你不必像从头编写时那样了解每一个实现细节。
  • 但你必须足够了解代码的行为,以确认它在做你期望的事,并且在关键场景下能够持续工作。

两种对立的观点

立场观点
必须完全理解你不理解的代码就无法维护、调试或信任。如果你不会在没有仔细审查的情况下部署人工编写的代码,为什么 AI 生成的代码可以例外?
AI 改变了“理解”的含义现代开发已经大量依赖库、框架和平台特性,而这些内部实现我们并不全部掌握(例如 React 的 reconciliation 算法、Salesforce 的 Lightning Data Service)。只要通过测试并能正常运行,细节实现可能并不重要。

两种观点各有道理,但也都有遗漏。关键不在于是否要理解 AI 生成的代码,而在于需要理解哪些方面,以及理解的深度,从而负责任地部署它。

触发器示例——哪些层面的理解是必要的

部署触发器而未做深入审查的开发者,可能已经掌握了业务逻辑当 Account 发生变化时,以特定方式更新关联记录。测试也验证了该行为。但在生产环境中,还需要额外的理解维度。

维度关键问题
Performance / Bulkification触发器是否能正确处理批量上下文(最多 200 条记录)?是否存在在循环内部的查询或 DML,可能在真实负载下触及 governor 限制?
Security model代码是否遵循字段级安全和共享规则?是否可能意外泄露敏感数据?
Edge cases当必填字段为 null、关联记录不存在或 Account 被锁定时会怎样?
Architectural fit触发器是否符合组织的架构规范(例如使用触发器框架),还是会引入技术债务?是否可能与其他自动化产生冲突?

你不必知道 AI 为何选择了某个变量名,或是否存在更优雅的算法。你需要确认代码是否安全、性能良好、架构合适且足够健壮。这些属于不同类型的理解,需要不同的审查方法。

系统化的审查方法

随意的审查不足以保证质量;人们很容易假设 AI 已经全部正确,或者在无关细节上浪费时间,却忽视关键问题。先问自己:

“这段代码在生产环境中可能会出现哪些问题?”

对于 Salesforce 开发,这通常可以转化为一套具体的检查清单。下面是一份简洁的 五分钟检查清单,能够捕获大多数 AI 生成的 Apex 代码在生产环境中的阻断问题。

AI 生成的 Apex 代码检查清单

  1. Bulkification

    • 代码是否正确处理集合,还是在循环中执行查询/DML?
    • 在脑中模拟一次处理 200 条记录的情况,检查是否会触发 governor 限制。
  2. Security

    • 是否使用 with sharing,并检查字段级安全(FLS)和对象级安全(CRUD)?
    • 确认没有硬编码的敏感信息或绕过安全检查的逻辑。
  3. Error handling

    • 是否捕获并妥善处理可能的异常?
    • 是否在出现错误时提供有意义的日志或用户反馈?
  4. Test coverage & quality

    • 测试覆盖率是否达到组织要求(通常 ≥ 75%)?
    • 测试是否覆盖了正向路径、负向路径以及批量场景?
  5. Governance & best practices

    • 是否遵循组织的触发器框架或编码规范?
    • 是否避免了硬编码 ID、使用了可配置的自定义设置或自定义元数据?

按照上述清单快速走一遍,你就能在大多数情况下发现 AI 生成代码的潜在风险,并决定是否可以安全部署。

does it stay within governor limits?

  1. 安全

    • 它是否使用了适当的共享模式(with sharing / without sharing)运行?
    • 它是否遵守字段级安全性?
    • 用户是否可能通过此代码访问他们不应看到的数据?
  2. 治理限制

    • 除了批量化之外,还有其他限制风险吗?
    • 总的 SOQL 查询数、DML 语句数、CPU 时间、堆大小等。
  3. 错误处理

    • 异常是否被适当地捕获?
    • 用户会看到有帮助的错误信息还是神秘的失败?
  4. 边缘情况

    • 如果数据缺失、格式错误或不符合预期怎么办?
    • 代码是优雅地失败还是直接崩溃?
  5. 架构适配性

    • 它是否遵循你的触发器框架或既定模式?
    • 它会与现有的自动化(其他触发器、流程构建器、Flow 等)冲突吗?

生产就绪性评估(非完整代码审查)

这并不是一次全面的代码审查——它是对生产就绪性的聚焦评估。AI 可能以我本不会选择的方式实现业务逻辑,但这往往并不重要。重要的是它是否产生了以下常见的故障模式。

Lightning Web Components (LWC) 检查清单

LWC 的检查清单不同,但同样系统化。请自问:

  • 是否遵循当前的 LWC 模式或使用了已弃用的方法?
  • 是否处理了加载和错误状态?
  • 是否对用户交互实现了适当的防抖?
  • 是否遵循 Lightning Design System 的规范?

同样,这只需要几分钟,而不是几个小时,因为你只是在检查 特定关注点,而不是审查每一行代码。

Agentforce Vibes 如何改变了我的审查流程

我并不是审查得不够仔细——而是因为了解了 AI 通常能做对的地方和容易出问题的地方,我的审查变得更高效。

  1. 早期阶段 – 我会对所有内容进行细致审查,因为当时对 AI 生成代码的质量没有直觉。

  2. 模式识别 – 我发现 AI 在以下方面表现非常出色:

    • 基础 CRUD 操作
    • 简单的业务逻辑

    它在以下方面不够可靠

    • 性能优化
    • 安全性实现
    • 边缘情况处理

    AI 几乎总是生成语法正确的代码,但经常使用已经过时的模式,这些模式仍能工作,却不是最新的最佳实践。

  3. 有针对性的关注

    • 当 AI 生成一个简单的查询‑展示组件时,我会快速确认它安全高效,而不必细致研究每一个实现细节。
    • 当它生成带有条件更新的复杂触发逻辑时,我会更加仔细地审查,因为细微的 bug 常常隐藏在这里。

这类似于你审查不同团队成员代码的方式:对经验丰富的开发者进行轻量审查,对 junior 开发者提供更详细的反馈。不同之处在于,你正在构建一个关于 AI 能力和局限的心智模型,而不是针对某个具体开发者的技能模型。AI 并不会像人一样从你的反馈中学习,但你会学会哪些类型的代码生成需要更严格的审查,哪些问题最有可能出现。

需要更深入理解的情形

These aren’t arbitrary; they’re contexts where the cost of problems is high or shallow understanding creates specific risks.

  • 敏感数据 / 安全关键代码 – 不仅要确认安全检查存在,还要确保它们实现正确且覆盖 所有访问路径
  • 外部系统集成 – API 集成、第三方调用以及数据同步逻辑往往有细微的需求,这些需求在测试中并不明显。了解集成细节有助于在外部系统变更时预判可能的破坏。
  • 团队可维护性 – 能运行但令人困惑的代码会导致维护问题。对 AI 生成的代码进行重构可能是值得的,不是因为它错误,而是因为你的团队无法有效维护它。
  • 复杂业务逻辑 – 当需求可能变化时,你需要了解 AI 是如何实现复杂计算或工作流的。
  • 性能关键代码 – 如果组件必须处理大规模数据或在高负载下快速响应,你需要了解其性能特性。AI 可能生成功能正确但在大规模下性能不佳的代码。

问责制:不舒服的真相

当 AI 生成的代码在生产环境中出现故障时,责任在你,而不是 AI

  • 如果触发器存在导致数据损坏的 bug,你不能对经理说“是 AI 写的”。
  • 如果组件存在安全漏洞,“我没写那段代码”并不是辩护。

是你部署的代码,所以责任由你承担。

保卫代码质量

您的审查过程必须足够严谨,以便在受到质疑时能够 为代码辩护

  • 您能向安全审计员解释为什么这段代码是安全的吗?
  • 您能向技术负责人说明为什么这种架构是合理的吗?
  • 您能向经理说明为什么这段代码不会导致生产事故吗?

如果答案是 “因为是 AI 生成的且测试通过”, 那是不够的。
如果答案是 “我已经验证它能够正确处理批量数据,恰当地执行安全控制,并遵循我们的架构模式”, 那么您就完成了自己的职责——不论代码是谁写的。

技能退化担忧

一些开发者担心依赖 AI 生成的代码会导致他们的编码技能退化。这个担忧是有道理的——不练习的技能会衰退。然而,这种误解忽视了 在新开发范式中哪些技能才重要

最重要的技能不是从头编写样板代码,而是 了解优秀代码的样子,以及 如何评估它是否符合质量、安全、性能和可维护性标准

通过专注于这些评估技能,即使大部分代码由 AI 生成,你仍然能够持续创造价值。

你需要理解 AI 生成的 Salesforce 代码吗?

你在这里 – 系列第 3 部分

为什么审查 AI 生成的代码比编写它更困难

  • 你必须 快速评估自己没有写的代码,而没有构建它的上下文。
  • 为了有效做到这一点,你需要了解:
    1. Governor limits – 足够深入以发现会触发限制的代码。
    2. Security models – 在出现漏洞之前识别安全缺口。
    3. Current vs. deprecated patterns – 避免将来维护的麻烦。
    4. Architectural judgment – 判断代码是否适配现有系统。
    5. Production‑failure experience – 预见真实使用中重要的边缘情况。

这些是 高级开发者技能,而非初级的。使用 AI 并不能消除所需的专业知识;它只是 将专业知识的应用位置转移

初级与高级开发者的悖论

  • 初级开发者 可以通过示例生成代码,但往往缺乏评估这些代码是否可投入生产的能力。
  • 高级开发者 可能不需要大量基础代码生成,但他们最适合 评估和改进 AI 生成的输出。

“信任但要验证,验证应聚焦于特定的质量维度,而不是对每个实现细节的全面理解。”

我的审查流程(分钟级,而非小时级)

  1. 确定对生产重要的质量维度

    • Security
    • Performance
    • Error handling
    • Edge‑case coverage
    • Architectural fit
  2. 针对这些维度快速检查清单

    • 如果代码通过,我 信任实现细节,即使它们与我的个人风格不同。
    • 如果未通过,我会:
      • 修复具体问题(例如小的安全漏洞或性能调优)。
      • 重新生成,当问题更根本时使用更好的提示。
  3. 记录任何非显而易见的内容

    • 为边缘情况处理或不寻常的架构选择添加注释。
    • 这帮助未来的维护者(包括你自己)理解代码为何如此。
  4. 把 AI 生成的代码视为第一稿

    • 足以作为工作起点,极少能直接部署而不做修改。
    • 这种心态避免 过度信任(未经审查直接部署)和 过度审查(全部重写)。

更大的视角

  • 对 AI 生成代码的理解需求 不会消失;随着工具的进步和采纳的扩大,这一需求会更迫切。
  • 组织需要制定 标准,明确 AI 生成代码的审查深度。
  • 团队将形成 共享实践,无论代码来源如何,都能评估代码质量。
  • 开发者必须培养 评估能力,这在当下比以往任何时候都更关键。

关键洞见: 理解 AI 生成的代码不是二元的。你不需要像对待自己从零写的代码那样深入每一行,但必须验证它 安全、性能良好、架构合理,并且能够正确处理边缘情况。这是一种不同的、更具评估性的理解——仍然是必不可少的。

讨论问题

您如何决定 AI 生成的代码是否已准备好投入生产?
您的审查流程是怎样的,哪些质量检查对您最重要?

阅读完整系列

  • 第 1 部分: 什么是 Agentforce Vibes?
  • 第 2 部分: 从 Prompt 到 UI – 构建您的第一个组件
  • 第 3 部分: 您是否需要了解 AI‑生成的 Salesforce 代码?(您所在的页面)

标签: #salesforce #agentforce #ai #vibecoding #salesforcedevelopment #codequality #softwaredevelopment

Back to Blog

相关文章

阅读更多 »

软件中最危险的快捷键

Ryan 与 LaunchDarkly 的发布自动化负责人 Tom Totenberg 坐下来,讨论在软件开发中走太多捷径的风险,以及…