每一个软件项目,无论是工程类项目,还是产品类项目,都必须经历需求分析、系统设计、编码实现、集成测试、部署、交付、维护和支持的过程。在这个过程中,将生成各种各样不同的工件,包括文档、源程序、可执行代码、支持库。更可怕的是,频繁出现的变更是不可避免的,因此面向如此庞大且不断变动的信息集,如何使其有序、高效地存放、查找和利用就成为了一个突出的问题。
针对这一问题,最早的开发人员尝试过的解决办法是通过手工来实现:
1)文档:每次修改时都另存为一个新的文件,然后通过文件名进行区分,例如"XXX软件需求说明书V1.0,XXX软件需求说明书V1.1,XXX软件需求说明书V2.0.",并且在文件中注明每次版本变化的内容;
2)源代码:每次要修改时就将整个工程目录复制一份,将原来的文件夹进行改名,例如"XX项目V1.0、XX项目1.01、.",然后在新的目录中进行修改;
但是这种方法,不仅十分繁琐,容易出错,而且会带来大量的垃圾数据。如果是团队协同开发或者是项目规模较大时,还是会造成很大的混乱。很显然,这样简陋的方法是无法应对这一问题的。后来,有人尝试从制造工业领域引入了"配置管理"这一概念,通过不懈的研究与实践,最终形成了一套管理办法和活动原则,这也就是软件配置管理。
通 过软件配置管理,将对软件系统中的多重版本实施系统的管理;全面记载系统开发的历史过程,包括为什么修改,谁作了修改,修改了什么;管理和追踪开发过程中 危害软件质量以及影响开发周期的缺陷和变化。并对开发过程进行有效地管理和控制,完整、明确地记载开发过程中的历史变更,形成规范化的文档,不仅使日后的 维护和升级得到保证,而且更重要的是,这还会保护宝贵的代码资源,积累软件财富,提高软件重用率,加快投资回报。
常见的配置管理工具
正如前面所述,由于软件配置管理过程十分繁杂,管理对象错综复杂,如果是采用人工的办法不仅费时费力,还容易出错,产生大量的废品。因此,引入一些自动化工具是十分有裨益的,这也是做好配置管理的必要条件。
正是因为如此,市场上出现了大量的自动化配置管理工具,这些工具的实现原理与基本机制均十分接近,但由于其定位不同,因此各有特点,下面我们就对一些常见的配置管理工具做一简单的介绍。
元老:CCC、SCCS、RCS
上个世纪七十年代初期加利福利亚大学的Leon Presser教授撰写了一篇论文,提出控制变更和配置的概念,之后在1975年,他成立了一家名为SoftTool的公司,开发了自己的配置管理工具:CCC,这也是最早的配置管理工具之一。
在软件配置管理工具发展史上,继CCC之后,最具有里程碑式的是两个自由软件:Marc Rochkind的SCCS (Source Code Control System)和Walter Tichy的RCS (Revision Control System),它们对配置管理工具的发展做出了重大的贡献,直到现在绝大多数配置管理工具基本上都源于它们的设计思想和体系架构。
中坚:Rational ClearCase
Rational公司是全球最大的软件CASE工具提供商,现已被IBM收购。也许是受到其拳头产品、可视化建模第一工具Rose的影响,它开发的配置管理工具ClearCase也是深受用户的喜爱,是现在应用面最广的企业级、跨平台的配置管理工具之一。
ClearCase提供了比较全面的配置管理支持,其中包括版本控制、工作空间管理、Build管理等,而且开发人员无需针对其改变现有的环境、工具和工作方式。
其最大的缺点就在于其价格不菲,每个客户端用户许可证大约需要几千美金,所以在国内应用群体有限。
1)版本控制
ClearCase不仅可以对文件、目录、链接进行版本控制,同时还提供了先进的版本分支和归本功能用于支持并行开发。另外,它还支持广泛的文件类型。
2)工作空间管理
可以为开发人员提供私人存储区,同时可以实现成员之间的信息共享,从而为每一位开发人员提供一致、灵活、可重用的工作空间域。
3)Build管理
对ClearCase控制的数据,既可以使用定制脚本,也可使用本机提供的make程序。其最大的缺点就在于其价格不菲,每个客户端用户许可证大约需要几千美金,所以在国内应用群体有限。
新秀:Hansky Firefly
做为H a n s k y公司软件开发管理套件中重要一员的Firefly,可以轻松管理、维护整个企业的软件资产,包括程序代码和相关文档。Firefly是一个功能完善、运行速度极快的软件配置管理系统,可以支持不同的操作系统和多种集成开发环境,因此它能在整个企业中的不同团队,不同项目中得以应用。
Firefly基于真正的客户机/服务器体系结构,不依赖于任何特殊的网络文件系统,可以平滑地运行在不同的LAN、WAN环境中。它的安装配置过程简单易用,Firefly可以自动、安全地保存代码的每一次变化内容,避免代码被无意中覆盖、修改。项目管理人员使用Firefly可以有效地组织开发力量进行并行开发和管理项目中各阶段点的各种资源,使得产品发布易于管理;并可以快速地回溯到任一历史版本。系统管理员使用Firefly的内置工具可以方便的进行存储库的备份和恢复,而不依赖于任何第三方工具。
开源奇葩:CVS
CVS是Concurrent Versions System的缩写,它是开放源代码软件世界的一个伟大杰作,由于其简单易用、功能强大,跨平台,支持并发版本控制,而且免费,它在全球中小型软件企业中得到了广泛使用。
其最大的遗憾就是缺少相应的技术支持,许多问题的解决需要自已寻找资料,甚至是读源代码。
小工作组级:Merant PVCS
MERANT公司的PVCS能够提供对软件配置管理的基本支持,通过使用其图形界面或类似SCCS的命令,能够基本满足小型项目开发的配置管理需求。PVCS虽然功能上也基本能够满足需求,但是其性能表现一直较差,逐渐地被市场所冷落。
入门级:Microsoft Visual Source Safe
Visual Source Safe,即VSS,是微软公司为Visual Studio配套开发的一个小型的配置管理工具,准确来说,它仅能够称得上是一个小型的版本控制软件。VSS的优点在于其与Visual Studio实现了无缝集成,使用简单。提供了历史版本记录、修改控制、文件比较、日志等基本功能。
但其缺点也是十分明显的,只支持Windows平台,不支持并行开发,通过Check out - Modify - Check in的管理方式,一个时间只允许一个人修改代码,而且速度慢、伸缩性差,不支持异地开发。甚至于微软本身也不采用其做为配置管理工具,而是使用一个名为SLM的内部工具。
如何选择配置管理工具
面对这些形形色色,各有千秋的配置管理工具,如何根据组织特点、开发团队需要,选择切合适用的工具呢?笔者就结合工作实践中的经验与大家做一些交流与探讨。
配置管理工具的选择所需考虑的因素大体包括以下几个因素:
功能是否符合实际需求?是否符合团队特点?性能是否满意?费用是否可以接受?售后服务如何?接下来,我们就这几方面逐一深入地探讨:
1)功能是否符合实际需求,是否符合团队特点
工具就是用来帮助您解决问题的,因此功能是否符合实际需求是最重要的判断因素。而大多数主流配置管理工具的基本功能都能够满足,因此主要需要判断以下几个因素:
并行开发支持
在团队协作开发过程中,有两种主要的模式:集体代码权和个体代码权。采用集体代码权模式进行开发时,一段代码可能同时会被多个开发人员同时修改;而采用个体代码权模式进行开发时,每一段代码都始终被一个开发人员独享,别人需要修改时也会通过该开发人员完成。
而配置管理软件针对这一情况,也采用了不同的策略:Copy-Modify-Merge(拷贝、修改、合并)的并行开发模式、Check out-Modify-Check in(签出、修改、签入)的独占开发模式。在并行开发模式下,开发人员可以并行开发、更改代码,Firefly会自动检测到代码冲突,并自动合并,或提示开发人员手动解决。
表一、并行开发支持比较表
工具名称 | 说明 |
ClearCase | Copy-Modify-Merge模式 |
Firefly | Copy-Modify-Merge模式 |
CVS | Copy-Modify-Merge模式 |
PVCS | Check out-Modify-Check in模式 |
VSS | Check out-Modify-Check in模式 |
异地开发支持
如果你的开发团队分布在不同的开发地点,就需要对工具的异地开发功能进行仔细的评估了。大多数工具都提供基于Web的界面,用户可以通过浏览器执行配置管理的相关操作,而且有些工具就通过这样的方法来实现对异地开发的支持。
这种实现方法有太多的局限性,例如网络(Internet)连接带宽的限制、防火墙以及安全问题等。真正意义上的异地开发支持,是指在不同的开发地点建立各自的存储库,通过工具提供同步功能自动或手动同步。这样做的好处是与网络无关,即便各个开发地点之间没有实时连通的网络,也可以通过E-Mail附件等其它方式将同步包发给对方,实现手动的同步。
表二异地开发支持比较表
工具名称 | 说明 |
ClearCase | 提供MultiSite模块,通过自动或手动同步位于不同开发地点的存储库的方式,支持异地开发 |
Firefly | 提供ServerSync模块,通过自动或手动同步位于不同开发地点的存储库的方式,支持异地开发 |
CVS | 无专门支持的模块 |
PVCS | 无专门支持的模块 |
VSS | 无专门支持的模块 |
值得说明的是,在不同开发点建立各自存储库的方式,主
跨平台开发支持
如果企业需要从事多个不同平台下的开发工作,就需要配置管理工具能够对跨平台开发提供支持,否则势必会给开发、测试、发布等各个环节带来不便,将使大量的时间被浪费于代码的手工上传、下载中。
表三跨平台开发支持比较表
工具名称 | 说明 |
ClearCase | 支持常见的平台 |
Firefly | 软件本身基于Java开发,可在Windows、Linux、Solaris、HP-UX、AIX等常见平台上使用,平台之间的移植也非常方便 |
CVS | 支持几乎所有的操作系统 |
PVCS | 软件本身基于Java开发,能够支持常见的平台 |
VSS | 仅支持Windows操作系统 |
与开发工具的集成性
配置管理工具与开发工具是编码过程中最常用到两种工具,因此它们之间的集成性直接影响到开发人员的便利性,如果无法良好集成,开发人员将不可避免地在配置管理工具与开发工具之间来回切换。
表四与开发工具集成性比较表
工具名称 | 说明 |
ClearCase | 直接与资源管理器集成,十分易用 |
Firefly | 与常见开发工具无缝集成 |
CVS | 对开发工具集成性较差 |
PVCS | 仅支持Windows操作系统 |
VSS | 与Visual Studio开发工具包无缝连接,其它开发工具集成性差 |
2)性能是否满意
配置管理工具软件的一些性能指标对于最终的选择也有着至关重要的影响。
运行性能
如果开发团队规模不大的情况下,配置管理工具软件的性能不会造成很大影响,但如果项目规模比较大,团队成员逐渐增多的情况下,其运行性能就会带来很大的影响。
表五运行性能比较表
工具名称 | 说明 |
ClearCase | 服务器采用多进程机制,使用自带多版本文件系统MVFS,对性能有较大负面影响。做为一款企业级、全面的开发配置管理工具,适用于大型开发团队 |
Firefly | 服务器采用了多线程的应用服务器,性能表现优秀,做为一款企业级、全面的开发配置管理,能适用于50人到上千人的团队 |
CVS | 较高的运行性能,适用于各种级别的开发团队 |
PVCS | 服务器采用文件系统共享方式,对CPU、内存及网络要求较高,性能一般,仅适用于中小型项目团队,不适合于企业级应用 |
VSS | 相对功能单一、简陋,适用于几个人的小型团队,在数据量不大的情况下,性能可以接受 |
易用性
表六易用性比较表
工具名称 | 说明 |
ClearCase | 安装、配置、使用相对较复杂,需要进行团队培训 |
Firefly | 在提供全面配置管理功能的情况下,安装、配置、使用较为简单,包括安装、配置、培训在内的整个实施周期一般不会超过一个月。 |
CVS | 安装、配置较复杂,但使用比较简单,只需对配置管理做简单培训即可 |
PVCS | 使用比较简单,只需对配置管理做简单培训即可 |
VSS | 安装、配置、使用均较简单,很容易上手使用 |
从用户界面、与开发工具的集成性角度来说,这几款主流的配置管理软件均有较好的设计,均有较好的易用性。
安全性
表七安全性比较表
工具名称 | 说明 |
ClearCase | 采用C/S模式,需要共享服务器上的存储目录以供客户端访问,这将带来一定安全隐患 |
Firefly | 服务器上的存储目录不用共享,对客户端不透明,客户端不可直接访问存储目录,使系统更安全可靠 |
CVS | 采用C/S模式,不需要共享服务器上的存储目录,安全性较好 |
PVCS | 基于文件系统共享,而且需要以"可写"的权限共享存储目录,存在较大的安全隐患 |
VSS | 基于文件系统共享实现对服务器的访问,需要共享存储目录,这将带来一定安全隐患 |
3)费用是否可以接受
Rational ClearCase、Hansky Firefly两款均属于企业级配置管理工具软件,ClearCase价格较贵,,相比之下Hansky Firefly是一款不错的选择。
而PVCS其价格大约是每客户端几百美元的水平,对于国内企业来说,性价比不太划算。VSS是微软打包在Visual Studio开发工具包之中的,显然花费的精力不大,价格也比较便宜,可以做为个人、小项目团队版本控制之用。
而CVS则是一款完全免费的开源软件,性能较之企业级配置管理工具差距不大,也是一种不错的选择。
4)售后服务如何
表八售后服务比较表
工具名称 | 说明 |
ClearCase | 大型商用软件,已被IBM公司收购,但国内市场拓展有限,因此服务支持会受到限制。现在中国用户的支持是由位于澳大利亚悉尼的支持中心联系 |
Firefly | 大型商用软件,已在中国成立分公司,全面拓展市场之中,在北京设有支持中心 |
CVS | 做为开源软件,无官方支持,需要用户自己查找资料解决技术问题,现在也出现专门为CVS做技术支持的公司 |
PVCS> | 在中国市场开拓有限,国内没有支持中心 |
< TD> | 做为微软的非核心产品,技术支持有限。在其网站上有提供一些常见问题,只有对正式购买的用户提供一定的技术支持 |
售后服务与产品支持也是一个很重要的考察点,工具在使用过程中出现这样那样的问题是很平常的事,有些是因为使用不当,有些则是工具本身的缺陷。这些问题都会直接影响到开发团队的使用,因此随时能够找到专业技术人员解决这些问题就变成十分重要。
实例说明
最后,笔者介绍几个实际的案例,希望对大家选择软件配置管理工具软件有帮助。
案例一
某公司拥有10名专职开发人员以及一些兼职的开发人员,主要从事Windows和Linux平台下的软件开发,采用的工具包括Visual Studio系列、GCC等。为了能够加强版本控制与配置管理工作,决定引入一些自动化配置管理工具。
经过慎重的选择,采用了两步走的方法:
1)首先采用了Visual Studio软件包中的VSS做为配置管理工具;
由于VSS安装、配置、操作都十分简单,上手容易,这样在执行配置管理的过程中,工具的培训没有带来太大的阻力,大家可以集中精力理解配置管理。这样很快就在团队中形成了版本控制、配置管理的氛围与习惯。
2)然后构建了CVS服务器,做为整个开发组织的配置管理工具;
CVS能够有效地支援Windows、Linux两个平台上的应用开发,其性能优秀,而且免费,另外,它对于兼职人员的配置管理十分有效。采用CVS至今,效果明显,除了功能、使用上有些不方便之处外,没有出过任何大问题。
案例二
北京某公司拥用230名专职开发人员,长期从事金融业务的开发,随着业务的良性发展,在管理上也出现了一些不足:
1)开发管理沟通滞后,开发人员孤立操作,变更和维护信息无法实时反馈;
2)主管领导对所开发的100多种产品的项目开发进程不能及时了解,很多资源滞留在个人手中;
3)随着产品的需求日益增加,无法快速标识和查找软件的历史版本;
4)无法对处于不同开发平台上的项目进行统一管理和资源配置;
5)无法实现异地开发团队的协调和沟通。
因此,该公司决定引入软件配置管理,在配置管理工具软件的选择上,考虑到其人员规模较大,项目较多,工作复杂,在针对可靠性、易用性、稳定性、安全性、技术支持能力以及软件的各功能进行了仔细的综合评估后,最后选择了国内技术支持较到位的Hansky Firefly软件配置工具软件。在采用了Hansky Firefly之后,有效地解决了这些问题,还帮助其顺利地通过了CMM 2级认证,为企业的进一步发展打下了坚实的基础。
要适用于两个或两个以上位于不同地点的开发团队协作开发的情况。如果仅是采用虚拟团队合作的方式,开发人员以个体的形式散落在不同地方,则更适合通过Internet直接操作远程的配置管理服务器。