您当前的位置:首页 > 电脑百科 > 程序开发 > 程序员

当 “代码农” 遇上 “码农”:揭秘主干开发的那些事儿

时间:2023-06-07 13:42:28  来源:  作者:京东云开发者

前段时期我负责部门内部主干开发落地相关事宜,这个过程中,也真真切切的体会到了多人开发过程中,面对特性分支管理中,大家遇到的一些困扰,尤其面对敏捷迭代的开发方式,合并冲突,集成测试,代码重用等方面,都与高效两个字背离。当然,我在推进主干开发过程中,也遇到了一些问题和坎坷,在这里,集中的做一次分享。

1. 概述

主干开发,是指开发人员直接向主干(习惯上主干分支通常为:trunk 或 master)提交 / 推送代码。通常,开发团队的成员 1 天至少 1 次地将代码提交到主干分支。在到达发布条件时,从主干拉出发布分支(通常为 release),用于发布。若发现缺陷,直接在主干上修复,并根据需要 cherry pick 到对应版本的发布分支。

优点:

  • 分支模型简单高效,开发人员易于掌握不容易出现错误操作
  • 避免了分支合并、冲突解决的困扰
  • 随时拥有可发布的版本
  • 有利于持续集成和持续交付

缺点:

  • 基础架构要求高:合入到主干的代码若质量不过关将直接阻塞整个团队的开发工作,因此需要高效的持续集成平台进行把关;
  • 自动化测试要求高:需有完备单元测试代码,确保在代码合入主干前能在获得快速和可靠的质量反馈;
  • 最好有代码评审:若代码质量要求高,需要配套代码评审(CR)机制,在代码提交到主干时,触发 CR,通过 Peer Review 后才能正式合入;
  • 最好有特性开关:主干开发频发合入主干的情况下,特性拆分得很小,可能是半成品特性,需要配套特性开关(Feature Toggle),只有当特性整体开发完才通过灰度发布等手段逐步打开;

适用环境:

  • 对迭代速度要求高,希望需求快速交付上线
  • 基础架构强,持续集成工具高效;
  • 团队成员习惯 TDD(测试驱动开发),代码自动化测试覆盖率高(至少增量代码的自动化测试覆盖率高);

2. 整体架构

2.1 衡量主干开发的效果

可以通过执行以下操作来衡量主干开发的效果。

测试的因素衡量的指标目标应用代码库中的活跃分支数。衡量应用代码库版本控制系统中的活跃分支数,让所有团队都能看到此数字。然后跟踪目标状态的增量式进度。不超过三个活跃分支。代码冻结期。衡量团队的代码冻结数及冻结时长。这些衡量指标还可以对合并冲突、代码冻结、稳定等方面所耗费的时间进行分类。无人提交代码时,没有代码会被冻结。将分支合并到主干的频率。衡量合并的每个分支的二进制(是 / 否)值,或者衡量每天合并的分支的百分比。每天至少合并一次。查看审批代码更改所需的时间。如果您异步执行代码审核,请衡量审批更改请求所需的平均时间,并特别关注所需时间大大超过平均值的请求。设法使代码审核成为在开发过程中执行的同步活动。

2.2 常见误区

