如何做代码Code Review

2023-05-16

预防胜于治疗,研究表明高效的 Code Review 可以发现70-90%的 bug,Review 作用如下:

  • 提高团队代码标准,所有人共享同一套标准,阻止破窗效应

  • 推动团队合作 reviewer 和 submitter 可能有不同的视角,主观的观点经常发生碰撞,促进相互学习

  • 激励提交者,因为知道代码需要别人 review,所以提交者会倾向提升自己的代码质量。大部分程序员会因为同事对其代码显示出的专业性而感到自豪。

  • 分享知识 submitter 可能使用了一种新技术或者算法,使 reviewer 受益。reviewer 也可能掌握某些知识,帮助改进这次提交。

对于Submitter和Reviewer的共同建议,开放的心态,良好的互动,Submitter给到 reviewer 更多的输入后,有益于问题的挖掘。

For Submitter 发起merge的提交者

1. 一次提交不要超过400行代码:

研究表明 :在一次 CR 中,Reviewer 应一次至多处理200至400行代码(lines of code)。若超过400行,人的大脑无法有效的处理,发现缺陷的能力将下降。在实践中,使用60-90分钟来 review 一个200-400行的 patch,应该能发现70-90%的缺陷。即如果这个 patch 里面存在10个 bug,那么在 CR 阶段应该能发现7至9个。

2.做自己的第一个 reviewer。自我Review有以下几个注意事项:

  • 端正心态,reviewer 是帮你发现问题的人,而不是阻塞你提交的人

  • 认真对待 description,降低Reviewer的理解成本

  • 一次提交只解决一个问题,降低review的复杂度

  • 如果需要做重大修改,写找 reviewer 对齐大致的修改范围,再开始写代码,避免越行越远

For Reviewer code review的审查者

1.控制 review 速度

当 Reviewer 以超过500行/小时的速度 review 代码时,缺陷的发现率会有显著的下降。建议 Reviewer 控制好自己的速度,保障好 review 质量。建议一次 review 的时间不要超过一小时,当任务多时建议提高 review 的频率,避免持续过长时间。

2.Review 的重心

我们不可避免的需要 review 一些较大的 patch, Review的顺序:接口 >  测试 > 实现 ,reviewer 可以假设自己是该代码的使用方,该接口的定义及行为是否符合自己的预期?如果没有时间,至少也应该看一遍接口定义, 测试代码的质量与实现的质量同等重要,不可敷衍 ,理解提交者想通过测试测哪些东西比理解测试代码的含义更重要。

