9

读完这篇文章后,我有点和提出问题的人一样。我喜欢技术,想出解决现实世界问题的新想法只会让我的神经元变得饥渴,但等式的另一部分——实际上(快速)完成任务——通常很难完成,特别是当我我为自己做这件事。

有时我对代码感到很无聊,有时我会花更多时间在文本编辑器中移动光标并盯着我的代码,试图提出一个比我已有的更好的解决方案。听说这是一种病,叫完美主义

我在同一篇文章中读到过(在 SO 上也读过几次),TDD 实际上可以很好地停止像女孩一样编码,但是我从来没有给 TDD 机会——要么是因为我懒得学习/设置它,或者因为我认为我不需要它,因为我可以在脑海中进行所有我需要的测试。

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

PS:我主要(但不完全)在这里使用 PHP。

4

3 回答 3

5

就我个人而言,我认为 TDD 充其量是矫枉过正,最坏的情况是阻碍了编程的创造性过程。为每个尚未编写的方法/类费力地编写单元测试的时间最好花在解决原始问题上。话虽如此,我是单元测试的忠实拥护者,并且全心全意地相信它们。如果我有一段特别复杂或麻烦的代码,我非常乐意为一个方法编写 20 个单元测试,但通常在我解决了问题之后。TDD,就像所有其他编程范式一样,不是灵丹妙药。如果适合你就用它,如果不继续寻找。

但是,请持保留态度。更有趣的一个来自Kent Beck你的单元测试有多深?.

于 2009-09-01T03:39:03.923 回答
2

你是否也相信 TDD 实际上有助于 GTD? 我最大的担忧就是无法测试代码。这太复杂了。我们的核心库不是围绕易于测试的接口构建的。所以我们尽可能地编写测试。最后,我们最终重构了我们的核心库,让生活更轻松。除此之外,这是一种思维方式的改变,我肯定会考虑在您的第一个 TDD 项目上分配更多时间,以消除您在此过程中可能遇到的一些问题。

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

TDD 的替代品呢? 就像我说的,我不会认为这是一种方法的替代品。有一个替代方案,那就是不要使用它:)

组织/开发 TDD Web 应用程序的最佳方法是什么? 如果您要问的话,我们在 scrum/agile 方面相当成功。

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

不管怎样,只要我的 2 美分。如果您想阅读这里是一个很好的概述:http ://www.agiledata.org/essays/tdd.html

于 2009-09-01T03:43:41.137 回答
2

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

我使用 PHPUnit(以及 Zend Framework 对它的支持)在我的 Web 应用程序中只测试几个复杂的模型。编写单元测试来彻底检查执行简单 SQL 查询的 2 行函数是浪费时间恕我直言。在过去的几年里,我越来越懒惰地编写测试,对于大多数 Web 应用程序来说,这不值得,因为代码太简单了。

但在最近的一个项目(一个使用复合产品跟踪多个仓库的库存水平的电子商务网站)中,我开始进行测试优先开发,因为我知道会有很多微妙的复杂性,我无法完全记住立刻。按照我的想法发展,保持一切正常运行的唯一方法是编写一些测试。对于某些部分,编写类似乎比编写测试更自然,其他部分首先测试,而其他部分不需要测试,因为它们微不足道。TDD 是一种工具,而不是一种宗教。有效时使用,无效时停止。

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

于 2009-09-01T07:59:12.510 回答