基于SVN——集权与分权管理-研发项目管理

>>基于SVN——集权与分权管理-研发项目管理

基于SVN——集权与分权管理-研发项目管理

引言:当今社会市场竞争激烈,软件开发企业想要占据前列需要在研发管理上下功夫,“向管理要效益”已经成为软件开发企业的共识,研发项目管理在软件企业中的普及也是大势所趋。国内做软件项目管理工具的开发商翼发云近几年发展十分迅速,越来越多的软件开发企业认识到研发项目管理的重要性,能切实有效降低成本,规范软件开发流程,提高软件产品质量。国内研发项目管理系统、敏捷开发管理工具的领导品牌翼发云敏捷项目管理系统采用可视化业务流程技术,支持瀑布模型等传统软件研发项目管理,同时也支持scrum等敏捷开发流程,是理想的敏捷开发管理工具,涵盖软件项目管理工作的整个生命周期。为提高国内软件开发企业的项目管理水平,分享一篇企业管理相关的知识文章。

我们在此处不讨论 GIT 比 SVN 好多少,也不讨论Maven 和Gradle 哪个好用,基于现有的开发环境,大多数公司还是采用 SVN + Maven 来进行项目管理–因为这已经满足了大多数的代码管理需求,并且对于一个成熟的公司来讲,项目管理工具的改变可能需要很大的成本和决心,基于 GIT 的项目管理将会在以后详细介绍。

做程序开发和项目管理的老银棍们肯定知道,基于 SVN 的项目开发管理有两种方式:集中式开发和分散式开发,对应正常的语言描述来讲,集中式开发对应的是基于trunk进行开发,而分散式开发对应的就是基于branches进行开发。两者并没有绝对的好坏之分,具体采用哪种方式,完全凭个人喜好、项目架构和公司规定进行选择。 scrum

基于SVN的项目管理——集中与分散

集中发展–基于主干的开发

基于主干的开发方式可能是比较主流的开发方式,三个目录的主要定义如下: 软件项目管理

trunk:开发工程(非稳定)

tag:我们认为稳定的发布包 敏捷开发流程

branches:BUG、需求变更分支

用语言描述一下开发步骤:在trunk中新建一个项目,此时版本号是1.0.0-SNAPSHOT,分配权限给所有的开发人员,所有开发人员功能开发完毕之后提交代码到trunk,测试基于trunk进行测试,此时trunk处于锁定状态–不允许再在trunk上进行新功能的开发,测试完毕之后打tag,至此1.0.0-RELEASE版本正式发布,trunk中的版本号变为1.1.0-SNAPSHOT,解锁Trunk,所有开发人员开始开发1.1.0-SNAPSHOT,此时如果发生未测出来的BUG和需求变动,基于1.0.0-RELEASE的tag打分支1.0.0-PATCH,所有相关开发人员对1.0.0-PATCH进行维护开发,同时主干的1.1.0-SNAPSHOT也在同步进行。 研发项目管理

基于SVN的项目管理——集中与分散

这里很多人会问,如何将1.0.0-PATCH中的代码合并到1.1.0-SNAPSHOT中?这里用一个场景来具体描述

Developer Zhang负责用户注册模块,整个项目1.0.0-release发布后,1.1.0-snapshot和升级到注册模块的需要,在这个时候(注意,代码不正式开始写作),运行在线版1.0.0-release发现了一个秘密的bug(可能是代码中的bug,也可能是错误的业务),张1.0.0-release标签需要发挥1.0.0-patch-01部门合并后将1.0.0-patch-01到干修复BUG的修复,对1.0.1-snapshot代版本,然后发布到标签,这个标签包含在1.0.0-release和1.0.1-release两标签,并开发了一个新版本的1.1.0-snapshot–这是最好的结果。

但是事实并非如人所愿,我们最常遇到的情况是1.1.0-SNAPSHOT已经开发了一段时间,此时发现了1.0.0-RELASE中的这个隐藏BUG,需要紧急修复,我们这里同样用一个场景来具体描述。

Developer Zhang负责用户注册模块,整个项目1.0.0-release发布后,1.1.0-snapshot和升级到注册模块的需要,在这个时候(注意,代码已经正式开始写作),运行在线版1.0.0-release发现了一个秘密的bug(可能是代码中的bug,也可能是错误的业务),张1.0.0-release标签需要发挥1.0.0-patch-01部门1.0.0-patch-01单线后修复BUG的修复,剩下的故事更为复杂,张将需要的代码在1.0.0-patch-01手册与发展1.1.0-snapshot –这是常见的但异常的结果

为什么说第二个场景属于常见但是异常,这非常考验整个PMO管理–为什么会出现紧急BUG?为什么需要紧急上线?这会造成两个最直接的麻烦:

1. 线上版本不是RELEASE版本的,而是一个分支PATCH。

2. 将PATCH中的代码合并到正在开发的代码中会异常痛苦。

