如何确定代码审查过程的有效性?


14

我们已经在组织内部引入了代码审查流程,并且看起来运行良好。但是,我希望能够随着时间的推移来衡量该过程的有效性,即我们是不是因为代码干净而没有发现bug,还是人们只是没有发现bug?

当前,我们没有有效的全自动测试过程。我们主要采用手动测试,因此我们不能依靠现阶段发现的缺陷来确保代码审查过程正常进行。

是否有人之前曾遇到过此问题,或对衡量代码审查的效果如何有任何想法?


7
查找错误不是代码审查的唯一目的。它们对于加强编码标准,交叉训练,思想和技术的交叉授粉等也很有用
Jason

感谢Jason&理解,但是在这种情况下,我试图找出如何确保该过程尽可能早地在开发过程中实现预防缺陷的核心目标

@ Johnv2020但这不是它的核心目标 ...您完全错过了代码审查的重点。这就像在喷气机机队中添加了一项重要的新安全功能,然后尝试根据坠机次数判断其有效性。有太多变量和其他因素需要考虑,无法准确地声称安全功能提高了发生事故的几率。
maple_shaft

@maple_shaft:比喻弱。尝试评估错误率更像是尝试评估崩溃中用于死人的棺材数量。
S.Lott 2012年

1
在我参加的所有代码审查中,许多错误已在单元和更高级别的测试中修复。也就是说,代码仅由于编译而不能准备进行审查。
皮特·威尔逊

Answers:


7

可以从代码审查中收集许多指标,有些甚至可以扩展到项目的整个生命周期。

我建议收集的第一个指标是缺陷去除效率(DRE)。对于每个缺陷,您都可以确定引入缺陷的阶段以及消除缺陷的阶段。同时使用的各种缺陷检测技术都将同时进行评估,因此它同样适用于需求评审,设计评审,代码评审和单元测试。 , 等等。您可能会对代码阶段捕获的缺陷数量特别感兴趣,因为这可能包含您的单元测试和代码检查。如果从代码阶段到集成测试阶段甚至整个领域都存在许多缺陷,那么您就应该对后期编码实践进行评估。

各种会议指标也将是相关的。这些包括准备时间,开会时间,代码行读取,审查中发现的缺陷等等。从这些数据可以得出一些观察结果。例如,如果您的审阅者花大量时间阅读代码以准备进行审阅,但发现的问题很少。结合DRE数据,您可以得出以下结论:如果缺陷是在集成测试或现场中进行测试,则您的团队需要专注于其检查技术以发现问题。另一个有趣的注释是与会议时间相比,在会议中读取的代码行(或其他尺寸度量)。研究发现,典型的代码审查速度为每小时150行代码。

使用这些指标中的任何一个,那么重要的是要了解它们对流程的影响。可以使用诸如why-becauseFive WhysIshikawa图之类的技术进行根本原因分析,以确定代码审查(或任何其他质量改进技术)无效的原因。

您可能也有兴趣在这篇文章中有关从Ganssle集团视察,并通过卡珀斯·琼斯在相声有关缺陷潜力和DRE的文章


2

尽管在很大程度上代码审查确实可以发现问题,但这些问题很可能会导致测试无法发现。但是,我认为您可能有一个非常稳定的代码(实际上没有错误),但是仍然以极其不可读或不太可维护的方式编写。因此,它可能是代码审查可能发现错误,如果有在代码实际上没有真正的问题。

话虽如此,我真的会问,为什么要进行代码审查?这样做很重要的简单原因是,应该对代码进行改进,使其更具可读性,可维护性和可发展性。许多人应该能够阅读更清晰的代码并从中受益。从这个意义上讲,代码审查过程的最简单目标是生成干净的代码。因此,有效性的衡量标准是现在的代码有多干净。

正如您想获得可衡量的效果-这是我的建议:

  1. 公制涉及到返工量-的返工是在同一个给定的模块/对象/工作项目申请时间数量是如何衡量贫穷的代码是在可维护性方面。当应用有效的代码审阅时,我们能够多久减少同一模块上的返工请求?

  2. 与每个变更请求所引起的变更量相关的指标。每次发生更改请求时- 分解不良的代码将始终会影响大量模块。一项措施可能表明,在对代码进行审查之后- 过去对于类似变更请求的这种变更分布是否有所减少?

  3. 与可以响应更改请求的平均速度有关的指标。当代码更清晰时-越来越好,它是对所需更改的响应。在检查过程中清除代码后,我们发现在响应相似大小的请求时,速度有所提高。

我没有给出确切的度量单位-您可能可以通过这种方法针对此制定更精确的度量。在上述方法上,可以有更多的扩展形式主义。

基本上,我的观点是,与其着眼于代码审查过程所确定的错误数量,不如说是数量。我们应该根据代码审查是否能够使代码更整洁,更精简和易于维护的状态来衡量有效性;因此,如果我们看到将来类似的变更请求变得更加有效,可以衡量该有效性。


1
尽管不是“错误”,但缺乏可读性,可维护性或可扩展性是代码中的缺陷,应这样对待。没有理由为什么不能在缺陷跟踪器中跟踪这些问题,以及功能上的实际错误。这样,您还可以在编码阶段打开跟踪许多其他与缺陷相关的指标的功能。
Thomas Owens

1
作为开发人员,我当然希望看到清晰的代码。但是,代码审查非常昂贵。因此,作为一名为项目提供资金的经理,干净的代码确实不是在我的开发预算中增加5-10%的成本和时间的诱人原因。尤其是当(作为经理)我的奖金/审查与按时/预算内完成当前项目紧密相关。因此,您认为代码审查的主要原因是要获取干净的代码,这会使任何好的经理说ROI不值得。您可以争论长期的回报,但是到那时,按时/按预算交付经理的职位将被提拔出来
Dunk

...问题。虽然提倡代码评审的经理将有成功的维护项目,但由于没有按时/按预算完成原始项目,经理将因此而受到重创。OTOH,如果代码审查帮助发现了缺少审查而没有的错误,并且让代码审查经理按时/在预算内完成了项目,那么情况就不同了。那是需要出售的故事。这也意味着干净的代码不能成为代码审查的原因。
Dunk 2012年

@Dunk代码审查的成本取决于代码审查的类型。由3-5位读者,主持人和作者在场(一个房间中5-7人)进行的正式检查非常昂贵。由另一个开发人员浏览代码10-15分钟而组成的桌面检查也是代码审查,但是形式上不那么正式而且便宜得多。偶对编程也可以视为一种“代码审查”技术。适当的技术由以下因素决定,这些因素包括(但不限于)代码的关键程度,所需的缺陷率以及要投入的时间/金钱。
Thomas Owens

@Dunk-我认为您已经提出了从项目经理手中做出“我们应该进行代码审查”的决定,并将其交给长期负责软件平台的经理的争论。就正在开发的系统的寿命而言,从总体上讲,IMO花费了5-10%的额外资金用于体面代码审查的开发。但可能与当前项目的预算和时间表无关。
达伍德说要恢复莫妮卡(Monica)
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.