如何进行Google的代码审查

很长时间以来,我一直对代码审查问题感兴趣。 很多时候会出现一个或另一个问题,无论是代码质量还是团队中的气候问题。 实际上,代码审查(如果不是唯一的话)是开发团队中发生冲突的最重要场所之一。

最近,在为下一版Zinc Prod播客做准备时,我发现Google已发布了《代码审查》实践准则,其中充斥着宝贵的思想。 所有的材料都非常丰富,无法写成一篇文章,因此我将尝试突出最有趣的想法(对我而言)。


所以走吧


原始文章中使用的术语:


CL-变更清单。 但通常称为合并请求或合并请求,因此在本文中我将使用缩写MR


LGTM-对我看起来不错。 简而言之,当他们按下“批准”按钮时。 我将使用“ aprov”一词,这对人们来说更容易理解。


理想先生


在实践中,考虑MR时可能会遇到各种极端情况。 整个团队中的某人zadalivaet都发表了评论,直到一切都变得微不足道,得到纠正,然后有人再看一下逻辑并按下“ upruv”。


一个有趣的想法写在Google文档中。 MR不应是完美的,但应改善代码库。 也就是说,随着每次引入的更改,代码将变得越来越好。 而且,如果MR增加了很多好处,那么您就不必为小事找错了; 更快地获得改善的利润更高。


没有MR应该会使代码更糟。 唯一的例外是,如果MR是某个问题的紧急解决方案。


自由发表评论


尽管您无法摆脱琐事,但是您可以将这些琐事自由地写到至少每一行。 与上一段的矛盾很容易解决:审阅者在英语中给trifles和nit-picking加上前缀“ nit:”。 nitpick(挑剔)。 不必修正这些注释,但是,MR的作者可能想更正某些内容,或者即使没有,也要考虑到将来的一些观点。


关于个人喜好的事实


几乎总是基于最佳实践的标准软件设计原则胜过棘手的自行车。 因此,应优先考虑它们。
如果您可以应用几种标准方法,则由作者决定。
直接报价以获得更好的理解:


软件设计方面几乎从来都不是纯粹的样式问题,也不是个人喜好。 它们基于基本原则,应该权衡这些原则,而不仅仅是个人意见。 有时有一些有效的选择。 如果作者可以证明(通过数据或基于可靠的工程原理)几种方法同等有效,那么审阅者应接受作者的偏爱。 否则,选择取决于软件设计的标准原理。

如果审稿人和MR的作者不同意


首先是试图在有关MR的评论中达成共识。 如果这不起作用,则进行个人讨论。 如果您仍未达成共识,请吸引团队成员。 但最重要的是,由于两个人的意见分歧,MR不应长时间停留。


在评论中讨论->亲自讨论->在团队中讨论->继续前进


MR检查速度


速度非常重要。 如果您每隔几天发表一次评论,那么MR的作者将抱怨他们发现他有问题,并阻止了他的工作。


如果快速检查了MR,那么任何评论都不会成为大问题-毕竟,这里将检查其修复,然后任务将继续进行。


Google建议您不要专心于自己的任务,但是如果您分心,则请查看是否有需要修改的地方。 例如,他从午餐回来了-他修改了。 上班-修订。 等等


MR查看顺序


首先,您需要从整体上了解MR。 是否有必要,代码是否在正确的位置(或者应该在单独的库中),是否存在全局问题?
即 如果代码不存在或根本不存在,则查看一些实现细节是没有意义的。


通常,查看顺序很重要,以便尽快向作者提供反馈(请参见上一段)。


当您从整体上看待MR时,您需要浏览主要文件,即 检查最重要的事情(如果不清楚最重要的事情,可以询问开发人员)。


同样,任何问题都应立即报告,即使您尚未检查MR并决定以后再进行一般检查。


接下来,您需要选择一个逻辑顺序来查看其余文件。 请勿跳过任何文件。


查看时要寻找什么


  • 代码设计合理
  • 从此代码的用户角度,无论他们是谁,都可以很好地实现此功能。
  • 外观(如果有)应该很好
  • 考虑了并行编程的所有细微差别(如果有)。
  • 代码未重新设计
  • 开发人员不会过度劳累:您不需要编写可能需要或不需要的代码
  • 该代码具有测试
  • 测试设计合理
  • 名称(所有内容)都经过精心挑选
  • 对代码的注释是可以理解和必要的。 他们必须解释为什么这样做,而不是如何做到。
  • 添加了文档。
  • 该代码与样式指南相对应。

MR太大


必须要求太大的MR才能分解。 这几乎总是可能的。


如何在代码审查中写评论


  • 您需要有礼貌,而不要变得个性。 讨论代码,而不是编码器。
  • 不仅发布更正指令,还解释了为什么需要修复它们。
  • 保持平衡:找出问题并推动开发人员,以便他自己了解如何最好地解决该问题; 或立即发布现成的解决方案。 第一个开发开发者(战略利益),第二个改进并加速MR(战术利益)。
  • 如果审阅者在某些时候不理解代码,并要求作者解释什么,那么最好的答案就是更改代码。 这样就可以毫无疑问地从代码中清除一切。

如果您不同意您的意见


有必要详细了解。 也许您听不懂,要求更多信息。 也许相反。 无论如何,通常只有在双方进行了两轮解释之后才能理解。


担心作者MR


如果审阅者坚持进行某些更改,则可能会使开发人员感到沮丧。 但是,大多数情况下,开发人员会因为评论的形式而不是内容而感到沮丧。 有礼貌,用论点解释,很可能一切都会好的。


“我待会儿解决。”


如果开发人员同意代码中存在问题,但要求MR,并承诺将再次解决该问题,那么Google的专家认为,这种“后期”通常不会发生。 因此,如果MR不是紧急的错误修正,则需要坚持修正。


结论


我真的很喜欢Google的这份文件。 尤其是带有“ nit”一词的生活黑客,强调代码审查速度,并且认为MR不应是完美的。 这似乎很简单,但是只要不明确地考虑这一点,就不会达到目的。


如果这篇文章对读者来说很有趣,并且有很多优点,那么我将写以下部分:作者MR进行的代码审查过程。


更新:本文的 第二部分


此外,在即将发行的《锌销售》中,我们将从不同角度详细讨论审阅代码。 因此,请务必订阅我们的开发播客

Source: https://habr.com/ru/post/zh-CN473308/


All Articles