在接触TDD开发之前,我们在实验室进行平台开发,或者开发软件满足通信协议设计需求时,都是要写很长的需求文档,将所有细节想清楚。然后为了满足各个需求,开始进行程序开发设计。开发完成之后,再进行功能测试,书写测试报告,并对测试结果进行分析。这种开发属于传统“瀑布式”开发,并且时需求驱动开发,而不是测试驱动开发。这种开发方式的缺点比较突出,因此开始学习TDD开发方式。
1. TDD开发学习
传统开发的劣势
- 在不想清楚细节的情况下,直接开发
- 需求不明确时,协商讨论花费时间
- 测试出现问题,调试占据很长时间
- 代码质量不高,需要进行代码重构等,但是重构难度大,测试工作量大。
TDD开发方式
- 先分解任务
- 列Example,用实例化需求,澄清需求细节
- 写测试,值关注需求,程序的输入输出,不关心中间过程
- 写实现,不考虑别的需求,用最简单的方式满足当前这个小需求
- 重构,用手法消除代码里的坏味道
- 写完,手动测试一下,基本没什么问题,有问题补个用例,修复
- 转测试,小问题,补用例,修复
含义
- Task-Driven Development
- Test First Development
- Test-Driven Design
好处
- 效率:
- 提前确认需求,减少开发中的中断和等待
- 小步快走,节省调试时间
- 质量:
- 高测试覆盖率
- 自动回归测试
2. 如何做TDD
做设计
- 快速新增一个测试
- 运行所有的测试,发现新增的测试时失败的
- 做一些小小的改动,尽快使测试可以运行
- 运行所有测试,并且全部通过
- 重构代码,以消除重复设计等