主干开发 主干发布

作为软件开发人员,我们的主要目标是通过向客户发布丰富的内容来改善我们的业务。 发行和发展该内容将产生真正的积极业务影响。

我在一组开发人员中努力实现这一目标。 与许多技术行业一样,我们由小团队工作,向遗留应用程序引入新功能或扩展和维护其现有功能。


我们使用功能分支开发方法,这意味着我们每个人都脱离了代码主线,并致力于在自己的分支上实现我们的新功能。 完成后,在最终让客户使用并使用我们的代码之前,有一个部署过程涉及通过测试和登台环境进行多次合并。

这个过程似乎不费吹灰之力,这使我们有信心独立地处理自己的任务,并使我们能够控制正在运行的代码的质量。 但是,最大限度地提高个人生产力而不是团队生产力会导致艰苦的合并,并产生许多冲突,并且代码审阅非常容易出错:无论是多么精明的人,都无法读取1000行的拉取请求并发现长时间的自我输入中有一个错字记录变量名!

为了实现有效地发布和发展内容的目标,我们需要改变开发过程的方式。 我们需要一种更简单的方法来将复杂性移出开发流程。 基于主干的开发旨在实现这一目标。

基于主干的开发是所有开发人员将其更改直接提交给代码主线的地方。 在Git中,这称为master分支; 在Subversion中,它是主干; 在Mercurial,它是头。 主线必须始终保持在可释放状态,这意味着它在任何时候都应该可以构建和发布。

因此,开发人员将把他们的工作分解成小的增量块,从而对整个系统进行小的封装化更改。 每个开发人员都会频繁地将他们的工作推送到主线,以确保他们将不断地与其他团队沟通他们的工作,并将内容更快地发布给客户。

基于主干的开发可以有效地在开发团队中培养更顺畅的发布策略,并且可以鼓励更多的协作,最终帮助我们发布高质量的内容并更好地与客户互动。

基于主干的开发的好处

采用基于主干的开发过程有很多好处:

  • 已开发但尚未发布给客户的功能清单或库存被削减,从而为最终用户提供更快的新功能。
  • 由于更频繁地发布代码,所有开发人员之间以及企业与其最终用户之间的反馈循环都被缩小了。
  • 当推送较小的代码块时,与推送到主线有关的风险将大大降低。 这可以追溯到马丁·福勒(Martin Fowler)的座右铭:“如果很疼,那就经常做吧!”
  • 减少了完成一项工作所需的认知开销。 使用功能分支模型时,需要执行许多任务,例如创建分支,合并,重新设置基础,发出拉取请求以及删除分支。 所有这些都分散了我们的注意力,无法真正完成我们打算要做的工作。

帮助过渡到基于主干的开发的工具和技术

您可能会担心切换到基于主干的开发方法,尤其是当您在使用旧版应用程序或在拥有广泛经验的大型开发人员团队中工作时。

如果开放主线供所有开发人员直接推送并删除基于拉取请求的代码审查,则可能会引入将更多异常部署到生产中的风险。 但是,有许多工具和技术可以减轻风险,同时使您获得回报。

1.开发健壮的自动化构建管道

构建管道是您打包和发布代码给最终用户的过程的自动化。 构建管道中的第一步是提交构建。 提交构建将签出主线代码,进行编译,运行单元测试,打包二进制文件并将结果上传到人工仓库。 只有通过此提交构建的代码才会被部署到master,但是管道中可能会有许多后续阶段可以进一步测试您的代码库。


通过使用组件体系结构组装管道,您可以在应用程序增长时逐步开发和增强它。 例如,您可能希望引入执行静态代码分析,冒烟测试或自动验收测试的组件。

组件应以运行时的升序排列,从提交构建和单元测试开始。 一旦提交构建通过,开发人员就可以继续执行下一个任务,而剩下的管道可以执行。

但是,一旦管道中的任何组件出现故障,立即固定主线就很重要。 这还应该提示要编写一个新的单元测试,以便您在以后的构建中早日收到该反馈。

2.开发一套全面的测试

测试管道是构建管道的很大一部分,它可以指示提交是否会引入错误。 在理想的情况下,测试套件将完全覆盖代码库,这意味着,如果引入任何缺陷,则将在测试失败的情况下引起开发人员的注意。 但是在现实世界中,这是完全不现实的。