3. review Tips

  • reviewer 应该尽量合理的安排自己的时间,不让自己成为 blocker,推荐每天在开始自己的工作前先 review 别人提交的代码。

  • 给建议,更要给原因,帮助提交者进步

  • 如果看到写得好的代码,不要吝啬赞赏的语句,提交者真的会很受鼓舞

  • 对于看不明白的地方一定要提出问题,而不是轻易放过

  • 不要花过多力气去理解难以理解的代码,如果一眼看不明白,第二眼还看不明白,说明这块代码需要改,很大可能过一段时间提交者也会看不明白

  • 如果 patch 太大,应建议提交者分拆

  • 慎重审查 .h 以及协议的修改

  • 没有测试覆盖的代码没必要去看

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何做代码Code Review 的相关文章

  • C# 输入半径,计算圆的面积和周长

    一个课下小作业 输入圆的半径 xff0c 计算圆的面积和周长输出到控制台 输出格式 xff1a 3 14用Math PI代替 代码如下 NET 5 span class token keyword using span System spa
  • 蓝桥杯 成绩统计(Python)

    题目描述 小蓝给学生们组织了一场考试 xff0c 卷面总分为 100 分 xff0c 每个学生的得分都是一个 0 到 100 的整数 如果得分至少是 60 分 xff0c 则称为及格 如果得分至少为 85 分 xff0c 则称为优秀 请计算
  • 计算存款到期后的本息合计金额

    输入年利率 存款数额 存款年限 xff0c 到期后本息合计金额 years 没有使用 xff0c 是准备做把存款日期做选择用 xff0c 但是没写 xff0c 有兴趣可以自己加 if 做选择 代码 span class token keyw
  • 从键盘输入姓名及5门课成绩

    题目 从键盘输入学生姓名及其5门课成绩 xff08 语文 xff0c 数学 xff0c 英语 xff0c 物理 xff0c 化学 xff09 xff0c 输出5门课的总成绩及平均分 方法比较笨 xff0c 首先定义变量 xff08 字符串
  • 解决虚拟机开启后字体和图标过小的问题

    运行虚拟机到开机界面在虚拟机界面 xff0c 鼠标右键 xff0c 选 属性 点 设置 到如下界面 xff1a 将屏幕分辨率调整到图片所示 xff0c 点击 确定 后 xff0c 图标即可放大 可以根据自己的需要调整像素的大小
  • 将你的电脑远程连接树莓派的简单方法

    不使用网线或者显示器 键盘 鼠标等外接设备 xff0c 即可远程建立树莓派与电脑的连接 目录 1 提前准备 1 1 准备硬件 1 2 系统镜像 1 3 准备软件 2 烧录系统 3 使用ssh连接电脑热点 4 VNC远程控制连接树莓派桌面 1
  • DMA简介

    为什么要有 DMA 技术 dma主要是用于读写数据用的 在没有 DMA 技术前 xff0c I O 的过程是这样的 xff1a CPU 发出对应的指令给磁盘控制器 xff0c 然后返回 xff1b 磁盘控制器收到指令后 xff0c 于是就开
  • c语言冒泡法对10个整数进行递增排序

    分析 xff1a 冒泡法排序的思路是 xff0c 第一次排序对n个元素从头到尾反复进行相邻两个数的比较 xff0c 将小的调到前头 xff0c 第一趟冒泡结束后 xff0c 最大的元素就是数组序列中最后一个元素 xff0c 也就是它的最终位
  • 全网最详细的openstack安装教程

    前言 相信很多安装过openstack的人都知道 xff0c openstack的安装过程很麻烦 xff0c 总是需要修改文件 xff0c 并且还有一堆报错信息 xff0c 遇到一些报错也不知道怎么去解决 xff0c 所以这次就记录并分享一
  • 前缀极差

    前缀极差 蒜头君有 n 个数 xff0c 他提出了 q 个问题 xff0c 每个问题是说 xff0c 询问前 x 个数的极差 xff08 最大值减最小值 xff09 你能帮助他解决这 q 个问题吗 xff1f 输入格式 第一行两个整数 n
  • 「数据库SQL」 ‘三小时快速入门’

    目录 写在前面 数据类型 将自动补全改为默认大写字母的方法 视频 0 xff5e 1 39 11 39 30 对应代码及笔记 删除 修改资料 获得资料 创建公司资料库表格 获取公司资料 聚合函数 万用字元 联集 连接 子查询 写在前面 本篇
  • C++:将输出结果写入文件、从文件中读取数据

    应用背景 很多时候我们会使用语句 xff1a cout lt lt lt lt endl 来进行将某个变量的值展示在屏幕上 xff0c 但如果我们希望将这个结果写入文件中 该怎样操作呢 xff1f 下面展示了如何将输出结果写入txt文件之中
  • C++:set的常用用法详解

    1 关于set C 43 43 STL 之所以得到广泛的赞誉 xff0c 也被很多人使用 xff0c 不只是提供了像vector string list等方便的容器 xff0c 更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构
  • 计算分部积分实例:t^2 * e^2t 的积分

  • 采样定理扩展结论

    已知 xff1a x t 的奈奎斯特律为 y t 的奈奎斯特率为 那么有以下结论 x t y t 时域相乘 61 gt 频谱卷积 61 gt 新信号的奈奎斯特率为和的和 x t y t 时域卷积 61 gt 频谱相乘 61 gt 新信号的奈
  • Acwing:合适数对

    今天在补AcWing周赛题目的时候遇到了一道很经典的区间和问题 xff0c 因此写下本篇博客记录下来 原题链接 xff1a 4316 合适数对 AcWing题库 题目描述 输入样例1 xff1a 5 4 5 1 3 4 1 输出样例1 xf
  • 蓝桥杯:统计子矩阵(十三届省赛C++组)

    前言 xff1a 这道题目是矩阵类型题目经典题型 xff0c 解题大体思路是前缀和 43 双指针扫描 xff0c 在我这篇博客中 第十三届蓝桥杯省赛C 43 43 B组题解 第十三届蓝桥杯b组c 43 43 答案 正在黑化的KS的博客 CS
  • pyqt 之 QTableView listvview 添加复选框 Checkbox

    目录 简述 常见的实现方式 具体实现 1 自定义模型QAbstractTableModel xff0c 通过flags 函数来实现 2 自定义委托QAbstractItemDelegate xff0c 通过paint 函数来实现 3 QSt
  • 第十四届蓝桥杯模拟赛第三期(Python)

    写在前面 包含本次模拟赛的10道题题解能过样例 xff0c 应该可以AC若有错误 xff0c 欢迎评论区指出本次题目除了最后两题有些难度 xff0c 其余题目较为简单 xff0c 我只将代码和结果给出 xff0c 如果不能理解欢迎私信我 x
  • Acwing: 一道关于线段树的好题(有助于全面理解线段树)

    题目链接 x1f517 xff1a 2643 序列操作 AcWing题库 前驱知识 xff1a 需要理解线段树的结构和程序基本框架 以及懒标记的操作 题目描述 题目分析 对区间在线进行修改和查询 xff0c 一般就是用线段树来解决 xff0

