软件版本号是一个软件产品的重要组成部分,规范的版本号不仅仅可以标识产品开发阶段、功能更新、还能区分产品部署环境。上线发布的版本还能提示给用户提供版本更新信息,产品功能更新内容等信息,引导及刺激用户下载更新。
对于常见的软件产品,通常采用GNU风格三段式版本号,即Major. Minor. Patch。用数值表示版本号,数值之间用小圆点“.”分隔。如图1所示
Major:表示大版本号,一般当产品出现重大更新,重写或者不再向后兼容的情况时,版本号会在Major上加1,当Major的值为0的时候,我们一般认为产品处于开发或测试阶段。当Major增加1时我们会把后面的Minor.Patch清零。
Minor:表示次版本号,当产品有功能更新或者小的功能迭代和调整时,版本号会在Minor上加1。同理当Minor增加1时,也会将后面的Patch清零。
Patch:表示修订号或补丁号,当产品修复了一个bug或者页面UI布局调整时,版本号会在Patch上加1。
注意版本号不是逢10进1的,比如当Patch的值等于10时,版本号的Minor不加1,而是写成Major.Minor.10,如果产品再有迭代和更新,那么版本号更新为Major.Minor.11。
有时在这种三段式的版本号之后,还有Alpha版、Beta版这样的先行版本号。这些先行版本号是当产品要发布大版本或者核心功能时,但是不能保证这个版本的功能100%正常可用,这个时候就需要发布先行版本。比较常见的先行版本包括:内测版、公测版、RC 版和GA版等。
Alpha版是内部测试版,书写规范如:1.0.0-alpha.0,1.0.0-alpha.1。此版本表示软件在此阶段主要是以实现软件功能为主,通常只用在软件开发者内部交流,一般不向外部发布。该版本软件的 Bug 较多,需要继续修改。因为α是希腊字母的第一位,表示最初级的版本。
Beta版是公测版,书写规范如:1.0.0-beta.0,1.0.0-beta.1。此版本表示软件在此阶段该版本相对于Alpha版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要再经过多次测试来进一步消除,这个阶段的版本会一直加入新的功能。该版本通常由软件公司免费发布,用户可从相关的站点下载。通过一些专业爱好者的测试,将结果反馈给开发者,开发者再进行有针对性的修改。该版本不适合一般用户安装。
Release.Candidate即RC版,是发行候选版,书写规范如:1.0.0-rc.0,1.0.0-rc.1。此版本的软件产品和Beta版最大的差别在于Beta版会一直加入新的功能,但是到了RC版几乎就不会加入新的功能了。RC版是经过测试人员测试基本通过的版本,主要着重于排错和体验优化。RC版是最终发布给用户使用的最接近正式版的版本,改正bug发行后就是正式版了,可以说是正式版之前的最后一个测试版。
Release即R版,是发行版。Release不会以单词形式出现在软件封面上,取而代之的是符号(R)。该版本意味“最终版本”,在前面版本的一系列测试版之后,发布的一个正式版本,是最终交付用户使用的一个版本,该版本有时也称为标准版。
对于软件开发人员,版本号是直接和代码相关的,很多时候不同版本交叉开发,同一时间可能在开发不同版本,为了保障代码的规范和清晰,避免不同版本出现交叉混乱,版本号规范是极其重要的一环。对于项目经理来说,版本号是需求管理中唯一标识符,可以根据项目版本去管理和分配工作,跟进项目进度,避免项目管理混乱,提升效率。
在当前的互联网产品快速迭代的背景下,很多公司,特别是小型技术团队都喜欢使用敏捷开发的方式,快速的产品迭代必定会导致产品需求、开发、测试、上线各个时间线交错在一起。如果没有良好的版本规范,往往会出现,产品经理不清楚现在这一版的哪些功能有没有做;开发人员不知道这一版本应该做哪些功能;测试人员不知道现在在测试的是哪个版本;项目经理无法通过版本号就知道现在项目处于哪个阶段。要解决这些问题,规范的版本管理或许能提供一些帮助。
首先,先来看一个软件生命周期模型,改进版瀑布模型。如图2
现在的软件产品已经不可能是经典的瀑布模型就能解决的了,项目人员往往都是需求改进、开发、测试等几个过程循环迭代进行。往往开发人员上一版本的功能需求还没有做完,就接到下一个版本的功能需求。如果产品功能复杂,产品需求规划不清晰,特别是有多个产品经理参与同一个项目的时候,往往会需求规划不明确,任务划分不清晰,导致开发人员分不清轻重缓急,甚至分不清哪一版到底该做哪些功能。这时,需要需要产品经理做好产品规划,明确哪一个版本做哪些功能。比如目前产品已经上线1.0版本,在1.1版本就做多优惠券模块,然后明确拼团模块放到到1.3版本。如果有时间,产品暂不上线,继续迭代更新。千万不要出现,如果可以,如果有时间,就把拼团模块一起做了吧这样模棱两可的产品规划,导致开发人员都不知道到底做不做这个尴尬。软件开发不像其他工作,它必须是一个明确的,没有模棱两可的工作。
关于软件的开发和部署环境,最少都得区分开发环境、测试环境、正式环境3种。如图3所示,这样子能够有效避免项目部署混乱,减少服务之间的干扰和影响,同时规范项目版本管理,确保产品安全和服务稳定。
项目开发时,各端开发人员在开发过程中,自行管理维护开发版本号,如:dev-0.0.1,dev-1.2.3。各端维护自己的代码版本号,是不是就能随意定版本号了呢?答案肯定是否定的。关于产品版本号,在团队中一般由项目经理或产品经理根据产品迭代的功能进行确定,一般情况下,项目经理或产品经理只需要明确下一版产品的版本号前两位,也就是Major. Minor,最后一位Patch由开发人员自行维护。为什么需要这样做呢?我们知道,现在的软件产品,如果基于B/S架构的,都是由服务端+客户端组成,往往服务端同时为多个客户端(包括app、web、小程序等)提供服务。产品部署上线时,往往需要C端和服务端同时部署更新,只有前后端版本号统一,才能明确上线版本。但是在实际开发测试过程中,每个端都有需要进行代码调整和bug修复,这些小的改进或者bug修复,就在各个端自行维护的Patch版本号体现即可。如图4所示
项目提测时,开发人员提取出要测试的代码版本,将dev前缀改为test,如test-0.0.1,test-1.2.3,并由项目经理或产品经理统一统筹部署测试版。开发人员千万不要改了一个bug就随意提测一版,在项目开发过程中,我们往往会发现,在测试人员测试出问题,提交bug之后,还没等测试人员测试完一遍,开发人员就迫不及待地修改bug,然后又直接部署提测。这样的操作,往往导致了很多问题,如测试人员根本不知道自己测试的哪一个版本;之前测试出的bug,在对接时无法复现;bug没有等回归,就被覆盖掉;没有统一统筹提测,各端自行提测时,还会出现前端部署了后端没部署导致产生bug的情况。同时这样子不规范的版本管理,也加剧了项目的混乱程度和管理难度,增加项目风险。
项目部署上线时,开发人员只需要提取出上线代码,将部署环境切换为正式服,同时在打版本号,将版本改为v开头,如v-1.0.0,v-1.2.3。然后在项目经理或产品经理统筹下,各端部署正式服即可。当然,如果项目进行大版本修改或者大功能更新,也可以发行先行版,征集更多意见和测试反馈,确保产品质量和用户体验。
版本号的是软件的一个重要组成部分,也是软件项目管理的重要内容,在项目开发和管理过程中,定义良好的软件版本规范,做好软件版本管理,能够规范项目管理流程,明晰项目需求和跟进开发进度等,避免项目管理混乱,减少隐藏bug,提高效率。同时也能更好地保证项目质量,降低项目风险。