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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是GoogLeNet,亮点是什么,为什么是这个结构?

GooLeNet 亮点 最明显的亮点就是引入了Inception,初衷是多卷积核增加特征的多样性,提高泛化能力 ,比如,最下边是一个输入层,然后这个输入分别传递给1*1,3 * 3 ,5 * 5和一个最大池化层&#xff…

2024春招和暑期实习全面启动!

大家好,我是小柠檬。2024春招和暑期实习全面启动!最近,我注意到很多同学都在积极投递简历。 3D视觉求职星球 今天给大家推荐我们的3D视觉岗求职星球,里面时常发布大量3D视觉岗位和星球专属内推岗位。 篇幅有限,文节选…

最新全流程GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术深度应用

本文以地下水数值模拟软件GMS操作,本文中强调模块化教学,分为前期数据收集与处理;三维地质结构建模;地下水流动模型构建;地下水溶质运移模型构建和反应性溶质运移构建5个模块;采用全流程模式将地下水数值模…

后端项目访问不了

问题: 后端启动不了,无法访问网站 原因: 1.防火墙没有关 2.有缓存 3、项目没有启动 4、docker没有启动 解决: 先查看进程:docker ps,必须有三个 详细查看:docker ps -a exited代表没有开启…

trunk

介绍: 在华为企业级网络模拟平台(eNSP)中,“trunk” 是指用于在交换机之间传送多个 VLAN 数据的端口。在华为设备中,“trunk” 端口实际上就是可以承载多个 VLAN 数据流的端口。 当两台交换机之间需要互相传送多个 VLA…

关于多权威属性加密论文阅读

来源于2007年Multi-authority Attribute Based Encryption 从单权威机构到多权威机构的意义是什么呢? 基础方案(单权威方案SW)支持数据持有者对数据进行加密使用指定的属性集合并且指定一个数值d。当一个用户需要使用该数据时,需…

【LLM】Advanced rag techniques: an illustrated overview

note 文章目录 noteAdvanced rag techniques: an illustrated overview基础RAG高级RAG分块和向量化(Chunking & Vectorisation)搜索索引(Search Index)1. 向量存储索引(Vector Store Index)2. 多层索引(Hierarchical Indices)3. 假设问题和HyDE(Hypo…

intel realsense D405 在 ROS2 使用示例

1.点云示例 此示例演示如何启动相机节点并使其使用点云选项发布点云。 ros2 launch realsense2_camera rs_launch.py pointcloud.enable:true 以下示例启动相机并同时打开 RViz GUI 以可视化发布的点云。它执行上面的 2 个示例。 ros2 launch realsense2_camera rs_pointcl…

第九个实验:一维数组和二维字符串数组的输入而输出

实验内容: 新建一维数组 新建二维字符串数组 输入内容,运行结果,在输出界面中显示输入的内容 第一步:新建项目 第二步:编程 添加一个INT数控件和字符串控件 修改控件: 复制前面板控件

基于C++和Qt Creator实现的仿制网易云音乐播放器

目录 总体介绍开发环境技术介绍项目目录项目介绍特殊说明Gitee地址 总体介绍 仿照网易云播放器界面实现,目的在于锻炼C编程能力,熟练掌握Qt Creator各种组件的使用及样式设置、界面布局、QtPlugin技术、QXml读写XML文件方法、Qss文件的编写及使用等。 …

协程库项目—协程类模块

ucontext_t结构体、非对称协程 协程类 ucontext_t结构体 头文件中定义的四个函数(getcontext(), setcontext(), makecontext(), swapcontext())和两个结构类型(mcontext_t, ucontext_t)在一个进程中实现用户级的线程切换。 其中…

Spring Boot 中解决跨域的多种方式

Spring Boot 中解决跨域的多种方式 《踏过跨域障碍:Spring Boot 中解决跨域的多种方式》摘要引言正文何为跨域跨域问题出现特征方式一:使用 CrossOrigin 注解方式二:自定义 WebMvcConfigurer方式三:使用 Filter 进行跨域配置 结论…

免费无水印视频素材哪里下载?这几个地方您要知道

哟哟,切克闹,视频剪辑达人们,是不是在视频素材的海洋里迷航了?别着急,今天我就给大家分享几个超实用的无水印短视频素材合集网,让你的创作更加得心应手,从此素材不再是你的烦恼 1,蛙…

Vue3与Vue2:对比分析与迁移指南

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

从零学习Linux操作系统 第三十五部分 Ansible中的角色

一、理解roles在企业中的定位及写法 #ansible 角色简介# Ansible roles 是为了层次化,结构化的组织Playbookroles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们roles一般用于基于主机构建服务的场景中&…

002typeScript面试,1 理解TS类?2 类的继承 3 修饰符 4 抽象类理解 5 枚举类 enum

1 理解TS类? 2 类的继承 3 修饰符 3-1) private 3-2) protected 3-3) readonly 4 抽象类理解 5 枚举类 enum 5-1)枚举模式 5-2)数字枚举 5-3)字符串枚举 5-4)异构枚举

蓝桥杯刷题5--GCD和LCM

目录 1. GCD 1.1 性质 1.2 代码实现 2. LCM 2.1 代码实现 3. 习题 3.1 等差数列 3.2 Hankson的趣味题 3.3 最大比例 3.4 GCD 1. GCD 整数a和b的最大公约数是能同时整除a和b的最大整数,记为gcd(a, b) 1.1 性质 GCD有关的题目一般会考核GCD的性质。   …

Vue 3中的reactive:响应式状态的全面管理

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

2024年【电工(初级)】考试题及电工(初级)考试报名

题库来源:安全生产模拟考试一点通公众号小程序 电工(初级)考试题是安全生产模拟考试一点通总题库中生成的一套电工(初级)考试报名,安全生产模拟考试一点通上电工(初级)作业手机同步…

复盘-PPT

调整PPT编号起始页码在设计→幻灯片大小 设置所有以及文本项目符号 ## 打开母版,找到对应级别设置重置 当自动生成的smartart图形不符合预期时