你需要理解 AI 生成的代码吗?
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 代码检查清单
-
Bulkification
- 代码是否正确处理集合,还是在循环中执行查询/DML?
- 在脑中模拟一次处理 200 条记录的情况,检查是否会触发 governor 限制。
-
Security
- 是否使用
with sharing,并检查字段级安全(FLS)和对象级安全(CRUD)? - 确认没有硬编码的敏感信息或绕过安全检查的逻辑。
- 是否使用
-
Error handling
- 是否捕获并妥善处理可能的异常?
- 是否在出现错误时提供有意义的日志或用户反馈?
-
Test coverage & quality
- 测试覆盖率是否达到组织要求(通常 ≥ 75%)?
- 测试是否覆盖了正向路径、负向路径以及批量场景?
-
Governance & best practices
- 是否遵循组织的触发器框架或编码规范?
- 是否避免了硬编码 ID、使用了可配置的自定义设置或自定义元数据?
按照上述清单快速走一遍,你就能在大多数情况下发现 AI 生成代码的潜在风险,并决定是否可以安全部署。
does it stay within governor limits?
-
安全
- 它是否使用了适当的共享模式(
with sharing/without sharing)运行? - 它是否遵守字段级安全性?
- 用户是否可能通过此代码访问他们不应看到的数据?
- 它是否使用了适当的共享模式(
-
治理限制
- 除了批量化之外,还有其他限制风险吗?
- 总的 SOQL 查询数、DML 语句数、CPU 时间、堆大小等。
-
错误处理
- 异常是否被适当地捕获?
- 用户会看到有帮助的错误信息还是神秘的失败?
-
边缘情况
- 如果数据缺失、格式错误或不符合预期怎么办?
- 代码是优雅地失败还是直接崩溃?
-
架构适配性
- 它是否遵循你的触发器框架或既定模式?
- 它会与现有的自动化(其他触发器、流程构建器、Flow 等)冲突吗?
生产就绪性评估(非完整代码审查)
这并不是一次全面的代码审查——它是对生产就绪性的聚焦评估。AI 可能以我本不会选择的方式实现业务逻辑,但这往往并不重要。重要的是它是否产生了以下常见的故障模式。
Lightning Web Components (LWC) 检查清单
LWC 的检查清单不同,但同样系统化。请自问:
- 是否遵循当前的 LWC 模式或使用了已弃用的方法?
- 是否处理了加载和错误状态?
- 是否对用户交互实现了适当的防抖?
- 是否遵循 Lightning Design System 的规范?
同样,这只需要几分钟,而不是几个小时,因为你只是在检查 特定关注点,而不是审查每一行代码。
Agentforce Vibes 如何改变了我的审查流程
我并不是审查得不够仔细——而是因为了解了 AI 通常能做对的地方和容易出问题的地方,我的审查变得更高效。
-
早期阶段 – 我会对所有内容进行细致审查,因为当时对 AI 生成代码的质量没有直觉。
-
模式识别 – 我发现 AI 在以下方面表现非常出色:
- 基础 CRUD 操作
- 简单的业务逻辑
它在以下方面不够可靠:
- 性能优化
- 安全性实现
- 边缘情况处理
AI 几乎总是生成语法正确的代码,但经常使用已经过时的模式,这些模式仍能工作,却不是最新的最佳实践。
-
有针对性的关注 –
- 当 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 生成的代码比编写它更困难
- 你必须 快速评估自己没有写的代码,而没有构建它的上下文。
- 为了有效做到这一点,你需要了解:
- Governor limits – 足够深入以发现会触发限制的代码。
- Security models – 在出现漏洞之前识别安全缺口。
- Current vs. deprecated patterns – 避免将来维护的麻烦。
- Architectural judgment – 判断代码是否适配现有系统。
- Production‑failure experience – 预见真实使用中重要的边缘情况。
这些是 高级开发者技能,而非初级的。使用 AI 并不能消除所需的专业知识;它只是 将专业知识的应用位置转移。
初级与高级开发者的悖论
- 初级开发者 可以通过示例生成代码,但往往缺乏评估这些代码是否可投入生产的能力。
- 高级开发者 可能不需要大量基础代码生成,但他们最适合 评估和改进 AI 生成的输出。
“信任但要验证,验证应聚焦于特定的质量维度,而不是对每个实现细节的全面理解。”
我的审查流程(分钟级,而非小时级)
-
确定对生产重要的质量维度:
- Security
- Performance
- Error handling
- Edge‑case coverage
- Architectural fit
-
针对这些维度快速检查清单。
- 如果代码通过,我 信任实现细节,即使它们与我的个人风格不同。
- 如果未通过,我会:
- 修复具体问题(例如小的安全漏洞或性能调优)。
- 重新生成,当问题更根本时使用更好的提示。
-
记录任何非显而易见的内容:
- 为边缘情况处理或不寻常的架构选择添加注释。
- 这帮助未来的维护者(包括你自己)理解代码为何如此。
-
把 AI 生成的代码视为第一稿:
- 足以作为工作起点,极少能直接部署而不做修改。
- 这种心态避免 过度信任(未经审查直接部署)和 过度审查(全部重写)。
更大的视角
- 对 AI 生成代码的理解需求 不会消失;随着工具的进步和采纳的扩大,这一需求会更迫切。
- 组织需要制定 标准,明确 AI 生成代码的审查深度。
- 团队将形成 共享实践,无论代码来源如何,都能评估代码质量。
- 开发者必须培养 评估能力,这在当下比以往任何时候都更关键。
关键洞见: 理解 AI 生成的代码不是二元的。你不需要像对待自己从零写的代码那样深入每一行,但必须验证它 安全、性能良好、架构合理,并且能够正确处理边缘情况。这是一种不同的、更具评估性的理解——仍然是必不可少的。
讨论问题
您如何决定 AI 生成的代码是否已准备好投入生产?
您的审查流程是怎样的,哪些质量检查对您最重要?
阅读完整系列
- 第 1 部分: 什么是 Agentforce Vibes?
- 第 2 部分: 从 Prompt 到 UI – 构建您的第一个组件
- 第 3 部分: 您是否需要了解 AI‑生成的 Salesforce 代码?(您所在的页面)
标签: #salesforce #agentforce #ai #vibecoding #salesforcedevelopment #codequality #softwaredevelopment