但是,使用几种不同类型的测试可以帮助我们大大提高覆盖率:

  • 单元测试 –隔离测试系统中的各个单元或组件。 这些是最快的测试,它们的故障提供了有关缺陷位置的详细信息。
  • Gold Master测试 –在您的应用程序中捕获给定过程的结果,并确保您的代码可以正确地重新创建结果。 如果您的系统中有很多重要但复杂的业务逻辑,那么这些测试会特别有效。
  • 冒烟测试 –检查系统的核心功能是否正常运行。 这些是非详尽的测试。 它们提供的深度很少,但是可以告诉我们应用程序的重要部分是否正常工作。 一个示例是确保可以启动该应用程序,或者确保该接口响应输入。
  • 自动化验收测试 –以真实的用例为例,并检查应用程序是否按照我们的预期进行响应。 这些是迄今为止最慢的测试类型,但是它们可以用于测试应用程序的极端情况。

3.在需要的地方重构您的代码库

使我们无法编写单元测试的一大原因是看到了过于复杂,不可测试的代码,但不必那样做。 随着应用程序的发展,我们需要不断地重新访问系统中的重要逻辑,以重构和改进其设计。

可以帮助我们更有效地重构的关键技术是“逐个分支”,尤其是在基于主干的开发过程中工作时。 通过抽象分支可以在其中为要重构的类创建接口或抽象,从而使您可以在不影响现有函数调用的情况下处理新解决方案的细节。 当您对新解决方案正在运行感到满意时,可以缓慢地切换界面以调用新的实现。

重要的是要不断重新研究系统的设计和体系结构,以及随着应用程序及其用户的变化,系统将如何发展。

4.配对编程或Mob编程

许多人可能会认为丢失代码审查是基于主干的开发的主要缺点。 但是,它鼓励我们在开发过程的早期就寻找机会进行代码审查。

例如,成对编程就是两个开发人员同时设计和实现解决方案的过程,其中一个充当驱动程序并编写代码,而另一个则充当乘客并积极地对其进行审查。 暴民编程类似,但是有多个乘客。


配对/暴徒编程的主要好处是,我们曾经通过代码审查获得的反馈现在可以更快地注入到开发过程中。 这导致更好,更可靠的解决方案。 此外,当更多的人参与编程阶段时,知识就会共享并且解决方案将更具协作性。 这是要最大化团队生产力而不是个人生产力。 对于我们应用程序的关键功能而言,mob编程非常有效,而对于较小或次要的任务,配对编程可能会更高效。

收获基于主干的开发奖励

基于主干的开发旨在使您的开发团队更有效地向客户发布高质量的内容。 作为奖励,它可以增加团队内部以及与最终用户的积极反馈和协作。

通过引入和开发构建管道和测试套件,同时培养代码重构和对等编程的文化,您可以有效地过渡您的团队以使用基于主干的开发并获得这些回报。

有关基于主干的开发的更多详细信息,可以在trunkbaseddevelopment.com , www.thinkinglabs.io和www.michielrook.nl上找到 。

翻译自: https://www.javacodegeeks.com/2018/12/improve-proces-trunk-based-development.html

主干开发 主干发布

