Microsoft的代码审查如何工作?

您是否曾经想过全球最大的软件公司之一如何通过代码审查来确保高质量代码?

也是。这就是为什么我们与同事一起调查了Microsoft如何进行代码审查。

这是常见的做法吗? 开发人员是否需要进行代码审查? 他们使用哪些工具?

让我们在这篇文章中找到答案,这是有关代码审查更大的博客系列文章的一部分,该系列文章向您展示了代码审查的最佳实践代码审查的陷阱代码审查在Google的工作方式等等。

我还准备了一个代码审查电子书,您可以在这里进行注册 ,其中包含所有这些文章的所有重点内容,以及其他代码审查清单和备忘单。

首先,让我为您提供有关Microsoft的一些关键信息。 微软拥有约140.000名员工 。 其中约有44%,即超过60,000名员工是工程师。 成千上万的工程师同时使用相同的代码库来开发Office,Visual Studio或Windows等几种产品。

我说这些都是为了给您一些上下文和观点,以协调和管理软件开发过程的含义。 可以想象,确保不同子团队开发的代码可以完美地协同工作是一项艰巨的任务。 而且,代码审查在Microsoft中扮演着重要的角色,它可以实现如此大规模的顺利协作。

Microsoft的代码审查是开发过程中不可或缺的一部分

在Microsoft进行代码审查时,重要的事实之一是它是一种被广泛采用的工程实践。 成千上万的工程师认为这是一个很好的最佳实践。 而且大多数高性能团队都花大量时间进行代码审查。

