向团队推广TDD

8
我已经进行TDD三年了。我们是一家小公司,管理层对于敏捷流程的大部分方面都有很坚实的支持。开发团队中的每个人都认可这个流程。因此,为了在开发过程中获得回报,通常需要投入前期建立测试桩的工作被接受了。(例如启动http服务器的代码、在测试之前填充sql数据库等)。文档大多写在测试里,帮助请求通常以失败的测试形式呈现。
现在我转到了一家更大的公司,虽然管理层支持敏捷流程,但团队成员却是参差不齐的,其中一些人认为它有用,一些人只是因为管理层而这样做,还有一些人看不到价值。说服人们花时间建立测试桩或说服团队成员如果他花时间编写一个失败的测试,那是最好的帮助方式,这是一个挑战。
那么你认为向犹豫的团队成员推销TDD的最佳方法是什么?反对意见通常是:“这是不必要的成本”、“我们可以在重要的部分后写测试”、“这是一个流行词,团队掌握它后就会放弃,因为沉重的工作开始了”等。

许多重复的内容:http://stackoverflow.com/search?q=tdd+roi - S.Lott
3
自从我开始参与团队工作以来,有一件事情一直困扰着我。为什么我们有时候必须“向开发人员推销”好的实践呢?他们肯定没有得到过允许来坚持他们不好、浪费的习惯。 - Matthew Sposato
可能是如何鼓励实施TDD?等问题的重复。 - Pascal Thivent
6个回答

21

"说服不愿尝试TDD的团队成员的最佳方法"

你做不到。不要浪费时间去“说服”。

相反,花时间去“证明”。

只需开始实践TDD,取得成功。当人们问你成功的秘诀是什么时,再揭示TDD。而不是事先就宣扬。


有些人是无法说服的,但这也很好。 - hvgotcodes
我可以尝试一下,但同时继续在共享代码上工作会很痛苦,回到这里就像访问一个外国国家一样... - shipmaster
@shipmaster:“继续在共享代码上工作会很痛苦。”为什么? - S.Lott
@S.Lott:你进去,通过创建一个测试来解决这个问题,同时还要创建一个相当复杂的模拟和固定装置,只是为了在同一段代码中稍后有人修复一个错误/添加一个功能时被忽略并使测试失败... - shipmaster
@S.Lott:当然不是 :) ,如果我给你这样的印象,对不起。 - shipmaster
显示剩余2条评论

3
简单易维护。TDD让你有能力进行更改,并查看这些更改如何影响代码的其余部分。代码库越大,就越需要测试来验证任何新更改。
正确性。虽然测试本身可能会出错,但最终它们会确保组件正在执行它们应该执行的操作。开发人员越好,速度越快。
另一个优点是TDD可以指导系统中组件的设计。如果你试图测试某些东西,而测试过于复杂,那么很可能意味着你需要将问题分解成更小的部分...
为了向人们推销它,你可以说从长远来看,它使添加新功能更便宜,并减少了破坏现有功能的风险。因此,它降低了成本。

以上所有内容都是关于进行测试的好处,而不是将测试作为编码方式。我的团队已经明白他们需要覆盖(至少是显著部分)他们的代码以进行测试。 - shipmaster
可以,但你可以销售它的好处。 - hvgotcodes

2

对于犹豫不决的队友,请耐心等待机会,然后抓住机会。在软件开发中,肯定会遇到TDD可以防止或减轻问题的情况。请留意这样的机会。与他/她合作创建应该从一开始就开发的测试。但是,请确保以不尴尬你的队友的方式来表达你的信息。


2
我同意S. Lott的观点,你不能“销售”他们,而是需要展示价值。
其中最有效的方法之一就是使用配对编程。当然,你还需要解决另一个“销售”问题,即说服人们认为配对是一种有效的方法,但是经过一段时间,你可能会说服/转换一些开发者。
TDD最初对我来说是一个很难的概念,但现在我无法想象以其他方式进行编程了。

1

我认为Joel的文章非常好地解释了为什么测试是一件好事™。

我不认为他曾经使用过“TDD”这个词组,但它包含了一些很棒的信息。


测试不等于TDD。每个人都会认同测试的重要性。然而,TDD的开发哲学是另一回事,尽管OP假设它必然是唯一正确的方式。 - frankc
我完全同意。然而,从我对TDD的了解来看,Joel的帖子(渐近地?)接近了TDD的论点。 - Wayne Werner
1
@user275455:这并不一定是唯一正确的方法,只是在我的情况下(以及我个人的看法),比目前环境中存在的混乱要更加高效。 - shipmaster

0
展示给他们这个网站:WeDoTDD.com - 实际公司团队使用案例。那些在真实公司成功实践TDD的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接