Code Review(代码审查)很多团队都会做,效果如何不好说。如果你能轻易地从一堆出自正经团队之手的代码里找出几个低级错误,往往意味着团队管理者长期忽视了Code Review的重要性。

根据经验,匆匆应付功能实现和漏洞修复而将Code Review流于形式的团队不在少数。当然,每个人都能列举一大堆“客观原因”,而且每一条理由听起来都是那么的有说服力。然而,没做好就是没做好,狡辩只会让场面变得更加恶心。

What(什么是Code Review)

A code review is the process of examining written code with the purpose of highlighting mistakes in order to learn from them.

-- Techopedia

这是目前我见过对Code Review最言简意赅的定义。其实怎么描述并不重要,重要的是我们要达到什么样的目的。

Why(为什么要做Code Review)

提高代码质量是程序员端稳饭碗、少挨点儿骂的最有效途径。其实Code Review就是很好的相互切磋、共同进步的机会,效果要比独自埋头干啃《21天精通×××》之类的“宝典”好得多。当然,前提是目的明确、态度端正。

Code Review主要目的就两个:

查错

Code Review不是用来查找低级错误的,而是参与者以提交者以外的视角阅读和审视代码,尽可能地找到逻辑上的问题。

学习

与其说Code Review重在找到问题,不如说其核心目的在于营造团队学习氛围、提升成员对软件品质的追求。我经历过不少团队,为了营造学习氛围,生拉硬拽地要求成员定期举行技术分享会,结果往往敷衍了事、不了了之。

How(怎样做Code Review)

下面根据Code Review中涉及的主要人物角色来讲讲我推荐的方式。注意,这不是标准答案。

具体划分角色责任之前,我建议每个技术团队都要找到并严格执行适合本团队技术栈的编码规范,甚至包括IDE配置和开发环境参数设定等,以确保每位成员都“说着同样的语言”,并减少在命名规则、排版样式等方面的争论,将时间和精力聚焦到对功能实现和业务优化这些实质性的问题上来。

开发小组技术负责人

每一位开发小组技术负责人都应该积极实施并维护Code Review机制,要求每位成员在提交代码的时候,都必须经过交叉Review,也就是每一次代码提交到主干时,都必须经过另一位相同技术领域同事的Review,否则将被视为提交了与存在编译时错误的代码同等的严重过失。

每次代码提交的交叉Review,开发小组技术负责人应当随机抽取包括自己在内的任何一位技术人员进行,不要让提交者能够很轻易地预知将会是谁来做自己这一次的Reviewer,否则很容易变成形式主义。

并且,对于Feature实现的Code Review,开发小组技术负责人应该较为频繁但不定期地进行公开Review。组织一场会议,召集整个开发小组的成员一起对此次提交的代码进行审查。

提交者

不论Code Review是私下的还是公开的,提交者都不能提交任何存在编译时错误的代码,这是非常低级的错误。首先在提交代码之前再次进行编译,是确保即将提交的代码不存在编译时错误的必要步骤。其次,也是很多人容易疏忽的,确保本次新增的本地资源文件都被加入了源代码管理,否则即使本地能编译通过,别人拿到你的代码也依然存在编译时问题。

提交代码之前,自己先diff一下,首先确保代码不存在前面提到的诸如命名、格式等方面的低级错误;然后确定自己对每一处代码变动的理解都非常明确,并且自己已经找不出改进方案;最后确保所有Hard Code都已经被移除,这一点可以参考我之前写的《没什么技术含量的Remove Before Flight》

提交者在代码被Review之前,还应该调整好心态,把别人的询问、质疑、建议、批评,通通视作可能的提升机会,而不要主观上认定自己给出的就是最优解,而别人都是“不明真相的围观群众”。也许别人在不了解背景信息或上下文的情况下,给出了错误的建议,提交者也应当将此作为锻炼思维和口才的友好辩论,而不是玻璃心受到了侵犯似的直接怼回去。

参与者

参与者应该对编码规范了然于心,对于代码中每一处不符合团队现行编码规范的地方都要不厌其烦地标注出来。很多人认为这个无所谓,反正机器最后读的都是0和1——对,机器只认识0和1,所以源代码其实是写给人看的。不管代码由多少人写就,最终看上去如同出自同一人之手,这种代码的阅读体验和效率绝对要比那种百家争鸣式的好得多。

如果是面向对象的编程语言,参与者应当考察提交者对抽象的理解和实践,是否准确以及是否过浅或过深。抽象过浅,看上去往往是大杂烩;抽象过深,读起来显得吃力。对于这两种情况,参与者都可以提出自己的看法和建议,不要抱着“你这不行,听我的”的态度,否则很容易形成对立的情绪,进而影响团队对Code Review的积极性。

对于代码实现是否存在改进空间这个问题,参与者应该在阅读新代码时,尽可能全面地去理解问题域、了解需求的具体细节,而不是想当然地抛出质疑和意见,给人以浮躁的印象。如果参与者确定自己清楚地理解了需求和问题,依然对当前的代码实现有改进建议,那么就大胆地提出来,这就是Code Review的核心目的!

