为什么你的团队不需要使用拉取请求 | IDCF

作者:Kief Morris

译者:冬哥

原文:https://infrastructure-as-code.com/book/2021/01/02/pull-requests.html

前 言

Github 引入了Pull Request拉取请求(简称PR)实践和相关的支持功能,使运行开源项目的人更容易接受来自他们信任的提交者群体之外的贡献。

Committer是被信任的主体,可以定期更改代码库。但是需要评估来自随机外部人员的更改,以确保其有效,不会使项目朝着不需要的方向发展,并且符合风格和质量标准。外部人员将他们提出的变更打包为拉取请求,Committer可以轻松地将其作为一个单元进行审查和管理,然后再将其合并到代码库中。

图片

(图 1:拉取请求流程)

尽管拉取请求旨在更容易地接受来自团队外部不受信任的人的贡献,但现状是很多团队对内部人员使用拉取请求。这种做法已经变得如此普遍,以至于许多人将其视为默认的“最佳”实践。有些人认为没有其他方法可以确保代码得到评审,因为他们从未见过其他任何东西。

然而,拉取请求会牺牲性能,包括交付时间和质量。当管理来自未知人员的变更风险时,这是一个值得做出的牺牲。外部人员可能不了解你项目的愿景和方向。他们在测试、代码质量和风格方面可能没有相同的习惯和规范。但是,你自己团队成员内部应该共享这些规范。

针对自己团队成员的代码变更采用拉取请求,就像让你的家人通过机场安全检查站进入你家一样,这是针对不同问题的昂贵解决方案。 

使用持续集成而不是拉取请求

软件交付过程应该针对流程和质量进行优化。将变更前置保持在较短的时间,并在变更引入问题时提供快速反馈。这是支持持续集成(CI)的想法。CI 是在每个人的代码上不断合并和测试他们的做法。

图片

(图 2:持续集成过程)

“当他们工作时”是必不可少的。作为团队成员,你不会等到完成某个功能或故事后才将代码集成到主干中。相反,你经常 - 至少每天一次 - 将你的代码置于健康状态,通过测试并将其与其他人的当前工作一起集成到主干中。

每次推送变更时,CI 构建作业都会自动测试项目的主干。这意味着在投入太多时间之前,你会立即发现你正在做的事情是否与另一个人正在做的事情发生冲突。当你认为已经完成了一个故事或功能,却发现必须回去解决并重做这几天的努力,会很糟糕。

图片

(图 3:每次推送时都在集成代码上运行测试)

拉取请求的麻烦

拉取请求会延迟集成。当完成工作,认为已准备好与团队其他成员的工作进行集成时,你创建一个拉取请求并等待有人对其进行审核。只有在其他人审查通过变更后,才会将其与主干集成。

如果团队成员快速审查和集成拉取请求,这仅比 CI 慢一点。也许他们会在你每次推送的30 分钟内回复并审核,将你的代码变更与主干集成,并针对它运行自动化测试。因此,你可能会在 30-40 分钟左右之后发现与其他人的工作发生冲突。

图片

(图 4:拉取请求与 CI 的反馈延迟)

在实践中,没有多少团队能在 30 分钟内可靠地解决拉取请求。在等待某人审查你的变更时,你可以切换到另一个任务或开始处理新的修改。当发现存在问题时,你需要切换回原始更改,从而中断了当前的工作流程。

另一方面,有效的 CI 构建应该在推送集成代码后的几分钟内完成测试 - 在我们的场景中最多 10 分钟。你几乎会立即发现该冲突,因此可以对其进行调查和修复。

在从测试完全集成的代码中获得反馈之前,你无需打断其他人的工作来要求他们对其进行审查。正如我将很快解释的那样,你可能仍然需要有人审核变更。但是你可以利用更快的周期时间来提交、集成和测试自己的代码,以便在要求他们审查之前进行多项更改。

即使团队中的每个人都很快地改变了拉取请求,典型的做法是等到完成功能或故事的工作,然后再将拉取请求与主干集成。大多数团队平均需要超过一天的时间来开发一个故事。因此,典型的拉取请求流程不满足持续集成的最低要求,即至少每天集成每个人的工作。

每天数次以编码、拉取、测试、推动和从集成测试中获取反馈的节奏工作会令人兴奋,而拉取请求在节奏中引入人为延迟,不可能产生这种兴奋感。

审查代码更改更好的方法

当 CI 与拉取请求的话题出现时,不可避免地会有人站出来为拉取请求辩护,以获取其他团队成员对更改的反馈。

