什么是代码评审(code review)? 根据维基百科的定义,代码评审是一种通过若干人员检阅源代码方式来进行的软件质量保证活动。根据软件工程的经典理论,代码评审应该是收益很高的活动,因其产生在Coding阶段(属于开发生命周期的早期),在开发生命周期越早发现问题,解决问题的成本越低。工程实践也能印证这个结论。 代码评审有以下目标:

  • 提高代码质量和可维护性(可读性,一致性)
  • 发现代码缺陷
  • 知识经验传承
  • 发现更好的解决方案
  • 满足QA指导方针

  本人根据针对网络上某代码评审最佳实践的公开文章谈谈自己的想法。

原则1:每次只评审小于200~400行的代码。

--》 我的观点:这个只要是考虑到一次评审的代码过多,评审者发现问题的能力将大量缩小。如果一次评审过多代码,会对评审者带来智力和心理两方面的挑战。从智力上来说,抛开极少数智力超群者不谈,对普通人来说,一次评审更少量的代码更容易理解代码的意图(同时减少了与代码作者的沟通成本,提高效率)。这也是符合分而治之的解决问题方法论的。从心理上来说,一次评审过多代码会对评审者产生倦怠感,评审者主观上通常会降低评审的细致度。根据我的经验,如果某项软件开发任务代码量比较大,可将此任务分解为若干子任务。子任务的划分粒度尽量做到一周的代码提交量(提交的代码需要测试通过)。当然,子任务的划分是建立在良好的设计文档基础上,否则子任务划分的随意度比较高且工作量评估容易不准确。

原则2:代码评审速度应小于每小时300~500行。

--》 我的观点:这条主要是考虑评审的细致度,细致度越高越能发现更多问题。换算一下,一个20行的函数,评审时间应不少于2~4分钟。

原则3:检查清单(checklist)可以大幅改善评审结果

--》 我的观点:检查清单对代码作者和评审者都有作用。对代码作者来说,可以在编码的时候就犯止犯类似的错误。对评审者来说,可以帮助评审得更全面,特别是找出遗漏的问题。检查清单可以定期更新,在评审过程中发现的问题都可以对照检查清单,看看是否需要添加新的条目。最新的检查清单需要在团队内公布,最好是放在一个固定的位置方便随时查看。这个检查清单可以考虑和编码规范放在一个文档,互为对照补充。

原则4:团队领导者应建立一种正面的评审文化,即应正面看待评审中发现的问题

--》 我的观点:为什么需要完全正面的看待在评审中发现的问题?如前文所述,在代码评审中发现问题的修复成本非常低,所以发现越多问题越是好事。只有完全正面看待代码评审发现的问题,评审者才会有更大的动机会发现更多的问题。对于代码作者来说,在代码评审中发现问题,可以帮助自己修正错误的编码习惯和提高自身的编码能力。同时,完全正面看待评审发现的问题,能使得评审者和代码作者建立更为和谐的关系,更有利于发现更多问题。为了建立正面评审文化,领导者需要在团队中宣贯在评审中发现问题表明代码作者和评审者通过成功的团队合作提高了代码质量,领导者绝对不应将评审中发现的问题列入任何针对个人的考核因子。

原则5:轻量级的代码评审是有效率的和现实的

--》 我的观点:软件工程理论中非常正式的代码评审一般要召集不同角色的工程师,通过召开会议来逐行审查代码并进行讨论。但是这种方式成本比较昂贵,较少有公司能够负担起这种人力成本。所以现今大部分公司都倾向于实施非正式的代码评审,一般是基于工具。最简单的非正式代码评审可以是基于邮件列表,缺点是无法很好的记录评审过程中的修改历史和沟通信息。幸运的是,现在有很多可以用于做代码评审的工具,包括商业的和免费的。

  另外,我想再做一些补充。对设计的评审应该基于设计文档,在代码评审阶段去评审设计将会是低效的并且需要花费巨大的沟通成本。当然如果在代码评审阶段发现了设计的问题,需要回过头去重新修改&评审设计文档。

  综上所述,轻量级的代码评审对于业界大部分的软件开发组织都是一个很好的选择。是否在内部建立起正面的评审文化常常起决定性的作用。根据我的观察,是否进行有效的代码评审也基本上是区分二流软件开发组织和三流软件开发组织的一个明显标志:)

