LinkedIn对实现高效代码检视的7个Tips

原文:LinkedIn’s Tips for Highly Effective Code Review
原著作者:Szczepan Faber

最近LinkedIn里程碑式地完成了他们的第100万次代码检视,这篇文章是LinkedIn社交网络服务工具的负责人Szczepan Faber分享的一些经验与教训。

阅读和检查代码是每个工程师每天都在做的事情,然而正式的代码检视流程会有点不一样(它要求在代码上线之前),每个代码的更改都要由其他团队成员进行正式检视。在LinkedIn上,自2011年以来,代码检视一直是我们开发流程的强制性部分。我们要求代码检视的目标是尽可能顺利地扩展我们快速发展的工程团队。良好的代码检视与有意义的有用评论确实可以帮助提升整个工程组织。在LinkedIn,这些检视已成为质量保证和知识共享的重要组成部分。拥抱代码检视已经在几个关键方面优化了我们整个工程文化。

实施全公司代码检视的最大好处之一是增加了我们开发工作流程的标准化。LinkedIn上的每个团队都使用相同的工具和流程来进行代码检视,这意味着任何人都可以帮助审核或为其他团队的项目提供代码。这消除了“我可以修复代码中的错误,但是我将如何构建该代码并提交修复?”这样可以帮助增加工程组织中不同团队之间的协作。

通过将代码检视制定为强制性流程,我们还帮助培养了公司健康的反馈文化:工程师们对所有工作领域都给予反馈并接受反馈,而不仅仅是编码,因为它已成为工作的常规组成部分。我们的工程师不是将代码检视视为关键或否定,而是将代码审查和代码评论作为专业发展的机会。事实上,高质量的代码审查是LinkedIn推广流程的重要组成部分,因为它们提供了工程技术的客观证据。

多年来,我们磨练了几个最佳实践和技巧,以便如何提供真正的优秀代码检视。以下是一些以问题形式提供的指南,我们建议您通过这些指南来帮助确保审阅者和被审阅者都从代码检视中获得最大价值。

我了解「为什么」吗?

为了尽可能提供最佳评审和帮助您的团队进行扩展,每一次代码更改提交都应包含一个设计概述,以简要说明变更背后的动机。当需要从代码更改本身推断出理由时,提供高质量的代码检视非常困难。提出问题并期望提交者在尝试代码检视之前解释他们的动机是公平的。这也鼓励提交者在他们的提交消息中有一个解释,提高代码文档的质量。

我是否给予积极的反馈?

在一个充满聪明人的组织中,干净的代码和整洁的测试覆盖率可以被认为是理所当然的。因此,代码检视反馈倾向于只关注代码中发现的问题与代码本身。这是非常不幸的,因为大多数人需要积极的反馈来感受参与和动力「工程师也不例外」。 当审阅者在代码中看到好东西时,他们应该将其发出并给出正面的反馈。 这有助于改善团队动态,而且这种积极的反馈往往具有传染性。正如所有的代码检视建议(下面的更多内容)一样,任何积极的反馈都应该是具体的,解释为什么那些特定的代码是写得很好的。

我的代码检视评论阐述得好吗?

无论反馈是正面还是负面,任何代码检视评论都应该是不言自明的。对于收到解释不好的代码检视评论的工程师而言,对于评审者来说看起来很明显的东西可能并不清楚。如果有疑问,最好是过度解释,而不是提供简洁的反馈,这会产生更多的问题,并需要更多的来回通信。建议可以像“减少重复”,“提高覆盖率”或“使代码更容易测试”一样简单。除了使审阅者的评论更加清晰之外,这些类型的评论还有助于加强团队渴望满足的设计原则。

我表扬了提交者的努力吗?

无论结果如何,艰苦的工作总是需要被表扬 - 这培养了强有力的,充满活力的团队。一些代码如果改不到最高质量的话,就需要重新设计。 在这些情况下,即使他们的代码的确需要重新设计,仍然承认作者对变更所做的努力是很重要的。表现欣赏的最佳方式是通过提供高质量的反馈并提供合适的解释,承认好的想法(每次提交代码总是有好的东西!)并使用“谢谢”来投入您的代码检视。

这篇检视评论对我有用吗?

提出这个问题是验证代码检视评论是否必要的简单而强大的方法。在一天结束时,工程师应该将代码评论视为有用的开发工具,而不是不重要的繁忙工作的来源。如果您不认为特定的检视评论对您有用,请将其删除。无用的代码检视注释的典型例子是与代码格式相关的代码。代码样式和格式应该由自动化工具验证,而不是由工程师来验证。

Review Request Per Month Created at LinkedIn

只要“测试完成”就足够了吗?

在LinkedIn上,每个代码更改提交都有一个必须填写的强制性“已完成测试”部分。 在开源世界中,使用GitHub作为示例,工程师可以在请求描述中提交“测试完成”信息。“测试完成”应该取决于变化的严重程度和当前的测试覆盖水平。如果更改包含新的或更改的条件复杂度,则期望在单元测试中涵盖它是公平的。如果集成测试覆盖率不足,某些更改可能需要运行手动测试。 在这些情况下,“完成测试”应包括有关测试场景和输出的信息。当更换改变程序的输出时,将新输出包含在“测试完成”部分非常有用。

我在我的检视中过于迂腐吗?

一些代码检视有很多评论,所以导致重要的问题(真正需要修正的)在重要的建议中丢失了。 对于某个团队的详细信息而言,评论太多可能会减慢审阅周期,并且会导致审阅者和被审阅者都产生摩擦。 具有清晰的审查预期,示例评审以及积极的邀请审阅文化是避免漫长而耗尽审阅周期的好方法。

总之,通过正式的代码检视流程有助于提高代码质量,团队学习和知识共享。当团队中的每位工程师都意识到两件重要的事情时,工作质量会提高:其他人会阅读我的代码,我必须处理我收到的任何评论意见,所以我应该尝试让我的代码最好是好的,能够一次把事情做好是最好的。当代码检视成为日常习惯时,团队每天都会实践并提供反馈。 这是增长和改善的关键。

在LinkedIn,我们从过去的一百万次代码检视中学到了很多东西,并且我们渴望从下一个百万人中学到更多。代码检视中付出的努力越多,团队获得优质代码检视的能力越强,检视的代码质量越高,并且所生成产品的质量越高。 高质量的代码检视具有传染性!