在测试驱动的开发过程中,软件架构师的作用是什么?


10

据我了解,Test-Driven Development是关于编写测试以定义程序规范的(如果我错了,可以纠正我)。

如果有人负责编写软件的规范(包括公共API)(我们称他为Software Architect),这是否意味着Software Architect必须编写所有测试?

还是由软件架构师编写规范,然后将其交给开发人员编写测试依据?

还是通过允许所有开发人员编写自己的测试而使规范有机地增长,而忘记了拥有软件架构师?


这里是“有机增长”过上你的意思english.se一些争论- english.stackexchange.com/questions/17853/... -你想确认:)
JoseK

@Jose:我的OP中的最后一句话是有点嘲讽,因为对我来说,很明显程序必须始终有客户的详细说明。但是客户并不总是知道他们到底想要什么,这就是为什么存在迭代软件开发过程的原因。有关 “不断增长的软件”隐喻的更多信息,请参见此处
罗伯特·哈维

Answers:


5
测试驱动开发涉及编写测试以定义程序规范

您无需编写测试来定义规范,从“死树”的意义上讲,测试描述,用户案例和功能描述就是规范。

回顾一下,TDD流程概括如下:

  • 根据功能定义项目
  • 使用用户故事描述每个功能的涉众,行为和目标
  • 使用测试描述来指定与用户故事相关的预期给定,触发事件/条件以及行为/结果[并完成“规范”]
  • 为每次迭代选择一组功能;迭代应该简短[为简洁起见,我省略了计划和估算步骤]
    • 为功能编写测试代码(该测试将失败,但是您必须做出API决定才能对该测试进行编码)
    • 实现足够的功能,以便测试通过
    • 必要时重构代码
    • 重复下一次测试,直到功能完成
    • 重复下一个功能,直到迭代完成
  • 重复下一次迭代,直到项目完成

您选择要做多少设计,架构,支持文档等不属于TDD。您可以阅读一些实用的“最佳实践”,但是请记住,这些是别人的工作室而不是您的工作室中的“最佳”实践。

注意的一点是客户开发商拿出的特点和故事和测试说明写在一起,相互理解

因此,顺便说一句,最初的问题是:

TDD中软件架构师的作用是什么?

简短的答案是:

曾经一样,曾经一样。-戴维·伯恩


编辑:长的答案是:架构师在整个过程中根据需要扮演通常的有远见的/研究人员/刺激性/支持/支持角色。

编辑2:对不起,我错过了子问题的重点!每个人都有责任编写规范;所有的开发人员,包括建筑师(如果有的话)以及客户。开发人员对测试进行编码。


1
这是有道理的,但是我听过人们在TDD上下文中谈论的唯一步骤是您的五个内部项目符号中的五个步骤(描述了红绿重构过程)。其余的项目符号是否确实是TDD的一部分,还是属于更大的涵盖方法(如敏捷或DDD)的一部分?
罗伯特·哈维

@Robert hmmm ...好问题!从技术上讲,其他项目符号是XP;我同时学习了XP和TDD,从没想过将它们分开。直到现在;-)
史蒂文·洛

@罗伯特做了一些复习;看编辑(仅供参考使用XP裁判extremeprogramming.org和TDD REF agiledata.org/essays/tdd.html#WhatIsTDD
史蒂芬答洛韦

嗯,您为TDD提供的链接表明TDD是真正的测试驱动设计。现在,我回到了起点。“您进行有机设计运行的代码在决策之间提供反馈。”
罗伯特·哈维

1
@Robert的编辑无疑帮助我更好地理解了这个问题。我将D理解为Development,并将其解释为整个生命周期,而不仅仅是编码部分。TDDev是学习建筑技能的好方法-重构倾向于将其推向这个方向
Steven A. Lowe 2010年

1

软件架构师并未编写所有测试。在我的脑海中,这太过分了。

软件构架师应该能够为API勾画出一种初始形式,开发人员可以为该形式编写测试,然后构建该API。但是,软件设计师可能具有不一定可测试的各种代码标准,例如文档或命名约定。最初的API可能还会丢失一些调用,这些调用在实施完成后会向API添加新的调用。因此,随着代码库的增长,API会有一些有机的增长,但是架构师的作用是提供高级指导并努力确保遵循。

当然,在某些情况下,团队可能会决定不聘用软件架构师,但根据所涉及的API和公司的规模,这可能不是一个好主意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.