Featured image of post 什么是 EARS 与 BDD?Spec-Driven Development (SDD) 规格驱动开发,让你在 Vibe Coding 时让 AI 秒懂你的需求

什么是 EARS 与 BDD?Spec-Driven Development (SDD) 规格驱动开发,让你在 Vibe Coding 时让 AI 秒懂你的需求

还在跟 AI 鸡同鸭讲吗?本文教你如何结合 EARS 需求语法与 BDD 行为规格驱动开发,打造「严谨的 Prompt」,让 AI 精准产出高质量的代码!

你是否曾在 Vibe Coding 开发过程中,发现 AI 产出的代码逻辑漏洞百出,改到怀疑人生?

在传统开发里, Spec 就是正义。但在与 AI 协作时,我们更像是「导演」。

想要让那个很有才华但偶尔会「发疯」的 AI 演员演出一场好戏,你需要的是两套强大的工具:EARS(剧本逻辑)BDD(验收剧照)

EARS:把需求变成「逻辑积木」

你一定遇过这种 PM,需求写着:「系统要好用一点」、「处理速度要快」。这在写代码时根本是灾难。

EARS (Easy Approach to Requirements Syntax) 说白了,就是要把这些「模糊的形容词」转化为「精准的指令」。

EARS 就像是顶级的 Prompt Engineering,它强迫你把话讲得逻辑封闭。主要的 5 种句型,让你随时都能「锁死」需求边界:

类型 说明
Ubiquitous (通用型) 系统必须...(就像呼吸一样,随时都要遵守)。
Event-driven (事件驱动型) 当 [事件发生] 时,系统必须...
Unwanted Behavior (异常处理型) 如果 [坏事发生] 了,系统必须...(这就是 Error Handling 的灵魂)。
State-driven (状态驱动型) 当处于 [某种状态] 时,系统必须...
Optional Feature (选配型) 当有 [特殊功能] 时,系统必须...

EARS 帮你立下严谨的规矩

让 AI 没办法在逻辑上「一本正经地胡说八道」。

BDD:把测试变成「电影剧本」

如果 EARS 是严谨的合约,那 BDD (Behavior Driven Development) 就是「有血有肉的故事」。它不测 a == b,它测的是「使用者觉得发生了什么事」。

BDD 用的语法叫 Gherkin(小黄瓜,就是要清脆爽口!),核心三部曲如下:

语法 说明
🎬 Given (背景) 设定开拍前的场景(例如:口袋里有 100 块)。
⚡ When (动作) 导演喊 Action 的那一刻(例如:点了一份大辣鱿鱼)。
✅ Then (结果) 观众看到的结局(例如:拿到香喷喷的鱿鱼,钱包少了 60 块)。

透过这种「说故事」的方式,即便不是工程师也能跟我们沟通,而 AI 也能透过这些「实例」理解你的真正意图。

EARS vs BDD 的差异是什么?

这两者各司其职,结合起来才是真正的「无敌」。

特性 EARS (需求语法) BDD (行为驱动)
核心精神 精准定义 (消除歧义) 共识与验证 (说故事)
像是在写… 法律条文 电影剧本
主要听众 PM、架构师、规则制定者 工程师、QA、AI 助手
解决痛点 「你做的跟我想的不一样!」 「这功能逻辑对了,但没法用!」

简单来说:EARS 帮你定规矩,BDD 帮你确认结果。

EARS 高阶运用:Vibe Coding 实战

我们在 Prompt 里直接塞进 EARS 的规则和 BDD 的剧本让 AI 开发。

你可以试试看开发「电子钱包扣款」时这样下指令:

# 任务:请帮我实作扣款 API

## EARS 逻辑 (请严格遵守):
- [Event-driven]: 当收到请求,必须验证余额。
- [Unwanted]: 如果余额不足,回传 400 错误码 'INSUFFICIENT_FUNDS'。
- [State-driven]: 当钱包处于 'Frozen' 状态,拒绝所有扣款。

## BDD 验收剧本 (作为 Jest 测试用):
Scenario: 余额不足扣款失败
  Given 用户余额为 50 元
  When 收到扣款 100 元的请求
  Then API 应回传 HTTP 400
  And 错误代码应为 'INSUFFICIENT_FUNDS'

你试试看丢给 AI,产出来的 Code 不会偏离目标太多!

总结

不管是在日常开发还是 Vibe Coding,EARS 与 BDD 都是提升效率的神器。

EARS 帮你立下严谨的规矩,BDD 帮你确认演出的结果。

All rights reserved,未經允許不得隨意轉載
Built with Hugo
主题 StackJimmy 设计