代码审查最佳实践

代码审查是软件开发过程中的重要环境,本文介绍了代码审查的若干最佳实践,可以帮助团队更好的完成代码审查,提高产品质量和开发体验。原文: Top 10 best practices for code review

alt

代码审查的目的是提高代码质量。然而,如果操作不当,也可能成为工程经理和开发人员的噩梦,团队可能会遇到代码审查方面的难题,从而拖慢整个开发流程。

因此,遵循代码审查的最佳实践以促进协作、提高代码可读性并培养积极的团队文化至关重要。

代码审查的类型

代码审查有两种类型:1.正式代码审查和 2.轻量级代码审查。

正式代码审查

顾名思义,正式代码审查是基于正式的结构化流程来查找代码、规范和设计中的缺陷,遵循一套既定的准则,并有多名审查人员参与。

最流行的正式代码审查形式是 Fagan Inspection,包括六个步骤:计划、概述会议、准备、检查会议、随机分析、返工和跟进。

与其他类型的代码审查相比,这种类型的缺点是更耗费时间和资源。

轻量级代码审查

这种类型的代码审查通常由开发团队而非测试团队采用。当代码审查不是性命攸关的时候,通常会采用这种方法。换句话说,采用这种方法的前提是审查的代码不会对软件质量造成很大影响。

轻量级代码审查有四种子类型:

即时代码审查

也可以称为结对编程。在这种类型中,两名开发人员在同一台计算机上协同工作,其中一人编写代码,另一人实时审查代码。这种类型的交互性很强,有助于知识共享和发现错误。

同步代码审查

在同步代码审查中,作者自己编写代码,并在完成编码后立即向审查者征求反馈意见。然后,代码作者和审查者一起讨论并改进代码。该类型需要直接交流,有助于保持围绕代码的真实讨论。

异步代码审查

与同步代码审查类似,唯一的区别是代码作者和审查者不必在同一时刻查看代码。该类型通常是开发人员的理想选择,比较灵活,有利于跨时区工作的开发人员。

团队代码审查

这种类型适用于非常特殊的情况。在这种情况下,会为审查者分配不同的角色,有助于进行更深入的审查,并提供各种视角。过程中需要使用代码审查工具、版本控制系统和协作平台。

请根据团队的强项和弱项以及组织的独特因素,选择正确的代码审查类型。

代码审查最佳实践

创建代码审查清单

代码审查核对表[1]包括一组预先确定的问题和规则,团队在代码审查过程中将遵循这些问题和规则。其中一些必要的质量检查包括:

  • 可读性和可维护性:这是第一标准,怎么强调都不为过。
  • 统一格式:代码缩进、间距和命名是否一致,是否易于理解?
  • 测试和质量保证:是否有缜密的测试和质量保证流程?
  • 边界测试:是否在探索极端情况和边界条件,以发现隐藏的问题?
  • 安全性和性能:是否确保了源代码的安全性和性能?
  • 架构完整性:代码是否具有可扩展性和可持续性,是否具有可靠的架构设计?

除此之外,在审阅代码时还要回答三个问题。其中包括:

  • 我能理解代码的作用吗?
  • 代码是否按照预期运行?
  • 代码是否符合常规要求?

这样,你就能知道在代码审查中需要注意什么,简化代码审查,并专注于优先事项。

培养代码审查文化

代码审查过程必须是一次成长和知识共享的机会,而不是对开发人员能力的批评。

要进行有效的代码审查,创建协作和学习文化至关重要。这包括鼓励结对编程,以便开发人员可以相互学习,经验不足的成员可以向资深领导学习。

可以制定代码审查指南,强调建设性反馈、尊重和换位思考。确保传达代码审查的目标,明确审查人员和代码作者的角色和责任。

可以让开发团队了解代码审查背后的目的,并将其作为提高编码能力和技能的一种方式。

提供建设性反馈

代码审查实践之一就是提供具体、诚实和可操作的反馈[2],建设性反馈对于与软件开发团队建立融洽关系非常重要。

反馈应指出正确的方向,而不是困惑。反馈的形式可以是建议、强调潜在问题或指出盲点。

确保解释清楚反馈意见背后的原因,以减少后续跟进的需要,并提供必要的背景。在撰写评语时,应简洁明了。

这有助于提高软件开发人员的技能,生成更好的代码,从而进一步形成高质量的代码库。

