新的软件变化后就会进入到下一个版本。软件随着版本的变化形成的持续改变,称为版本演化。每个软件版本都会被分配一个唯一的标识来表示,这个唯一的标识叫版本号(release number;release ID)。通常,随着功能的增加、修改或者删除,不同时期的软件版本会被赋予不同的版本号。常见的版本标识号的模式有以下几种:
①基于序列的标识符。在这种模式中,每一个软件版本都被赋予一个唯一的由1个或多个数字组成的标识符,一般来讲,大部分的软件版本号会被分成3段,比如X.Y.Z。其中X表示大版本,一般是软件整体重写,或出现不向后兼容的改变时会增加X的数值;Y表示功能的更新,软件增加了某个功能时,就会增加Y的数值;Z表示小的修改,当软件修复了某些bug的时候,就可以增加Z的数值。图1展示了Apache项目下的开源工具Lucene从2015年2月19日到2016年2月20日之间的版本更替,5.0.0,5.1.0,5.2.0,5.2.1,5.5.0都表示唯一的软件版本。标识符的改变暗示了软件变化的程度,如从5.2.0到5.2.1版本改动的程度比从5.2.1到5.3.0的版本改动程度要小。
②基于时间的标识符。在这种模式中,每一个软件版本都会由相应的日期来作为标识。常见的方式是在软件名后面加上代表日期的字符串,如Name20170503,Name20170504等,其中Name表示项目名称,20170503、20170504表示软件更新的日期,软件发布流程见图2。通过这种模式命名软件版本,人们一眼就可以看出发布的日期以及各版本之间的发布先后次序。
③包含特殊字符的标识符。这些字符通常具有一定的含义,如Pre-alpha(Pre-α)-准测试版,Alpha(α)-内部测试版,Beta(β)-外部测试版,Release Candidate(RC)-最终测试版,Release To Manufacturing(RTM)- 发行版,General availability(GA)-普遍发行版,Gold-完成版等,软件发布流程见图3。
④另外还有一些特殊的版本标记方法(知名的项目版本的命名几乎都不遵循上述3种规则),比如Java的内部版本号是1.X,但是常常会被标记为X.0,如Java 1.6,Java 1.7,Java 1.8也分别被称为Java 6.0,Java 7.0,Java 8.0;比如Windows的发行版本会根据一些特殊含义来说明软件版本,如Windows ME,Windows XP,Windows Vista,Windows 7,Windows 8,Windows 10;比如Linux会用奇数版本来表示开发版,用偶数来表示正式版。因此最终版本标记的决定权还是紧握在相关负责人手中。
在软件开发过程中,为了更加方便的管理和控制软件的变更,人们开发了许多的版本控制工具,从早先的集中式版本控制系统CVS,SVN,到现在分布式版本控制系统的Git,人们通过记录不同软件版本之间的差值,来对软件版本进行控制。这样一来,无论是提交新版本,还是回退到旧版本,都会变得更加容易。