如需全面采用主干开发,需要避免以下常见障碍:

  • 繁琐的代码审核流程。许多组织的代码审核流程都较为繁琐,需要多次审批才能将更改合并到主干中。如果代码审核很费力并且需要数小时或数天才能完成,开发者会避免小批量工作,改为进行大批量更改。因为大批量代码审核十分复杂,因此审核人员的审核时间会延长,进而造成恶性循环。
  • 这样的结果是开发者避免使用合并请求,从而导致合并请求经常受到冷落。由于很难通过检查来推导大规模更改对系统的影响,因此审核人员很可能会忽略缺陷,主干开发的优势也就减弱了。
  • 异步执行代码审核。如果您的团队实行结对编程,那么该代码已由第二个人审核。如果需要进一步审核,则应该同步执行:开发者准备提交代码时,应立即让团队中的其他人员审核代码。开发者不应该要求进行异步审核,例如向工具提交请求,然后在等待审核时启动新任务。合并延迟时间越长,就越有可能发生合并冲突和相关问题。如果执行同步审核,需要团队同意优先审核彼此的代码而不是处理其他工作。
  • 在提交代码之前未运行单元测试或者自动化测试。为了确保主干保持工作状态,在提交前对代码更改运行测试非常重要。此操作可以在开发者工作站完成,许多工具也提供针对本地更改远程运行测试,然后在通过测试后自动提交更改的功能。如果开发者知道自己无需大量繁杂流程即可将代码提交到主干,那么就会小批量更改代码,这些更改易于理解、审核、测试,并且可以更快地迁移到生产环境。

2.3 改进主干开发的 Tip

  • 小批量开发。主干开发最重要的推动因素之一就是团队学习如何小批量开发。这需要为开发团队提供培训和组织支持。
  • 执行同步代码审核。如前所述,转换为同步代码审核或至少确保开发者优先进行代码审核,有助于确保所做的更改不必等待数小时甚至数天即可合并到主干中。
  • 执行全面的单元测试和自动化测试。确保您拥有全面而实用的自动化单元测试套件,并在每次提交之前运行这些测试工具。
  • 快速构建。构建和测试过程应在几分钟内执行。目标是将测试环境的 jdos 部署串联到整个 CI 的自动化流水线之中

2.4 主干开发流程说明

如图所示,研发小伙伴基于 master 分支开发,当每次 merge 时,都会触发流水线验证过程。在流水线验证中:

1.EOS 代码扫描,该扫描会扫描代码中不规范的情况,按照代码规约不同,会有不同的级别,包括 WARNING, MAJOR, CRITICAL, BLOCKER 四种级别,基于不同级别可以设置拦截规则,如果代码不符合设定的拦截规则,将不予 merge。

2. 代码评审会触发代码评审邀请,可以根据设定,邀请组内研发,leader,或者测试人员参与代码评审,通过设定规则,如果代码评审通过,才允许 merge。

3. 现在自动进行 maven 打包和单元测试工作,如果单元测试不通过,将不予 merge。

4. 流水线会自动将单元测试通过的 jar 包发布到测试的 JOS 分组进行部署,部署完成后自动调取线上自动化测试流程,只有所有接口通过自动化测试,才允许 merge。

3. 落地方案

3.1 单元测试

应用架构: 基于 spring boot junit 编写单元测试。

我们可以将测试按照模块划分,放在不同的目录之下,可以分为集成测试和单元测试。这样做的原因是,当我们的项目边的越来越大的时候,写的测试会越来越多,当所有测试都放在一个目录下的时候,跑一次集成测试时间会很长。具体目录如下:

主开发目录测试开发目录测试模块描述测试父类命名src/test/init初始化测试模块InitTestBaseunitservice 单元测试模块UnitTestBase jpa持久化层测试模块JPATestBase mvccontroller 层测试MvcTestBase

所有测试模块集成对应的父类,然后类名必须以对应模块 + Test 结尾,例如:ShipperStatisticUnitTest

  1. 引入单元测试依赖 spring-boot-starter-test

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

2. 引入 surefile 插件

<plugin>

<groupId>org.Apache.maven.plugins</groupId>

<artifactId>maven-surefire-plugin</artifactId>

<version>2.22.2</version>

<configuration>

<skip>false</skip>

<includes>

