2012-03-30 121 views
3

我正在研究一个新的PHP项目,虽然我喜欢TTD,但我发现它似乎比在项目的这个阶段对帮助更有帮助。我应该在新项目开始时使用TDD吗?

我开始了但是现在我更深入的一些应用功能的原型,我发现自己重写位和核心框架件与编写测试一起编写单元测试。看起来好像我花了很多时间重写测试,也许我应该等到我处于更多的项目的alpha/beta阶段。

我应该从头开始写单元测试,即使有很高的机会,我将不得不重写它们吗?

回答

3

是的,这是了解您的系统并创建一个可靠的API的最佳方式。

这听起来像你需要将你的测试升级到更高的水平。不要测试单个方法,测试功能单元。但是这并不是一回事,因为我还没有遇到一个至少没有朝着这个方向努力的tdd医生。

+2

我对你的陈述有疑问。 TDD当然是设计系统的一种方式,但是为了真正地设计一个设计,在编写单行代码,测试用例或其他方面之前,它不能替代进行适当的需求分析,并且完全理解问题域。 - 即便如此,我也会争辩说,“建立一个扔掉”也更有可能是启发性的。 – 2012-03-30 17:01:23

+0

@TylerEaves的确如此。根据我的经验,我将对其进行修改,TDD是进行正确分析和了解开发人员可以使用的领域的最佳方式。所以是的,这是一个工具,在我看来,它是一个令人难以置信的强大工具,但它不是你应该使用的唯一工具。 – 2012-03-30 17:05:17

+1

有史以来唯一正确的需求分析是从交付的软件进行回顾性分析。 :( – 2012-03-30 17:14:35

3

如果您要使用TDD,您最好先使用它。

如果您认为这是正确的选择,那么使用它,否则当您决定在未来使用它时可能会头疼。

+0

同意。 TDD非常棒,虽然它可能会让事情变得困难,但如果您决定中途转向使用TDD,情况会更糟。 – eandersson 2012-03-30 16:55:06

1

当然你会重新把它们重新组合,事情会改变。

如果你做了全面,彻底的需求分析,事情会改变(更可能已经改变了,而你正在追求的是嵌合体),你就必须重新分析。

但是,如果你潜水权和获得写了一些代码和一些成果排序,你不会有任何有用的分析,没有测试,然后整个销售部门搓手,因为交付=可供出售。

迭代,写测试你可以,履行他们,看看你下一步去哪里。 TDD或经典的瀑布,在你有一些软件之前,很多工作都在前面进行。

做前期工作第二,不是很多的使用,并且永远不会发生。

也许你需要更多的概念证明或故事登机,或者本尊禁止分析,但是所有的潜水都会在仪表盘上放置表情符号,而且你唯一能获得的信用就是踢球在nads当车轮脱落时,以及次级风格的技术债务危机。

1

我发现它似乎比在项目的这个阶段帮助 更有帮助。

这是为什么?你能更客观地确定你的担忧吗?

现在我更深入的一些应用 功能的原型,我发现自己重写位和核心 框架件与编写测试一起。看起来好像我是 花了很多时间重写测试,在这里我应该等待 ,直到我进入更多的项目的alpha/beta阶段。

  • 不要在原型设计时使用TDD。原型是要获得知识..很快......在时间框中更可取。一旦你消除了不确定性,你扔掉原型。这次用TDD再次开始。
  • 您的测试正在改变,因为您现在有更好的洞察力?或者,测试是否与实现相结合(知道测试主体如何实现与提供的服务相关)?前者是不可避免的,除非你具有高瞻远瞩。需求变化,测试变化。后者是一种气味......可以通过专注于什么而不是如何去避免?
  • 等待您的产品/应用程序稳定下来的问题是:您可能会永远拖延,或者最终可能会得到一个难以测试的设计。这将使写作测试(后来)比它必须更困难。 如果您在可测试的代码基础上以较小的增量进行工作,TDD将变得更加轻松。这些测试也是一个安全网,帮助您充满信心地做出改变并提供即时反馈。
+0

对安全网有很大帮助,它是人们不经常承认的测试的一部分。倾向于将更多的测试视为实现的最终验证,而不是过程的一部分,无论他们是先做还是先做/从不做 – 2012-03-31 19:03:52

0
  • 是的,我认为它开始从非常begining编写测试是非常重要的。 TDD(测试驱动开发)不仅仅是单独测试各个类。它应该指导您在设计阶段做出的决定。

  • 当你先写测试的时候,你会更好地理解你的问题。你在说,你很可能会在稍后重写它们。如果是这种情况,那么这可能意味着你会更好地理解你的系统,这是一件好事。然后,您可以通过实施进一步的测试或对现有测试进行重新分解来重新设计您的系统。

  • 它可能会让人感觉像是在浪费时间,但并不是因为您对自己的系统有了更好的理解。

  • 我正在阅读的一本书(以测试为导向的面向对象的软件)提到了一个“步行骨架”概念。它表明你应该使用TDD来开发最低限度的工作解决方案,即使它非常基本。

  • 另一个要点是您应该从一开始就尝试自动化您的部署。这不完全是一个单元测试,但它是一个部署测试,这个测试同样比单元测试更重要。如果您在项目开始时进行这种测试,则不会在发布日期附近遇到意外问题。您还将更好地了解系统中不同组件的组合方式。

相关问题