写点什么

做不好 Code Review 的 6 大原因

  • 2020-05-20
  • 本文字数:1680 字

    阅读完需:约 6 分钟

做不好Code Review的6大原因


Code reviews 如果实施不当,它可能会严重拖慢团队的交付能力——许多代码更改会在 Code reviews 活动中停留几天(甚至几周),最终影响产品的上市时间。为何你的 Code reviews 可能会耗时长久,常见原因如下:


  • 缺乏编程指南

  • 没有使用自动化检查

  • 没有做自我审查

  • 提交了庞大的 PR

  • 提交了内容模糊的 PR

  • 没有为完成评审设定时间期限

1. 缺乏编程指南

每个团队都应该有一套人人同意的编程指南。这套编程指南应该包含命名规范、文件夹结构、代码格式以及单元测试、验证等活动的最佳实践。


如果没有明确的指导方针和约定规范,每个开发人员就会按照自己喜欢的方式去编写代码,这将导致在 code review 期间出现大量争论和分歧。如果你注意到有许多关于代码格式、命名规范等方面的评论意见,那么你就需要开始组织团队开展关于编程指南的讨论了。


你的团队既可以制定自己的指南,也能借鉴其他公司的智慧,比如参考谷歌的编程风格指南

2. 没有使用自动化检查

一旦你有了文档化的编程指南,就能进一步探索使用工具去自动检查代码是否遵守指南规范。众所周知,几乎所有的编程语言都有 formatters、linters 等,你可以将这些工具与代码预提交或者 CI/CD 等活动关联起来。


这些工具会对代码进行遍历,检查其是否违反编程规范,并通知代码作者。在提交 PR 前,作者需要解决这些规范和格式问题,这样就能很大程度降低代码评审中所出现的干扰。交给自动化完成的工作越多,作为评审人的团队成员就有更多时间去关注代码中的大问题,这些问题包括设计缺陷、实现缺失等等。

3. 不做自我审查

在要求其别人对自己的代码进行评审前,代码作者首先要自己检查一遍所做的更改。这就是所谓的“自我审查”,类似于我们在给别人发送电子邮件前先校勘一遍。


在实践中,审查自己的代码是一件很有挑战性的事情,因为会出现心理盲点(对自己代码中的缺陷,你可能心理上容易无意识地忽略掉。)以下这些方法,可以帮你更好的进行自我审查:


  • 在不指定任何代码评审员的情况下提交 PR,过几个小时后,自己再回来看看这部分代码,这样你会以全新的目光重新审视自己的代码更改。

  • 不要以一目十行的方式随意地快速浏览自己做出的代码更改,而是要刻意谨慎地去逐行仔细检查这些更改。

  • 按照一个检查清单去进行自我审查——比如,“代码是否遵循了编程指南?”,“我的代码是否已经涵盖了这些变更所需要支持的所有业务需求?”,“我是否为所有可能的用例编写了测试?” 等等。

4. 提交了庞大的 PR

一个 PR 的评论数与 PR 包含的代码更改内容多少成反比。换句话说,越大的 PR 通常会获得越少的评论,而越小的 PR 则会获得越多的评论。


这是因为代码评审者在面对大 PR 所包含的过多内容,往往不堪重负,于是他们可能会快速浏览所有更改,从而快速结束此次 code reviews。这种做法实际违背了 code reviews 的根本目的。而且,有时还会发生相反的情况,一个 PR 里内容过多,吓得代码评审者迟迟不敢行动。于是乎,很多天过去了,这个 PR 都没动静,并未获得任何评论意见。


将一个大 PR 分解成更小的代码块,让这些内容彼此分隔,这个做法是有意义的。这会让代码评审者的活动变得更正确且更快速。

5.提交了内容模糊的 PR

一个代码评审者常常被要求去审查内容模糊或没有清晰功能描述的 PR。然后,代码审查者不得不通过试图回忆来自于每日站会或问题跟踪器上的任务,才能理解这些 d 代码更改意味着什么。


所以,建议为提交的 PR 添加更多细节信息,比如:


  • 这个 PR 包含了哪些更改?

  • 代码评审者应该从哪些文件开始审查?

  • 与之相关的问题跟踪器任务的链接

  • 如果带来产品视觉上的变化,请附上屏幕截图


添加这些信息,将会为代码评审者提供更多的上下文,从而有助于他们更快速审查你的 PR。

