Code Review

代码审查是软件开发过程的一部分,可以在早期避免错误代码合并到进入项目中, 方便团队维护代码和产品质量。

为什么代码审查至关重要?

如果没有人把控输入的代码,只管一个劲地堆砌,久而久之,这坨代码也就失去秩序,成一团乱麻了,人见人嫌。所以在工程的一开始就引入代码审阅,可以非常有效地提高代码质量。

更重要的是,Code Review 是一个双向的过程,双方借助针对具体代码的交流,得以了解对方的想法,进行互相探讨,这是帮助团队中的成员成长,赋予团队自我管理、良性发展的能力。

代码审查有以下好处:

  • 及时发现错误:人都会不可避免的出现一些纰漏,而这些纰漏在另一个人眼中也许显而易见。通过编码和健壮性检测,尽量减少出问题的机会。目前团队由于缺乏自动化测试环节,质量问题带到线上的风险会很高,更需要在开发环节做好自检工作。
  • 每个人对项目的代码都会很熟悉:通过阅读别人的代码,更加熟悉项目结构。
  • 技术功能
  • 代码可读性:随着代码审查的覆盖,团队风格的统一,大大提高代码可读性,新人加入可以更快的投入到生产中。
  • 互相学习,提高水平,营造工程师文化:代码审查最终的作用将归到促进工程师日常代码交流和人员的成长上面来。团队在 Code Review 前期重点会是找问题(代码规范、潜在缺陷、BUG,代码设计等等),而随着互相学习,后期问题会逐渐减少,Code Review 习惯逐步养成,工程师交流文化的营造将转化成重点。

代码审查者应该关注哪些方面?

代码审查时应该关注以下方面:

  • 设计:代码是否经过精心设计并适合系统?

  • 功能:代码的行为是否与作者的意图相同?代码是否可以正常响应用户的行为?

  • 复杂度:代码能更简单吗?将来其他开发人员能轻松理解并使用此代码吗?

  • 测试:代码是否具有正确且设计良好的自动化测试?

  • 命名:开发人员是否为变量、类、方法等选择了明确的名称?一个好名字应该足够长,可以完全传达项目的内容或作用,但又不会太长,以至于难以阅读。

  • 注释:注释是否清晰有用?

  • 风格:代码是否遵守了风格指南

  • 文档:开发人员是否同时更新了相关文档

如何进行代码审查?

审查的实施分析:

  1. 强制&非强制: 按照经验,CodeReview 启动前期建议采用强制要求,否则很难有效开展起来。坚持一段时间待习惯养成后再考虑自由度。
  2. 小片段&大模块:如果想要让问题暴露更充分或降低 review 的难度,建议采用细粒度方式进行,即小片段提交小片段 review。如果更关注全局设计和逻辑思路的学习和找茬,那么可以用模块方式统一 review。但很多时候这两种方式是可以结合运作的。
  3. 线上交流&线下会议:大团队采用线上方式效率很高,但是需要配套的 Code 平台,如果更喜欢全员一起找茬的那种快感,那么可以采用线下会议方式开展。
  4. 事前&事后:这里指的是发布前还是发布后。版本发布后统一进行CodeReview的方式更多是一种代码交流活动, 起不到代码质量把关的作用。反之,如果在版本发布前就对代码进行 CodeReview,就可以对质量问题起到很好的把关作用。这里是时间和质量之间的权衡。
  5. 高频率&低频率:代码交流频率越高越好。具体根据团队实际情况进行安排即可,目前采用发布前审查。

代码审查常用的方式有代码管理工具审查、结伴编程、线下审查等。目前团队采用线下审查方式。

审查的前置条件:

在进行代码审查时,开发人员应该确保:

  • 代码设计精良。
  • 该功能符合产品预期。
  • UI 符合设计。
  • 代码并不比它需要的复杂。
  • 没有实现他们将来可能需要,但不知道他们现在是否需要的东西。
  • 代码有适当的自测。
  • 使用了清晰的名称。
  • 注释清晰有用,且大多用来解释为什么而不是做什么
  • 代码符合我们的风格指南。

每一行

审查每行代码。有时如数据文件、生成的代码或大型数据结构等东西,可以快速扫过。但不要快速扫过开发人员编写的类、函数或代码块,并假设其中的内容是 OK 的。审查人员必须做出的判断某些代码需要比其他代码更仔细的审查,至少应该确定审查人员理解所有代码正在做什么。

如果审查人员觉得这些代码太难以阅读导致减慢您审查的速度,尝试继续审核前要让开发者为程序做出解释,也能帮助未来的开发人员理解这些代码。

上下文

例如,审查人员可能只看到添加了四行新代码,但是当审查人员查看整个文件时,会看到这四行是添加在一个 50 行的方法里,所以需要作者概要的阐述上下文,如果涉及 UI 的,给出 UI 原型和运行时 UI 表现。方便审查人员了解具体情况。

鼓励

如果您在代码审查中看到一些不错的东西,请告诉开发者,特别是当他们以一种很好的方式解决了审查者的一个评论时。代码审查通常只关注错误,但也应该为良好实践提供赞扬。在指导方面,比起告诉他们做错了什么,有时更有价值的是告诉开发人员他们做对了什么。

记住你是一个「人」

无论是在 review 代码还是写代码的过程中,必须要始终记得一件事情:你是一个「人」,并且你 review 的代码的作者也是一个「人」。

在审查代码时,有问题或者发现作者没注意到一个边界条件的时候,保持友善的态度。即使是写了多年“完美无缺”代码的老鸟,有些时候也应该把他们当作会犯错误的普通人来看待。即使那些与你共事很久的人并不在意你拿他们开玩笑,总会有新人不理解的。

被很多人改动过的,并且在不断更新的代码必然往往是奇怪的、复杂的,特别是那些已经存在了许多年的代码。还有很多时候开发工作是十分仓促的,开发人员需要在有限的时间完成尽可能优质的代码。我们并不能为了完美的代码耽搁项目进度,但是我们需要保证我们写的每一份代码尽可能的好,无论我们在写代码还是在 review 代码。

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

推荐阅读更多精彩内容