必须有第二双眼睛(如果不是更多)查看代码更改。人类会发现测试没有发现的问题,尤其是与可维护性和设计相关的问题。让人们审查彼此的代码还有助于团队在编码风格、编程习惯和质量要求等规范上趋于一致。在某些情况下,例如受监管的环境,需要由第二人审查每个更改。

然而,最近拉取请求的流行似乎导致一些人认为没有其他方法可以用来审查代码变更。以下是你可以使用的一些实践,而不会中断持续集成反馈周期。请记住,完全可以根据需要进行多个实践的组合。

图片

(图 5:配对以实现即时、持续的代码审查)

  • 结对编程:没有任何形式的代码审查比结对编程更有效。反馈是即时的,因此使用它进行改进的可能性要高得多。如果有人在你编写代码时告诉你有更好的方法,那么你可以立即停止、学习并以更好的方式编写代码。如果有人在一天后告诉你,你可以将其记录下来以备将来参考。但是要让你停止当前的工作并回去重做你已经完成的工作,这会成为一个严重的问题。

  • 定期审查:如果合规性没有明确要求进行审查,则可能不需要为每个代码更改设置一个门禁。你可能有定期的、预定的审查,例如每周,来检查自上次审查以来的代码更改。这作为小组练习尤其有效,因为它创建了对话,帮助人们学习和塑造团队的编码规范。

  • 流水线审批:如果你的团队使用持续交付流水线将变更交付到生产,可以包括一个阶段,要求有人授权变更进行。这在概念上类似于拉取请求,因为它是交付过程中的一个门禁,但当你将门禁放在代码集成和自动化测试之后。这样做意味着人们只花时间审查已经在技术上被证明是正确的代码。

图片

(图 6:在集成和测试之后审查更改)

结论

拉取请求与持续集成的不同之处在于,在编写代码变更之后但在将其与主线集成之前,需要人工审查代码更改。这会延迟从已完全集成代码的自动化测试中获取到反馈。

使用持续集成,代码要么在编写时(结对)进行审查,要么在集成和测试之后进行审查。针对集成和测试变更的循环进行优化,意味着你可以更频繁地运行此循环。更频繁的编码和集成循环鼓励开发人员进行更小更频繁的提交,从而提高质量和流程。

 

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

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

相关文章