在Microsoft,代码审查是一种高度采用的工程实践,被认为是最佳的实践。 (点击发推

在Microsoft调查代码审查

因为代码审查在Microsoft开发过程中起着如此重要的作用,所以它是我们深入研究并真正了解这种做法的利弊的理想目标。 在Microsoft进行的有关代码审查的大规模研究中,我们采访,观察和调查了900多名开发人员的代码审查实践。

我们的目的是了解Microsoft如何进行精确的代码审查。 我们想知道,开发人员在进行代码审查时会遇到哪些代码审查陷阱 ,以及他们为克服这些挑战而开发的最佳代码审查最佳实践

您可以从Microsoft的代码审查实践中学到什么?

对于小型团队和组织而言,大多数经验教训对于大型团队和大型组织而言都同样有价值。 万一您的团队还没有进行代码审查,我以一种向您展示这种做法的好处的方式总结了我们的发现。 我还将解释代码审查生命周期的样子,以便您可以将这种实践纳入自己的开发过程中。

如果您的团队已经进行过代码审查,则可以将您的实践与Microsoft的代码审查实践进行比较。 您的代码审查生命周期看起来是否有所不同? 在下一篇文章中,您将从代码审查陷阱代码审查最佳实践中学习 。 有了这些信息,您就可以开始查看您的团队是否已经实施了我介绍的所有最佳实践并克服了挑战。 但是,让我们开始吧:

Microsoft工程师多久执行一次代码审查?

在这项研究中,有36%的开发人员表示他们一天执行多次代码审查。 另有39%的开发人员表示,他们每天至少进行一次代码审查。 12%的人每周进行多次代码审查,只有13%的人说他们在过去一周未进行代码审查。

说明文字:Microsoft开发人员多久检查一次代码?


这意味着Microsoft的开发人员将大量时间花费在代码审查上。 因此,重要的是要确保这段时间值得花费。 但是,代码审查有哪些好处?


Microsoft的开发人员将大量时间用于代码审查。 (点击发推)

代码审查有哪些好处?

开发人员提到代码审查的好处的最重要原因是提高代码质量并发现代码中的缺陷。 代码审查的另一个重要好处是知识转移。

知识转移意味着互相检查代码的团队成员会熟悉大部分代码库。 但是,这也意味着在团队内部开发了代码审查最佳实践 。 另一个优势是,新团队成员和初级开发人员可以在查看或获得反馈的同时学习和提高他们的编码技能。

如果开发人员在代码审查期间讨论替代解决方案,则不仅会改善代码库,而且对所有相关人员都有学习作用。 因此,学习,指导和自我完善是所有将代码审查视为Microsoft有益实践的原因。

标题:代码审查的好处

开发人员进行代码审查以改进代码,查找缺陷,但主要是为了增加团队成员之间的知识传递以及学习效果。 (点击发推)

但是开发人员通常如何进行代码审查?

代码检查可以通过多种方式执行。 有时,这就像一个开发人员走到另一个开发人员的办公桌前一起看一些代码一样非正式。 有时,团队会一起检查代码。 但是,在Microsoft进行代码审查时,最有可能遇到的情况是代码审查是借助工具完成的。

Microsoft的代码审查通常是通过内部工具完成的

有各种各样的代码审查工具可用,并且在Microsoft,团队可以自由选择他们的工具。 在2016年,89%的开发人员表示将使用CodeFlow代码审查工具。 稍后,我将在Microsoft上解释有关此代码检查工具的更多信息。 从那时起,随着Git的崛起,工具领域发生了变化。 只要有更新的号码,我就会立即添加。 但是,让我们考虑一个典型的审查情况:

让我们想象一下微软的一名开发人员,让我们称她为Rose。 Rose刚刚完成了功能的一部分,现在希望获得同行的反馈。

Rose如何在Microsoft进行代码审查?

好了,正如所说的,Rose准备获得一些反馈。 因此,她首先准备代码进行审查。 此步骤包括她打开代码检查工具,使她可以预览代码更改。 代码审查工具执行一些区分任务,这些任务可以帮助Rose准确查看她所做的更改。

在仔细检查了这些更改之后,她准备了一条小纸条,告诉审阅者她做了什么以及为什么这么做。 本说明可帮助审阅者了解代码更改的目的及其动机。 现在,可以将代码发送给审阅者了。

Rose如何选择合适的代码审阅者?

许多经验丰富的开发人员都知道谁应该参加代码审查。 但是,对于团队中的新成员或新的工作领域,选择起来可能会比较棘手。 如果罗斯不知道自己应该添加谁,她可以查看团队政策或询问同事。 她还可以使用代码审查工具的推荐功能,该功能可帮助您根据经验和代码基础来选择审查者。

谁是相关的审稿人?

Rose选择了她认为可以为这段代码贡献知识的审稿人。 审阅者通常是其他开发人员,但也可以包括其他利益相关者,例如开发人员工程师,UI专家或经理。 选择一些审稿人是因为他们的专业知识,而选择其他审稿人是为了随时了解即将到来的变更。

标题:代码审查的常见步骤

Rose要求同​​龄人提供反馈

一旦选择了每个人,Rose就会发送代码审查(通过按发送按钮)。 代码审查工具会自动发送通知,以通知所有人已创建了代码审查。 显然,通知将发送给所有审阅者。 但是,通常还会将其他方(例如其他团队的经理或产品经理)也添加到通知列表中,并为每次审阅自动通知他们。 这些通知使他们能够停留在循环中。 他们不需要执行审核。

接收反馈是一个反复的过程

一旦Rose的同事有时间,他们将查看代码审查。 每个审阅者都可以注释代码并添加注释。 完成评论后,审阅者会将带注释的代码发送回Rose。 Rose现在可以处理注释,并准备代码的新改进版本。

审阅者通常会寻找类似的东西:代码看起来没有错误吗? 有建筑上的问题吗? 是否有一些小问题,例如缺少评论,拼写错误? 并非所有评论都同样有价值。 但是,有几种最佳实践可提高代码审查注释的价值。

罗斯准备了代码的新改进版本

Rose通过修正和解决建议来处理反馈。 如果罗斯发现存在一些误解或其他有争议的问题,她可能会去找同事亲自讨论。 这有时比通过工具更容易,更个性化。

无论如何,一旦她完成了所有反馈,就将代码的新版本发送给审阅者。 该新的改进版本称为修订版。

如果需要,她将收到进一步的反馈。 此循环是否持续几次取决于更改的类型及其质量。 对于简单和小的代码更改,通常只需要一个代码审阅修订。 对于其他更复杂的更改或有问题的代码中的更改,可能需要几次迭代。

这是完全正常的,部分希望此代码审阅反馈周期能激发作者与代码审阅者之间的讨论。

所有审阅者都批准,Rose签入代码

在此审查周期之后,审查者将代码标记为可以,并且Rose最终可以将代码检入通用代码库。

有些团队制定了政策,允许开发人员在实际审查完成之前签入代码。 为了允许异步审查和加快开发速度,通常将其限制在微小的变化上。

我描述的所有步骤都是Microsoft典型代码审查生命周期的一部分,并由所有团队执行。 根据团队的政策,团队对每个步骤的要求都更加严格或严格。

并非所有团队都一样

可以想象,并不是所有的60,000名工程师,也不是成千上万的团队都这样做。 Microsoft的某些团队在代码检查生命周期中需要其他步骤或工具。 我想简要介绍一下团队添加到代码审查过程中的一些其他步骤。

代码审查,包括测试结果

您最想要的是通过检查“自动检测”的错误代码来浪费时间。 我的意思是,如果您可以运行自动化测试并意识到该代码无法按预期工作,那么这就是您应该做的:在审查之前运行测试。

这就是为什么一些团队要求在每次代码审查时都提交测试结果的原因。 这样,没有人会忘记运行测试。 而且它可以确保在给定的代码更改下测试实际上已经运行并通过。

其他团队甚至更进一步,以这样的方式配置了代码审查工具:开发人员提交的每个代码审查都会触发构建。 该版本包含该确切的更改,并且还启动了一系列自动化测试。 此构建的结果和这些测试将附加到代码审查中。 通过这种方式进行配置,可以确保已使用公共代码库中的最新代码更改对代码更改进行了测试。

代码审查,包括用户界面

如果更改影响用户界面,则要求开发人员提交屏幕截图也是一个好主意。 这样,代码审阅者可以在不运行代码的情况下看到代码更改的影响。 其次,在自己的计算机上运行代码时,代码审阅者可以发现差异。

代码审查,包括静态分析

静态分析工具仅与它们的配置一样好,但是就样式问题而言,它们可以为代码审阅者节省大量时间。 Microsoft的某些团队将自动静态和动态分析工具用作专用的bot审阅者。 这些机器人在代码样式和其他静态问题上发表评论。 因此,可以腾出时间让人工代码审阅者执行更多有趣的任务。

微软的代码审查工具

多年来,Microsoft进行代码审查的事实上的标准之一是内部工具CodeFlow。 这是一个复杂的代码审查工具,可支持开发人员并指导他们完成代码审查的所有步骤。 CodeFlow在代码准备过程中提供帮助,自动通知审阅者,并具有丰富的评论和讨论功能。

您可以在下面的屏幕截图中看到,CodeFlow是一个UI重工具,非常类似于Word或PowerPoint。

标题:CodeFlow的屏幕截图(2016年)

CodeFlow的界面说明

如果需要,可以跳过此步骤,但是对于所有感兴趣的人,我将带您通过上图所示的CodeFlow界面。 查看屏幕截图,在左侧(A),您会看到所有受影响的文档。


同样在左侧,您会看到(B)分配给该评论的评论者列表以及他们的状态(例如,已签署或待审核)。 活动文档显示在编辑器(C)中。 在底部,您可以看到(D)所有文档的注释列表。

另一方面,在活动文档(F)中只有一个注释。 该注释与代码的具体部分(即一行中的一个单词)相关。 最后,在顶部,您将看到代码审查的总体状态。 在这种情况下,完成。 之前的数字表示不同的修订版本。 在此审查中,有五个修订。

评论功能

CodeFlow最好的功能之一就是它的注释功能。

代码审阅者可以非常精确地选择她要评论的代码部分。 例如,审阅者甚至可以仅突出显示一行中的一个或两个字符,而不是突出显示整行。 然后,审阅者可以对该选择附加评论。

通知该注释的代码作者或其他审阅者,并且可以围绕该注释的话题形式发起对话。

讨论功能

这种评论功能感觉就像在诸如Twitter或Facebook之类的社交媒体平台上评论。 因此,CodeFlow中的评论经验非常自然,可以进行丰富的对话和讨论。 另一个不错的好处是可以为每个注释线程分配状态。 该状态例如可以是“将不修复”,“已解决”或“打开”。

代码审查修订之间的比较

一个有用的功能是可以选择两个不同的代码审查版本,并比较两者之间的差异。 这意味着您可以准确地看到代码审查作者在一个代码审查修订版和另一个代码审查修订版之间进行了哪些更改。 跟踪审核进度非常方便。

代码审查分析工具

开发人员花费大量时间在Microsoft进行代码审查。 为确保充分利用这段时间,Microsoft拥有自己的代码审查分析平台。

该平台存储所有代码检查数据,从正在检查的代码开始,到代码检查中涉及的开发人员,再到开发人员的所有注释。 甚至可以追溯到每个修订的代码更改。

代码审查数据是 Microsoft对代码审查进行一些实证研究的基础 。 许多产品团队还使用它来跟踪他们的生产率并了解他们自己的代码检查实践。 另外,我在此博客文章系列中分享的许多关于Microsoft代码审查的见解都来自涉及该代码审查数据的研究和分析。

微软代码审查的未来

随着Micorosft的参与和对GitHub的收购,变更是不可避免的。 例如,Microsoft广泛采用Git作为源代码控制工具,就可以看到这一变化。 但是,这也意味着在Microsoft,以请求请求形式进行的代码审查正在增加。

我一定会在以后计划使用请求请求解决代码审查问题。

是否需要更多有关代码审查的信息?

了解Google如何审查代码经过验证的代码审查最佳做法代码审查陷阱 ,或如何提高您的代码审查反馈

为了保持循环,让我们在Twitter连接

此外,还可以访问我为电子邮件订阅者准备的独家代码审查电子书 。 它包含备忘单,代码检查清单以及Google和Microsoft的案例研究。 还没有订阅者吗? 只需在这里注册

信用到期的地方:

我想提到我和微软以及维多利亚大学的出色同事,他们是这项研究的一部分: 克里斯·伯德 贾赛克 · 切尔旺卡 劳拉·麦克劳德 玛格丽特·安妮·斯托里 我喜欢与您一起合作♥





From: https://hackernoon.com/how-code-reviews-work-at-microsoft-qe1t327y

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值