使用TDD停止测试时?

时间:2009-07-07 20:09:48

标签: tdd

我对测试驱动开发(TDD)知之甚少,但我总是听说我需要用一些测试用例开始开发。然后,我需要使用最简单的解决方案来完成此测试。然后创建更多测试以使我的测试再次失败......

但问题是:何时停止创建新测试?当我知道我的申请符合要求时?

7 个答案:

答案 0 :(得分:9)

无耻地将Kent Beck的回答复制到this question

  

我得到的代码付费有效,而不是   对于测试,所以我的理念是测试   尽可能少地达到给定的   信心水平(我怀疑这一点   相比之下,信心水平很高   符合行业标准,但那可能   只是傲慢)。如果我通常不   犯了一个错误(比如设置   构造函数中的错误变量),   我不测试它。我确实倾向于做   测试错误的感觉,所以我是额外的   当我有逻辑时要小心   复杂的条件。编码时   在团队中,我将策略修改为   仔细测试我们的代码,   总的来说,往往会出错。

     

不同的人会有所不同   基于此的测试策略   哲学,但这似乎是合理的   给我不成熟的状态   了解测试如何最好   适合编码的内循环。十   或者从现在开始二十年我们很可能   有一个更普遍的理论   测试写,不测试   写,以及如何区分。   与此同时,实验似乎   按顺序。

答案 1 :(得分:2)

Code coverage工具可以提供有关您的代码测试结果的有用信息。这些工具将识别您的测试尚未执行的代码路径。

答案 2 :(得分:2)

在TDD中,当您停止编写代码时(或者在编写最后一个代码之前稍微稍微编写代码),您将停止编写测试,除非(如上所述)您的代码覆盖率太低。

答案 3 :(得分:2)

生命周期

如果你按照测试驱动开发的那样,你有一个5步循环:

  1. 编写测试:对于每个单元(您可以测试的最小代码段),您可以编写测试,以确定该单元将负责的内容。您需要遵循所谓的Right-BICEP核对清单(正确结果, b 条件,负面关系, c ross-check结果, e rror条件, p 性能特征)。
  2. 运行测试并看到它们失败:在此步骤中,新编写的测试应该失败。这就是所谓的红色步骤,因为单元测试应该以红色显示。如果测试没有失败,你可能没有把它们写得正确。
  3. 实施单位:编写代码,即使您对其进行硬编码,此步骤的目的也是为了进入下一个绿色步骤。
  4. 运行测试并看到它们通过:绿色步骤,因为所有测试都应该通过。如果他们不这样做,你就没有完成编写代码。
  5. 完成?不,重构!
  6. TDD lifecycle - image from Wikipedia
    (来源:wikimedia.org

    测试什么

    • 测试所有单元,直到达到完整的代码覆盖率(在大多数情况下,一厢情愿的想法,您必须对严重的故障情况进行单元测试,例如绊倒电源线,不再有磁盘空间,洪水等)。如果你达到了90%的棒球场,你就会做得更多。
    • 如果您在代码中发现错误,请创建单元测试并修复代码。重复。
    • 如果您的代码有 GUI ,请尝试使用您可以找到的任何自动功能测试。在我的情况下,Selenium或JMeter会做到这一点。 Selenium是一个很好的工具,它允许您使用Firefox记录您的测试,并按需重播它们。

    持续整合

    由于一直运行所有测试都非常耗时,因此您可以大多数这些平凡的任务委派给持续集成服务器,该服务器将以预定义的时间间隔为您完成这些任务。这并不意味着您在提交代码之前不必运行测试。您仍然需要为正在修复的系统部分运行测试,如果系统运行较大,则所有单元测试都会适得其反。 CI服务器会告知您任何故障,您需要在修复您破坏的代码之前为所有同事购买饮料;)

答案 4 :(得分:1)

如果没有更多功能要添加到代码中,则会停止编写测试。可能还有一些额外的边缘情况需要确保覆盖,但除此之外,当您没有更多的代码可以执行时,您没有更多的TDD测试要编写(接受和QA测试是一个不同的故事)。

答案 5 :(得分:0)

您可能会发现某些区域难以测试,例如gui和数据访问,但除了您编写测试之外,直到达到目标为止。

答案 6 :(得分:0)

在理想的世界里,我会遵循极限编程实践(不仅仅是TDD),我的客户应该为我提供一些自动功能测试。当这样的测试变为绿色时,我停止编写测试并转到我的客户要求进行一些未通过的功能测试(因为测试是规范,如果我的客户没有向我提供失败的测试,我将不知道该怎么做)

我可以用另一种方式来解释,针对一个更加真实的世界。在XP法国,我们定期组织TDD Dojo(每周一次)。您可以致电Taht TDD培训课程。在那里我们用一些玩具问题练习TDD。这样做的想法是提出失败的测试,然后编写代码使其通过。 永远不建议无编码的测试

如果提出的测试在没有任何代码的情况下变为绿色,则应向其他人支付啤酒费。因此,这是一种了解停止测试时间的方法:当您无法再编写失败的测试时,您已完成。 (无论如何,饮酒后的编码是不好的做法)。

相关问题