Skip to main content

Code Review

CR 是什么

全称 Code Review, 代码审查。指对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。

Code Review

优势

  1. 提升代码质量
  2. 找出潜在 bug
  3. 通过 review 代码学习

常用术语

  • PR: Pull Request
  • MR: Merge Request
  • CL: 变更列表 (changelist), 表示已提交到版本控制或正在进行代码审查的自包含更改。也可以叫做 patch (补丁)。
  • WIP: Work In Progress
  • LGTM 在我看来不错(Looks Good to Me)
  • ibid. 同上

Developer

开发者需要注意 ⚠︎⚠️、思考 🤔 的点

定义好你的提交的类型

tip

可以使用一些 commit type 尽早变更可以避免在细节、修饰、文档等方面浪费精力。比如说 WIP, doc, blah, blah, blah... 更多 commit type 可以参考 Commit Lint

尽可能小的 PR

tip

在做 Code Review 的时候,如果有大量的文件修改,那么 Review 起来是很困难的,比较费人。 如果 PR 比较小,相对就比较容易 Review,也容易发现代码中可能存在的问题。

如果你是一个比较大的改动,那么最好分批提交,以减轻 reviewer 的审查压力。

Note: 我个人的习惯是,多 commit,每次 commit 会大致描述做了什么

Eg:

git add common/components/wrapper/select

git commit -m 'feat(common): wrapper the component of select for expand it functions from the base'

写好 PR 的 CL

tip

CL 描述是进行了哪些更改以及为何更改的公开记录。CL 将作为版本控制系统中的永久记录,可能会在长时期内被除审查者之外的数百人阅读。

怎么才是一个好的 CL?

tip

一般一个 CL 会包括 首行(First Line), 空行(Empty Line), 主体(Body)

首行主要是用来告诉 reviewer,本次的 PR 正在做什么的简短摘要,最好短小而精悍,类似于写一个 Summary

空行用来区分首行和主体部分,让 reviewer 可以着重于首行摘要信息

主体可能包括对正在解决的问题的简要描述,问题,解决思路,解决方案,为什么使用这种方案,blah,blah,blah ...

到了开心快乐的举栗子 🌰 环节了

🚀Good CL 描述, 看完就 TM 一个词儿,清晰明白,言简意赅,倍爽儿~

功能更新

在 heatmap 中添加 borderRadius 配置 (可以加粗或者设置为标题)

本次修改是从 issue#xxx 获取的,需要在 heatmap 上增加 borderRadius 配置,通过将组件的 borderRadius 透传给 zrender 来完成,blah, blah ...

详细参考 echarts issue 16493

Bad CL 描述(看完直接报警 🚓),需要看完你写的一堆东西,才知道你要干什么,更离谱的是,看完了也不知道你要干什么

  • remove something
  • build something
  • fix something
  • blah, blah, blah...

shit

求 CR,挑选合适的评审人

在生活中,良师益友益于行,要有一次高质量的 CR,必定需要找一个 “好的 reviewer”(PS: 不要抬杠,是不是要找大佬才可以,合适最最重要)。

tip

个人的建议是可以根据下面步骤去筛选到一个合适的同学

  • 业务代码
    • 你需要有一个和你同处于一条业务线的同学,他在业务上的理解可以给你很大的帮助,能理解你的上下文关系,不需要过度的解释
  • 通用代码 - 精通你正在使用的语言、框架或工具 - 对这一主题知之甚深,有自己的理解

调整好你的心态

tip

我们知道,不同人的能力不同,而且程序员吗,很多人都很自负的,但是不要因为 CR 别人提了自己不少问题就影响自己的心情,然后就跟别人干起来,何必因为这个呢?take it easy,just be smile! 虚心接受别人的建议,说不定会对你有所帮助呢?

当别人花费大量的时间给你评论,也请你心平气和的与对方沟通交流,不要吝啬你的感谢,笔芯 or ❤ or 🤝

danger

杠精自动跳过这条吧,待会你看完之后想跟我干架,那可不划算。

Note: 我平常在提交之前会 review 一下自己改动的地方,比如说 console 要不要删啊,代码风格啊,能不能简单优化一些逻辑呀,blah,blah....

Google Code Review Developer Guide

Code

  • 代码风格
tip

一般加入一个团队的话,都会有的,可以通过安装插件,配置一下就好了。

可以使用 eslint prettier 以及类似的代码检查工具,更多可参考 Google Javascript 风格指南Google TypeScript 风格指南Css stylelintAngular coding style guide

  • 注释文档
tip

程序员中有一些梗,其中有一条就是,最怕别人的代码没有一条注释,裸奔。虽然写注释很浪费时间,但是这个确实对 reviewer 来说,能提供很大的帮助,可以直观的了解你做的内容,而不需要去思考你的代码是干嘛的。

关于注释可参考 代码注释

  • 测试

通用包建议关注

tip

代码是否具有正确且设计良好的自动化测试,cypress 了解一下

Reviewer

评审者需要注意 ⚠︎、思考 🤔 的点

CR 过程

CR 过程中的更多思考点,应该从如何让它变成一个可以 在团队中共享的知识 以及 提高代码质量 的角度出发。

CR 要点

tip

依据业务开发找一个相对熟悉的同学,别抬杠说 PM 啊,没有其他建议

  • 风格
tip

依据团队 or 公司的开发规范即可。

个人的话,可参考 代码风格

评论相关

在做 CR 时,我们会对代码进行评论,但是评论如果没有什么类目区分,大部分时候会成为一种负担,所以,我建议,我们要对评论进行分类处理。

tip

比如说,我们使用 emoji 来区分实现的好坏

  • 🙁 我觉得这里有问题
  • 😐 我能接受这种写法
  • 😀 看着没什么问题
  • 🤩 牛逼
  • 👍 不错不错
  • ❤ 感谢

当然你们可以根据团队规范来制定类别,比如说缩写 前缀是[P0], [P1], [p2], [O] optional,[Q] question

心态

作为一个 reviewer,对不同质量的 CR 请一定要心平气和,保持正面的态度,peace and confidence,不要有有色眼镜,对大佬的代码就望而却步,对新手或者写的不好的代码就开喷,不要过度自信和自负。

在 review 中,其实并不是让你对代码怎么评判,而是根据你的经验,提供一些好的经验和建议,当然了,review 一份写的很好的代码,也可以从中学习很多知识,提升自己的能力,互相学习,互相帮助。Enjoy it.

CR 沉淀

好的东西,当然要记得分享了,CR 也是一样的,当出现了一个比较有代表性的 CR,比如说 一个好的解决方案一个比较有代表性的问题,这类的 CR 就应该沉淀下来。他们有着天然的优势:

  • 相同问题借鉴
  • 反例示例
  • 通用方案的抽离
  • blah, blah, blah ...

参考资料

Code review

Google 开发者代码审查指南 英文版

Google 开发者代码审查指南 中文版

CODE REVIEW 中的几个提示