以小规模、渐进式变革为目标

与其关注所有的变化,不如关注一小部分,对所有方面进行彻底检查。最好将其分成易于管理的小块,以便找出潜在问题并提出改进建议。

专注于一小部分,可以让审核人员彻底检查所有方面(使用代码审核清单)。PR 越小,开发人员就更可能在短时间内理解变更,审核人员也能提供更有针对性、更详细的审核。每项变更都能得到应有的关注,也更容易遵守编码指南。

这有助于深入了解代码对整个项目的影响。

制定代码审查目标并收集相关指标

根据古德哈特定律,"当度量本身成为目标,就不再是好度量了"。

要衡量代码审查的有效性,需要制定一些切实可行的目标,这样才能量化代码的改进情况。心中要有几个衡量标准,以确定审查效率,并分析流程变化的影响。

可以基于 SMART 标准,并从外部指标入手,全面了解代码质量的提高情况。除此之外,以下是一些必须牢记的内部关键指标:

  • 检查率:审查代码的速度。
  • 缺陷率:衡量方法是将发现的缺陷数量除以代码审查所花费的小时数。
  • 缺陷密度:衡量方法是将缺陷数除以数千行代码。

除此之外,还可以使用指标驱动的代码审查工具,提前确定目标和衡量效果的方法。

不要匆忙进行审查

如上所述,不要一次性审查所有代码。请牢记以下三点:

  • 查看代码的时间不要超过 60 分钟。
  • 一次只审核 200-400 行代码。
  • 每行代码预计 3 秒钟的审核时间。

持续审查代码会让人失去对细节的关注和重视,将进一步降低工作效率,并造成工作倦怠。

因此,要经常进行代码审查,而且审查时间要短。鼓励中间休息,并设定界限,否则,缺陷可能会被忽视,代码审查过程的目的也无法实现。

定期轮换代码审查人员

持续依赖相同的代码审查人员是一个常见挑战,可能会导致倦怠。从长远来看,会对软件开发过程产生负面影响。

因此,应鼓励轮换审查,不同团队成员可以参与代码审查。这将带来不同的技能组合和经验水平,促进交叉学习和全面的审查过程。还能提供不同观点,从而获得更好的解决方案,减少盲点。

通过这种方法,团队成员可以熟悉代码库的不同部分,避免审查过程中的偏见,并了解彼此的编码风格。

始终记录代码审查决定

记录代码审查决定是了解代码审查流程整体有效性的好方法。确保记录和跟踪代码审查结果,以供将来参考,这样的文档记录会让将来可能在同一个代码库上工作的人更轻松。

审查类型是即时审查还是同步审查并不重要。

通过文档可以深入了解某些选择、设计和修改背后的原因。文档有助于保存历史记录,即随着时间推移所做的更改、更改的原因以及审查过程中吸取的任何经验教训。除此之外,还能加快新员工的入职流程。

因此,对代码审查决定的记录和跟踪可以鼓励开发团队内部的持续改进文化。

注重编码标准,而非个人喜好

强调编码标准可促进一致性、可读性、可维护性和整体代码质量。

开发人员的个人偏好千差万别。因此,通过关注编码标准,团队成员可以限制主观争论,并依赖记录在案的约定俗成的代码审查准则,有助于在开发过程的早期解决潜在问题,并确保代码库长期保持一致性。

除此之外,遵守编码标准还能更容易扩展开发工作,无缝添加新功能和组件。

尽可能自动化

代码审查是一个重要的流程,但也很耗时。因此,要将可以自动化的工作自动化。

使用代码审查工具[3]来帮助改善代码质量,提高速度、精确度和一致性。这可以让审查人员花更多时间提供有价值的反馈,实现自动化,跟踪变更,并方便协作,还能确保更改不会破坏现有功能,并简化开发流程。

结论

如果团队期望优先考虑代码审查流程,请务必遵循上述最佳实践。这些代码审查最佳实践能最大限度的提高代码质量,提高团队工作效率,并简化开发流程。


你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

参考资料
[1]

Crafting an effective code review checklist: https://typoapp.io/blog/crafting-an-effective-code-review-checklist

[2]

How to give code review feedback: https://typoapp.io/blog/how-to-give-code-review-feedback

[3]

Best code review tools: https://typoapp.io/blog/best-code-review-tools

本文由 mdnice 多平台发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俞凡 DeepNoMind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值