教授TDD时最重要的一点就是传授

时间:2008-09-19 13:52:37

标签: tdd agile extreme-programming

我正与一群专业人士合作举办活动,向感兴趣但没有经验的人(新手)教授TDD练习。

我们正在尝试提供实验室,研讨会等,我正在努力想到我们需要传授给这些人的单一,最重要的事情,以帮助他们成功实践TDD。

您认为我们应该优先学习什么? TDD教学的哪个方面 最重要。如果你必须做两件事,那没关系,我不会把你带到SINGLE部分:)

12 个答案:

答案 0 :(得分:34)

It's about design。关于测试,

答案 1 :(得分:8)

请勿跳过此过程中的步骤。进入TDD的初始阶段需要更长的时间,但一旦它到位,整个SDLC就会更快,更无错误。

红色 - 绿色 - 重构 - >就这么做。

答案 2 :(得分:7)

仅仅因为你的测试通过它并不意味着代码是正确的。

除此之外,我想说在你的设计中考虑测试是很重要的。如果您的代码很难在不熟悉被测设备内部实现的情况下进行测试,您可能需要重新考虑设计。否则,重构变得更容易发生风险,因为测试可能必须随代码一起改变。

答案 3 :(得分:4)

我不知道这是否会被视为最重要的事情 - 但是当我第一次使用TDD进行探索时,我花了一些时间来“获取”。

在编写测试之前,不要将代码写在头脑中。

当我第一次开始做TDD时,我“知道”设计应该是什么。我“知道”我想写的代码。所以我写了一个测试,让我写下那段代码。

当我这样做的时候,我并没有真正做TDD - 因为我是先编写代码(即使代码只在我脑海中: - )

我花了一些时间(以及一些聪明的人),意识到你需要专注于测试。编写所需行为的测试 - 然后编写使其通过所需的最小代码 - 然后通过重构让设计出现。重复直到完成。

答案 4 :(得分:3)

我建议,“耐心等待。”一开始感觉很奇怪。对我来说,在它开始感觉自然之前可能是三个项目。

答案 5 :(得分:3)

我同意Jon said in his answer的内容,但我认为一个重要的推论是可测试性并没有决定“好的设计”,而只是指示你的设计在目标上。

答案 6 :(得分:3)

在我看来,TDD就是节奏(红色,绿色,重构)。节奏下来让你超越“没有得到它”的“驼峰”。如果你没有得到节奏,你可能不会坚持使用TDD很长时间。节奏的本质是婴儿步骤,已经提到过。写尽可能少的代码,并无情地重构。

强调的一件事是,TDD为长期交易带来一些短期收益。从TDD开始,总会降低您的工作效率。但是一旦你学会了节奏,它就像进入一个凹槽,它实际上可以帮助你更快地工作。更不用说TDD的副作用是提供回归测试的不断增长的单元测试基础。软件的一个必然性是维护的系统(没有一套自动化回归测试)会随着时间的推移而降低。

答案 7 :(得分:3)

强调TDD是开发人员的范式转变。如果您正在组建新团队,请意识到需要长达六个月的时间才能让团队充分发挥TDD从业者的作用。一旦你有一个成熟的敏捷团队有效地练习TDD,配对将使新开发人员能够在经过几次迭代后进入一个事物。此外,通过使用来自一个团队的对来播种新线,您可以使新线路在TDD上加速,比第一线快得多。

在我们测量的项目中,一旦团队学会了TDD,我们已经看到在自动功能/回归测试期间发现的缺陷减少了六倍。这是一笔可观的节省。此外,代码反映了更清晰的设计,每个功能的代码行数更少。 TDD但是对镀金的虚拟停止。如果你的故事卡有验收标准,TDD最有效。

TDD还可以实现可持续发展的步伐。团队将发现他们可以继续获得与每次迭代相同数量的功能,因为代码保持干净,几乎没有缺陷。通过TDD和自动功能/回归测试,我们经常会在用户验收测试中发现零缺陷。

答案 8 :(得分:2)

在截止日期紧张的情况下处理开沟TDD的压力。这是我用TDD帮助人员和团队的最大问题之一。他们很难说出将特色而不是测试放到高级管理层的重要性和价值。

答案 9 :(得分:2)

继续婴儿步骤。

确保您的测试仅覆盖非常小的范围,并且正如PhlipCPP所说:'执行使测试通过所需的最小编辑。'

即便如此,TDD也有很多,所以你仍然要确保不要错过任何东西。

答案 10 :(得分:1)

根据我的经验,使用TDD可以让我和我的团队无情地重构我们的代码,而不用担心它会在意外的地方破坏某些东西。

所以对我来说,TDD最重要的方面就是覆盖,因为只要我在代码库中看到可以使用它的位置,良好的覆盖率就让我有信心重构。

答案 11 :(得分:0)

强调不同类型的测试。黑盒测试和白盒测试都很重要,并且具有不同的用途。白盒测试无法验证是否正确,因为它无法测试整个系统。它使代码闻起来更加臭,因此提供了更好的重构方向。黑盒测试是为了测试正确性。每个功能都应该经过黑盒测试。

另外,强调测试覆盖率的差异。由于组合和可重复性问题,不可能对应用程序中的每个代码路径进行黑盒测试。我的规则是,在黑盒测试之前,功能不完整。你应该帮助学生找出自己的规则。但是,白盒测试不应该具有外部类依赖性;因此,每个班级的每一行都应该进行白盒测试。