我们是一小群PHP开发人员,他们正在考虑在我们的工作流程中集成或不集成TDD,以提高我们的Web应用程序的质量,同时消除令人沮丧的手动回归测试。我的问题是,如果我们开始使用TDD,平均会增加多少开发时间?
答案 0 :(得分:6)
不要指望TDD提高你的质量。拥有高质量的思维模式更为重要。我见过经过严格测试的高质量前TDD代码 - 因为团队成员有能力生产他们可以引以为豪的产品。我看到敏捷XP团队做TDD会产生绝对的废话,因为他们没有'拥有任何自豪感。如果您拥有所有权的骄傲,您可以使用适合您的任何流程生成高质量的代码。
因此无法保证TDD能够提高产品质量。但是,如果您的团队有更好的的驱动力,并且在他们正在做的事情中具有天生的所有权骄傲,那么TDD将为您提供机会生成更好的代码,不是因为它必须经过更好的测试,而是因为它会改变代码的设计方式。
TDD可以改善个别课程的设计。但要小心。您可能会将个体对象的复杂性迁移到对象交互领域,然后无法充分测试,因此请确保您在该级别进行测试。
如果您已经进行了单元测试,TDD最初会使开发速度稍慢,但差异应该会在几周后逐渐减少。
如果您不是单元测试,那么单元测试(TDD或常规)will save you time。
答案 1 :(得分:4)
TDD不只是编写测试来保护您的代码。这是关于推动设计的测试。因此,您最终可能会编写更多代码,但您在设计上花费的时间更少(或者由于缺乏考虑的设计而修复问题)。
在您学习如何使用各种测试/模拟框架并了解如何使用单元测试来驱动您的设计时,我认为很多开销是在初始阶段(简要地说:写一个失败的测试,然后编写最简单的功能代码,使测试过去,然后在必要时重构功能代码)。
一旦你的团队加快了TDD和你需要的各种工具的速度,你们可能会比现在更有效率。
答案 2 :(得分:2)
TDD 保存时间。我不能从PHP的角度讲 - 不知道哪些测试框架可用 - 但是使用Java时,当我处于TDD槽中时,我的流程很多更快。而且我的代码有更少的错误,所以我花更少的时间来修复它,更不用说找到错误了。红绿色重构驱动你,让你保持正轨,让你前进。
答案 3 :(得分:2)
我不会听取TDD的好处......你只需要尝试一下 回答你的具体问题...... 根据我的经验,我会说测试代码与生产代码的比例约为3:1 使用TDD可以累计 30%以上。当然这假设你已经计算了一些TDD时间而不是初学者(在这种情况下缓冲区应该更高)...和YMMV
答案 4 :(得分:0)
TDD迫使您像代码的消费者一样思考,并将重点从实现细节转移到易用性:“成为您自己的客户”。
根据经验,你最终会写两倍的代码。
答案 5 :(得分:0)
在编写测试时会浪费一些时间。然而在实践中我发现这并不是那么糟糕,因为你通常在编写代码时编写测试,所以你在同一个传递中编写它们(我发现我花了更多时间思考什么以及如何编码什么我正在做的比实际的代码 - 所以编写测试只会增加“实际编写”部分。另一种说法是,即使我写了两次#行,它实际上只有10-20%的惩罚。
另一个可能的丢失时间来源,可能是更大的时间,是您可能需要进行的重写,以使您的代码可测试。如果您拥有分散的依赖性和全局状态的大型代码库,则尤其如此。
当然,当您需要更改代码时,测试会为您节省时间,但如果您正在考虑编写测试,那么您可能已经知道了。