<include>**/unit/*Test.JAVA</include>

</includes>

</configuration>

</plugin>

3. 配置测试配置文件路径

<resources>

<testResources>

<testResource>

<directory>src/test/resources</directory>

<!--①-->

<excludes>

<exclude>Application*.properties</exclude>

</excludes>

</testResource>

<testResource>

<directory>src/test/resources</directory>

<filtering>true</filtering>

<includes>

<include>application.properties</include>

<include>important.properties</include>

<include>application-${activatedProperties}.properties</include>

</includes>

</testResource>

</testResources>

3.2 JaCoCo 代码覆盖率扫描

该处可以先串联到流水线中,但不做门禁设置,等后期确定标准后,再打开门禁设置。

3.3 EOS 静态代码扫描

在主干开发模式中,因为 EOS 静态代码扫描,配置代码合并门禁,确保代码编码规范。配置如下图所示例子:

3.4 代码线上评审

代码评审通过 Coding 内置的评审规则实现,规则设定如下:

1. 评审分支为 master 分支,并在 push 时创建代码评审,并阻塞代码直接合入目标分支。

2. 评审人需要达到两人及以上通过后,才能触发随后的操作。

3. 不允许自评。

4. 不允许特定成员跳过自动化检查。

3.5 特性开关

遇到此情况,一般是多版本同时开发的情况

此处跟业务强相关,需要具体问题具体分析。不过保证如下几个原则:

  • 代码开发尽量保证高内聚低耦合,保证类的封闭性,同时可以用常用设计模式,保证功能的业务代码解耦,有利于特性区分。
  • 个别情况,可以引入 ducc 配置中心,实现特性开关。

3.6 流水线配置

在行云流水线中,主要包括如下几个节点:

其中有一个配置上有一个小坑就是下载代码。为什么这么说呢?

因为我们流水线的触发条件是跟 coding 上的代码评审配合使用,当主干分支发生 merge 请求时,这个时候会触发流水线,但拉取的代码并不能直接填写主干分支名称(如:master), 原因是当前的 commit 快照并没有合并到 master 上,而是处于等待状态,只有当流水线通过后才会真正合并到主干分支,这是如果下载代码里拉取的主干分支就是不包含当前提交内容的快照,并不能满足我们的诉求。

那么,我们该如何配置呢?

好在 Webhook 中会带一些系统内置全局参数,其中 globalParams.user.WEBHOOK_ATTR_COMMIT_ID,代表的就是当前提交请求所包含的 commit 快照,所以,我们只需要配置这个全局参数即可,如图所示:

配合如上配置,我们在触发设置中,只需要设置 MR created/Updated 事件即可。如下图所示:

4. 总结

于许多开发者而言,主干开发是一项重大变革,您很可能会遇到一些阻碍。许多开发者根本无法想像如何采用这种方式工作。一项好的做法是找到曾采用这种方式工作的开发者,让他们指导其他开发者。让一些团队转为采用主干开发方式工作也很重要。实现此目标的一种方法是将大量具有主干开发经验的开发者召集到一起,这样至少有一个团队遵循主干开发做法。然后,如果您确信遵循此做法的团队发挥预期的作用,则可以将其他团队转换为这种风格。

当然主干开发也不是银弹,他也会有一些自己的弊端,比如在处理需求变更,或者同时多版本并行开发时,也需要建立多个临时分支支持,想做到纯粹的主干开发,也是过于理想化的结果。

 

作者:京东物流 赵勇萍
来源:京东云开发者社区


Tags:码农   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
首个AI程序员上岗,码农们暂且不必过度焦虑
“AI程序员上岗”或许是噱头,但淘汰焦虑仍然近在咫尺,需要积极面对。全文2418字,阅读约需7分钟 撰稿 / 马尔文(媒体人)编辑 / 何睿 校对 / 张彦君▲随着相关技术的突飞猛进,AI也在...【详细内容】
2024-04-07  Search: 码农  点击:(5)  评论:(0)  加入收藏
为何大语言模型不会取代码农?
译者 | 布加迪审校 | 重楼生成式人工智能(GenAI)会取代人类程序员吗?恐怕不会。不过,使用GenAI的人类可能会取代程序员。但是如今有这么多的大语言模型(LLM),实际效果不一而足。如...【详细内容】
2024-03-21  Search: 码农  点击:(23)  评论:(0)  加入收藏
AI最先砸了程序员饭碗?90%码农认为找工作变难,大学生也要调整职业规划
图片来源:由无界 AI生成想不到AI最先影响到的打工人,居然是程序员。最近外媒一个有超过1万程序员参与的职业调查显示,90%的程序员都认为现在找工作变得更难了。仿佛一夜之间,程...【详细内容】
2024-01-12  Search: 码农  点击:(80)  评论:(0)  加入收藏
大模型无法替代码农!普林斯顿芝大惊人发现:GPT-4解决GitHub编程问题成功率为0
Stack Overflow,已经被ChatGPT创飞了!因为码农大量涌向ChatGPT、Github Copilot,Stack Overflow今天不得已宣布裁员100多人,几乎占员工人数的1/3。所以,ChatGPT这类AI编码工具,真...【详细内容】
2023-10-17  Search: 码农  点击:(284)  评论:(0)  加入收藏
码农与程序员的区别
在当今数字化时代,IT行业蓬勃发展,码农和程序员成为备受关注的职业。然而,许多人对于这两个术语的含义和区别存在疑惑。今天,我们将揭示码农与程序员的区别,并为您解锁IT行业的专...【详细内容】
2023-10-04  Search: 码农  点击:(238)  评论:(0)  加入收藏
码农时代结束?AI明星公司CEO预测:5年后不再会有人类程序员
  财联社  作为技术领域的从业者,程序员与人工智能有着“亦敌亦友”的关系。普遍的看法是,这项新兴技术为程序员提供了新的发展机遇,但也给他们带来了一些挑战和压力。  ...【详细内容】
2023-07-05  Search: 码农  点击:(300)  评论:(0)  加入收藏
当 “代码农” 遇上 “码农”:揭秘主干开发的那些事儿
前段时期我负责部门内部主干开发落地相关事宜,这个过程中,也真真切切的体会到了多人开发过程中,面对特性分支管理中,大家遇到的一些困扰,尤其面对敏捷迭代的开发方式,合并冲突,集成...【详细内容】
2023-06-07  Search: 码农  点击:(276)  评论:(0)  加入收藏
程序员被纳入“新生代农民工”,码农为何会被官方定义为“新生代农民工”?
01 什么是新生代农民工“码农”就是我们常说的程序员,因为靠写代码卫生,而且收入低,要长时间面对电脑,所以就自嘲为“码农”。我们先来看看“新生代农民工”的定义:出生于20世纪8...【详细内容】
2023-05-30  Search: 码农  点击:(351)  评论:(0)  加入收藏
秒杀自动编码Copilot!「动嘴编程」神器StarChat开源,码农狂喜
新智元报道编辑:桃子【新智元导读】人人动嘴编程的时代,这就来了。前段时间,最大开源社区Hugging Face发布了AI聊天机器人HuggingChat,瞬间引爆全网。网友纷纷表示,如果ChatGPT是...【详细内容】
2023-05-15  Search: 码农  点击:(407)  评论:(0)  加入收藏
程序员能干到退休吗?写了40年代码「骨灰级码农」给出的15条建议
寒冬、裁员、降薪、996、秃头、最近几年这些词汇不断在各位码农的周围盘旋。很多程序员对自己目前的状态干到困惑和焦虑,而且这好像是国内外程序们都会遇到的问题。最近,在Red...【详细内容】
2022-12-23  Search: 码农  点击:(315)  评论:(0)  加入收藏
▌简易百科推荐
AI程序员上岗 垂类大模型应用迎来井喷期
能自动写代码的“AI员工”、逐渐告别不够好用的智能客服,无需费时费力开发的工业AI控制器&hellip;&hellip;随着人工智能大模型能力开始深入多个行业,IT、工业生产、金融、服务...【详细内容】
2024-04-07    千龙网  Tags:AI程序员   点击:(4)  评论:(0)  加入收藏
首个AI程序员上岗,码农们暂且不必过度焦虑
“AI程序员上岗”或许是噱头,但淘汰焦虑仍然近在咫尺,需要积极面对。全文2418字,阅读约需7分钟 撰稿 / 马尔文(媒体人)编辑 / 何睿 校对 / 张彦君▲随着相关技术的突飞猛进,AI也在...【详细内容】
2024-04-07    新京报  Tags:AI程序员   点击:(5)  评论:(0)  加入收藏
为何大语言模型不会取代码农?
译者 | 布加迪审校 | 重楼生成式人工智能(GenAI)会取代人类程序员吗?恐怕不会。不过,使用GenAI的人类可能会取代程序员。但是如今有这么多的大语言模型(LLM),实际效果不一而足。如...【详细内容】
2024-03-21    51CTO  Tags:大语言模型   点击:(23)  评论:(0)  加入收藏
AI程序员Devin:通过了面试,但不一定适合职场
昨天,AI圈上演了第一场“大男主爽文”:一个少年成名的编程天才,组建起仅有10人的编程界奥林匹克“梦之队”,在全球瞩目的科技风暴正中心创办了一家公司。成立不到两个月,其推出的...【详细内容】
2024-03-18    甲子光年  Tags:AI程序员   点击:(14)  评论:(0)  加入收藏
微软AI程序员登场,10倍AI工程师真来了?996自主生成代码,性能超GPT-4 30%
新智元报道编辑:桃子 润【新智元导读】全球首个AI程序员Devin诞生之后,让码农纷纷恐慌。没想到,微软同时也整出了一个AI程序员&mdash;&mdash;AutoDev,能够自主生成、执行代码等...【详细内容】
2024-03-18    新智元  Tags:AI程序员   点击:(17)  评论:(0)  加入收藏
李彦宏称程序员职业将不复存在,周鸿祎:程序员热十年内不会减弱,AI时代更需要程序员
李彦宏称程序员职业将不复存在,周鸿祎:程序员热十年内不会减弱,AI时代更需要程序员3月10日,360创始人周鸿祎在社交平台上发文称,“大模型将替代程序员?未来不用学编程了么?我认为,程...【详细内容】
2024-03-11    九派新闻  Tags:程序员   点击:(22)  评论:(0)  加入收藏
李彦宏最新发声,“程序员”职业将不复存在!
在3月9日央视的《对话》&middot;开年说节目上,百度创始人、董事长兼CEO李彦宏表示,以后不会存在“程序员”这种职业了,因为只要会说话,人人都会具备程序员的能力。“未来的编程...【详细内容】
2024-03-11    红星新闻  Tags:程序员   点击:(18)  评论:(0)  加入收藏
编程二十年,38岁谷歌程序员的16条建议,涉创业、技术淘汰、拿大厂offer……
以能够让项目自负盈亏,并在这一约束下优化其增长的方式来管理和调整项目,这是这个世上最厉害的本事。距离我正式开始编程的工作已经过去二十年了。在这些年里,我有以下收获: 获...【详细内容】
2024-03-10    CSDN  Tags:程序员   点击:(4)  评论:(0)  加入收藏
鸿蒙开发岗平均月薪超1.8万,成为计算机人才和程序员的求职新选择!
智联招聘发布的《2024年春招市场行情周报(第一期)》显示,2023年9-12月,鸿蒙相关职位数同比增速从33.8%攀升至216.1%,鸿蒙相关职位的投递人数同比增速从132.1%攀升至380.1%。春节...【详细内容】
2024-02-26  晓枫侃科技    Tags:鸿蒙开发   点击:(25)  评论:(0)  加入收藏
AI最先砸了程序员饭碗?90%码农认为找工作变难,大学生也要调整职业规划
图片来源:由无界 AI生成想不到AI最先影响到的打工人,居然是程序员。最近外媒一个有超过1万程序员参与的职业调查显示,90%的程序员都认为现在找工作变得更难了。仿佛一夜之间,程...【详细内容】
2024-01-12    新智元  Tags:程序员   点击:(80)  评论:(0)  加入收藏
站内最新
站内热门
站内头条