如何做好Code Review的更多相关文章

  1. 如何在团队中做好Code Review

    一.Code Review的好处 想要做好Code Review,必须让参与的工程师充分认识到Code Review的好处 1.互相学习,彼此成就 无论是高手云集的架构师团队,还是以CURD为主的业务 ...

  2. Code Review怎样做好

    一.背景 最近随着交易业务快速扩展,研发组内新项目及新成员越来越多,如何做好Code Review,把控研发人员开发代码质量很是关键. 对于大部分业务团队,谈到Code Review就会面露哀状:   ...

  3. Code Review最佳实践

    我一直认为Code Review(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题.包括像Google.微软这些公司,Code Review都是基本要求,代 ...

  4. Code Review最佳实践(转)

    我一直认为Code Review(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题.包括像Google.微软这些公司,Code Review都是基本要求,代 ...

  5. 高效code review指南

    大多数程序员都知道并且相信code review(代码审查)的重要性,但并一定都能很好的执行这一过程,做好code review也需要遵循一定的原则.流程和规范. 我们团队的code review实践 ...

  6. 代码审查 (Google牛人谈Code Review)

    代码审查 (Google牛人谈Code Review) 在上一篇博客里我暗示自己将不在为Google工作. 我还没有决定好去哪儿-有几个非常不错的工作机会让我选择.鉴于这段时间内我不受雇于任何公司,我 ...

  7. 如何在python脚本开发做code review

    在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...

  8. 从code review到Git commit log

    最近在读一本技术类的书:朱赟——<跃迁:从技术到管理的硅谷路径>,其中聊了很多很有趣的观点,比如:技术管理.技术实践.硅谷文化.个人成长等. 读到关于硅谷人如何做code review这一 ...

  9. 简单可行的code review规则

    前言 曾经有一段垃圾代码放在我的面前,我没有拒绝,等我真正开始接手的时候我才后悔莫及,程序员最痛苦的事莫过于此! 每当接手别人的代码,都有一种想重新写一遍的感觉,等到别人再来接手你的代码时,同样的感觉 ...

随机推荐

  1. CentOS 7搭建本地yum源

    问题 CentOS7.1安装rpm包时提示缺失包,有些包iso里面也没有,只能从外网yum,这种情况下,可以提前yum好所需的依赖包,做成一个本地yum源.将这些文件拷贝到没联网的机器就可以使用了. ...

  2. java中的强引用(Strong reference),软引用(SoftReference),弱引用(WeakReference),虚引用(PhantomReference)

    之前在看深入理解Java虚拟机一书中第一次接触相关名词,但是并不理解,只知道Object obj = new Object()类似这种操作的时候,obj就是强引用.强引用不会被gc回收直到gc roo ...

  3. 帆软用工具测试超链接打开弹窗(iframe嵌套),解决js传参带中文传递有乱码问题

    1.新建超链接 随意点击一个单元格右击,选择 超级链接 2.在弹出的窗口中选择JavaScript脚本 如图: 其中红框框出的是几个要点   ,左边的就不讲了,右上角的参数cc是设置了公式remote ...

  4. JZOJ2020年8月11日提高组T4 景点中心

    JZOJ2020年8月11日提高组T4 景点中心 题目 Description 话说宁波市的中小学生在镇海中学参加计算机程序设计比赛,比赛之余,他们在镇海中学的各个景点参观.镇海中学共有n个景点,每个 ...

  5. git全流程

    服务器:Ubuntu 使用git前准备工作: 下载git之前先更新: apt-get update 安装git: apt-get install git 创建本地仓库: mkdir test git初 ...

  6. moviepy音视频开发:音频合成类AudioArrayClip介绍

    ☞ ░ 前往老猿Python博文目录 ░ AudioArrayClip类是AudioClip的直接子类,用于从一个numpy音频数组构建音频剪辑.AudioArrayClip类只有一个构造方法,在构造 ...

  7. 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis由低级别(C)升级到高级别(P)的步骤和注意事项, 及对用户现有应用的潜在影响,是否需要停机时间窗口,以及这个时间窗口需要多少的预估问题

    问题描述 由于Azure Redis的性能在不同级别表现不同,当需要升级/缩放Redis的时候,从使用者的角度,需要知道有那些步骤? 注意事项? 潜在影响?停机事件窗口? 升级预估时间? 解决方案 从 ...

  8. CSS图标与文字对齐的两种方法

    在平时写页面的过程中,常遇到要把小图标与文字对齐的情况.比如: 总结了两种方法,代码量都比较少. 第一种 对img设置竖直方向对齐为middle, <div> <img src=&q ...

  9. 【题解】切割多边形 [SCOI2003] [P4529] [Bzoj1091]

    [题解]切割多边形 [SCOI2003] [P4529] [Bzoj1091] 传送门:切割多边形 \(\text{[SCOI2003] [P4529]}\) \(\text{[Bzoj1091]}\ ...

  10. 题解-比赛CF1332

    题解-比赛CF1332 比赛CF1332 [A] [B] [C] [D] [E] [F] [G] [A]Exercising Walk Exercising Walk \(T\) 组测试数据,每次给定 ...