在源代码管理存储库中“查看”源代码的最佳实践是什么?


12

在源代码控制存储库中管理已审核的源代码的最佳方法是什么?源代码应该在签入之前经过审查过程,还是应该在提交代码后进行代码审查?如果检查是在将代码签入到存储库后进行的,那么应如何跟踪?

Answers:


4

Google在我所见过的任何地方都拥有最佳的代码审查实践。我遇到的每个人都完全同意如何进行代码审查。口头禅是“经常复习”。

假设您使用类似于Graham Lee建议的过程。(这是我以前自己使用的一个过程。)问题是,要求审阅者查看大量代码。这需要付出更多的努力,而且很难让审稿人去做。而且,当他们这样做时,很难让他们彻底地做到这一点。此外,当他们注意到设计问题时,很难让开发人员返回并重做所有工作代码以使其更好。您仍然可以捕获东西,它仍然很有价值,但是您不会注意到您错过了90%以上的收益。

相比之下,Google会对每个提交进行代码审查,然后才能进入源代码管理。天真的许多人认为这将是一个繁重的过程。但这在实践中并不可行。事实证明,单独查看小段代码要容易得多。发现问题后,更改设计的工作量将大大减少,因为您尚未针对该设计编写大量代码。结果是,进行彻底的代码审查变得容易得多,并且更容易解决已更改的问题。

如果您希望像Google一样进行代码审查(我真的非常建议),那么可以使用软件来帮助您。谷歌已经发布了与Subversion集成的工具Rietveld。Go(语言)是使用Rietveld版本开发的,该版本经过修改可与Mercurial一起使用。对于使用git的人,有一个重写,名为Gerrit。我还看到了为此推荐的两个商业工具,坩埚评审委员会

我唯一使用过的是Google内部版本的Rietveld,对此我感到非常满意。


4

我在多个团队中使用的一种技术是:

  • 开发人员可以将源代码集成到自己的分支机构或本地仓库中,而无需进行审核
  • 开发人员可以与主干/主服务器集成,而无需审查
  • 在将代码从主干/主服务器集成到候选发布分支之前,必须对其进行审阅并解决审阅注释

寻求评审是代码作者的责任,而发布分支维护者的责任是确保仅合并经过评审的代码。

有一些工具支持代码审查,但我从未使用过。可以在仓库内部跟踪对任何合并进行审核的人员。我使用了svn属性和提交所附加的perforce作业来显示谁查看了哪些内容。


2
+1:“代码审查的责任是代码作者的责任”。除非管理层要求完成审查,否则它们将变得无关紧要。必须有某种奖励系统(甚至是临时的或非正式的),否则将无法完成。分支维护者会回答某人,并且会因检查代码审查而受到纪律处分。这个难题也很重要。您能描述为什么人们会受到纪律处分吗?
S.Lott

@ S.Lott是我所服务的团队的成员,职业自豪感。另外,如果您没有得到审查,则您的代码也不会集成(如上所述)。因此,您的代码不会进入产品,并且您当天/周/迭代都没有做任何工作。如果开发人员没有动力去做他们的工作,那么与组织源代码控制存储库相比,您会遇到更糟糕的问题。

@Graham Lee:“专业骄傲”?我sc之以鼻(但是没有太多事情要做。)“问题是开发人员没有动力去做他们的工作”。许多管理人员会在时间表之前要求发布,或者要求加入其他功能来破坏良好的流程。有哪些激励因素可以防止破坏流程?是什么让经理说“我们明天需要这个,我们没有时间进行代码审查”?
S.Lott

@ S.Lott我不了解您,但是无论经理认为他对我的工作情况有更多了解,我都不会发布一大堆狗屎。

@Graham Lee:我尽量避免发布错误的代码。我的问题是“是什么促使您的团队避免管理层破坏您的流程”。这是一个很好的过程,我想了解更多。
S.Lott

1

我从未按提交/未提交的标准来分离代码以进行审查-我遇到的唯一标准是单元测试和集成测试是绿色的。

至于跟踪,我建议您在自己喜欢的问题跟踪器中更新流程。例如,而不是:

  • 产品负责人->分析师->开发人员->质量检查->发布工程师

您可能想再介绍一个阶段(回顾):

  • 产品负责人->分析师->开发人员->审稿人->质量检查->发布工程师

因此,在每票实现的状态,你可以指定一个评论家,仅来自门票将提前到QA。


1

我只有一种代码审查的经验,所以我不能说它有多好。

我当时与一小群(〜10-15)的编码人员一起工作,而我们使用的是VS Team Foundation Studio。我们被要求每天提交一次代码,然后再由小组中的其他人(希望也由参与该项目的人)审查每个提交代码。提交期间,该人的姓名也包括在字段中。


每天只提交一次,让我感到震惊。抱歉。
btilly 2011年

也许。一开始我也感到有些惊讶。但是,这并不是一个硬性规定,您可以根据需要尽可能多地“搁置”本地更改。
apoorv020 2011年

0

我曾在一个团队中工作,该团队每周对代码进行审查,并逐项审查所有签入的内容。这意味着我们并不总是与代码审查保持最新,但是它实现了我们打算实现的目标。

因此,首先,请问一下您想通过查看代码实现什么。在我们的案例中,并不是要赶上白痴开发人员,而是要有能力而非无能。它的确使团队能够了解系统的其他方面,并允许在将某些可疑的设计决策付诸实践之前对其进行纠正。值得怀疑的是,我的意思是总是有不止一种方式给猫剥皮,而且并不是每个人都知道工具箱中已经有猫剥皮刀了。


0

我们处理代码审查的方式是,审查项目跟踪软件中的每个任务。当时我们使用的是螳螂和SVN。我们的项目提交被绑定到两个系统中。每次提交都必须与螳螂相关联。任务完成后,状态分配为“准备审阅”。

然后,RFR项目要么被有空闲时间进行审核的任何人拿走,要么被分配给特定人员进行审核。在星期五,必须在一天结束之前检查所有RFR项目,以免结转到下周。

我们在此过程中遇到的唯一问题是有大量文件的大型物品。为了解决这个问题,编码人员和审阅者会聚在一起,编码人员将遍历所有更改,直到审阅者理解它们为止。他们将一起进行代码审查。

当管理人员指示如果完成对等编程时,不需要进行单独的代码审查,则此过程中断。开发人员对此过程变得松懈,并开始引入一些小愚蠢的错误。最终,我们回到了原始流程,一切又恢复了。


0

在我的团队中,过去一年左右,我们一直在使用一种练习,效果似乎很好。

我们的组织使用Perforce进行版本控制。Perforce(截至一年前)包括一项称为“搁架”的功能。通过搁置,我可以“搁置”针对特定问题的更改。它们存储在版本控制系统中,但未检入。然后,我请团队中的另一位开发人员检查代码。

另一个开发人员可以在自己的计算机上查看我在Perforce中待处理的更改,并将更改与最新修订进行比较。如果他想尝试我的更改,他也可以“搁置”到本地计算机上。他完成审查后,会通知我。然后,在评论的末尾用“鲍勃评论”检入我的代码。

这对我们来说真的很好。首先,事实证明,代码审查通常是非常有用的。此外,Perforce的货架功能使我们能够进行检查,而无需检入或遇到任何重大困难,即使我们的团队在地理上分布广泛-这也非常重要。而且效果很好。

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.