主干开发 主干发布_通过基于主干的开发来改善发布过程相关推荐

  1. eclipse android开发环境搭建_聊聊Spring boot2.X开发环境搭建和基本开发

    对Spring Boot的开发环境进行搭建,并对它的特点做进一步的了解,才能更好地对Spring Boot有更深入的介绍.但是无论如何都需要先来搭建Spring Boot的工程. 搭建Spring B ...

  2. android中级开发师必备_【招聘】Android开发工程师 – 中级 – 陌陌

    公司名称: 陌陌 职位薪资: 28.8-40万 招聘人数: 3人 工作年限: 3-5年 学历要求: 本科 (5%) 职位详情 工作地点:中国 北京市 朝阳区 职位描述: 1.参与设计及开发陌陌各类业务 ...

  3. java敏捷开发的优缺点_你如何理解敏捷开发?

    当你以300km/小时的速度飞奔的时候,敏捷就显得至关重要,因为这是你闪避前方障碍物唯一的保障. 敏捷不只是快,更是规避风险.敏捷开发也是如此.敏捷,拼音是mǐn jié,意思指反应(多指动作或言行) ...

  4. vs安卓开发发布_向华为的鸿蒙看齐,谷歌发布全新系统,手机电脑通用

    大家都知道,现在智能手机的系统分为两个大阵营,不是苹果,就是安卓.其实在这两家之外,还有一些小众的手机系统,当然不是指大部分国产手机厂商深度适配的这种UI系统,而是真正手机系统.但是这些小众手机系统的 ...

  5. 基于h5的跳一跳游戏的开发与实现_「南宁小程序开发」企业开发小程序有哪些好处?...

    现如今微信小程序成为了许多企业推广自身产品的一个平台,为什么他们会选择小程序呢?小程序到底有哪些好处?接下来,南宁小程序开发公司--视点网络告诉您开发小程序的好处有哪些. 轻量性:平时APP的转化过程 ...

  6. 微服务开发及部署_简简单单基于docker部署微服务网关

    ❝ 本文整理于今年3月,收录在个人开源仓库JavaScriptCollection中,其中很多概念不乏借鉴.摘抄自官网,便于复习相关概念,有兴趣的可以直接去仓库Clone文档学习.参考! ❞ 基本概念 ...

  7. 学java 开发会掉头_作为一个全新的开发人员,我会学到什么

    学java 开发会掉头 重点 (Top highlight) It's been five years since I learned to code and changed careers. 自从我 ...

  8. 软件开发技术顾问_成为成功的软件开发顾问的5个关键

    软件开发技术顾问 为什么我成为顾问 当我在2007年离开首席信息官(CIO)职位时,我想回到纯粹的软件开发领域. 软件开发工作(编程)是我的挚爱,在担任CIO几年后,我开始讨厌预算和更多预算以及捍卫预 ...

  9. java开发机器人聊天_聊天机器人与Web开发的未来

    java开发机器人聊天 Since Facebook launched their annual F8 conference for bot developers in 2016 and Micros ...

最新文章

  1. C# 日志框架的添加
  2. C++中的static函数和extern关键字
  3. (转)Android 常用 adb 命令总结
  4. SQL Server 性能调优(cpu)
  5. python安卓附带文件_Android QPython3 可视化-文件(夹)选择:ListFile.py
  6. Could not find artfact com.oracle:ojdbc7:jar:12.1.0.2.0 in nexus-aliyun
  7. Mac 下 Chrome 谷歌浏览器 快捷键
  8. c语言作业 分解质因数,C语言算法之分解质因数
  9. CMake入门使用(一)安装及HelloWorld的构建
  10. Jenkins Pipeline声明式流水线
  11. 【异常处理】解决Windows下access denied for user ‘root‘@‘localhost‘(using password:YES)的mysql启动问题
  12. java 根据环境导包_java环境变量配置原理解析以及eclipse导入外包的方法
  13. excel和python建模_如何用Python提高办公(Excel)效率?
  14. 刷程序对车危害_刷ecu非常后悔,刷程序对车危害有多大
  15. linux shell 关机,linux shell关机命令详解
  16. 希捷ST9500325AS本盘0容量数据恢复
  17. 二次元RPG游戏:Tap Fantasy
  18. 计算机二类中文核心期刊,我国科学院计算机网络信息中心在学研究生年终考核奖评定办法(试行).doc...
  19. 2018VR一体机VR眼镜哪个牌子好?大家都选了UGP VR眼镜,UGP VR一体机
  20. ACM传奇之路(紧握着自己颤抖的双手)

热门文章

  1. 数学建模重要算法简介及算法实现
  2. python 城市代号数据的保存及读取
  3. 快速提高pip安装速度!一劳永逸
  4. 有哪些适合男生的蓝牙耳机?520情人节适合送男生的蓝牙耳机推荐
  5. 解决vnc客户端不能拷贝粘贴
  6. STM32MP157A驱动开发 | 03-usb host接口的使用(U盘 )
  7. HackBGRT(一):修改window系统启动logo动画
  8. 微信企业号和微信公众号使用js-sdk说明和注意事项
  9. linux 错误信息不输出
  10. OSChina 周一乱弹 —— 为什么人类和人工智能定要一战