简而言之,测试驱动开发就是:
先定义代码的行为,再定义行为的实现
2、为什么要进行测试驱动开发
2.1 需求与设计驱动
代码应该具有什么样的行为由什么决定:
由客户的需求决定(这里的客户可以是使用产品的最终客户,更多的情况下是其他的程序员)
用什么反映需求,用什么来验证需求是否被充分满足:
先写测试用例说白了就是先用100%可验证的方式表达出客户的需求,表达出“通过这样的验证,代码的实现是能充分满足客户需求的”,从而提升开发者的勇气,让开发者明确目标,而且目标是可以达到的,因为目标已经通过测试用例表达出来了,是一个完全看得见摸得着的东西。
需求可不可能有问题?
当然可能有问题,如果你发现在编码之前测试用例无法写,而你所考虑到的一切设计手段都用过了,也许问题出在需求那里,比如一个实现起来很困难的需求其实是可以通过另一个容易实现的需求来满足的,因此这个需求也许并不必要。测试驱动方法是一个在早期发现需求缺陷的手段。
设计可不可能有问题?
更可能有问题,测试用例无法写, 但需求是合理而且必须的情况下,也许需要检验一下你的设计是否合理,是否需要考虑用更简单的设计、更加松耦合紧内聚的设计来达到需求目标。一个紧耦合松内聚的设计,要对之进行测试无疑是很困难的。测试驱动方法是一个在早期发现设计缺陷的手段,是让开发者在编码前仔细推敲自己的设计是否足够、是否合理,从而减少编码已经大半才发现重大设计缺陷的几率。
测试用例是什么:
代码将长成的样子,通过这些用例,我们通过客户的视角来审视设计、实现是否合理。
需求决定一切,
在需求都没有考虑清楚的情况下就开始编码是不明智的。
2.2 最后期限(DeadLine)终结者
因为已经到了最后期限,所以没空作开发者测试了吗?
测试驱动开发的实践结果是:
测试驱动加快了软件开发的速度,因为它大大缩减了调试的时间
主要的开发时间不是耗费在编码上,而是debug。如果你经常运行测试,bug就可以更早的显露出来。如果只是距离你最后一次写测试代码不久,你就能知道是代码的哪一部分有问题。