没有银弹
2014-09-04
测试驱动开发是否是软件开发的银弹,答案是否定的,但是其作用是值得重视的。
现在的有一种趋势是弱化设计驱动,设计尽量简单,设计范围尽量减少。在“测试驱动”过程中重构,深化设计,验证结果。这是不是有效率呢?是不是符合软件开发实际呢?还是件需要思考的事情。
如何把设计和测试结合呢?是一步一步从最简单的方式推演,还是先“想全面”了再coding呢?哪个更好,恐怕不能简单地说前者优于后者,要看是否适合具体个体或是团体。
测试驱动的动机是整合“设计”到“测试”代码中,通过测试代码来设计,过程就是否定之否定,最后得到一个相对肯定结果,可以看作是一种“设计”的思路。如何驾驭这个过程就要看个人能力了,没有功力最后还是百搭。同样,如果用相反的思路呢?那就是“设计”驱动“测试”,通过设计过程中的use story来生成测试用例,即所谓的BDD行为驱动开发(见《实例化需求》)。我更欣赏BDD,感觉TDD是“反人类”的做法.
总之不是任何人,任何团队都适合测试驱动的。尽管如此,作者写的测试实战经验和工作习惯是值得借鉴和学习的。