推进代码审查和单元测试实践


15

作为一个团队领导来管理一组没有代码审查和单元测试经验(并且不需要)的开发人员,您如何提高代码审查和单元测试的实践水平?

您将如何创建一种方法,以使代码审查和单元测试自然地适合开发人员的流程?

这两个方面的阻力之一是“我们总是紧迫日期,因此没有时间进行代码审查和单元测试”。

代码审查的另一个阻力是我们目前不知道该怎么做。我们应该在每次入住时检查代码,还是在指定日期检查代码?


绝对是一个有趣的问题-这里还有其他类似的问题,但是它们都是从程序员那边问的,而不是主管/ PM。
Michael K

Answers:


17

您的团队成员是否真的同意代码审查和单元测试是件好事,只是没有时间了?

还是他们只是以此借口拒绝这个主意?

在第一种情况下,解决方案是立即开始做。(好吧,如果您处于重要里程碑之前的最后几天,也许您可​​以等到之后才开始-但再也没有。)我们在我以前的工作场所遇到过这种情况,我是质量工程师,负责改善编码实践并总的质量。我们一直将代码审查的开始推迟到下周。有一天,我意识到我们已经做了一个月左右的时间,除非我尝试其他方法,否则可能会一直持续到最后。因此,我宣布了该周的首次代码审查。我告诉大家“没问题,如果它不完美,或者我们还不完全知道该怎么做,我们将立即开始做,看看它会如何发展,并在我们学习的同时改善自己的状况”。至少在我离开公司之前一直奏效。

在第二种情况下,您可能需要更多的教育和与团队进行公开讨论。讨论代码质量问题,询问他们在开发过程中(或缺少这些问题)/在代码/测试等中看到的问题。并共同讨论如何解决这些问题。最终目的不一定是进行代码审查-只是手段,而目标是改善开发过程和其输出质量。事实证明,还有其他更痛苦的问题可以更轻松地加以改善,更快地带来更多利益;然后先拿这些。它们甚至可能是环境或过程中的琐碎变化。所有这些都将改善团队士气,建立相互信任并帮助团队凝聚力。

最重要的是,您不能对任何人强加质量-您只能消除创造质量的障碍。通过在团队事先未达成共识的情况下执行严格的规则和强制性措施,您可能会疏远团队并最终阻止您期望的质量改进。OTOH通过公开讨论并就团队面临的最紧迫问题以及如何改善情况达成共识,您更有可能获得团队的支持。从长远来看,这将在保持质量改进动力方面发挥关键作用。


很好的答复。不太确定您是否具有用于代码审查的系统,以便他们可以更轻松地接受想法?我认为每个人都知道审核和测试很好,只是他们没有看到。一个好的代码审查系统的目标是帮助他了解情况,并使单元测试更加容易。
Graviton

@Graviton,可以肯定的是,您可以进行几次试用代码审查,以便人们了解它的实质,并可以决定他们是否喜欢它。确保没有责备发生,人们继续关注发现的问题,而不是作者。首先选择正确的代码,甚至可能选择当前代码,而不是任何当前团队成员编写的旧代码。它应该相当复杂,但又不要太古怪,以便人们可以实际地理解它,甚至可以发现其中的一些实际错误。
彼得Török

+1说“现在开始”。IME是克服拖延症的唯一方法。
Michael K

5

经典问题。没有足够的时间来正确地做它,总是有足够的时间来重做工作。在人们开始采取最佳做法之前,似乎永远没有足够的时间进行最佳做法。特别是因为胜利对发展之外的人是看不见的。

代码审查的关键是您希望尽快审查尽可能少的代码。这样一来,您就可以更轻松地花费时间进行审查,使代码变得新鲜,并且可以轻松实现建议的改进。在极端情况下,您要检查每个签到。http://code.google.com/appengine/articles/rietveld.html就是一个自动化的好工具。这是Google内部使用的一种工具变体,可在每次签入时强制执行代码审查。

几十年前,经典的“计算机编程心理学”中描述了代码审查的挑战。问题是程序员倾向于将自己的形象与编程技能联系在一起。这意味着,每当程序员面对证据表明他们的技能没有达到标准时,就有一种将其个人化的趋势。这可能导致严重的冲突。如果您选择了史蒂夫·麦康奈尔(Steve McConnell)的经典《快速开发》(Rapid Development),他将为您提供许多有关如何建立代码审查过程的建议,以减少此类冲突的可能性。(一个关键要素是确保管理过程中永远不要参与任何事务。)请注意,这减少了冲突的可能性,但并不能防止发生冲突。

也就是说,收益远远超过成本。仅举一个指标,IBM发现代码审查是一美元一美元的查找和消除错误的最有效方法。这不会以任何方式取代您的质量检查部门。但这导致他们发现的问题少得多。而这是在您获得收益之前,它涉及到如何加快学习速度,传播知识等。


+1为实际研究结果。您是否有指向IBM页面的链接?
l0b0 2011年

我没有指向它们的链接,但是Code Complete有。
btilly 2011年

3

不要给他们选择。强制进行测试和审查。如果他们不合作,则可以采取强硬手段,例如拒绝未经测试或未经审查的促销活动。如果情况真的很糟,请解雇最严重的罪犯。

我已经看到了一些团队总是落后于计划的情况,因为他们总是在修复应该由测试和审查发现的错误。从长远来看,更多的工作可以节省更多,而您越早使团队加入团队,团队就会越好。

不幸的是,这可能需要一些时间才能真正看到结果。为了鼓励这种做法,您可以开始绘制错误报告率,错误修复平均时间和功能实现率的图表。我通常会发现,经过大约六个月的测试和审查,这些指标将得到改善,您的团队最终将获得它。


我担心的是,如果您已经进行了6个月的开发而不进行测试和审查,那么在您需要实施这些实践时,他们会说他们没有时间,因为他们需要修复bug。
Graviton

相当苛刻的答案!
Marcie

抱歉,六个月后我可能还不清楚,我的意思是经过六次测试和审查后,指标明显好转了。关键是,仅需从测试开始就可以获得好处-测试不会立即获得收益。
smithco

1

引入tdd违反开发者的意愿是困难的。这是学习爱tdd的艰难方法。

由于tdd在绿色领域最有效(如果在测试结束后很难进行,则成本很高,效率很低),所以我将从一个小型团队开始,该团队会实施新的东西。如果您在团队中发现两个不喜欢tdd的开发人员,而不是其他人,那是一个很好的起点。请记住,当tdd开发人员没有tdd经验时,他们的生产力就会受到影响。

此tdd开发是进行代码审查的良好起点。讨论tdd如何影响程序体系结构以及如何简化软件维护。

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.