tdd - 什么是测试驱动开发?是否需要进行初始设计?

标签 tdd

我对TDD非常陌生,还没有开始使用它。但是我知道我们必须先编写测试,然后编写实际代码才能通过测试并将其重构,直到达到良好的设计为止。

我对TDD的担心是,它是否适合我们的SDLC。假设我有一个制作订单处理系统的要求。现在,在没有该系统的任何模型和设计的情况下,如何开始编写测试?我们不应该要求定义实体及其属性才能继续吗?如果没有,是否有可能在没有任何设计的情况下开发大型系统?

最佳答案

TDD有两个级别,ATDD或验收测试驱动的开发,以及由单元测试驱动的普通TDD。

我猜TDD和设计之间的关系受到源代码就是软件产品设计的某种“敏捷”概念的影响。许多人通过将TDD转换为“测试驱动设计”而不是开发来加强这一点。这很有意义,因为应该将TDD视为驱动设计而不是进行测试。最后接受验收和单元测试是一个很好的副作用。

在不了解更多信息的情况下,我不能说太多有关它适合您的SDLC的信息,但是一个不错的工作流程是:

对于每个用户故事:

  • 使用诸如FitNesseCucumber之类的工具编写验收测试,这将从用户理解的角度指定给定输入的期望输出。该级别可自动执行规范,甚至在理想情况下甚至可以代替规范文档。
  • 现在,您可能对类/行为等可能需要的那种软件设计有一个模糊的想法。
  • 对于每个行为:
  • 编写一个失败的测试,以显示您如何使用类调用代码。
  • 实现使测试通过的行为
  • 重构测试代码和实际代码以反射(reflect)良好的设计。
  • 进入下一个行为。
  • 转到下一个用户故事。

  • 当然,您始终都会考虑系统不断发展的高级设计。理想情况下,TDD将导致在较低级别进行灵活的设计,从而使适当的高级设计随您而发展,而不是在一开始就进行猜测。

    关于tdd - 什么是测试驱动开发?是否需要进行初始设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2327119/

    相关文章:

    java - 尝试找到使用mockito调用匿名内部回调的最佳实践

    unit-testing - TDD 中的重构细节

    c# - 将现有代码移动到测试驱动开发

    java - 如何从 ArrayList 中提取特定数字?

    c# - FakeItEasy Setup 对象未在测试方法中返回

    reactjs - TDD 与reactjs、reactify、babelify、browserify、gulp

    Java EE TDD 起点

    wpf - 单元测试 : hard dependency MessageBox. Show()

    javascript - 我应该如何对有很多重叠的代码进行单元测试?

    objective-c - 在不启动模拟器的情况下在 Xcode 4 中运行逻辑测试