随机推荐

  • 扩展欧几里得算法及其应用

    前言 由于数论的板子真的很抽象 xff0c 也很难背 xff0c 所以特此记录扩展欧几里得算法的板子和它的用途 本篇文章只涉及应用 xff0c 不涉及证明 xff0c 如需理解证明还请各位移步其他优秀的讲解 xff01 扩展欧几里得算法 先
  • 蓝桥杯:Python组再也不怕组合数计数

    有一类题目是是这样的 xff1a 要求我们从n个数中选m个 xff0c 问共有多少种取法 如果是用C 43 43 写的话 xff0c 要应用到Lucas定理 xff0c 暴力阶乘会超时 这里给大家介绍一个Python3 8 math库自带的
  • 模拟角频率和数字角频率的关系

    概念 xff1a 模拟频率f xff1a 每秒经历多少个周期 xff0c 单位Hz xff0c 即1 s xff1b 模拟角频率 xff1a 每秒经历多少弧度 xff0c 单位rad s xff1b 数字角频率w xff08 归一化角频率
  • 对于时不变系统的理解

    来源 xff1a 信号与系统 对 时不变性 判定的一点注记 知乎
  • 「STM32入门」TIM输出比较

    输出比较的简介 输出比较英文写作OC Output Compare 输出比较可以通过比较CNT和CCR寄存器值的关系 xff0c 来对输出电平进行置高或者置低或者翻转的操作 xff0c 用于输出一定频率和占空比的PWM波形常见应用例子如 x
  • 「数字信号处理」MATLAB设计 双音多频拨号系统

    前言 实验目的 xff1a 用Matlab模拟实现双音多频拨号系统 输入 xff1a 一串数字模拟电话号码 输出 xff1a 检测出的电话号码 Matlab版本 xff1a 2021b 系统 xff1a MacOS 实验方法 xff1a 查
  • 「STM32入门」TIM定时中断

    定时器的简介 定时器可以对输入的时钟进行计数 xff0c 并在计数值达到设定值时触发中断 xff0c 在中断内可以执行中断事件不仅具备基本的定时中断功能 xff0c 而且还包含内外时钟源选择 xff0c 主从触发模式 xff0c 输入捕获
  • 二极管反向恢复过程详细解析

    二极管反向恢复过程 xff0c 现代脉冲电路中大量使用晶体管或二极管作为开关 或者使用主要是由它们构成的逻辑集成电路 而作为开关应用的二极管主要是利用了它的通 电阻很小 断 电阻很大 特性 即二极管对正向及反向电流表现出的开关作用 二极管和
  • 性能优化总结

    性能优化关注点 从图中可以看出 xff0c 性能优化的主要关注 xff1a CPU 内存 磁盘IO 网络IO等四个方面 性能指标 每个关注点都有对应的指标 xff0c 吞吐率 响应时间 QPS IOPS TP99 资源使用率是我们经常关注的
  • Python:优先队列的使用及类的自定义比较函数

    Priority queue模块 该模块定义的优先级队列 xff0c 其内部使用了 heapq 模块 xff0c 所以它的时间复杂度和heapq是相同的 当一个对象的所有元素都是可比较的时 xff0c 默认情况下是根据队列中的对象的第一个元
  • 「STM32入门」USART串口通信

    通信 通信的目的 xff1a 将一个设备的数据传送到另一个设备 xff0c 扩展硬件系统 通信协议 xff1a 制定通信的规则 xff0c 通信双方按照协议规则进行数据收发 STM32常见的通信协议 本文将介绍USART 概念解释 TX R
  • 「数字信号处理」采样过程与内插恢复完整图解

    内插与采样的关系 来源 xff1a 数字信号处理 采样与内插 DSP期末知识点题型4 哔哩哔哩 bilibili
  • 配置vscode作为STM32代码的编辑器(替代keil5)。实现:代码自动补全, 编译,下载。nRF52也可以编译。

    STM32CubeMX新建好工程在工程根目录新建文件夹 vscode在 vscode 文件夹内新建文件c cpp properties json 34 configurations 34 34 name 34 34 STM32 34 任意的
  • Python中的字典

    1 字典概念 Python内置的数据结构之一 xff0c 与列表一样是一个可变序列 以键值对的方式存储数据 xff0c 字典是一个无序的序列 xff08 列表是有序的 xff09 字典通过计算key的hash值确定存储位置 xff0c 所以
  • docker中使用cuda

    需要注意的事项 1 注意应用NVIDIA在docker hub上提供的镜像 本次使用的是 nvidia cuda 10 1 cudnn7 devel ubuntu18 04 2 在宿主机安装 nvidia docker2 3 运行时 要加
  • Mysql8.0 忘记密码怎么办

    Mysql8 0 忘记密码怎么办 今天晨雨帮身边小伙伴解决了mysql8 0无法连接上的问题 中间碰到的一些问题和大家分享一下 跳过密码登录时不成功修改密码时不成功navicat连接时报 2000的问题 1 首先先停止mysql服务 可通过
  • Kurento实战之二:快速部署和体验,Java笔试题编程题

    GitCommit 269548fa27e0089a8b8278fc4fc781d7f65a939b runc Version 1 0 0 rc92 GitCommit ff819c7e9184c13b7c2607fe6c30ae19403
  • QT使用render时pixmap背景不为透明的解决办法

    当我们需要将一个界面绘制成图片时 xff0c 就需要使用到render方法 QPixmap pixmap pwidget gt size pwidget gt render amp pixmap 如果pwidget背景为透明时 xff0c
  • 【iOS】—— 高德地图SDK基础使用

    最近稍微学了学iOS调用高德的SDK xff0c 就随便做做笔记 注意 xff1a 本篇博客基于高德地图SDK的3D地图来写的 xff0c 若使用的是2D地图可能有的方法可能有所不同 xff0c 比如自定义定位蓝点之类的 一 准备工作 xf
  • 如何做代码Code Review

    预防胜于治疗 xff0c 研究表明高效的 Code Review 可以发现70 90 的 bug xff0c Review 作用如下 xff1a 提高团队代码标准 xff0c 所有人共享同一套标准 xff0c 阻止破窗效应 推动团队合作 r