通过学习TDD以及三个月来杨博的多次言传身教和他写的一些文档,得到了下面这一套工作流程:
1. 获得任务。即项目经理安排的任务。任务往往不止一项。将它们写入周工作计划表或者月工作计划表。
2. 选择任务。每天开始工作之前,将今天将要完成的任务写入工作计划列表。并选择自己最有把握完成的任务作为当前任务。
3. 分析并分解任务。将当前任务分解成一个个相对简单的问题,分解的问题最好是能在短时间之内能完成,并将它们写入工作列表。
4. 写测试列表。选择一个简单的问题(此时可以为该方法取名了),并将所要完成的所有功能写入工作列表。这就是方法注释中的功能注释。并且将每一项功能所对应的单元测试记录下来,写入测试列表。
5. 选择测试。从测试列表中选择那个具有指导意义而且自己认为最有把握实现的一项。如:一个数值对象类,也许对我来说,实现equals()方法是最有把握的,那我就可以选择它作为我的当前测试。
6. 编写测试数据。写一个容易让人理解的必须实现的测试数据列表,尽量使用显然数据。如:用 String 表示 IP 地址 "255.255.255.255" 转换为 int ,在我们写测试数据时应这样写: (255 << 24) + (255 << 16) + (255 << 8) + 255 ,而不应该写成“ -1 ”。
7. 编写测试。选择一项最容易让测试通过的测试数据加入测试方法。如:实现equals()方法中“比较两个不是同类的对象返回false”的测试是最容易实现的,我就可以将它加入是最容易实现的,那就先实现它吧!断言优先,然后加入为了让断言通过编译的一切准备条件。
8. 运行测试,不可运行状态。
9. 编写功能代码,使之达到可运行状态。
10. 重构,消除重复设计。
11. 往测试方法中增加一个新的小测试。
12. 运行测试,不可运行状态。
13. 修改功能代码,使之达到可运行状态。
14. 重构。消除重复设计。
15. 重复 12-15 。
16. 当无论如何也不能让该测试通过的时候,认真想一想是不是哪里出大问题了,如果实在想不出来的话,就将现有代码扔掉,重新开始。
17. 所有测试都运行通过之后,仔细检查所有代码,看是否还有值得重构的地方,并重构。
18. 提交 (check in) 。
19. 再选择测试列表中的下一个测试。重复以上步骤。
20. 当要离开工作的时间比较久时,若有某个任务未完成,则留下一个不完整测试,以便于回到工作岗位时能迅速回忆起当时写该代码时的想法,并接着写下去。
|