Unit testing 什么';说服开发人员学习TDD的最佳理由是什么?

Unit testing 什么';说服开发人员学习TDD的最佳理由是什么?,unit-testing,tdd,Unit Testing,Tdd,让我先从壁橱里出来。我是TDD的信徒。我正在尽可能多地练习测试驱动开发 我工作的一些开发人员甚至拒绝尝试它。我自己在开始TDD时,试图向我的一位同行证明测试驱动开发是一个坏主意。理由如下: 为什么??到目前为止,我是一个相当成功的开发者 这会让我慢下来的 你听过或用过的支持TDD的最佳论据是什么 另请参见:您列出的参数不是理性的逻辑参数。他们背后没有任何理由(除非你实际上只是总结了更长的真实论点。) 因此,我不认为你能用你自己的理性论据说服任何提出这些主张的人。最好的办法是求助于他们论点的

让我先从壁橱里出来。我是TDD的信徒。我正在尽可能多地练习测试驱动开发

我工作的一些开发人员甚至拒绝尝试它。我自己在开始TDD时,试图向我的一位同行证明测试驱动开发是一个坏主意。理由如下:

  • 为什么??到目前为止,我是一个相当成功的开发者
  • 这会让我慢下来的
你听过或用过的支持TDD的最佳论据是什么



另请参见:

您列出的参数不是理性的逻辑参数。他们背后没有任何理由(除非你实际上只是总结了更长的真实论点。)

因此,我不认为你能用你自己的理性论据说服任何提出这些主张的人。最好的办法是求助于他们论点的来源;经验或者让他们暂时使用TDD,看看他们对它的看法,或者让TDD自己工作,这显然是非常好的工作,并向他们展示它作为一个例子


(我不是TDD的信徒。这是一种实用的方法,你可以让我相信这是一个好主意。)

再多的争论也无法说服任何人使用TDD


你必须向他们展示,并展示其好处。通过展示而不是讲述,更容易让别人“发光”

作为一名10多年的专业开发人员,我能提出的最佳论据是,甚至在我真正能够“运行”应用程序之前,我就发现了我的bug

我还发现我的代码设计更健壮,更容易修改,这让我对重构更有信心

“相当成功”并不等于“真正成功”


另一个巨大的优势是,我不必再编写测试工具,因为单元测试运行者实际上就是我的测试工具。

向他们展示这个演示。它出卖了我


任何一个曾经面对过非常复杂的任务和很多边缘条件的程序员都应该能够看到TDD的价值。当涉及到确保搜索引擎匹配某些字符串时,TDD是您在维护期间保持理智的唯一方法——确保您已修复一个案例而不破坏其他几个案例的唯一方法是通过自动测试。

不同的人将以不同的方式被说服(或不被说服),因此,唯一诚实的答案是“视情况而定”


我见过很多次这种工作的一种方式是,在某人一直在处理一段代码后,与他们坐在一起,然后使用TDD重新创建它。生成的代码通常更小更清晰。

我不练习TDD。虽然我看到了如果您有许多不同的测试用例要测试的复杂项目是多么的好,但是我没有看到在一个简单的web应用程序中使用它有什么好处


有人能说服我使用TDD的一种方法是,如果我们一起做同一个项目,看看谁能得到更好的结果,谁能更快地完成任务。

也许他们知道得更多

开发人员的单元测试是一种非常有用的实践,我不能过分强调它的好处,不仅在最初的开发过程中,而且在重构过程中,当单元测试能够及早发现普通的代码缺陷时,还能够发现开发人员所做的假设的破坏,这些假设从未在正式文档中被捕获,因此在重构发生时可能会丢失

也就是说,TDD不是神奇的精灵尘埃:

  • “只需编写足够的代码以通过测试”的方法会产生误报。“适可而止”的方法往往无法解决已知的谬误和问题。我想到的快速示例是或NUMA性能问题。仅仅将这些需求捕获到简单地表示TDD的测试用例中,本身就会变成一项全职工作
  • 对于任何大型项目,MOQ的爆炸都会失去控制。mock和其他代码一样,都是代码,它们需要维护,只是不能突然编写它们自己
  • TDD经常被用作取消QA测试的借口。”我们的开发人员已经编写了测试id,让我们发布它完全忽略了面向特性的端到端测试QA应该涵盖的内容
  • 我不相信狐狸看守鸡舍。如果在测试和实现中都犯了相同的错误,错误的算法仍然可以以优异的成绩通过TDD
  • 所有方法最终都试图用过程来替代人才
  • 我与TDD的主要分歧在于,TDD被认为是解决大多数开发问题的神奇解决方案,但其成本却被其倡导者隐瞒了。使用MOQ将代码库翻倍或翻倍并不是免费的。我更愿意看到在开发过程中编写一些全面的单元测试。作为测试第一的TDD方法,我还没有在实际规模的项目中看到它的好处


    我知道我会因为发布这篇文章而被判死刑,但见鬼,谁在乎…

    与他们结对。你不必称之为“配对编程”,这对那些不愿意考虑像TDD这样的“激进”技术的人来说是可怕的。但是如果你们两个坐在一张桌子上,一起处理同一个问题,很容易证明TDD的价值。这不可能是谈话的结束,但这是一个地狱般的开始。在接下来的对话中给你可信度,并给你一些真实的东西作为进一步讨论的基础。

    彻底的单元测试减少了错误的发生,但也减少了重复使用或重复使用造成的损害范围。

    我的“啊哈”时刻是在阅读“Microsoft.Net中的测试驱动开发”的第2章詹姆斯·纽柯克。(并不是说本书的其余部分不重要……他用了几章来构建多层应用程序