暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CICD(8)--谷歌如何CodeReview:提升代码质量的关键一步

架构经纬 2024-11-18
47

【每天5分钟,了解一个知识点】

CodeReview(代码评审)就像是一把神奇的钥匙,能够打开高质量代码的大门。今天就来和大家聊聊 CodeReview 的那些事儿。

一、什么是 CodeReview?

CodeReview,国内也称代码评审或者代码审查,简称 CR。它是指在软件开发过程中,工程师对其他人所写代码进行审阅,以达到控制代码质量的目的。通常由代码写作者发起,邀请团队内其他人审阅代码,提出改进建议,作者修改后重新提交,直至代码通过大家的审阅。

二、为什么要做 CodeReview?

很多人对 CodeReview 不够重视,觉得短期看不到效果,也难以量化衡量。但就像坚持运动一样,长期来看好处多多。

1. 提升代码质量

把一个系统比作生命体,代码就是细胞。不好的设计如癌细胞会扩散,而 CodeReview 就像 T 细胞,能吞噬癌细胞,保证系统健康成长。无人 Review 的代码取决于作者水平,而经团队 Review 的代码能接近甚至超过团队最高水准。因为集众人之长,能在各个方面做得更好。同时,随着 CodeReview 日常化,参与者的编码能力会逐步提升。

2. 提前发现问题

没有 CodeReview 时,我们依赖测试或用户暴露问题,这往往太晚。CodeReview 能在测试前发现问题,比如流程或实现上的差异,尤其是新人容易出现的问题。还能发现别人踩过的坑,如 Java 中 SimpleDateFormat 的线程安全问题。但 CodeReview 也不是万能的,像边缘 Case 和复杂公式计算结果的准确性就难以发现。

3. 经验和知识的传递

程序猿能写代码,工程师能写出高质量代码,高级工程师还能帮助他人。CodeReview 就是高级工程师帮助他人的直接方式。在这个过程中,可以学到优秀代码、设计和业务背景知识。比如用 Java 操作文件,发现 apache-common 包中的 IOUtils 类更方便,分享给他人就能共同进步。

三、如何做好 CodeReview?

知道了好处,那怎么做好 CodeReview 呢?

1. CodeReview 的步骤
  • 了解改动的背景:不要一上来就看代码,先了解代码实现的功能和背景,才能更好地 Review。

  • 纵观全局:了解背景后,若思路与作者相同,就一起 Review 流程是否正确;若不同,就看代码确认谁的思路更好并优化。

  • 逐层细化:确定流程后,深入代码细节,但这里先不展开。

2. CodeReview 的关注点
  • 功能性:代码功能是否符合预期,是否实现所有必要功能。

  • 复杂性:功能实现是否过于复杂,复杂代码易出问题且可维护性低。

  • 代码风格:是否符合团队编码规范。

  • 文档&注释:代码功能改动时,文档和注释要同步改动,错误的注释和文档会增加理解成本。

  • 代码亮点:看到好的地方别吝啬赞美。

例如代码设计良好、可读性高、没有线程安全问题、没有无用代码、有适当单元测试等。更多细节可参考谷歌工程实践——代码评审。

3. 注意事项
  • CodeReview 的礼节:不是炫技舞台,要礼貌指出问题,不要为提问题而提问题,看到好的代码也要点赞。

  • CodeReview 应当及时:及时处理别人的 Review,也方便别人及时 Review 自己的代码。

  • 如何写出对 CodeReview 友好的代码:牢记“程序写出来是给人看的,附带能在机器上运行”。提交前先自审,借助工具检查代码风格和潜在 bug,做好功能自测。写清楚变更描述,让 Review 者更好理解。单个变更尽可能短,便于 Review、减少 bug、方便合并代码等。对于难以拆分的变更,可通过全流程测试保证质量,并做好快速恢复方案。

四、关于 CodeReview 的几个误区

1. CodeReview 是纯浪费时间?

如果团队刚开始推行,可能会有人这么问。但就像运动对健康的影响难以量化一样,CodeReview 长期坚持会让代码库、系统和团队更健康。随着被 Review 次数增加,代码质量会提高,Review 过程也会更轻松。

2. 工期很紧,没时间做 CodeReview!

这是不做 CodeReview 的借口。不做 CodeReview 省下的时间,会在后续测试和维护中花费更多。就像“磨刀不误砍柴工”,CodeReview 和测试都是软件开发中的“磨刀”工作。

3. 只有高级工程师才有资格 Review 别人代码?

虽然大多是高级工程师在 Review,但初级工程师也有资格。三人行必有我师,即便找不出问题,也能从中学到东西,这是成为高级工程师的必经之路。

4. 都有测试流程了,为什么还要做 CodeReview?

CodeReview 关注多个方面,而测试只能保证结果准确性,二者互补。

5. 有了 CodeReview 就不需要测试了?

CodeReview 虽能提前发现问题,但人无法大规模精准校验程序执行过程,自动化测试擅长此道,所以二者不是对立关系。

6. 只要推行 CodeReview 流程,代码质量就会迅速提高?

代码质量会提高,但没那么快。刚开始可能会觉得耗时,但长期坚持效果显著。不要高估短期价值,也不要低估长期价值。

总之,CodeReview 是提升代码质量的重要环节,让我们一起重视起来,为打造高质量的软件系统而努力。


【关联阅读】

关注公众号,回复【Java面试】,获取更多面试资料

文章转载自架构经纬,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论