张金环,张为强,田洪涛
(中国电子科技集团公司第四十五研究所,北京,100176)
SVN在设备软件开发管理中的应用
张金环,张为强,田洪涛
(中国电子科技集团公司第四十五研究所,北京,100176)
介绍了软件版本控制的基本概念和SVN版本控制系统在设备软件开发中的应用,研究解决目前设备软件开发过程中的诸多问题,从而提高设备软件开发效率和质量。
版本控制;设备软件;软件管理;SVN系统搭建和应用
随着设备软件越来越复杂,软件开发团队越来越壮大,每次软件源程序汇总出现的问题就会越来越多,处理这些汇总问题导致了时间的大量浪费和代码的混乱。那么,一个软件版本控制系统的使用就显得尤为迫切。
在没有进行版本控制的设备软件开发过程中,当多个开发人员共同开发一个设备软件时,每个人在各自的机器上都有整个软件的备份,并对自己本地硬盘上的代码进行修改、添加、删除等开发工作,分别完成各自任务之后,再通过文本比对工具将各自机器上的不同版本的程序整合到一台机器上。然而如此经常会出现如下问题:
(1)开发人员忘记备份,而无法找回某一天或实现某些功能的代码;
(2)在合并代码时,开发人员A的修改把B的修改覆盖掉了;
(3)在合并后,有些开发人员的某些文件不知何时被人修改了,且不知还有哪些部分被改动过;
(4)开发人员没有及时将自己最新修改的代码合并到其他开发人员的程序中,而在后期合并后,原本没问题的程序出现了各种各样的BUG。
(5)软件管理人员,无法准确掌握软件整体和每个开发人员的工作进度。
当一个设备有多个用户,每个用户有不同需求时,每个开发人员针对自己的用户需求,各自基于某个相似机型软件进行修改添加等后续开发工作,完成任务后在电脑本地各自保存自己开发过的版本。然而经常会有如下问题:
(1)有开发人员在备份时没有备注设备或软件修改说明,而忘记程序基于哪个版本开发,或基于某个型号的设备软件做了哪些改动;
(2)有开发人员辞职忘记移交软件源程序,而使管理人员找不到设备软件源码,或者源码的开发文档。
没有进行版本控制或者版本控制本身缺乏正确的流程管理,在设备软件开发过程中,将会引发一系列问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等诸多问题。
版本控制是指按照一定的规则管理配置项的所有版本,避免发生版本丢失或混淆等现象,并且保证任何时候都能取到正确的版本以及版本的组合,它是在软件开发过程中保证技术状态一致的一种手段,是开发过程中进行全面管理的基础。
版本控制的目的一方面在于实现开发团队并行开发、提高开发效率;另一方面在于对软件开发进程中文件或目录的发展过程提供有效的追踪手段,保证在需要时可回到旧的版本,避免文件的丢失、修改的丢失和相互覆盖,通过对版本库的访问控制避免未经授权的访问和修改,达到有效保护企业软件资产和知识产权的目的。
版本控制的功能在于跟踪记录整个软件的开发过程,包括软件本身和相关文档,以便对不同阶段的软件及相关文档进行表示并进行差别分析,对软件代码进行可撤消的修改,便于汇总不同开发人员所做的修改,辅助协调和管理软件开发团队。
有人形容没有使用版本控制工具的开发工作就如同生活在“黑暗时代”。版本控制工具是项目开发中必不可少的,进行版本控制可以确保在软件项目开发中,不同的开发人员所涉及的同一文档都得到更新。
常用版本控制软件有很多,比如:Microsoft提供的VSS(Visual Source Safe),Collab.Net提供的CVS(Concurrent Versions System)和SVN(CollabNet Subversion),IBMRationalSoftware提供的ClearCase,Borland公司的StarTeam,Serena公司提供的PVCS,BitMover公司提供的BitKeeper等等。
其中,SVN是在CVS的基础上,由CollabNet提供开发的开源工具,目前越来越受到大家的欢迎,估计将来可能会成为使用最广泛的工具。它是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央版本库中。这个版本库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把文档恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括了程序源码。
SVN修正CVS的一些局限性,目前有一些基于SVN的第三方工具,如TortoiseSVN,是其客户端程序,使用的也相当广泛。这里我们选择了SVN作为我们的版本控制软件。
3.1工作原理
SVN是一种开源的版本控制系统,全称是Subversion。它拥有自己的版本资料库,允许用户在不同空间和时间上修改和管理同一组数据,可以忠实的记录下来文件的所有历史修改版本,用户在本地更新(update)后就能看到其他用户提交到SVN上的最新代码,见图1所示。
图1 SVN工作原理图
SVN版本管理系统是C/S架构,即大家熟知的客户机(Client)和服务器(Server)结构。
在一台服务器上建立一个版本库,所有项目代码(一个或多个项目)上传到服务器版本库统一管理。每个开发人员可以从服务器端随时拿到任意版本的代码(能拿到哪些代码受权限控制),但在使用源代码之前,首先要把指定版本的源代码下载(check out,update)到本地,然后开发人员可以在本地客户端修改,添加,删除等后续开发操作,然后再上传(commit)到服务器端,形成新的最新版本。
3.2功能特点
(1)支持多级管理员。系统支持三种角色权限:超级管理员、目录级管理员、普通用户。超级管理员对所有配置库具有完全权限;目录管理员可对指定的目录进行权限管理,包括:对该目录/库的用户进行删除、写权限变更、读权限变更及为子目录设置管理员等;普通用户可以查看用户名、查看权限设置、修改自己密码。
(2)目录版本控制。实现了一个“虚拟”文件系统,可以追踪整个目录树的修改,文件和目录都是版本控制的,可以在客户端对文件和目录执行移动和复制命令。
(3)全局版本号。SVN的版本号针对整个目录树,而非单个文件。每一个版本号代表了一次提交后版本库整个目录树的特定状态。
(4)原子提交。提交要么完全进入版本库,要么一点都没有,这允许开发者以一个逻辑块提交修改。
(5)高效的分支和标签。分支与标签的大小与工程的大小不成比例,SVN建立分支与标签时使用了一种类似于硬链接的机制,因而这类操作通常只会花费很少并且相对固定的时间,以及很小的版本库空间。
(6)版本缓存。在本地维护一个原始的版本缓存,可使本地直接查看区别和恢复修改而不必访问网络,并且可使提交只传递修改的部分而非整个文件。
(7)一致的数据处理。使用二进制文件差异算法展现文件的区别,对于文本(可读)和二进制(不可读)文件具备一致的操作方式,两种类型的文件都压缩存放在版本库中,差异在网络上双向传递。
(8)重载图标。每个版本控制的文件和目录的状态使用小的重载图标表示,可以让你立刻看出工作副本的状态。
(9)图形用户界面。当你列出文件或文件夹的更改时,你可以点击任意版本查看提交注释。也可以看到更改过的文件列表,只要双击文件就可以查看更改内容。提交对话框列出了本次提交将要包括的条目,每一个条目有一个复选框,所以你可以选择包括哪些条目。未版本控制的文件也会被列出,以防你忘记添加新文件。
4.1系统搭建
首先到SVN官方网站免费下载开源软件SVN的安装程序,SVN分为服务器端软件和客户端软件,服务器端软件有 Subversion和 VisualSVN-Server;客户端有TortoiseSVN、VisualSVN、SmartSVN。我们服务器端选用VisualSVN-Server,客户端TortoiseSVN。
其次选择一台电脑作为服务器并安装SVN服务器端程序VisualSVN-Server,每个开发人员的电脑作为客户端分别安装SVN客户端程序TortoiseSVN,并使客户端与服务器互联。
最后,选定一个系统管理员,负责建立版本库、建立用户、分配权限、为版本库配置用户、版本库定期备份等。
4.2应用
SVN版本控制系统是集中式的数据管理,集中式代码管理的核心是服务器,所有开发者以及管理者在开始新一天的工作之前必须从服务器获取代码或日志信息,软件按所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。
对于设备软件开发人员开始新一天的工作:
(1)从SVN服务器版本库上下载(check out)或者更新(update)本地工作目录,确保代码为版本库的最新代码。
(2)进入本地工作目录,进行工作,每隔一段时间向服务器提交一次代码。(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了。)
(3)在快下班的时候,更新(update)本地代码然后再提交。(更新时,如果一段代码同时被别人修改就会出现冲突,那么就需要与另一个改此代码的开发人员讨论,将代码合并,解决好冲突后,再进行提交。)
(4)将编译且测试通过的代码提交(commit)到服务器。一天的工作完成,并反映给服务器。对于设备调试人员:
(1)调试设备之前,从服务器上下载(check out)该设备软件最新代码或者更新(update)本地代码,使本地代码始终为SVN中的最新版本。
(2)在调试中发现问题后,修改本地代码,确保代码编译测试通过后,提交(commit)给SVN服务器。
对于设备软件管理人员:
(1)如果想查看现在软件开发进度,掌握最新软件情况,可以从服务器上下载(check out)该设备软件最新代码或者更新(update)本地代码,运行并查看目前软件开发情况。
(2)如果想查看软件人员每天的工作内容或者工作量,可查看SVN变更日志文件,该文件详细记录了每个更新过SVN服务器的人的名字、时间、修改删除或添加过的源代码,以及更新内容描述。
在设备软件开发过程中,SVN版本管理系统的使用,可以有效解决软件一致性、并发性、安全性等问题,保证了在空间上集中统一管理。开发人员在提交软件代码的时候一般采用服务器/客户端方式,尽管开发人员可以在自己的本地留有备份,但最终唯一有效的只有服务器端的程序代码;在时间上全程跟踪记录工具将会自动记录开发过程中的每个更改细节,和不同时期的不同版本。这在一定程度上可以解决冗余、事务性处理并发性问题。项目管理人员可以通过版本控制对团队中的不同人员,实施操作权限的控制。对于不同角色的开发人员,对软件的不同部分可以定义不同的访问权限。这在一定程度可以解决软件安全性问题。版本控制工具的使用,可以减轻开发人员以及管理人员的负担,节省时间,同时降低人为错误。
[1]C.Micbael Pilato.使用Subversion进行版本控制[M]. (第2版).北京:开明出版社,2009.
[2]孟显英.浅谈软件配置管理[J].电脑知识与技术,2010,06(18):5092.
[3]隋新.基于SVN的软件工程团队协作模式[J].中国现代教育装备,2014,(3):59-61.
[4]贺自军.基于SVN的统一协作平台设计与实现[M].北京:北京邮电大学,2009.
The Application of SVN in the Management of Equipment Software Development
ZHANG Jinhuan,ZHANG Weiqiang,TIAN Hongtao
(The 45thResearch Institute of CETC,Beijing 100176,China)
This paper introduces the basic concepts of software version control and application of SVN version control system in software development of equipment,research and solve the problems in the process of software development,so as to improve the efficiency and quality of software development. Keywords:Version control;Equipment software;Software management;Construction and application of SVN system
TP311.11
B
1004-4507(2016)11-0038-05
2016-11-04