CodeReview最佳实践

我一直认为Code Review是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。包括像Google、微软这些公司,Code Review都是基本要求,代码合并之前必须要有人审查通过才行。

然而对于我观察到的大部分软件开发团队来说,认真做Code Review的很少,有的流于形式,有的可能根本就没有Code Review的环节,代码质量只依赖于事后的测试。也有些团队想做好代码审查,但不知道怎么做比较好。

高效地进行 Code Review 一直是我们想要做的事情,如何持续保持高效 Review 也是我们日常开发中所亟需解决的问题。

Code Review的好处

一直以来,人们都说 Code Reivew 作为敏捷开发中重要的一环,实践 Code Review 有很多益处,那么到底 Code Review 有什么益处呢? 到底是因为什么魔力,我们这么笃定每天去做 Code Review?

我们认真地思考了 Code Review 的益处,认为以下几点在整个敏捷开发流程中起到了至关重要的作用。

互相学习,知识共享

我们无法保证项目中每个人都拥有相同的知识储备,而且对于同一个问题,不同的人有不同的解决方案。通过 Code Review 我们可以快速地、有重点地将自己的知识传递给其他人。其他人也可以将代码上下文、知识以及更好的解决方案提供给我们,让我们做出更优的实现。

Code Review 可以让业务上下文在团队中共享。日常工作中,开发人员只会对自己负责的这块业务比较熟悉。通过 Code Review 的方式,我们可以快速了解到其他业务上下文,更好地了解业务知识,让每位同学对系统都有更全面的认识。

统一风格,提高代码质量

团队一般会有统一的代码规范。有些规范可以借助工具扫描来实现统一,工具扫描不到的就要靠 Code Review 来统一规范。

莎士比亚说过:“一千个人眼里有一千个哈姆雷特”,针对同一段代码可能多种实现都是可行的。如果没有统一的风格,不便于后续对代码的维护。通过 Code Review 的方式,我们可以在团队内达成共识,形成统一的代码规范,为后续开发提供标准,让代码看起来是同一个人写的。

尽早暴露问题,降低修复成本

代码开发过程中,我们很容易陷入到自己所预定的 Happy Path 中,反复验证却无法发现问题。通过 Code Review 我们可以借助他人的视角来审查自己的代码。是复制的时候变量名忘记了修改,还是忘记了测试异常情况,或是理解错业务含义等等。代码从写完到 Review 的时间间隔越短,解决问题的成本越低。和测试左移类似,Code Review 也可以将问题左移,从而尽早暴露,尽早修复。

我们团队的 Code Review 实践经历

审查流程

团队采用的 Code Review 方式是每周四下班前,找一名开发作为主持人,并找2~3名开发分别讲解自己的代码。

每天一位主持人带团队 Code Review,选择当周讲解人所有的提交记录,一起 Review。
代码由提交人讲解,主持人驱动 Code Review,控制流程、时间以及负责补充解说。
主持人通过工具记录 Code Review 的问题。
这种方式的好处是同一个功能的代码能够集中讲解。主持人把控节奏,并且没有了切换成本,大大加快了 Code Review 的速度。而且每个人的提交都能被 review 到。此外,借助 Code Review 问题记录工具,效率大幅提升。

我们认为通过主持人驱动的方式能够更加高效地进行 Code Review,所以将其采纳为我们团队的 Code Review 最佳实践。

关注点

系统设计

从系统和站在组织的角度,问以下问题:

  • 从系统的角度,这份代码的改动会引起兼容性的问题吗?它能够很好的跟其他系统整合吗?
  • 该代码的改动会不会引起系统故障或者影响其他依赖的系统的使用?
  • 现在是改变这个功能的恰当时机吗?整体的代码是否符合逻辑?

功能性

从功能性的角度考察:

  • 代码是否能够实现开发者想要的目标?
  • 这份代码是否包含测试?这些测试覆盖的场景是否足够多?是否考虑到了一些边界情况?并发的情况下性能怎么样,会不会产生死锁等问题?
  • 把自己想象成一个用户的角度,功能是否满足,是否考虑全面,是否存在一些bug?

代码风格和命名规范

  • 这些代码的命名是否规范?如果让一个不太熟悉的人来看这份代码,是否能够通过命名就了解其含义?
  • 代码有没有遵守约定的代码风格?
  • 提交的代码如果想要做一些代码格式化的调整,如缩进和换行等等,需要放到另外的PR中进行,避免跟功能代码混在一起,给阅读代码的人造成不便。

数据驱动

在开展Code Review一段时间之后,逐渐积累起了一定量的数据。此时我们可以通过统计工具分析数据。比如按照问题类型进行统计,对于出现次数多的问题分类,可以针对性展开培训,提升团队成员技能。

培训完成后,我们可以根据新一轮统计结果分析培训效果,观察团队是否确实得到了提升,从而形成闭环。

总结

Code Review 的好处虽然被广泛认可,但想做好 Code Review 并不容易。首先团队需要对开展 Code Review 达成共识,然后针对自己团队的特性,采用相匹配的实践方式。在提升自动化程度的同时,积累 Code Review 数据,指导团队针对性地提升技能。


CodeReview最佳实践
https://note.0moe.cn/工程实践/2022/12/04/CodeReview最佳实践/
作者
Dawn_南风
发布于
2022年12月4日
许可协议