在我看来,您所描述的工作流程并不是TDD 的精神。
肯特·贝克斯(Kent Becks)在亚马逊上写的书的提要说:
很简单,测试驱动的开发旨在消除对应用程序开发的恐惧。尽管有些恐惧是健康的(通常被视为告诉程序员“当心!”的良心),但作者认为,恐惧的副产品包括无法吸收建设性批评的暂定,脾气暴躁和缺乏沟通的程序员。当编程团队购买TDD时,他们会立即看到积极的结果。他们消除了工作中的恐惧感,并且更有能力应对面临的困难挑战。TDD消除了暂定特征,它教程序员进行交流,并鼓励团队成员进行批评。但是,即使作者也承认,脾气暴躁也必须单独解决!简而言之,TDD背后的前提是应该不断测试和重构代码。
实用TDD
形式化的自动化测试,尤其是单元测试,每个类的每个方法都像反模式一样糟糕,什么也没测试。有一个平衡。您是否正在为每种setXXX/getXXX
方法编写单元测试,它们也是方法!
测试还可以帮助节省时间和金钱,但是不要忘记,它们花费了时间和金钱来开发,而且它们是代码,因此它们花费了时间和金钱进行维护。如果他们因缺乏维护而萎缩,那么他们承担的责任多于收益。
像这样的所有事物,都有一个平衡,只有你自己才能定义。任何一种教条都可能更正确。
好的度量标准是对业务逻辑至关重要的代码,并且可以根据不断变化的需求进行频繁修改。这些东西需要自动化的正式测试,这将是巨大的投资回报。
您将很难找到许多以这种方式工作的专业商店。花钱测试所有实际上不会在执行简单的烟雾测试后就改变的东西,在商业上是没有意义的。编写正式的.getXXX/.setXXX
方法的自动化单元测试是一个很好的例子,完全浪费时间。
自从有人指出程序测试可以令人信服地表明存在错误,但是永远不能证明它们不存在以来,已经过去了二十年。在认真引用了这一广为人知的言论后,软件工程师回到了日常工作中,继续完善他的测试策略,就像昔日的炼金术士一样,继续完善他的金相纯化。
- Edsger W. Djikstra。(写于1988年,所以现在已经接近4.5年了。)
另请参阅此答案。