加快代码审查的 7 个最佳实践

目录

前言

1-保持小的拉取请求

2-使用拉取请求模板

3-实施响应时间 SLA

4-培训初级和中级工程师

5-设置持续集成管道

6-使用拉取请求审查应用程序

7-生成图表以可视化您的代码更改


前言

  • 代码审查可能会很痛苦
  • 软件工程师经常抱怨审查过程缓慢,延迟下游任务,并在您在打开的拉取请求 (PR) 和下一个任务之间来回导航时导致上下文切换
  • 代码审查也可能充满吹毛求疵,这对所有相关人员来说都是一种糟糕的体验
  • 为了解决这个问题,一些工程师甚至建议我们完全摆脱拉取请求和代码审查
  • 虽然这可能适用于初创公司的小团队,但我认为这不是每个人的正确解决方案,尤其是企业级公司
  • 相反,有很多方法可以让代码审查过程对代码作者和代码审查者都有更好的体验

1-保持小的拉取请求

  • 每个工程师都害怕审查更改了 1000 多行代码的拉取请求
  • 这些审查可能需要几个小时才能完成,而且通常最终发生的是审查者开始浏览代码而不是仔细审查它
  • 解决方案是保持你的拉取请求很小
  • 小型 PR 更容易且能更快地审查,因为审查者不需要花费太多时间来建立所有更改如何协同工作的心理模型
  • 更改的代码也更少,这有望等同于更少的错误、更少的评论以及更少的作者和审阅者之间的来回循环
  • 一开始,保持你的 PR 很小似乎很困难,但如果你将工作分解为小任务并保持专注,就可以做到
  • 不要在实现新功能或修复错误的同时进行重大重构
  • 在代码中使用功能标志,这样您就可以将一小部分新功能合并到主分支中,而不会出现在生产应用程序中
  • 保持你的 PR 小,您的审阅者将不胜感激

2-使用拉取请求模板

  • 另一个烦恼是被要求在没有任何上下文的情况下审查拉取请求
  • 当一个 PR 没有任何解释地丢在你的腿上时,你常常会想,“这个 PR 是干什么用的?这解决了什么问题?有没有相关的任务?为什么采取这种特殊的方法?
  • 拉取请求模板是一种可配置的小型表单,您可以将其设置为每个新拉取请求的默认文本
  • PR 模板提示代码作者为其 PR 提供相关详细信息
  • 通常,PR 模板会要求您简要说明您所做的工作及其原因、任务单的链接以及用于验证更改的测试计划
  • 好的 PR 模板通常还包括一个简短的清单供代码作者检查,以确保他们没有错过任何基础知识
  • 该清单可能包括单元测试、文档、国际化、跨浏览器支持和可访问性等项目
  • 下面是一个示例拉取请求模板:

3-实施响应时间 SLA

  • 如果您发现拉取请求未经审查的时间比您希望的要长,那么现在是为团队设定新拉取请求审查速度的好时机
  • 换句话说,PR 在必须被提取之前可以存在的最长时间是多少?一小时?两个小时?24小时?
  • 您对该问题的回答可能取决于您团队的规模
  • 对于来自您团队的内部拉取请求与来自其他团队的外部拉取请求,您可能也有不同的答案
  • 在选择响应时间 SLA(服务水平协议)时,您需要找到合适的平衡点
  • 当你发布一个新的 PR 时,期望每个人都立即放弃他们正在做的任何事情并审查你的代码是不合理的,但你也不希望 PR 几个小时都没有被审查
  • 找到合适的平衡点,让你的队友进入心流状态
  • 他们应该能够编写自己的代码,然后全天在自然停止点审查 PR
  • 一般而言,为内部团队 PR 提供 2 小时响应时间 SLA,为外部团队 PR 提供 24 小时响应时间 SLA
  • 无论您和您的队友做出什么决定,签订团队协议都可以让您彼此负责
  • 如果每个人都同意一个特定的 SLA,并且您的一个 PR 的时间已经过去,那么您就知道可以开始向人们提出问题了

4-培训初级和中级工程师

  • 培训机会无处不在
  • 指导经验不足的工程师不仅仅是教他们使用的技术和语言
  • 它还包括教他们如何进行有效的代码审查等软技能
  • 在代码审查期间教你的队友你在寻找什么
  • 帮助他们了解什么是重要的,什么不是
  • 教他们如何在代码审查评论中进行有效沟通,例如在非阻塞建议前加上“nit”

