TDD作为缺陷减少策略

时间:2009-12-07 04:01:04

标签: tdd

TDD是否可以成功作为缺陷减少策略而不包含测试用例构建和评估的指导?

6 个答案:

答案 0 :(得分:1)

IMO,我的回答是否定的。为了使TDD有效,必须有关于什么是测试的指导以及对某些东西进行合理测试意味着什么。如果没有指导原则,可能会有一些开发人员最终会遇到大量缺陷,因为他们的初始测试只包含很少的输入,例如。只有有效的,这可能导致使用TDD的想法变得毫无价值。

答案 1 :(得分:0)

测试驱动开发可以减少QA周期中的缺陷,因为测试允许开发人员在将代码发布到QA团队之前发现缺陷。

但是如果没有关于如何进行测试的指导,你真的无法创造任何长期的好处,因为偶然的测试只能通过盲目的运气来防止缺陷。基于良好指导的良好测试可以大大减少缺陷。

答案 2 :(得分:0)

如果您没有重复缺陷的测试,您如何知道“缺陷减少”已经发生?

当然你进行了测试 - 它们只是手动的,因此重现繁琐且耗时......

答案 3 :(得分:0)

微软在他们的一些内部团队中完成了{p> Here's a study (warning: link to PDF file)

引用它:

  

案例研究的结果表明,与未使用TDD实践的类似项目相比,四种产品的预释放缺陷密度降低了40%至90%。主观上,采用TDD后,团队的初始开发时间增加了15-35%

这是我所知道的关于TDD /单元测试的唯一实际实证研究,但有很多人(包括我自己)会传闻说TDD(以及一般的单元测试)肯定会提供一个提高代码质量。

根据我自己的经验,肯定会减少缺陷数量,但数字感觉远远低于微软研究中的40%;这是(再次,完全基于我所看到的)主要是因为大多数企业开发人员对单元测试(更不用说TDD)几乎没有经验,并且在他们学习的过程中总是做得不好。实际上学习如何做好TDD需要至少一年的经验,而且我从未参与(甚至)一个团队实际上拥有这些经验的全部开发人员。 / p>

答案 4 :(得分:0)

您可能需要提取Gerard Meszaros xUnit Test Patterns的副本。具体而言,第5章可能最直接适用于您的问题,其中涵盖了测试自动化原理。我认为其中一些原则适用于您需要某种指导,共同利益或某种暗示的情景,或者担心这种情况:

  • 原则:沟通意图
    • 测试需要易于维护,很明显测试正在进行中。
  • 原则:保持测试独立
    • 覆盖一小块的小测试。测试不应互相干扰。
  • 原则:尽量减少测试重叠
    • 需要设计涵盖特定部分的测试,并且不要创建重复执行相同路径的测试。
  • 原则:每次测试验证一个条件
    • 这个对我来说似乎很简单,但对我来说是人们最难掌握的经历之一。我可能会编写具有多个断言的测试,但我会尝试将所有这些保持在特定区域周围。当涉及到追踪失败和其他测试问题时,更容易摆弄测试特定路径的单个测试而不是几个不同的路径,所有路径都集中在一个测试方法中。

进一步与我的经历有关,如果我们想谈谈公司开发人员,我看到一些有兴趣并且主动学习新事物的人,但往往是,有些人喜欢和流动,并喜欢为他们布置的东西。没有某种方向,无论是高级工程师类型的授权,还是某种联合团队的讨论(参见敏捷开发人员的实践,如每周一次的午餐时间会议等一些想法),我认为你的机会是成功将是有限的。

答案 5 :(得分:0)

在团队情况下,您的代码很可能被其他人使用,测试具有附加优势,可以减少缺陷,甚至无需改进任何人的代码。

如果文档很差(在开发过程中“常常”),那么测试就会对您希望调用代码的方式起到重要作用。因此,即使在代码非常脆弱的情况下,TDD仍然可以减少针对最终产品引发的缺陷数量 - 通过确保您的同事可以在使用您的代码之前看到编写良好的测试,您已经确保他们知道你打算如何在你的代码被调用之前使用它们。因此,它们不太可能以意想不到的顺序调用您的代码/没有配置您期望的东西(但忘记编写支票)作为先决条件。因此,它们不太可能触发失败条件,并且您不太可能看到它们或(人类)测试团队因为崩溃而引发缺陷。

当然,无论你是否看到“那里有一个隐藏的错误,它还没有被调用”,因为问题本身就是另一个好问题。