读书笔记:测试驱动开发

2020-07-241 引用

Test-Driven Development: By Example

https://book.douban.com/subject/25735501

核心观点:

  • 是什么(What):
    • 测试驱动开发是一种以测试先行的开发方法:先写一个失败的测试,再写最少代码让它通过,最后重构代码(补测试,调整代码交替进行)
    • 核心不是补测试,而是用测试驱动设计
  • 为什么(Why):
    • 其价值在于把需求澄清、接口设计、回归验证和代码重构压缩进一个短反馈循环
    • 测试先行会迫使开发者先想清楚代码该对外表现什么行为,以及设计是否过于复杂
  • 怎么做(How):
    • 实践上遵循红灯-绿灯-重构的小步节奏:
    • 先定义一个函数或功能入口,不急着展开实现
    • 再根据当前最先想到的输入输出补一个测试,让它先失败
    • 然后只补足能让这条测试通过的最少实现
    • 接着继续补下一个测试、继续修正实现,如此循环推进
    • 该做:围绕行为写清晰、可维护的测试
    • 不该做:一开始就把细节铺满,或把测试写成实现细节的镜像

启发点(关键洞察):

  1. 测试不只是验收工具,更是设计工具:先写测试会逼着自己先从使用者视角思考接口,从而减少代码能跑但不好用的设计
  2. 好的开发节奏不是一次写对,而是快速暴露错误、快速修正。TDD 提醒开发人员把大块实现拆成可验证的小步前进
  3. 重构之所以敢做,是因为有测试兜底。测试的真正价值不止在发现 bug,更在于降低持续演进代码的心理成本和实际风险

行动:

  1. 写新功能时,先尝试为核心行为补一个失败测试,再开始实现,至少在小模块里刻意练习 红灯-绿灯-重构
  2. 回顾近期写过的代码,挑一个最容易失控的模块,用先写测试再重构的方式重做一次,体会测试如何影响设计
  3. 写测试时优先描述外部行为边界条件,避免让测试绑定过多实现细节,降低后续重构阻力

金句:

  1. Clean code that works is the goal of Test-Driven Development.
  2. Test-driven development is a way of managing fear during programming.
  3. Write a failing automated test before you write any code.
  1. https://www.oreilly.com/library/view/test-driven-development/0321146530/
  2. https://martinfowler.com/articles/exploring-gen-ai/tdd-in-the-agent-loop.html

评论