NX二次开发UF_CURVE_create_arc_point_tangent_point 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_arc_point_tangent_point Defined in: uf_curve.h int UF_CURVE_create_arc_point_tangent_point(tag_t point1, tag_t tangent_object, tag_t point2, UF_CURVE_he…

Temu要求提交RSL Report 铅镉或RSL-Phthalate邻苯报告如何办理

Temu要求提交RSL Report 铅镉或RSL-Phthalate邻苯报告如何办理 Temu要求提交RSL Report 铅镉或RSL-Phthalate邻苯报告如何办理 RSL Report是欧盟REACH法规要求的一种资质报告,旨在确保产品不含对人体有害的化学物质。在珠宝首饰行业中,RSL Report认证是…

SpringCloudAlibaba微服务 【实用篇】| Nacos注册中心

目录 一:Nacos注册中心 1. 认识和安装Nacos 2. Nacos快速入门 3. Nacos服务分级存储模型 ①Nacos服务分级存储模型 ②NacosRule负载均衡 ③根据权重负载均衡 4. Nacos环境隔离 二:Nacos和Eureka的对比 tips:前些天突然发现了一个巨…

Linux:docker容器操作(4)

docker的基础操作 Linux:docker基础操作(3)-CSDN博客https://blog.csdn.net/w14768855/article/details/134616198?spm1001.2014.3001.5501 我这里准备了两个镜像 镜像加载到容器 docker create [选项] 镜像 运行的程序 -i 让容器的标准输…

外汇天眼:嘿!他们说这个比赛有手就能赢,你敢不敢来试试?

在外汇市场的波涛汹涌中,一场引人注目的模拟交易比赛正在悄然展开,参与者们纷纷聚焦,听所有获奖的参赛投资者们说:这个比赛有手就能赢,你敢不敢来试试? 比赛规则简单而富有挑战性。你只需在外汇天眼APP开通…

安卓手机如何使用JuiceSSH连接内网的Linux虚拟机并实现远程访问?

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

期刊Neurocomputing为什么简称IJON?

在数据库dplp的引用bib页面,Neurocomputing被简写为ijon,以dblp中的最新一篇文章为例: article{DBLP:journals/ijon/LiYFZH24,author {Mingchen Li andHuiqun Yu andGuisheng Fan andZiyi Zhou andZijie Huang},title {Enhan…

“文件批量改名专家:轻松自定义重命名并智能导出文件信息“

在日常工作中,处理大量文件时,往往需要一款得力的文件批量改名工具来协助我们高效、有序地进行文件管理。今天,我要向大家介绍一款强大的文件批量改名工具,它不仅支持统一自定义重命名,还能将相关信息导出到表格中&…

借助arthas 性能调优全过程

使用 arthas 的trace 命令分析方法耗时瓶颈: 可以看出 bindReloadZoneTimeLimite 耗时最久, 通过分析Bind 底层,将业务粒度进行拆分,加入并发执行 再次使用arthas 追踪单个方法耗时时间: 核心耗时方法&#xff0c…

Drupal Core 8 PECL YAML 反序列化任意代码执行漏洞(CVE-2017-6920)

漏洞描述 影响软件:Drupal方式:反序列化参考链接:CVE-2017-6920:Drupal远程代码执行漏洞分析及POC构造效果:任意代码执行 漏洞环境及利用 搭建docker环境 环境启动后,访问 将会看到drupal的安装页面,一路…

vue 表格虚拟滚动

1.使用vxetable实现 官网 问题&#xff1a; 实现了表格的虚拟滚动&#xff0c;但是单元格数据不自动换行了 &#xff0c;如下显示的... 然后在官网看到是这样的&#xff0c;那我不是白写。。。 解决&#xff1a; 1.包一层div2.再写个换行样式 <vxe-column field"s…

个微协议开发/微信个人号二次开发/ipad协议/api接口

E云管家&#xff0c;是完整的第三方服务平台&#xff0c;并基于IPAD协议8.0.37开发出的最新个微API服务框架。 你可以 通过API 实现 个性化微信功能 &#xff08;例云发单助手、社群小助手、客服系统、机器人等&#xff09;&#xff0c;用来自动管理微信消息。用户仅可一次对接…

如何更好的设计测试用例,看完就懂了。。。

引言 测试用例设计的最基本要求&#xff1a;覆盖住所要测试的功能。这是再基本不过的要求了&#xff0c;但别看只是简单的一句话&#xff0c;要能够达到切实覆盖全面&#xff0c;需要对被测试产品功能的全面了解、明确测试范围(特别是要明确哪些是不需要测试的)、具备基本的测…

EasyExcel生成多sheet页的excel

一、controller层 ApiOperation(value "明细查询导出") PostMapping(value "/SummaryDetailExport") public void summaryDetailExport(RequestBody SearchDTO dto, HttpServletResponse response) throws IOException {reportService.deptPackagingSum…

北邮22级信通院数电:Verilog-FPGA(11)第十一周实验(1)用JK触发器实现8421码十进制计数器

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1 JK_8421.v 1.2 JK_ff.v …

2023亚马逊云科技re:Invent,与全球合作伙伴探索更多发展可能

一年一度的全球云计算、科技圈的狂欢“Party”又双叒叕要来了&#xff01;2023年11月27日&#xff0c;2023亚马逊云科技re:Invent正式向全球云计算从业者、合作伙伴发出邀请&#xff0c;相聚拉斯维加斯&#xff0c;共同开启一场创新探索之旅&#xff01; 全球合作伙伴相约拉斯维…

OpenSSH(CVE-2023-38408)OpenSsh9.5一键升级修复

yum install -y git cd /root git clone https://gitee.com/qqmiller/openssh-9.5p1-.x86_64.git cd openssh-9.5p1-.x86_64/ bash openssh_update.sh重启sshd&#xff1a; systemctl restart sshd 查看sshd状态&#xff1a; systemctl status sshd

Pytorch-gpu环境篇

最最最头疼的就是配环境了 包之间的版本匹配问题 INSTALLING PREVIOUS VERSIONS OF PYTORCH 要考虑到pytorch和torchvision之间的匹配关系 显卡版本匹配问题

ESXi 添加新网络 配置ubuntu虚拟机双网卡

基本概念 在ESXi的虚拟机之间确保正常通信的基础是网络服务&#xff0c;通常在物理网络中需要使用不同的物理设备进行连接才能组建出高效的网络服务&#xff0c;而在虚拟网络中&#xff0c;需要不同的虚拟设备为其提供服务。 ESXi的网络类型&#xff1a; 1、物理网络&#xf…

jmeter监听器大家都会用,但我这个妙招能让你提早一小时下班!

使用过 jmeter 的同学&#xff0c;应该都会使用监听器&#xff0c;在每个监听器中&#xff0c;都会有一个“所有数据写入一个文件”的功能&#xff0c;那这个功能应该怎么用呢&#xff1f;今天&#xff0c;我们就来讲讲这个功能的使用。 几乎所有的监听器都有这样一个功能。 那…