什么是代码评审(Code Review)

1、什么是CodeReview?

Code Review(CR)即代码评审,又名代码走查,是一种通过复查代码来提高代码质量的过程,一般体现在一个团队的开发过程中。CR要求团队成员有意识地、系统地检查彼此的代码,从而验证需求、发现错误,同时指出其中不合规范的“低质量”代码,从而提高整个团队的代码质量。

一次 CR 可以是一次 Commit,也可以是一次 Merge Request。因此,实践课系统支持团队内部的 MR 评审以及 Commit 评审,供大家学习和交流。

2、为什么要CodeReview?

(1)旁观者清。
对于同一段业务代码,由于看待问题的角度不同,评审者可能会比开发者更容易发现其中的问题,或是找到更有效的解决方案,共同维护团队的代码质量。
提高代码质量和可维护性, 可读性等。
查漏补缺, 发现一些潜在的问题点等。
最佳实践, 能够更好更快的完成任务的方法。
知识分享, Review他人代码时, 其实也是一个学习的过程, 自己也会反思&总结。
(2)快速了解业务。
理想状态下,团队中的每个人都需要对整个项目的各个部分都很熟悉,当然,在项目很大时这是不现实的。通过代码审查至少可以让每个人了解更多的业务模块,同时也能达到人员互备的目的。
人员互备:通过 CR,评审者也相当于参与了这次开发,相当于一种人力“备份”,当你休假或正在忙别的需求的时候,这时“备份”或许就能帮上你的忙了。
(3)开发者能够获得什么?
对需求的理解得到加深。
表达能力得到加强。
逻辑能力得到训练。
心理承受能力得到提高。
(4)评审者能够获得什么?
快速上手业务需求和全局的架构。
统一大家约定俗成的代码风格。
优秀的设计思路和业务逻辑。

3、CodeReview 的原则。

(1)CR 是必要的,但也需要结合团队现状。
当你的团队开发任务极其紧张,再耗费一部分人力去进行 CR,是不明智的。
(2)所有的代码都应被赞成。
因为团队代码库的每一次改动(Change List ,以下简称 CL),都必定会提高当前系统的整体质量,即使这个 CL 并不完美。
(3)CR 不应该追求完美,而应追求持续改进。
要知道,没有完美的代码,只有更好的代码,“慢即是快”。
(4)CR 不是挑刺,更不是证明谁的能力更强。
CR 是为了提高整个团队的能力,而不是针对个体设置的检查“关卡”,仅具有指导意义。
(5)评审者也需要对这个 CL 负责。
CR 不应设置奖惩机制,即便是有,也是对评审者和开发者同时的奖励或处罚。
(6)时刻保持谦虚。
无论是评审者还是开发者,都可以在 CR 中提升自己的能力。
(7)合理解决问题
解决冲突难以达成共识时,需要面对面或者拉起更大的团队讨论,带上leader。

4、在一次CodeReview中我需要关注什么?

(1)git 提交规范
(2)代码风格
a. 可读性
衡量可读性, 有很好的实践标准, 即 Code Review 时能否非常容易的理解代码逻辑, 如果不能, 那意味着代码的可读性要进行改进。
b. 命名
描述是否准确。不建议使用生僻单词。
命名格式是否与团队风格一致。
c. 函数体长度/类长度
函数体太长,不利于阅读。一般建议不超过50行。
类太长,有可能违背“单一职责原则”。
d. 参数个数
参数不要太多。一般不超过5个;5个以上建议使用对象。
e. 注释
恰到好处的注释,能够帮助评审者更好地理解函数体和类。
(3)架构/设计
a. 单一职责原则
一个类只做一类相关的事情。
一个方法,最好只做一件事情。
b. 行为是否统一
校验处理是否统一。
数据处理是否统一。
错误处理是否统一。

c. 代码是否污染
代码是否对其他模块有强耦合。
d. 是否有重复代码
检查是否将可复用的方法或组件抽取出来。
e. 开放-封闭原则
代码是否具有良好的可扩展性。
f. 代码健壮性
核心数据有没有强制校验。
边界值有没有考虑得当。
有没有潜在的bug。
有没有内存泄露。
有没有循环依赖。

g. 是否考虑了错误处理
有没有很好的 Error Handling。
h. 面向接口编程
检查业务的实现中有没有进行合适的抽象。
i. 效率/性能
对用户使用频率高、资源消耗大的业务部分是否处理得当。
关键算法的时间复杂度。
有没有潜在的性能瓶颈。
j. 代码重构
新的改动是打补丁,让代码质量继续恶化,还是对代码质量提升有帮助。
k. 时间粒度。
一个Review单元的时间应控制在10~20分钟,如果超出这个时间,那么这段代码本身可能在业务划分或代码实现上,是存在问题的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容