Type something to search...

BDD、TDD?还是SDD

  • “AI 时代的 BDD”,其实就是“写清楚你想要什么(Spec/Prompt),然后让 AI 给你写个带有测试的实现”,即是SDD。
  • TDD(测试驱动开发)和 BDD(行为驱动开发)经常被放在一起讨论,甚至 BDD 被认为是 TDD 的进化版,但它们解决的是完全不同维度的问题
  • 简单的一句话总结:TDD 关注“把事情做对”(Do the thing right),而 BDD 关注“做正确的事”(Do the right thing)。

建议:双剑合璧

最好的开发流通常是 外层 BDD + 内层 TDD

  1. 外层 (BDD):用 Gherkin 描述“用户登录”这个大功能。(保证做的是正确的事)
  2. 红 (Fail):运行 BDD 测试,理所当然地失败了。
  3. 内层 (TDD):为了让 BDD 的第一步通过(比如“验证邮箱格式”),开发者切换到 TDD 模式,写一个小的单元测试来验证 isValidEmail 函数。
  4. 循环:通过一个个小的 TDD 循环,最终点亮外层那个大的 BDD 绿灯。 对于你现在想用 AI 辅助开发: 建议先从 BDD 入手。因为 AI 最容易犯的错就是“听不懂人话”或者“不仅没实现功能还自己造了孽”。用 Gherkin 这种强逻辑语言约束 AI,是性价比最高的手段。

1. 外层(Outer Loop):BDD —— 验收测试

这个圈子很大,跑一圈可能需要几十分钟甚至几小时。

  • 关注点“这个功能做完了吗?”
  • 语言:Gherkin (Given/When/Then)。
  • 粒度:粗。比如“用户成功购买商品”。这一句话背后可能包含几十个代码函数。
  • 状态:当把所有的细节都填满后,它才会变成🟢(通过)。

2. 内层(Inner Loop):TDD —— 单元测试

这个圈子很小,跑一圈只需要几毫秒到几秒。

  • 关注点“这个函数算对了吗?”
  • 语言:代码 (assert x == 1)。
  • 粒度:极细。比如“计算价格函数:输入100和8折,应该输出80”。
  • 状态:会在这里飞快地循环:写个小测试🔴 -> 写代码🟢 -> 重构 -> 下一个小测试🔴…

以下是详细的优劣势对比:

1. TDD (Test-Driven Development) —— “开发者的显微镜”

TDD 是程序员的内功。它的核心视角是代码实现 (Implementation)。 流程:先写一个失败的单元测试 -> 写最少的代码通过它 -> 重构。

🟢 优势 (Pros)🔴 劣势 (Cons)
代码质量极高:因为先写测试,你的代码天生就是可测试、低耦合的(不然测试很难写)。学习曲线陡峭:强迫程序员改变思维习惯非常痛苦,很多人坚持不下来。
安全重构:有了全覆盖的测试网,你可以随意修改代码结构而不怕改坏功能,心理安全感极强。过度关注细节:容易陷入“为了测试而测试”的陷阱,导致测试代码比业务代码还多,且一旦重构内部逻辑,测试就会把你报错报死(脆弱性)。
即时反馈:改一行代码,1秒钟就知道对不对,调试时间大幅减少。只见树木不见林:哪怕你单元测试全绿,可能拼起来的功能根本不是用户想要的。TDD 不能防止你“完美地实现了一个错误的功能”。

2. BDD (Behavior-Driven Development) —— “团队的通用语”

BDD 是 TDD 的外层包装。它的核心视角是业务价值 (Business Value)。 流程:先写 Gherkin 剧本 -> 转化为自动化测试 -> (内部可能包含 TDD 循环) 实现功能。

🟢 优势 (Pros)🔴 劣势 (Cons)
消除沟通鸿沟:最大的价值在于它不仅是测试,更是需求文档。产品经理、测试和开发都能看懂 Given/When/Then,彻底消灭“我以为你是这个意思”的扯皮。开发成本更高:维护 Gherkin 文件、编写“胶水代码”(Step Definitions)来连接自然语言和代码,这都是额外的工作量。
活的文档:需求变更了,必须改 Gherkin,否则测试跑不通。这保证了文档和代码永远同步,不会出现“文档是三年前的”这种情况。运行速度慢:BDD 通常涉及端到端(E2E)或集成测试,跑一次可能几分钟甚至几十分钟,不像 TDD 单元测试几毫秒出结果。
专注于用户:强迫开发人员从“用户怎么用”开始思考,而不是一上来就想数据库怎么建。杀鸡焉用牛刀:对于简单的功能或纯底层库(如一个数学计算函数),写冗长的 Gherkin 显得非常繁琐且多余。

3. 该怎么选?(结合 AI 编程)

在 AI 辅助编程时代,这两个方法的“门槛”都变低了,因为脏活累活 AI 都能干。

如果你有以下情况,请侧重 TDD

  • 你在开发底层库或算法:比如写一个数据解析器、加密算法。这里没有复杂的“用户行为”,更多是输入输出的逻辑正确性。
  • 你需要极致的代码结构:希望 AI 帮你写出解耦优秀的架构。
  • 推荐做法:让 AI 生成 Jest/Pytest 单元测试,然后一一实现。

如果你有以下情况,请侧重 BDD

  • 你在开发面向用户的 App/Web:涉及点击按钮、页面跳转、表单提交。
  • 需求很复杂,容易做偏:比如“信用卡积分兑换规则”,规则稍微错一点就是业务事故。
  • 你需要向老板/客户交付:你可以直接把运行变绿的 Gherkin 报告甩给他们看,“看,你们要的功能都通了”。
  • 推荐做法:使用我们讨论过的 Gherkin 语法,让 AI 能够理解宏观业务再动手。