如果遇到这样的情况,首先不能慌张,尽可能的先将线上的BUG解决掉,再来考虑如何在新版本中合并代码的问题,这样肯定会造成1.1.0的延期发布以及1.0.1的缺失,严重的可能还需要重新审视–但是你避免不了,不过责任是比较清楚的。

当然为了能够尽可能的避免这种情况出现,一般建议新版本上线后的一段时间内(比如一个礼拜)开发人员先暂停开发做一个休整,做做项目总结、补充一些文档之类的工作,之后再进行1.1.0的迭代,这样做不仅能够完美收尾,还能减少情景2出现的概率,对公司、开发人员以及项目管理来讲都是有利的。

分散发展–基于分支的发展

分散式开发是基于分支branches进行开发,也是我个人比较喜欢的一种方式,其三个目录的定义如下:

trunk:稳定的主干

tag:我们认为稳定的发布包

branches:开发切片

与集中式开发不同的在于,我们branches中存在的是各个开发人员所负责的切片,而主干中则一直是稳定的SNAPSHOT版本–这其实是符合逻辑的,SNAPSHOT代表的意义是预览而不是”破烂”,至少能够正常的运行起来才能算的上是预览版,而集中式开发的主干虽然标注的是SNAPSHOT预览版,实际上其实是一个”破烂”–正常情况下你是运行不起来的,开发环境总是存在各种各样的不确定性。

用语言描述一下开发步骤:在主干trunk中新建一个项目,然后copy to branches,分别建立milestone、sp1、sp2…spN,每一个切片对应一个开发或前端或白盒测试,当大家各自开发完毕之后,提交代码,项目经理将sp1、sp2等切片合并到milestone中,这里注意了,不是合并到trunk中,而是一个分支的名字叫milestone–里程碑,专门用来合并各种代码,milestone的代码进行合并之后,部署到测试环境让测试组介入测试–完毕之后合并到trunk,然后在trunk上进行发布,在tag中归档并上线,trunk中的版本号升级到下一版本,然后所有开发切片重新切片。

上面的描述如果感到拗口的话,可以看这个场景:

项目经理建了一个项目,版本号是1.0.0-SNAPSHOT,程序员小王从项目经理那里领到一个任务是开发订单查询中心这个模块,他的切片是1.0.0-SNAPSHOT-SP1,开发完毕之后提交了代码,项目经理合并代码到milestone上,然后小王开始开发其他的代码,项目经理陆续从小张、小李那边收到SP2、SP3的代码之后,觉得可以发布一版了,叫上测试对milestone进行测试,通过之后合并到主干打tag上线,此时线上版本号是1.0.0-RELEASE,主干上的版本号是 1.1.0-SNAPSHOT,此时项目经理重新切片,所有人的代码从1.0.0-SNAPSHOT-SPn转换到1.1.0-SNAPSHOT-SPn进行开发,milestone同样变成1.1.0-SNAPSHOT,循环往复……

基于SVN的项目管理——集中与分散

同样存在集中式开发的问题–老版本出现BUG怎么办?我们这里同样模拟一个场景。

1.0.0-snapshot已经通过测试和打标签在线,在线版1.0.0-release,主干版本1.1.0-snapshot,里程碑的版本是1.1.0-snapshot,所有的发展都声称自己1.1.0-snapshot SP开发的1.0.0-release的下一个版本,有急需修复一个隐藏的bug和在线。项目经理发现bug负责人王,让他把他负责1.0.0-snapshot-spn,其次是里程碑,修复完成后测试,标记线,这个版本是1.1.0-release,成为1.1.1-snapshot主干版本,里程碑一样的1.1.1-snapshot。

到此,我们产生了一个疑问:因为小王的BUG导致主干版本比开发的SP版本高了一个版本,是不是会有冲突呢?

其实是没有冲突的,SP的版本号其实是弱化了的–实际上我根本不关心SP的版本号是否正确,当发生不正确的情况出现,由各个切片的开发人员自己通过Merge里程碑Milestone的代码解决。

总结一下分散式开发引申出来的几个概念:

SP:开发切片。

MILESTONE:里程碑,对应的是测试环境

TRUNK:主干,对应的是预发布环境

TAG:归档,对应的是线上环境

分散式开发重点解决的是保证测试环境的相对稳定、预发布环境的绝对稳定以及线上环境的绝对稳定问题,并且我们试想一下:是不是能够轻松做到持续交付了呢?

总结

集中式开发适合一些小型项目的开发,例如微服务、小组件。

分散式开发适合快速迭代–对于未知的需求贴合的更好。

文章从互联网整理而来,旨在传播scrum、软件项目管理、研发项目管理、敏捷开发管理工具的知识与应用,帮助软件开发企业真正了解研发项目管理的价值和意义,如果本文侵犯了您的权益或者您需要具体了解更多国内做研发项目管理系统的公司翼发云敏捷项目管理系统的相关信息,欢迎和我们联络:

【网址】www.effapp.com

2018-02-27T17:05:58+08:002018-02-27 17:05:58|Categories: scrum项目管理|