为什么我应该练习testing驱动开发,我应该如何开始?

许多人在开始编写代码之前都会先谈论编写代码的testing。 这种做法通常称为testing驱动开发(TDD)。 通过这种方式编写软件可以获得什么好处? 我如何开始这种做法?

有很多好处:

  • 您可以立即得到有关您的代码是否正常工作的反馈,从而可以更快地find错误
  • 通过看到testing从红色到绿色,你知道你有一个工作回归testing和工作代码
  • 您可以自信地重构现有的代码,这意味着您可以清理代码而不用担心可能会破坏的代码
  • 最后,您可以在自动构build过程中运行一系列回归testing,从而使您更有信心地确定您的代码库是稳定的

最好的开始就是开始。 Kent Beck有一本关于testing驱动开发的书。 只要从新的代码开始,不要担心旧的代码……只要你觉得你需要重构一些代码,为现有的function编写一个testing,然后重构它,并确保testing保持绿色。 另外,阅读这个伟大的文章 。

最近的利益部分已经被覆盖 ,至于从哪里开始….在一个小型企业系统中,没有太多未知因素,所以风险很低。 如果您还不知道testing框架(如NUnit),请先学习一下。 否则,开始写你的第一个testing:)

优点

  1. 你弄清楚如何划分你的代码
  2. 你找出你想要的代码
  3. 你知道它应该如何行动,而且,如果重构破坏了任何事情,那么这些行为就会发生
  4. 让你习惯于确保你的代码总是知道它应该做什么

入门

去做就对了。 编写一个你想做的testing用例,然后编写应该通过testing的代码。 如果你通过了testing,那么很好,你可以继续编写代码总是失败的例子(例如2 + 2不应该等于5)。

一旦你所有的testing通过,写下你的实际业务逻辑来做你想做的事情。

如果您从头开始,请确保您find一个易于使用的良好testing套件。 我喜欢PHP,所以PHPUnit或SimpleTest运作良好。 几乎所有stream行的语言都有一些xUnittesting套件可用于帮助构build和自动化testing。

在我看来,最伟大的事情是,它显然允许你看看你的代码是否按照它应该做的。 这看起来可能很明显,但是如我以前发现的那样,误入歧途的目标是非常容易的:p

良好的开端:使用Eclipse开始在Java中使用Tdd Brett L. Schuchert

是一组关于Java和C#中的TDD的屏幕录像。 它从TDD的从头开始和教学基础开始。

您可能正在敏捷或瀑布环境中工作。 也许你有经过多年艰苦工作经过战斗考验的明确程序,或者你刚开始创业。 不pipe情况如何,你可能至less要面对一个,如果不是更多的,下面的痛苦,问题或导致交付不成功的原因:

  • 在创build需求,规范或用户故事的过程中,您的团队中的一部分会被排除在外
  • 大部分(如果不是全部)testing都是手动的,或者根本没有testing
  • 即使你有自动化testing,他们也没有发现真正的问题
  • 如果自动化testing为项目提供实际价值已为时过晚,则会自动完成testing
  • 总是比专注testing更紧迫
  • 团队在testing,开发和function分析部门之间是分开的,而且往往不同步
  • 无法重构代码,因为害怕某些东西会被破坏
  • 维护成本太高
  • 上市时间太长了
  • 客户不会觉得交付的是他们要求的
  • 文档从不是最新的
  • 你害怕部署到生产,因为结果是未知的
  • 您经常无法部署到生产环境,因为回归testing运行时间过长
  • 团队花费了太多的时间试图弄清楚某些方法或类是做什么的

testing驱动开发不会神奇地解决所有这些问题。 相反,它使我们走上了解决的道路。 没有银弹,但是如果有一种开发实践可以在许多层面上有所作为,那么这种实践就是TDD。testing驱动的开发加快了上市时间,使得更容易重构,有助于创build更好的devise并且促进了更宽松的耦合。除了直接的好处之外,TDD是许多其他实践的先决条件(连续交付是其中之一)。 更好的devise,精心编写的代码,更快的上市时间,最新的文档和可靠的testing覆盖率,是通过应用TDD可以实现的一些结果。