TDD 也就是一个工具
此文灵感来源于 @wan9yu 王宇的关于ACT的介绍文章, 常常谈起敏捷实践说道Scrum, 更注重于过程和实践,什么时候开什么会做什么事,但是常常忘记这些这些日常的事情背后的初心,混淆目标和过程。发现自己也有这么一段时间。 用TDD 举例子吧。经常讨论TDD,会围绕下面3个问题: 什么是TDD? 为什么要用它? 怎么做? 但是很少来问TDD 怎么算是做好了?而做好才是目标。 好多文章已经尝试回答前面三个问题,但是后面的问题却很少探讨。
-> 从测试用例设计来看,需求或者功能代码是不是被完全测到?这个是目标
而怎么构造测试用例,使的测试用例不重不漏。穷举, 等价类划分,决策树,组合 , 边界值等这些都是手段。
-> 从测试代码的来看,代码是不是好维护?测试是不是组织的好,测试用例名字达意,测试代码是不是清晰?这个是追求的目标。
而那些测试是不是分组,测试用例用什么语言写,用什么框架, 是不是结构化setup/triger/assert 这都是具体方法和工具。
-> 从测试驱动代码来看,是不是构造出更清晰的代码,更容易测试的代码?这个是目标。
而那些先写测试后写方法,还是先写代码后写测试,那个是方法和过程。
-> 测试运行来看,反馈是不是快有效(测试对应的运行快,报错准,而且稳定)。 这个是目标
测试是不是有用mock 解耦,如何移除数据库依赖, 测试之间如何解耦依赖,与环境之间耦合,本地运行,CI运行,这些都是方法工具,而不是目标。
我们定义好目标, 小粒度的目标, 然后去衡量这些目标,来判断我们当前的情况, 然后去发现问题改进,而不是追求这些方法工具本身,沉迷其中,忘记初心。那么就会迷失方向,开始折腾。
现在来考察TDD,发现追求的目标(测试分解,干净的代码,易维,反馈)与TDD本身没有多大关系,只是恰好TDD可以帮助我达成上面的目标,所以我采用TDD。 如果你有更好的方法可以达到上面的目标,那么当然愿意切换到新的工具上试试。 所谓的不管白猫黑猫抓住老鼠就好好猫:). 所以说TDD是就是一个工具。