读
TDD
的总结
读完TDD(测试驱动开发),发现其中主要就是在反复说了这么两件事情(也就是两个简单的规则):一、在写任何代码之前,写一个会失败的自动测试程序,即单元测试;二、消除重复设计,优化设计结构,即重构。整本书都围绕着这两个规则来进行说明,告诉读者到底要如何这样做?又如何分阶段应用这些规则?这两条简单的规则可以运用多深?
第一部分通过一个简单的实例来告诉读者如何使用TDD,如何反复通过“不可运行/可运行/重构/不可运行/可运行/重构”来进行开发;第二部分告诉读者如何使用单元测试,怎样组织单元测试;第三部分则是将TDD分解成较小的步骤来进行详细说明,根据我对本书的理解,我认为需要完全将TDD运用到日常的开发行为中,则要按照以下非常细小的步骤进行:
1.
获得任务。即项目经理安排的任务。任务往往不止一项。将它们写入周工作计划表或者月工作计划表。
2.
选择任务。每天开始工作之前,将今天将要解决的问题写入工作计划列表。并选择自己最有把握完成的任务作为当前任务。
3.
分析并分解任务。将当前任务分解成一个个相对简单的问题,分解的问题最好是能在十多分钟之内能完成,并将它们写入工作列表。如:若要实现多币种相加,则可以分解为:实现相同币种之间的相加,不同币种之间的互换,最后才能实现不同币种之间的相加。
4.
写测试列表。将分解后的问题所对应的测试写入测试列表。
5.
选择测试。从测试列表中选择自己认为最有把握实现的一项。如:“同币种相加”对我来说是最有把握实现的一项,因此我最先来实现它,即先从它的测试程序开始编写。
6.
编写测试数据。写一个容易让人理解的必须实现的测试数据列表,尽量使用显然数据。如:用
String
表示
IP
地址
"255.255.255.255"
转换为
int
,在我们写测试数据时应这样写:
(255 << 24) + (255 << 16) + (255 << 8) + 255
,而不是写“
-1
”。
7.
编写测试。选择一项最容易让测试通过的测试数据加入测试方法。断言优先,然后加入为了让断言通过编译的一切准备条件。
8.
运行测试,不可运行状态。
9.
编写方法注释,把所有想到的该方法要实现的功能写上。
10.
编写功能代码,使之达到可运行状态。
11.
重构,消除重复设计。
12.
往测试方法中增加一个新的小测试。
13.
运行测试,不可运行状态。
14.
修改功能代码,使之达到可运行状态。
15.
重构。消除重复设计。
16.
重复
12-15
。
17.
当无论如何也不能让该测试通过的时候,认真想一想是不是哪里出大问题了,如果实在想不出来的话,就将现有代码扔掉,重新开始。
18.
所有测试都运行通过之后,仔细检查所有代码,看是否还有值得重构的地方,并重构。
19.
提交
(check in)
。
20.
再选择测试列表中的下一个测试。重复以上步骤。
21.
当一天的工作结束时,若有某个任务未完成,则留下一个不完整测试,以便于次日能迅速回忆起当时写该代码时的想法,并接着写下去。