【问题标题】:How do I convince programmers in my team to do TDD? [closed]如何说服团队中的程序员进行 TDD? [关闭]
【发布时间】:2010-06-20 05:07:42
【问题描述】:

我知道这个问题:https://stackoverflow.com/questions/428691/how-to-encourage-implementation-of-tdd

在我的团队中,我们编写了很多单元测试。但是,通常程序员倾向于在编写代码后编写单元测试。因此,我们首先完成模块功能,然后编写测试。大多数模块的覆盖率约为 70%。我曾尝试说服我的技术经理和我的团队成员进行纯 TDD,其中我们首先编写测试然后编写代码,但徒劳无功。我认为首先编写测试可以让我们更好地发现设计。我是不是很挑剔,尤其是当我们的覆盖率很高时?如果这个问题的答案是否定的,那么我该如何与人们交谈以采用测试优先的方法。

编辑:我认为在编写代码之后编写测试是一件更容易的事情。我团队中的人已经习惯了这样做,并且反对任何改变。

【问题讨论】:

  • 您是否已经为自己的代码编写这样做了?如果不是为什么,有没有什么障碍是全团队都去克服的?
  • 你并不挑剔。这是一条非常流行的派对路线。 TDD 已经存在了很长一段时间。我不相信自己这是最好的方法。我想解决它的一种方法是尝试为每个人安排一些时间来讨论它,并从本质上辩论相对优点。我认为毫无疑问,无论是 TDD 还是其他什么,你都应该有一些一致的实践,这样你才能把它作为一个症结所在。
  • @njfs 我会尽可能地这样做,因此我支持它。
  • 很高兴你有一个编写测试的团队。

标签: unit-testing tdd


【解决方案1】:

我不知道您可以告诉很多人让他们相信 TDD 的价值。您可以引用专家告诉我们的相关信息以及您自己的个人经历,但如果人们不愿意尝试,那么您与他们分享这些信息会有所帮助的可能性很小。

我对 TDD 的体验基本上是,它听起来是一个非常好的主意,但它从来没有真正按照预期的方式实现。然后有一天,我在一项新任务上再次尝试了它,最终得到了一个比我想象的更简单的问题解决方案,这完全是因为我使用了 TDD。我认为当开发人员拥有这种经验时,它会改变他们看待事物的方式,并使他们更愿意在其他情况下尝试。

挑战在于能够向其他开发人员展示这一点。您可以做到这一点的一种方法是使用像 Roy Osherove 的 this one 这样的 TDD Kata(他在他的 TDD 硕士课程中使用它)。它专门用于展示小步骤工作的价值,只实现使每个测试通过所需的代码。这可能会向人们展示该过程的工作原理,并使他们更愿意尝试一下。

还有一个编码练习,我听说你给两个开发人员小组/团队一个相当简单的任务,并要求其中一个小组使用 TDD,并确保他们遵循“可能工作的最简单的事情”规则,而另一队则随心所欲地做事。然后,一旦完成,您让团队切换任务,但丢弃每个团队编写的代码,只留下测试。然后,团队应该为任务重新创建代码。通常你会发现继承 TDD 代码的团队更容易做到这一点。

尽管如此,我认为个人能做的最好的事情就是尽可能多地自己开始做 TDD。这有可能为您提供一些非常具体的参考资料,说明在当前项目的上下文中,TDD 在何处以及如何被证明是有益的。特别是如果您进行代码审查,您的同行可能会注意到您编写的 TDD 代码比没有 TDD 编写的代码更简洁,更易于维护。您的 QA 团队也可能会注意到代码质量的差异,这是您经常听到的关于迁移到 TDD 的公司的事情之一。

【讨论】:

  • +1,这是一个很好的答案。 P.S: '您可以引用专家所说的...'
  • 感谢@Carl Manaster/@incrediman 的错字修复。当我把那个帖子放在一起时已经很晚了......我要去睡觉了:)
  • 不客气;感谢您理解编辑并非旨在批评 - 只是试图使答案更好。我们都会时不时地犯错; SO & wiki 的美妙之处在于我们不必让它们永远存在。
【解决方案2】:

几个建议。您的实用性可能会有所不同:

  • 首先赢得一两个人的支持:你的老板、实习生等。您的first follower 将使您成为领导者。
  • 开始结对编程或指导。即使只有一两个实习生,与某人密切合作也是影响他们风格的好方法。如果你愿意,你可以尝试成为一名经理。
  • 就该主题进行技术演示。将重点放在您要解决的原因和问题上,而不是 TDD。您希望人们购买问题而不是您的具体解决方案。包括其他几个替代方案,这样您就不会只是想推销适合自己的东西。
  • Object Mentor 等处获得一些外部培训。如果你能说服你的老板并且团队不是一群铁石心肠的愤世嫉俗者,那么效果最好。

【讨论】:

  • 你的第一个追随者会让你成为领导者......非常正确。以前见过这个……只是这次没有打动我。
  • 是的,有时我希望让人们使用更好的流程并不需要移动,但除非你与思想非常开放的人一起工作......
  • “第一个追随者”视频 +1,这让我很开心!
【解决方案3】:

说实话,您应该始终只使用有效的开发/测试周期。

很多人都喜欢 TDD,而且很多像 Google 这样的大玩家都接受了它;因为测试覆盖率很高。

但是,如果没有它,您和您的团队似乎往往会做得很好 - 请记住,开发风格的改变至少会暂时降低生产力。所以记住一句老话,不要改变有效的方法。

然而,如果您和您的客户发现仍然存在很多测试未涵盖的错误,TDD 是解决问题的理想方法——因此您应该告诉管理层TDD 是一种提高客户满意度从而赚钱的方法。 (那是管理层——替你说话!)

【讨论】:

    【解决方案4】:

    也许以身作则会有所帮助:

    自己开始这样工作

    也许创建一个教程\脚本来设置不会增加 TDD 过程开销的环境(IDE):

    1. 在单个键盘快捷键中运行测试
    2. 测试系统的 GUI 应该出现在开发视图中(不仅仅是在测试视图中,因此您不必在它们之间移动)

    我猜过了一段时间,人们会很好奇,问你这个 TDD 的东西是否真的有效,你应该对这个问题有一个准备好的答案:-)

    【讨论】:

      【解决方案5】:

      你遇到过 BDD 吗?我发现词汇上有一个相关的变化,这确实有助于 TDD 的新手学习它。这是词汇变化:

      http://lizkeogh.com/2009/11/06/translating-tdd-to-bdd/

      我发现使用这种语言可以帮助人们专注于为什么首先编写测试(或示例)是有用的。我翻译了cmets中的另一个例子。

      即便如此,有时了解测试的结构也会有所帮助。如果人们在学习如何首先编写它们时遇到困难,那么之后编写它们是一个很好的学习步骤。你对设计的好处是正确的。摸索可能需要一段时间。

      过去,我发现获得 TDD 的最佳方法是拥有一个安全的练习环境。拥有自己的玩具应用程序或运行/参加基于玩具应用程序的研讨会都对我有很大帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        相关资源
        最近更新 更多