对于小型项目,TDD是否过度杀伤?

时间:2010-02-22 22:55:11

标签: language-agnostic tdd methodology

我最近一直在阅读关于TDD的内容,而且我还没有完全卖掉它......我做了很多小的爱好项目(只是我)而且我担心如果想做TDD对这样的事情来说太过分了。虽然我已经看到过3个开发人员做TDD的小型开源项目。 (虽然我已经看到一些也做TDD的单人项目)

TDD总是一件好事,或者在什么门槛上使用它是有意义的?

16 个答案:

答案 0 :(得分:42)

小项目可能有习惯在没有意识到的情况下变成大项目,那么你希望你开始使用TDD:)

答案 1 :(得分:34)

TDD在小型项目中大放异彩。在一个小项目中,通常很多更容易遵守TDD,现在是练习并获得遵循TDD所需的纪律的好时机。

根据我的经验,较大的项目往往是在某个门槛上放弃TDD的项目。 (我不是说这是件好事。)

我认为较大的项目倾向于放弃它有几个原因:

  • 开发人员缺乏经验 - 无论是一般情况还是TDD
  • 时间限制---较大的项目本质上更复杂
    • 增加复杂性导致截止日期超支,单位测试倾向于首先被淘汰
    • 缺乏经验的团队可能会加剧这种情况

答案 2 :(得分:18)

根据我的个人经验,我可以说以下内容:

  1. 每次我开始我的个人小爱好项目时,我发誓要用TDD开发它。
  2. 我每次都没有。
  3. 我每次都后悔。

答案 3 :(得分:17)

所有内容都有成本效益曲线。

如果您的实施经常发生变化,使得自动化测试套件的好处超过初始化可能涉及的额外成本,那么TDD忽略了TDD的许多有争议的好处,TDD是值得的。发展。

答案 4 :(得分:10)

我总能找到这样一个有趣的问题。有什么选择?编写您只编译并永不运行以验证其正确性的代码?您是否要等到部署到生产中以查明您的课程是否有效?

如果我们从未进行过称为TDD的练习,或者在1997年发明JUnit之前,是否没有代码测试?当然有。那么为什么现在你有测试框架可以帮助你解决这个问题呢?

即使是在紧迫的截止日期前的小项目也不想等到生产才能找出它是否有效。写下测试。

任何“小”项目都没有必要,但我将“小”定义为少于一个类。

答案 5 :(得分:7)

过度破坏?一点也不。除了主要的好处,也就是编写代码,你可以依赖它,因为你已经考虑过它可以破解的方式,你会更加自律,并且可以通过测试驱动开发提高工作效率。选择任何实用的程序员书籍,获取提示和灵感。

答案 6 :(得分:6)

我会抓住机会使用TDD和一个小项目来让你的脚湿透。即使你意识到这不适合你,这将是一个很好的学习经历。

答案 7 :(得分:6)

我从当地敏捷集团的一位成员那里听到的一点是,她发现TDD对项目的非常早期的阶段没有用,在那里你基本上可以快速制作草图和你还不确定它的形状是什么。但是,只要您对接口的外观有所了解,就可以开始使用测试来帮助您定义它们。

TDD是另一种工具,如文档,可以提高代码的清晰度。当其他人需要使用您的代码时,这是至关重要的,但在回顾我们自己的代码时,我们中的许多人发现非常有用。曾经有一个业余爱好项目,你在离开它一段时间后选择了备份,遇到了一些奇怪的代码,并想知道“为什么我写了那个?”

答案 8 :(得分:4)

我和其他人在任何项目中都使用TDD,而不仅仅是几行代码。

一旦得到测试错误,就很难不使用TDD。就个人而言,由于TDD,我发现我的代码已经改进了好几倍。

答案 9 :(得分:3)

我相信大多数项目都值得。 TDD和随后的回归测试使您不仅可以确定组件是否在编写时工作,还可以在引入更改和重构时使用。如果您的测试足够完整,您可以涵盖不常见/不太可能的边缘情况的场景,并生成/维护更可靠的代码。

在项目生命周期中继续前进,连续的测试周期将为您节省手动重复的测试,并否定重复这些错误/不完整的明显机会。

答案 10 :(得分:2)

嗯,并不是真正的人数是TDD的决定因素(至少这是你的问题所推断的),而是项目的大小。

TDD的优点是,您开发的所有代码几乎都经过单元测试。这样,您在以后重构时可以省去很多麻烦。当然,当你的项目规模合适时,这确实是必要的。

答案 11 :(得分:2)

根据我的经验,90%的人对这些福利持怀疑态度并没有尝试过。

以怀疑的心态尝试一下。在你之前和之后测量你希望从中获得的东西。

我可以指出减少浪费/浪费修复生产中发现的错误的时间。我看到/衡量更好的生产力(更快的上市时间),代码质量的提高(跨越各种指标),更接近要求(即因为要求不明确而减少返工)等等。

我对使用TDD的项目“感觉”更好,但后来我“受到测试感染”。开发人员对使用TDD的项目的士气通常较高,作为一种主观意见。

如果您没有得到这些结果,请不要使用它。如果你不太关心这些结果来衡量它们,那么使用TDD或不使用TDD会让你感觉更好。

TDD有一个学习曲线。如果你不愿意付出努力进行认真的尝试,请不要打扰。

一个小项目是一个很好的方式,可以毫不费力地进行认真的尝试。

答案 12 :(得分:1)

如果您认为由于编写代码而可能会发生您不期望的重大错误,那么TDD是有道理的。

答案 13 :(得分:1)

我会说这完全取决于给定的时间范围。如果你有时间花费几乎两倍于你通常需要的时间,那就去吧。 但在我看来,速度是最重要的因素之一(竞争公司)。

答案 14 :(得分:1)

使用良好的OO代码开发的项目本质上非常适合测试,并且可以说在开发风格的后期可以获得测试驱动的焦点。我实际上说,当你在预算有限的新兴技术上出现时,考虑到所有TDD都是完全可选的。

答案 15 :(得分:0)

我认为无论大小如何,TDD都是值得的(即使它是一个类 - 因为首先编写测试可以帮助你提出更合理的设计)。

我认为可能没有必要的地方是你正在建立一个你不确定你想要什么的项目,你不太可能关心可维护性。我发现在工作中没有任何适合该类别的项目,但我发现偶尔我会开发个人项目,在这种情况下。在这些情况下,我通常会学习一个新的框架,并且不知道我从一开始就在做什么,所以我的测试更有可能因为错误的原因而突破,从而降低了它们的价值。

然而,我也承认不使用TDD会让我的可维护性降低 - 一旦我知道我在做什么,我会立即回归红/绿/重构。