前言:本篇文章对于软件管理系统与版本控制系统将作一定介绍,然后再介绍他们之间需要做的集成。
1、先来谈谈版本控制系统吧
Version Control System,简称VCS,属于软件配置管理(SCM)的一个部分。这个系统可能对于刚毕业的大学生来说比较陌生,几年前甚至对一些企业来说也比较陌生,简单来说这个系统主要是为了更好保存并调用文件(包括文本,代码,图像等)的各个版本。那为什么需要用这个系统来保存各个版本呢?
这个就需要追述到没有版本控制系统之前的历史了,那个时候也有程序员,也要写代码,一开始大家写了代码就直接保存,后来发现一个问题,有一天代码改错了,其实前一天的代码是没问题的,但是已经保存了,没办法恢复到前一天了。怎么办呢?大家想出一个办法,你每次做了修改,就必须保存一个副本,以便以后需要。
就这样,那个问题是解决了,但是后续问题又出来了,每天至少保存一个副本,副本是越来越多,但是一旦有一次我改错了,想去找原来正确的代码,我却没法一下子找到,因为副本太多了,我怎么知道那个副本里我是主要改了什么东西呢?办法又出来了,大家每次弄副本的时候,必须再用一个Excel文档记录那个副本改了什么,而且每个副本的名字必须统一,是XXX-1,XXX-2这样子,后缀是版本号。
这个问题又解决了,但是新的问题还是不断出来,我发现之前代码没这个问题,但是现在代码有这个问题,但是代码好像没改啥,我想最好能比较一下,但是一看代码有几千行,让我怎么去比较这2个版本之间的差别啊(后来经过千辛万苦终于找到原因,原来是一个变量初值赋错了,可能是当初的笔误),好像很难解决啊!
问题继续出来,同一个文件可能我在改,别人也在改,最后出了大问题,到底是谁改坏的呢,大家都不承认,因为是同一个源文件,放在同一个地方,大家谁需要的时候就去改,最后就不了了之了,因为根本查不出来的。
问题还在出来,我在改这个文件,刚改完覆盖了服务器上的那个文件,孰不知有另外一个人也拿了这个文件改其他一个东西,我刚覆盖完,他也传上去把我的覆盖了,最后出问题了说是我的责任,妈的,我明明传上去了,谁叫他覆盖了。
问题......问题还有很多,怎么解决呢?解决方案就是咱们说的版本控制系统,它的功能主要也就是我上面需要解决的各个问题,当然远远不止这些功能啦,以后再慢慢详说。
目前流行的版本控制管理工具有Subversion,Clearcase,Perforce,AccuRev,VSS等等,其中Subversion是免费的,Perforce在美国硅谷那块用得比较多。
2、再来说说软件开发过程管理系统吧
所谓的软件开发过程管理系统,从广义上来说,需要包括整个软件工程的所有部分,包括需求分析,概要设计,编码,测试和部署与维护,不过今天我们说这个仅仅只包括开发与测试的阶段,也其实就是代码会一直改动的那段时间(做功能与修Bug)。
还是按照上面介绍版本控制管理系统的方法来介绍软件开发管理系统。
在没有这个系统之前,我们是怎样管理咱们的开发过程(包括修Bug)的呢?一般情况下,领导发给Email给你说,某某某,今天你把这个功能做了,这就完了,然后出来的问题就是,你有没有做完,他不来问他就不知道,即使你跟他说了,由于功能太多,他也忘记了。所以呢,大家就想出办法,分配任务的时候,需要用Excel文档来记录,做什么事情,负责人是谁,什么时候做好的,代码放在哪里都得记上。
这个办法的确是很好,大家都很兴奋,以为一切都控制之中了,但是渐渐地问题又来了,功能很多,Bug又很多,都记录在Excel文档上,今天发我一份,明天发我一份,我太忙了,都来不及去更新这些内容,但是每天还是有新的发过来,到最后,不知道哪一份Excel文档是最新的,这个Feature有没有做,这个Bug有没有修,我自己都忘记了。
三个臭皮匠顶个诸葛亮,大家一合计,有了解决方法,不要这么多Excel文档了,就一个吧,所有的都记在一个上面,放在一个地方,大家自己上去更新,虽然办法是好,但是有时候还是忘记去更新。不过经常有人提醒我去更新,基本上也没落下啥。
但是不久以后问题还是再次出现了,经理想看看某段时间,小张修了多少Bug,做了多少功能,算了好久愣是没算出来,一看原来是,每个开发和测试记录的时间方式都不一样,有些人喜欢用年月日,有些人喜欢再加具体时间,有些人只用月日,纵是Excel有再强的功能也没法找出来。
唉,看来还得强制大家用统一格式啊,好了,问题总算解决了,但是福无双至,祸不单行啊,不久又出问题了,做的功能和发现的Bug越来越多,但是一个功能或者修一个Bug又不一定一天能搞定,经常弄完以后想去更新Excel,发现那个条目不知道在哪里了,太多了,而且有时候运气好很快找到,想一下子把做好的几个状态改掉也没法去做,因为不是连在一起的,得一个个找到,按住Ctrl,然后再去改,太麻烦了,实在受不了了!
呵呵,问题还不止这个了,有一个功能,有两个再不同时间都做过,后来有一个人去改了状态,但是最后发现这个功能有问题,他们两个人谁也不承认是自己改的状态。
......
渐渐地,大伙儿经常忘记去更新了(唉,也没个自动提醒功能),产品质量越来越差,人心越来越差了。。。
然后呢,大伙儿都知道了,软件开发过程管理系统横空出世了,全部解决以上的所有问题,当然也是远远不止这些功能啦,还包括了那个自动提醒功能了,呵呵。
目前流行的软件开发过程管理系统主要有,DevSuite,ClearQuest,Bugzilla等等,其中TechExcel 的 DevSuite 是覆盖整个软件生命周期的,Bugzilla是免费的,DevSuite对于中小团队也是免费的
3、两者的集成使用
好了,终于介绍完了这两个系统,比较简单,大家如果想了解更多的话,可以到网上去找找。
现在开始来讲他们的集成,这里所谓的集成,大家其实一想就明白了,版本控制系统只能管理代码的各个版本的,那么它们的集成也必然是跟这个有关的,我们还是以问题的方式开始这个部分。
作为开发,我们经常做功能和修Bug,但是有件事情不知道大家有没有碰到过,你做完一个功能或者修了一个Bug后,很久以后,测试人员发现还有问题,需要你再去改,那个时候你已经忘记代码是哪一块了,所以你就吭哧吭哧去看代码,找了好久才找到。
还有件事情,有一次你修了一个Bug,后来你再次碰到一个类似的Bug,虽然你找到了当初修的那个Bug描述,但是你却还是不知道当初怎么修的,所以呢,再次吭哧吭哧去翻代码,浪费大量时间,也许你终于找到那块代码,但是却发现这块代码后来被改过好几次了,也就是有N多个版本了,你不知道哪一个版本是你改的那次,头疼啊,还是再研究研究......
在这个时候,我们就在想,现在已经有了开发管理系统,对每一个功能和Bug都有任务条进行管理的,那么在我针对这个写Code的时候,是否能把该部分Code的修改时的版本与这个任务条做关联,使得以后我只要找到这个Bug(相对Code而言,有软件开发系统,找到一个Bug是一件非常容易的事情,不管这个Bug多么久远了),就能知道当初我在哪里写的Code,而且知道是改的是那个Code文件的哪个版本。这样子对我们的开发工作是帮助很大的。
既然有这个需求,各大系统提供商当然不会坐视不管,纷纷推出自己的产品,使得代码可以跟任务相关联,例如Perforce里有Job可以跟代码关联,AccuRev 中Task可以跟代码关联,当然做的最好的还是TechExcel的VersionLink工具,可以跟主流的大多数版本管理工具集成,也就是说如果你们公司用的是Subversion,VersionLink就可以跟Subversion集成,使得Subversion里的代码与DevSuite里的任务关联,如果你们用的VSS,VersionLink可以跟VSS集成,让VSS里的代码与DevSuite里的任务做关联。
当今世界,开发相关工具是越来越多,但是独立的工具越来越没有市场地位,能够集成在一起使用的工具才是真正大家需要的,因为软件开发各个部分本来就应该是紧密结合在一起的,以前之所以有不同的产品,主要是行业还在摸索阶段,现在到了成熟阶段,要尽可能使流程流畅,所以当然是谁能有一整套的无缝集成的解决方案谁才是王者了,所以呢,各个部分的集成就变得异常重要了。