什么类型的错误测试驱动开发最有效的捕获?

时间:2010-06-29 20:40:15

标签: tdd agile

如何重复一个非常短的开发周期有助于消除软件中的错误?如果正确实施,TDD最有效的捕获方法是什么?为什么?

提前致谢!

3 个答案:

答案 0 :(得分:5)

TDD强迫您从“消费”您要编写的代码的角度思考。这种观点有助于将您(开发人员)置于需要考虑如何构建API的位置以及如何验证实现的要求。

TDD有助于识别以下领域的缺陷:

  • 要求。是否清楚代码需要做什么。是否可以验证代码的不变量或最终效果。成功标准是否在要求中定义,或者是否模糊或缺失。
  • 易于使用。您是否可以有效地使用您计划编写的代码来实现最终用户所需的各种事物,或者将来与其集成的其他代码。
  • 可测试性。代码是否可根据设计中的可访问数据或对象进行验证。是否有可能确认事情将按预期运作。
  • 边缘案例。通过预先识别他们的存在来识别和回应边缘案例通常更容易。当边缘情况出现在游戏后期时,人们倾向于试图“强迫”现有设计来容纳它们,而不是重新考虑设计。
  • 异常处理。当您开始编写测试用例时,您会开始意识到您可能希望能够响应错误或异常情况的区域。这有助于规划您的异常处理策略,抛出的异常类型,要包含的信息等等。
TDD还有助于提高测试的覆盖水平,因为它将测试带到前台,而不是将其作为“事后”活动。当测试最后发生时,由于时间和预算限制,或者由于开发人员的热情和动力自然下降,最容易被忽略或缩短。

答案 1 :(得分:1)

设计“错误”:如果你通常做TDD,你自然会得到一个可测试的设计。反过来,趋于以减少耦合等 - 导致代码库更容易使用。

另外,我发现TDD在某些情况下可以更容易地考虑角落情况 - 但设计效益更重要,IMO。

答案 2 :(得分:0)

零值或零值参数情况对我来说是TDD最差异捕获的错误。我倾向于首先使用这种情况编写我的测试,只是作为一种清除API的方式,而不考虑值:“哦,只需在那里抛出一个空值;我们将在下一个测试中给出真正的价值。”因此,我的方法最初是为了处理特定的边缘情况而编写的,并且在整个红绿重构过程中反复运行该测试(以及所有其他测试)使得边缘情况正常工作。在使用TDD之前,我会经常忘记null或零参数;现在,没有真正尝试,它们被处理为我应用TDD的方式的自然结果。