当前位置: 首页 > news >正文

加快代码审查的 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 地图对开源组织及其公共存储库是免费的

相关文章:

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

目录 前言 1-保持小的拉取请求 2-使用拉取请求模板 3-实施响应时间 SLA 4-培训初级和中级工程师 5-设置持续集成管道 6-使用拉取请求审查应用程序 7-生成图表以可视化您的代码更改 前言 代码审查可能会很痛苦软件工程师经常抱怨审查过程缓慢,延迟下游任务&…...

C++读写Excel(xlnt库的使用)

一、简介 官网:https://github.com/tfussell/xlnt Cross-platform user-friendly xlsx library for C11 xlnt is a modern C library for manipulating spreadsheets in memory and reading/writing them from/to XLSX files as described in ECMA 376 4th edition…...

【工具】conda常用命令

Conda 是一个流行的包管理器和环境管理器,用于安装、部署和管理软件包及其依赖项。 创建环境: conda create --name myenv 这将创建一个名为 myenv 的新环境。 激活环境: conda activate myenv 这会激活名为 myenv 的环境。在 Windows 上&am…...

Dockerfile编写实践篇

Docker通过一种打包和分发的软件,完成传统容器的封装。这个用来充当容器分发角色的组件被称为镜像。Docker镜像是一个容器中运行程序的所有文件的捆绑快照。当使用Docker分发软件,其实就是分发这些镜像,并在接收的机器上创建容器。镜像在Dock…...

BJFU|计算机网络缩写对照表

之前有过这个题型,但23年没考,所以按需准备 A ACK (ACKnowledgement) 确认 ADSL (Asymmetric Digital Subscriber Line) 非对称数字用户线 API (Applicatin Programming Interface) 应用编程接口 ARP (Address Resolution Protocol) 地址解析协议 ARQ (…...

Grafana dashboards as ConfigMaps

文章目录 1. 简介2. 创建 configmaps3. grafana 界面查看 1. 简介 将 Grafana 仪表板存储为 Kubernetes ConfigMap 相比传统的通过 Grafana 界面导入仪表板有以下一些主要优点: 版本控制: ConfigMap 可以存储在版本控制系统(如Git)中,便于跟踪和管理仪表板的变更历…...

【QA-SYSTEMS】CANTATA-解决Jenkins中build Cantata报错

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 解决Jenkins中build Cantata测试项目报找不到license server的错误。 2、 问题场景 在Jenkins中build Cantata测试项目,报错“Failed to figure out the license server correctly”。 3、软硬件环…...

个人网站展示(静态)

大学期间做了一个个人博客网站,纯H5编码的网站,利用php搭建了一个留言模块。 有需要源码的同学,可以联系我~ 首页: IT杂记模块 文人墨客模块 劳有所获模块 生活日志模块 关于我 一个推崇全栈开发的前端开发人员 微信: itrzzh …...

C++——内存管理、模板

一、C内存管理 在C语言中我们曾学习过动态内存管理的相关知识,通过malloc、calloc、realloc和free等对堆上的空间进行申请和释放。在C中我们同样会面临类似的需求,因此C对动态开辟内存的方式进行了一些调整,我们可以使用new和delete操作符来对…...

商品上传上货搬家使用1688商品采集api接口

1688.item_get 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cacheString否[yes,no…...

redisson解决redis服务器的主从一致性问题

redisson解决redis的主节点和从节点一致性的问题。从而解决锁被错误获取的情况。 实际开发中我们会搭建多台redis服务器,但这些服务器分主次,主服务器负责处理写的操作(增删改),从服务器负责处理读的操作,…...

Vue-router

router的使用(52) 5个基础步骤: 1.在终端执行yarn add vue-router3.6.5,安装router插件 yarn add vue-router3.6.5 2.在文件的main.js中引入router插件 import VueRouter from vue-router 3.在main.js中安装注册Vue.use(Vue…...

白皮书发布|超融合运行 K8s 的场景、功能与优势

目前,不少企业都使用虚拟化/超融合运行 Kubernetes 和容器化应用。一些用户可能会有疑惑:既然 Kubernetes 可以部署在裸金属上,使用虚拟化不是“多此一举”吗? 在电子书《IT 基础架构团队的 Kubernetes 管理:从入门到…...

全局Ceph节点宕机处理

在极端情况下,如数据中心断电,造成 Ceph 存储集群全局宕机,可以按照本节所示流程进行 Ceph 集群上电恢复操作。 4.1 手动上电执行步骤 如为 Ceph 集群上电,monitor server 应最先上电;集群上电前确认使用 Ceph 之前端…...

电脑中缺失EMP.dll文件怎么办,解决EMP.dll丢失问题的有效方法分享

当你的电脑出现由于找不到emp.dll无法继续执行代码的提示,那你要怎么办呢?其实解决方法还是挺多的,今天就来给大家详细的说说emp.dll这方面的信息吧。 一、电脑为什么会出现emp.dll丢失 不完全卸载软件:在卸载程序时,…...

Linux 进程程序替换

💓博主CSDN主页:麻辣韭菜-CSDN博客💓   ⏩专栏分类:http://t.csdnimg.cn/G90eI⏪   🚚代码仓库:Linux: Linux日常代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝&#x1f5…...

系统分析与设计(一)

我们有这么多各式各样的工具,互联网给我们带来了这么多用户和数据,这是好事也有副作用。 世界上能访问用户数据,并根据数据做分析和改进的公司,大概Google是其中翘楚,这种 data-centric 的做法做过了头,也有悲剧发生: Douglas Bowman 曾经是Google 的视觉设计主管,2009年的一天…...

【QT】自定义控件的示例

自定义控件(很重要) 什么是自定义控件? 顾名思义就是创建一个窗口,放入多个控件,拼接起来,一起使用。 为什么需要它? 需求,假设有100个窗口,那如果有两个控件同时被使…...

Rust入门:Rust如何调用C静态库的函数

关于Rust调用C,因为接口比较复杂,貌似Rust不打算支持。而对于C函数,则相对支持较好。 如果要研究C/Rust相互关系的话,可以参考: https://docs.rs/cxx/latest/cxx/ Rust ❤️ C 这里只对调用C静态库做一个最简短的介…...

阿里云Linux系统MySQL8忘记密码修改密码

相关版本 操作系统:Alibaba Cloud Linux 3.2104 LTS 64位MySQL:mysql Ver 8.0.34 for Linux on x86_64 (Source distribution) MySQL版本可通过下方命令查询 mysql --version一、修改my.cnf文件 文件位置:etc/my.cnf进入远程连接后可以打…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...