5-设置持续集成管道

  • 当大多数评论是“缺少分号”或“缩进似乎在这里”时,代码审查变得乏味
  • 不要在代码审查期间花时间在代码格式化程序和代码检查器可以为您处理的事情上
  • 让计算机将琐碎的事情自动化,这样你就可以专注于需要人去做的重要事情
  • 您可以使用Travis CI、CircleCI、GitHub Actions或GitLab CI/CD等工具为您的存储库设置持续集成
  • 您的 CI 管道将为您运行这些格式化和 linting 任务以及您的单元测试
  • 如果 CI 管道在拉取请求的任何步骤失败,它将阻止该拉取请求被合并
  • 现在,您已经自动化了代码审查的几个重要部分,从而节省了您的时间

6-使用拉取请求审查应用程序

  • 有时不仅需要查看拉取请求中的代码,还需要手动查看应用程序中的更改以验证事情是否正常
  • 对于具有复杂设置步骤的应用程序,提取其他人的代码并在您的计算机上本地运行它可能需要五分钟到一个小时不等
  • 多么令人头疼
  • 拉取请求审查应用程序用于在创建新 PR 时自动将您的代码部署到短期测试环境
  • 这允许审阅者轻松检查 UI 更改,而无需下载代码并在他们的机器上本地运行它
  • 这不仅可以节省时间,而且还可以通过简化审阅来促使审阅者在审阅中更加彻底

7-生成图表以可视化您的代码更改

  • 在 GitHub 或 GitLab 中查看代码时,文件通常按字母顺序显示
  • 对于相对较小的 PR,这可能不是问题
  • 但是,当 PR 中涉及数十个文件时,有时将这些更改按逻辑组合在一起会很有帮助,这样您就可以在更大的图景中看到它们是如何组合在一起的
  • CodeSee Review Maps可帮助您可视化更改了哪些文件以及这些更改如何影响它们的上游和下游依赖项
  • 它们与 GitHub 集成以自动在您的 PR 上发布评论和图表
  • 您甚至可以创建代码的交互式导览,以帮助指导您的代码审查员
  • 最重要的是,CodeSee 地图对开源组织及其公共存储库是免费的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/446535.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring boot2.7整合jetcache 本地linkedhashmap缓存方案

好 上文 Spring boot2.7整合jetcache 远程redis缓存方案 我们讲完了 远程实现方案 本文 我们来说说 本地 jetcache解决方案 首先是 application.yml 在jetcache下加上 local:default:type: linkedhashmapkeyConvertor: fastjson我们技术用的 本地缓存 linkedhashmap 这里 我们…

conda 设置国内源 windows+linux

默认的conda源连接不好,时好时坏,而且速度很慢,可以使用国内的源 如果没有安装conda,可以参考: miniconda安装:链接 anaconda安装winlinux:链接 windows使用命令提示符,linux使用…

【C语言】glibc

一、获取源码 apt install glibc-source 在Debian系统中,通过apt install glibc-source命令安装的glibc源码通常会被放置在/usr/src/glibc目录下。安装完成后,可能需要解压缩该源码包。以下是解压缩源码包的步骤: 1. 打开终端。 2. 切换到源…

2024年【P气瓶充装】考试报名及P气瓶充装复审考试

题库来源:安全生产模拟考试一点通公众号小程序 P气瓶充装考试报名是安全生产模拟考试一点通总题库中生成的一套P气瓶充装复审考试,安全生产模拟考试一点通上P气瓶充装作业手机同步练习。2024年【P气瓶充装】考试报名及P气瓶充装复审考试 1、【多选题】《…

docker学习笔记——Dockerfile