谈谈代码评审(code review)的更多相关文章

  1. 自动提交Git branch代码评审到Review Board系统

    背景 敏捷软件开发中,越小的反馈环,意味着软件质量越容易得到保证. 作为组件团队,我们的开发任务中,往往存在一些特性涉及到几十个功能点,开发周期持续数周或数月的情况.如何在开发过程中保证软件质量,是个 ...

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

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

  3. 高效code review指南

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

  4. Code Review 五问五答

    Code Review 是什么? Code Review即代码审查,程序猿相互审核对方的代码. Code Review能获得什么好处? 提高代码可维护性 你写的代码不再只有编译器看了,你得写出审核人能 ...

  5. 漫谈Code Review的错误实践

    从刚开始工作时到现在,已经写了7年的代码,大部分代码都被人review过,自己也review了很多人的代码.在上一家公司的时候,我负责的一轮面试是专门进行Code Review的练习和经验谈. 通过在 ...

  6. 【转载】 漫谈Code Review的错误实践

    原文地址: https://www.cnblogs.com/chaosyang/p/code-review-wrong-practices.html ------------------------- ...

  7. 后端code review finished 12-28

    今天只有天赋和士杰有相应的后端代码的code review工作,因为并没有召开daily scrum.只是天赋和士杰对后端所有的代码进行了review,对代码进行了整理并删除了一些残留的0 refre ...

  8. Code Review 从失败中总结出来的几个经验

    资深的程序员都知道 Code Review 可以对代码质量,代码规范,团队代码能力提升带来很大的提升,还有著名的技术专家"左耳朵耗子"也说过: 我认为没有 Code Review ...

  9. 15个最佳的代码评审(Code Review)工具

    代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能.代码审查程序以各种形式,如结对编程,代码抽查等.在这个列表中,我们编制了1 ...

随机推荐

  1. 小白从零开始阿里云部署react项目+node服务接口(二:node服务+web)

    我们用极简的方式来创建服务,没有任何附加功能 1 新建一个server文件夹 2 使用npm init 或者yarn init  一路enter 3  yarn add  express cors  ...

  2. Alink漫谈(十二) :在线学习算法FTRL 之 整体设计

    Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 目录 Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 0x00 摘要 0x01概念 1.1 逻辑回归 1.1.1 推导过程 ...

  3. 技术干货:Ceph搭建硬件建议详解

    Ceph是专为在商品硬件上运行而设计的,这使得构建和维护超大规模的数据集群在经济上是可行的.当规划出你的集群硬件时,你需要平衡一些考虑因素,包括故障域和潜在的性能问题.硬件规划应该包括将Ceph守护进 ...

  4. APP自动化 -- contexts(上下文切换)

    一.上下文是什么? 1.解释 1)在混合型APP中包含了  原生页面 和 H5页面,如果需要进入APP内嵌的H5页面里面去操作就需要先切换进去,如果要继续回到原生页面操作就需要切回来. 2)这个就像是 ...

  5. 打开chm文件时出现“无法显示此页:确保 Web 地址 //ieframe.dll/dnserrordiagoff.htm# 正确”的解决办法

    当我们打开chm文件时遇到下面这种情况: 解决方法: 1.一般情况下无法显示网页:右键 chm文件属性里最下面有个"解除锁定",点击"解除锁定"按钮就可以了. ...

  6. Redis持久化功能

    Redis为了内部数据的安全考虑,会把本身的数据以文件的形式保存在硬盘中一份,在重启之后会自动把硬盘的数据恢复到内存(redis)里面. 一.snap shotting 快照持久化 该持久化默认开启, ...

  7. 云小课|带你揭开IP地址的神秘身份

    摘要:本文带你了解网络云产品和相关的知识内容. 华为云网络服务大家族提供了丰富的云产品,可以满足用户的各种网络互联需求.相应地,华为云帮助中心也贴心的奉上了你想了解的所有网络云产品知识. 可是小课最近 ...

  8. matplotlib 去掉坐标轴

    #去掉x轴 plt.xticks([]) #去掉y轴 plt.yticks([]) #去掉坐标轴 plt.axis('off') 2020-06-26

  9. pandas_分类与聚合

    # 分组与聚合 import pandas as pd import numpy as np # 设置列对齐 pd.set_option("display.unicode.ambiguous ...

  10. Python os.mkfifo() 方法

    概述 os.mkfifo() 方法用于创建指令路径的管道,并设置权限模式.默认的模式为 0666 (八进制).高佣联盟 www.cgewang.com 语法 mkfifo()方法语法格式如下: os. ...