我最近一直在阅读关于TDD等方面的文章,但我还不完全看好它。我制作了许多小型爱好项目(只有我一个人),我担心尝试使用TDD是否过度kill掉这些项目。虽然我曾经看到过像三名开发人员一样进行TDD的小型开源项目。(虽然我也看到了一些单人项目也使用TDD)
那么,TDD总是值得做的吗?在什么阈值下才有意义呢?
我最近一直在阅读关于TDD等方面的文章,但我还不完全看好它。我制作了许多小型爱好项目(只有我一个人),我担心尝试使用TDD是否过度kill掉这些项目。虽然我曾经看到过像三名开发人员一样进行TDD的小型开源项目。(虽然我也看到了一些单人项目也使用TDD)
那么,TDD总是值得做的吗?在什么阈值下才有意义呢?
其实,人数并不是决定TDD是否适用的关键因素(至少您的问题似乎是这样的),而更多的是项目的规模。
TDD的优点在于,你所开发的所有代码都将得到单元测试。这样,在以后进行重构时,你就可以省去很多麻烦。当然,只有在项目规模较大时才真正需要这样做。
当你意识到写代码可能会出现你没有预料到的重要错误时,TDD就变得很有意义。
我认为TDD很值得,不管规模大小(即使只有一个类 - 因为先编写测试可以帮助您设计出更合理的设计)。
我觉得可能不必要的地方是当您在构建一个项目时不确定您想要什么,并且您不太可能关心可维护性时。我发现在工作中没有任何符合这种情况的项目,但我发现偶尔会开发个人项目,情况就是如此。在这些情况下,我通常正在学习新框架,从一开始就不知道自己在做什么,因此我的测试更有可能由于错误原因而随着时间而失败,从而降低其价值。
但是,我也承认不使用TDD会影响我的可维护性 - 一旦我知道自己在做什么,我会迅速退回到红/绿/重构。
您已经有很多答案了。虽然您的问题已经几年了,但是请允许我加入:是的-进行TDD!测试您的代码!聪明地处理它。
TDD和BDD最好在Hoare逻辑前提条件和后置条件(以及其他形式的代码正确性布尔断言)的背景下理解。我曾经使用过的最好应用程序是EiffelStudio中的Eiffel。
Code-Fail-Correct模型还好,直到开始衡量开发人员和QA人员花费在纠正错误上的时间。
您也可能会在TDD和BDD方面犯大错。 TDD最终可能会生成大量的代码膨胀,其中您的测试代码比生产代码更大且更难维护。 BDD-实际上主要是DbC-也可能被误解、误用和管理不当,其自身的复杂性、膨胀和成本开销也同样存在。
最深刻的需求是一种语言规范、编译器、IDE和测试系统,其中TDD + BDD(又名DbC)是内置的,并且所有正确的部分都放在正确的位置,而不是作为TDD + BDD伪装的螺栓式Frankenstein垃圾。
我觉得很有趣的是看程序员们试图将TDD和BDD的常见实现方式塞进那些根本没有设计契约概念的主流语言中,他们总是通过这种语言规范/编译器/IDE的视角来解释TDD + BDD,好像他们真正理解了这个东西。但事实上,他们从未真正看到这种做法是多么愚蠢和扭曲。
TDD + BDD (DbC)就像其他技术和主题一样会被扭曲。例如:不要试图使用Java作为理解面向对象理论的镜头。对于C++或其他基于C的语言也是如此。试图使用一种语言来学习OO就像认为了解你的计算器会让你理解微积分一样。
我所知道的唯一一个从TDD和BDD的理论理解出发构建语言规范、编译器、IDE和测试系统的语言是Eiffel和EiffelStudio。我已经使用它20年了。我已经走过这条路很多次了。看到你们在这些(对我来说)清晰明了如春天无云的话题上苦苦挣扎和扭曲,让我感到沮丧。