采用TDD的方式,我在编写的过程中,发现IDE提示编译错误,我这个时候要不要先去创建一些类或方法,让这些编译错误消失?
回答这个问题前,先来回顾一下TDD的三顶帽子:
- 红,添加一个测试
- 绿,让测试通过
- 蓝,重构代码(包含功能代码和测试代码)
我常常会开玩笑说:做TDD其实是在不断切换三顶帽子,先戴红帽子,再戴绿帽子,然后戴蓝帽子。用帽子来打比方,借助了 六顶思考帽[1] 的帽子隐喻。当我们带上一种帽子的时候,就应该清楚自己应该做什么事情。
TDD借助这些隐喻提倡的是SoC(Seperation of Concerns[2])的思想,每次只聚焦在一件事情上。大量心理学研究证明,人们在足够专注的时候,有可能进入心流状态,而进入心流状态后生产力会大大提升。很多职场专业人士也都在提倡任务排优先级,要排除干扰,不被打断,保持专注,这样才能更高效率的产出。TDD的三顶帽子其实是在帮助我们专注聚焦。
我们在写测试的时候,戴的是红帽子,这个时候我们应该关注以下几点(按倒逼驱动的方式):
- 结果是什么,如何验收?(定义验收标准)
- 做了什么事情导致了这样的结果?(定义行为规范)
- 什么场景下做的事情?(定义行为条件)
当我们做完了上面的事情之后,可以摘下红帽子,然后换上绿色帽子,带上绿色帽子,我们应该关注一点:
- 如何快速让这一个测试通过?
回到我们的问题,如果在编写测试的时候,遇到类不存在,就去创建类,遇到方法不存在,就去创建方法。其实是在不断做红、绿切换,此时我们的关注点会被干扰打乱,因为解决编译错误,比如创建不存在的类和方法其实是在写功能代码。
假如你在写文章的时候,旁边编辑的关于文章发稿的各种问题,你会有什么感受?再比如,你让单核CPU同时干了两个文件复制任务,眼看着是同时进行,实际上CPU在不断切换执行,而切换本身就是一种资源损耗。
所以,我的建议是写测试过程中,戴着红帽子就专注干红帽子的事情,减少不必要的切换导致的注意力分散,另外你在测试和实现代码不断跳来跳去也是一种思维干扰。
网友评论