尝试以测试为导向的开发

时间:2009-09-01 03:16:26

标签: php language-agnostic tdd methodology gtd

读完这篇post之后,我觉得与问这个问题的人有同样的感受。我热爱技术并想出解决现实世界问题的新想法只是让我的神经元变得饥渴,但是等式的另一部分 - 实际上是完成事情(快速) - 通常是屁股难以实现,特别是当我'我自己这样做。

有时我觉得对代码感到厌倦,有时候我花了更多时间在文本编辑器中移动光标并盯着我的代码,尝试提出一个比我已经拥有的更好的解决方案。我听说这是一种叫做完美主义的疾病

我已经在同一篇文章中读过(也有几次在这里也是如此)TDD实际上很好地阻止了coding like a girl,但是我从来没有给过TDD的机会 - 或者因为我'我懒得学习/设置它,或者因为我不认为我需要它,因为我可以在脑子里做我需要的所有测试。

  • 您是否也相信TDD实际上对GTD有帮助?
  • 关于TDD,我需要了解什么?
  • TDD的替代品怎么样?
  • 组织/开发TDD网络应用程序的最佳方法是什么?
  • 我应该使用哪些图书馆(如果有的话)让我的生活更轻松?

PS:我主要(但不是唯一)在这里使用PHP。

3 个答案:

答案 0 :(得分:5)

就我个人而言,我认为TDD最多是矫枉过正,最糟糕的是创造性编程过程的障碍。花费大量精力为每个尚未编写的方法/类编写单元测试的时间将更好地用于解决原始问题。话虽如此,我是单位测试的忠实粉丝,并全心全意地相信他们。如果我有一个特别复杂或麻烦的代码片段,我非常乐意为单一方法编写20个单元测试,但通常我已经解决了问题。与所有其他编程范例一样,TDD也不是银弹。如果适合你,你可以使用它,如果不继续看。

但是我的意见却是一丝一毫。更有趣的一个来自Kent BeckHow deep are your unit tests?

答案 1 :(得分:2)

您是否也相信TDD实际上对GTD有帮助? 我最担心的是根本无法测试代码。这太复杂了。我们的核心库不是围绕易于测试的界面构建的。所以我们尽我们所能写了测试。最后,我们最终重构了我们的核心库,使生活更轻松。除此之外,这是一种心态的改变,我肯定会考虑在你的第一个TDD项目上分配更多时间,以便清除你可能遇到的一些问题。

关于TDD我需要了解什么? TDD不能替代方法论。这是一个有益的补充或至少它应该是。如果做得好,TDD大大改善了软件设计。它也可以作为您的内部文档。如果您希望某人查看您的API并了解其工作原理,他们可以简单地查看您已命名的已成型测试。

TDD的替代品呢? 就像我说的那样,我不认为这可以替代方法论。还有一种选择,就是不使用它:)

组织/开发TDD网络应用程序的最佳方法是什么? 我们在scrum /敏捷方面取得了相当的成功,如果这就是你所要求的。

我应该使用哪些图书馆(如果有的话)让我的生活更轻松? 我的PHP知识已经在5年前过期了,我会让其他人回答这个问题。

无论哪种方式,只需2美分。如果你想在这里阅读是一个很好的概述:http://www.agiledata.org/essays/tdd.html

答案 2 :(得分:2)

我最近开始使用“胖模型瘦控制器”http://www.amitshah.in/php/controller-vs-model.html:尽可能多地将代码铲入模型(以及视图/控制器之外)。

我使用PHPUnit(以及Zend Framework支持)来测试我的Web应用程序中的一些复杂模型。编写单元测试,穷尽地检查执行简单SQL查询的2行函数是浪费时间恕我直言。在过去的几年里,我通过编写测试变得越来越懒散,对于大多数Web应用程序而言,它不值得,因为代码非常简单。

但是在最近的一个项目(一个用复合产品跟踪多个仓库库存水平的电子商务网站)中,我开始进行测试优先开发,因为我知道会有很多微妙的复杂性,我无法保留我的脑袋一下子。保持一切正常运作的唯一方法就是编写一些测试。对于某些部分,编写类然后测试更自然,其他部分首先进行测试,但其他部分不需要测试,因为它们是微不足道的。 TDD是一种工具,而不是宗教。在工作时使用它,如果没有则停止。

我认为TDD的好处在于降低复杂性和提高速度(我可以解决问题的速度)。如果我编写一些测试证明我的代码正常工作,那么一旦所有测试通过,我就可以继续讨论下一个问题。这让我重新开始编码。