Dockerfile是一个镜像描述文件,通过Dockerfile文件可以构建一个属于自己的镜像。 如何通过Dockerfile构建自己的镜像: 在指定位置创建一个Dockerfile文件,在文件中编写Dockerfile相关语法。 构建镜像,docker build -t aa:1.0 .(指…

esp32 idf.py cmd powershell 环境

esp32 idf.py cmd powershell 命令行 环境 win10 推荐使用 Windows Terminal 替换自己路径 设置–>添加新配置文件–>选择cmd 或者 powershell -->保存–> 去修改命令行 启动目录,推荐使用父进程目录 powershell C:\WINDOWS/System32/WindowsPowe…

【STA】SRAM / DDR SDRAM 接口时序约束学习记录

1. SRAM接口 相比于DDR SDRAM,SRAM接口数据与控制信号共享同一时钟。在用户逻辑(这里记作DUA(Design Under Analysis))将数据写到SRAM中去的写周期中,数据和地址从DUA传送到SRAM中,并都在有效时…

关于查看 CentOS7虚拟机的 ip地址

1. 启动网卡 1.1 打开网卡配置文件。 vi /etc/sysconfig/network-scripts/ifcfg-eth01.2 启动网卡 修改为下图中的ONBOOTyes 2. 重启网络服务 sudo service network restart3. 查看ip地址 ip addr

NBlog整合OSS图库

NBlog部署维护流程记录(持续更新):https://blog.csdn.net/qq_43349112/article/details/136129806 由于项目是fork的,所以我本身并不清楚哪里使用了图床,因此下面就是我熟悉项目期间边做边调整的。 目前已经调整的功能…

http协议分析

目录 一、实验目的 二、实验环境 三、实验步骤 四、实验数据记录和结果分析 五、实验体会、质疑和建议 一、实验目的 通过在真实网络环境访问HTTP服务器上网的过程中,捕获HTTP数据报文,分析报文的内容,掌握HTTP报文的构成,理解HTTP协议的工作过程, 二、实验环境…

02-在 ESP-IDF 项目中添加 .c 和 .h 文件的

在 ESP-IDF 项目中添加 .c 和 .h ESP-IDF(Espressif IoT Development Framework)是一个用于开发基于 ESP32 和 ESP8266 微控制器的嵌入式应用程序的框架。在 ESP-IDF 项目中添加新的 .c 和 .h 文件是很常见的,但要确保这些文件能够正确地被编…

C++类和对象(下篇)

目录 一.再谈构造函数 二.static成员 三.友元 四.内部类 五. 再次理解类和对象 一.再谈构造函数 1.构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month…

js 获取浏览器相关的宽高尺寸

window 屏幕 屏幕分辨率的高: window.screen.height 屏幕分辨率的宽: window.screen.width 屏幕可用工作区高度: window.screen.availHeight 屏幕可用工作区宽度: window.screen.availWidth document 网页 网页可见区域宽&#xf…

JavaEE+springboot教学仪器设备管理系统o9b00-springmvc

本文旨在设计一款基于Java技术的教学仪器设备销售网站,以提高网站性能、功能完善、用户体验等方面的优势,解决现有教学仪器设备销售网站的问题,并为广大教育工作者和学生提供便捷的教学仪器设备销售渠道。本文首先介绍了Java技术的相关基础知…

三维不同坐标系下点位姿态旋转平移变换

文章目录 前言正文计算方法思路Python实现总结前言 本文主要说明以下几种场景3D变换的应用: 3D相机坐标系下长方体物体,有本身坐标系,沿该物体长边方向移动一段距离,并绕长边轴正旋转方向转90度,求解当前物体中心点在相机坐标系下的位置和姿态多关节机器人末端沿工具坐标…

Redis基础篇:初识Redis(认识NoSQL,单机安装Redis,配置Redis自启动,Redis客户端的基本使用)

目录 1.认识NoSQL2.认识Redis3.安装Redis1.单机安装Redis2.配置redis后台启动3.设置redis开机自启 4.Redis客户端1.Redis命令行客户端2.图形化桌面客户端 1.认识NoSQL NoSQL(Not Only SQL)数据库是一种非关系型数据库,它不使用传统的关系型数…

我们的一生都是在挤火车。

哈喽,你好啊,我是雷工! 昨天从燕郊坐火车回石家庄,由于赶上元旦假期,所有高铁票都售罄,一张普通火车票,还是一周前就买才买到的。 从燕郊站,到北京站,然后地铁去北京西站…

C语言动态内存管理面(下)常⻅的动态内存的错误

我们接着C语言动态内存管理(上)没讲完整的继续来深度讲解。、 4. 常⻅的动态内存的错误 4.1 对NULL指针的解引⽤操作 主要的原因还是自己的粗心大意没有对malloc的值进行判断 void test() { int *p (int *)malloc(INT_MAX/4); *p 20; //如果p的值是…

JavaScript原型和原型链

JavaScript每个对象拥有一个原型对象 需要注意的是,只有函数对象才有 prototype 属性 当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索&#xff…

OpenGrok代码服务器搭建,解决代码检索慢的问题

一、背景 在前一家公司,公司提供了OpenGrok服务器供大家检索查阅代码。但在新公司,大家都使用vscode或Sourse Insight,这就存在一些问题: 不能跳转或者跳转比较慢。 搜索查询速度慢,且结果展示不易查看。 这严重影…