Tags :
Share :

Related Posts

AI、就业、生产力高度发展、UBI、未来生活

AI与社会演变 一、 社会演变的几个可能阶段 我们要意识到,AI革命与工业革命最大的不同在于速度和范围(它同时冲击蓝领和白领)。第一阶段:剧烈的动荡与分化(未来5-10年) “K型”社会加剧: 掌握AI工具的人、资本持有者(算力、数据、模型所有者)财富将指数级增长;而被替代的初中级脑力劳动者(程序员、设计、文员、翻译等)将面临收

read more

AI UI

Design Prompts 风格网站示例 Godly 顶级设计示例 [frontend-design](https://github.com/anthropics/claude-code/blob/main/plugins/frontend-design/ski

read more

AI时代,不同框架开发速度的差别还是那么明显吗?

答案是:是的,差别依然明显,甚至在某些维度上,差距被 AI 进一步放大了。 虽然 AI解决了“打字速度”和“API 查阅”的问题,但它并没有抹平**框架架构(Architecture)和生态(Ecosystem)**带来的效率差异。 以下是为什么在 AI 时代,选择 Laravel/Node.js 依然比 Java/Go 开发速度快的几个底层逻辑: 1. “上下文窗口”与“

read more

OAuth

IDP (Identity Provider),中文通常翻译为 “身份提供商” 或 “认证提供商” RP (Relying Party) —— 依赖方(或叫 SP - Service Provider) OAuth= Open Authentication OAuth被视为“Identity as a Service” (IDaaS),即 “身份即服务”OAuth登录时返

read more

Bench:Coding 和Agentic的区别

1. 什么是 Coding Index(纯代码能力)? 定义: 通常指模型对编程语言语法、算法、特定API用法的掌握程度。 得分高,意味着:单点解决能力强: 你给它一个具体的函数需求(例如:“用Python写一个快速排序”或“写一个React组件,包含下拉刷新功能”),它能写出语法完美、运行效率高、Bug少的代码。 知识库丰富: 它熟知各种库(

read more

不同厂牌的agent skill支持实现

通用 SkillsMP Browse Extensions | Gemini CLI

read more

OpenCode利用OAuth使用Claude Code额度的技术途径

OpenCode 这种方式并不属于法律意义上的“破解”,而是一种“技术绕道(Reverse Engineering/Spoofing)”。 1. 为什么能用 Claude Code 的额度? 这是因为 OpenCode 在技术上**模拟(Spoofing)**了 Anthropic 官方工具 claude-code 的身份。身份伪装:Anthropic 最近推出了

read more

中国大陆“百元内+百兆峰值带宽”VPS 方案探索

来源: microThinker探索到了小众选项,但不符合事实=千问、秘塔没找到汇总阿里云 轻量应用服务器,带宽波动20-200M 30-70元/年 459一年(非新人) [官网](https://www.aliyun.com/daily-

read more

支持多厂牌AI Agent的应用

AionUi Conductor (Gemini 生态深度集成)

read more

各家AI编程订阅方案比较

国产 | 厂商与方案 | 月费(人民币)

read more

爬虫可能违反的法律

一、民事责任及行业自治规范 | 情形 | 行为描述 | 法律依据补充 | | :-------- | :------------

read more

节点标记和订阅

第三步:存储分发 (阿里云 OSS 香港) 优劣:  花费: 极低。如果你只存这一个几百 KB 的文件,加上你自己几台设备每天更新几次,一个月的流量费大概 ¥0.1 - ¥0.5 元。  优势:    *   免备案: 香港节点不需要你有备案域名。     *   永不被墙: 阿里云的域名在国内属于白名单。

read more

用影刀指令通过ODBC连接MySQL

ODBC 是 开放式数据库连接(Open Database Connectivity)的缩写。 允许应用程序通过一套统一的接口访问各种不同的数据库系统(无论是 MySQL、SQL Server、还是 Oracle)。 下载地址 ODBC需要安装和影刀<mark style=

read more

开发功能用哪个工作流

affaan-m/everything-claude-code obra/superpowers anthropics/claude-code/.../feature-dev 假设一个具体的任务:在 Toggl(时间追踪工具)的 Dashboard 上加一个“日内行为搜索框”,搜一下今天下午 2 点我干了啥。 以下是使用不同工具时,直观体验和 AI 行为的区别: 第一类:流程

read more

跨厂商搭配agent与模型会有负面效果的原因

1. 指令格式微调(Format Tuning)——“方言”不通现象: Claude:被训练成对 XML 标签(如 <tool_code>)极度敏感,甚至其“肌肉记忆”就是看到 broken_code 就会触发特定的修复逻辑。 Gemini/GPT:更倾向于标准的 JSON Schema 或特定的函数调

read more

自动化工具比较

底层工具对比 | 特性 | Selenium | Puppeteer | Playwright | Scrapy | | :--------- | :----------------- | :---------------------- | :------------------

read more

跨厂牌Agent上下文共享工具

内存/记忆管理类 (Memory Management): Mem0 (原 Embedchain): 专注于为 Agent 提供“个性化记忆”,记住用户的偏好、事实和历史。 Letta (原 MemGPT): 专注于长短期记忆架构,让 Agent 拥有类似操作系统的内存管理能力。**观测/调试类 (Observability & Traci

read more