6.没有为完成评审设定时间期限

让提交的 PR 永远无法被合并的一种做法是,不为代码评审者完成评审工作设定任何时间期限。


请设定一个合理的时间期限,例如:


  • 代码评审应在提交 PR 后 48 小时内完成

  • 一个针对特定问题热补丁的代码评审必须在 30 分钟内完成


作者介绍:


Sheshbabu Chinnakonda,软件开发人员,问题解决者,喜欢构建新东西也喜欢修补东西。


英文原文:


How to prevent code reviews from slowing down your team


2020-05-20 15:081759
用户头像

发布了 63 篇内容, 共 42.8 次阅读, 收获喜欢 119 次。

关注

评论

发布
暂无评论
发现更多内容

SD-WAN网络可靠性设计

阿泽🧸

9月月更 网络可靠性设计

DDD领域驱动设计

源字节1号

软件开发 前端开发 后端开发 软件设计思想

计算机网络——速率相关的性能指标

StackOverflow

计算机网络 编程‘ 9月月更

深入学习SAP UI5框架代码系列之三:UI5 控件的渲染器

汪子熙

JavaScript 前端框架 SAP UI5 ui5 9月月更

Vue基础语法--插槽(Slot)基础使用

Sam9029

Vue 前端 基础 9月月更

LeetCode-26. 删除有序数组中的重复项(java)

bug菌

9月日更 Leet Code 9月月更

剖析智能运维的五大应用场景

穿过生命散发芬芳

智能运维 9月月更

「工作小记」接口请求数据的缓存实践

叶一一

前端 设计思维 9月月更

跟着卷卷龙一起学Camera--AWB

卷卷龙

ISP 9月月更

SAP系统和微信集成的系列教程之二:如何通过微信公众号消费API

汪子熙

API 系统集成 SAP 微信开发 9月月更

设计模式的艺术 第八章建造者设计模式练习(开发一个视频播放软件,为了方便用户使用,该播放软件提供多种界面显示模式,例如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下主界面的组成元素有所差异。例如,在精简模式下只显示主窗口、控制条)

代廉洁

设计模式的艺术

技术团队如何高效落地代码CR

慕枫技术笔记

架构 后端 9月月更

动态规划-编辑距离

wing

为什么要用小程序容器做小程序生态

Geek_99967b

小程序 小程序容器 小程序开发

小程序容器技术加入到混合App开发队伍

Geek_99967b

小程序 混合开发

LeetCode-21. 合并两个有序链表(java)

bug菌

9月日更 Leet Code 9月月更

小程序能否成为电商的突破口

Geek_99967b

小程序 小程序开发

ShareSDK Android端主流平台分享示例

MobTech袤博科技

an'droid

轻松理解20种常用AI算法

Baihai IDP

AI 算法

围绕“开源+深耕”策略和数字化监控手段,动态管理场景生态价值

易观分析

银行 易观 场景金融

数据治理的内核:数据质量

Taylor

数据治理 数据质量管理 数据质量 数据生命周期

2022-09-06:以下go语言代码输出什么?A:Hi All;B:Hi go All;C:Hi;D:go All。 package main import “fmt“ func app() f

福大大架构师每日一题

golang 福大大 选择题

深入学习SAP UI5框架代码系列之四:HTML原生事件 VS UI5 Semantic事件

汪子熙

JavaScript SAP SAP UI5 ui5 9月月更

SAP系统和微信集成的系列教程之一:微信开发环境的搭建

汪子熙

系统集成 SAP 微信开发 微信平台 9月月更

你真的理解C语言的灵魂 “ 指针 ” 吗?(初阶篇)

Albert Edison

指针 C语言 野指针 9月月更

业务应用小程序化,一种潜在的技术趋势

Speedoooo

小程序 移动开发 小程序容器

在小程序中开启直播的解决方案

Geek_99967b

小程序容器 小程序开发

C++学习------iso646.h与limits.h头文件的源码学习

桑榆

c++ 9月月更

时代变了,企业网站应该这么策划内容

石头IT视角

行业智能化走向何方?昇腾AICE带来的新范式,新起点

脑极体

MVCC

急需上岸的小谢

9月月更

做不好Code Review的6大原因_语言 & 开发_Sheshbabu Chinnakonda_InfoQ精选文章