我最近一直在阅读关于TDD等方面的文章,但我还不完全看好它。我制作了许多小型爱好项目(只有我一个人),我担心尝试使用TDD是否过度kill掉这些项目。虽然我曾经看到过像三名开发人员一样进行TDD的小型开源项目。(虽然我也看到了一些单人项目也使用TDD)
那么,TDD总是值得做的吗?在什么阈值下才有意义呢?
我最近一直在阅读关于TDD等方面的文章,但我还不完全看好它。我制作了许多小型爱好项目(只有我一个人),我担心尝试使用TDD是否过度kill掉这些项目。虽然我曾经看到过像三名开发人员一样进行TDD的小型开源项目。(虽然我也看到了一些单人项目也使用TDD)
那么,TDD总是值得做的吗?在什么阈值下才有意义呢?
小项目往往会在你意识不到的情况下成长为大项目,然后你会希望从TDD开始:)
在小型项目中,TDD表现出色。在小项目中遵循TDD通常更容易,并且这是练习并掌握遵循TDD所需的纪律的好时机。
根据我的经验,在一些阈值上,较大的项目往往放弃了TDD。(我并不认为这是一件好事)。
我认为,大型项目之所以放弃TDD,有以下几个原因:
根据我的个人经验,我可以说:
所有事情都有一个收益成本曲线。
尽管忽略了许多经常争议的TDD优点,但如果您的实现将经常更改,以至于拥有自动化测试套件的好处超过了初始开发可能涉及的任何额外成本,那么使用TDD是值得的。
我总是觉得像这样的问题很有趣。那另一种选择是什么呢?编写只编译而不运行以验证其正确性的代码吗?你会等到部署到生产环境才发现你的类根本无法工作吗?
如果我们从来没有一种叫做TDD的实践,或者在JUnit于1997年被发明之前,就没有代码测试了吗?当然还是有的。那么为什么现在有了测试框架帮助你进行测试后,它变得如此重要呢?
即使是在时间紧迫的小项目中,也不想等到生产环境才发现是否可行。写测试。
对于任何“小”的项目来说都不是必要的,但我定义的“小”是指少于一个类的项目。
过度吗?一点也不。除了主要的好处——编写可靠的代码,因为你考虑到了它可能出错的方式,采用测试驱动开发还能让你更加纪律严明,潜在地提高生产力。可以参考《程序员修炼之道》等任何一本务实的程序员书籍获取技巧和灵感。
我建议你在一个小项目中使用TDD,以便了解其工作原理。即使你发现它不适合你,这也是一个很好的学习经验。
我听到过我们当地敏捷小组的一位成员说,她认为在项目的最初阶段中并不需要使用TDD。那个时候你只是在草草画图,还不确定事物的形状。但是一旦你有了一些关于接口长什么样子的想法,就可以开始使用测试来帮助定义它们。
TDD和文档一样是提高代码清晰度的工具。这对其他人需要与你的代码一起工作的情况至关重要,但许多人发现当他们回顾自己的代码时,它也非常有用。你曾经有过一个业余项目,在离开一段时间后重新开始,发现一些奇怪的代码,然后想问:“我为什么写了那个?”
我和其他人在编写超过几行代码的任何项目时都使用TDD。
一旦你被测试的热情所感染,就很难不在任何项目中使用TDD。个人经验是,由于TDD的使用,我的代码质量提高了好几倍。
我相信对于大多数项目来说,这是值得的。测试驱动开发(TDD)及其相关的 回归测试 不仅可以在编写组件时确定其是否正常工作,而且还可以在引入更改和重构时进行测试。只要你的测试足够完整,就可以覆盖不常见/不可能出现的边缘情况,并生成/维护更可靠的代码。
在项目生命周期中向前推进,连续的测试周期将节省您手动重复测试的时间,并消除了重复测试时出现错误或不完整的明显机会。