读书笔记:测试驱动开发
Test-Driven Development: By Example
核心观点:
- 是什么(What):
- 测试驱动开发是一种以测试先行的开发方法:先写一个失败的测试,再写最少代码让它通过,最后重构代码(补测试,调整代码交替进行)
- 核心不是
补测试,而是用测试驱动设计
- 为什么(Why):
- 其价值在于把需求澄清、接口设计、回归验证和代码重构压缩进一个
短反馈循环里 - 测试先行会迫使开发者先想清楚代码该对外表现什么行为,以及设计是否过于复杂
- 其价值在于把需求澄清、接口设计、回归验证和代码重构压缩进一个
- 怎么做(How):
- 实践上遵循
红灯-绿灯-重构的小步节奏: - 先定义一个函数或功能入口,不急着展开实现
- 再根据当前最先想到的输入输出补一个测试,让它先失败
- 然后只补足能让这条测试通过的最少实现
- 接着继续补下一个测试、继续修正实现,如此循环推进
- 该做:围绕行为写清晰、可维护的测试
- 不该做:一开始就把细节铺满,或把测试写成实现细节的镜像
- 实践上遵循
启发点(关键洞察):
- 测试不只是验收工具,更是设计工具:先写测试会逼着自己先从使用者视角思考接口,从而减少
代码能跑但不好用的设计 - 好的开发节奏不是一次写对,而是快速暴露错误、快速修正。TDD 提醒开发人员把
大块实现拆成可验证的小步前进 - 重构之所以敢做,是因为有测试兜底。测试的真正价值不止在发现 bug,更在于降低持续演进代码的心理成本和实际风险
行动:
- 写新功能时,先尝试为核心行为补一个失败测试,再开始实现,至少在小模块里刻意练习
红灯-绿灯-重构 - 回顾近期写过的代码,挑一个最容易失控的模块,用
先写测试再重构的方式重做一次,体会测试如何影响设计 - 写测试时优先描述
外部行为和边界条件,避免让测试绑定过多实现细节,降低后续重构阻力
金句:
- Clean code that works is the goal of Test-Driven Development.
- Test-driven development is a way of managing fear during programming.
- Write a failing automated test before you write any code.
评论