前言:本篇文章對(duì)于軟件管理系統(tǒng)與版本控制系統(tǒng)將作一定介紹,然后再介紹他們之間需要做的集成。
1、先來(lái)談?wù)劙姹究刂葡到y(tǒng)吧
Version Control System,簡(jiǎn)稱(chēng)VCS,屬于軟件配置管理(SCM)的一個(gè)部分。這個(gè)系統(tǒng)可能對(duì)于剛畢業(yè)的大學(xué)生來(lái)說(shuō)比較陌生,幾年前甚至對(duì)一些企業(yè)來(lái)說(shuō)也比較陌生,簡(jiǎn)單來(lái)說(shuō)這個(gè)系統(tǒng)主要是為了更好保存并調(diào)用文件(包括文本,代碼,圖像等)的各個(gè)版本。那為什么需要用這個(gè)系統(tǒng)來(lái)保存各個(gè)版本呢?
這個(gè)就需要追述到?jīng)]有版本控制系統(tǒng)之前的歷史了,那個(gè)時(shí)候也有程序員,也要寫(xiě)代碼,一開(kāi)始大家寫(xiě)了代碼就直接保存,后來(lái)發(fā)現(xiàn)一個(gè)問(wèn)題,有一天代碼改錯(cuò)了,其實(shí)前一天的代碼是沒(méi)問(wèn)題的,但是已經(jīng)保存了,沒(méi)辦法恢復(fù)到前一天了。怎么辦呢?大家想出一個(gè)辦法,你每次做了修改,就必須保存一個(gè)副本,以便以后需要。
就這樣,那個(gè)問(wèn)題是解決了,但是后續(xù)問(wèn)題又出來(lái)了,每天至少保存一個(gè)副本,副本是越來(lái)越多,但是一旦有一次我改錯(cuò)了,想去找原來(lái)正確的代碼,我卻沒(méi)法一下子找到,因?yàn)楦北咎嗔耍以趺粗滥莻€(gè)副本里我是主要改了什么東西呢?辦法又出來(lái)了,大家每次弄副本的時(shí)候,必須再用一個(gè)Excel文檔記錄那個(gè)副本改了什么,而且每個(gè)副本的名字必須統(tǒng)一,是XXX-1,XXX-2這樣子,后綴是版本號(hào)。
這個(gè)問(wèn)題又解決了,但是新的問(wèn)題還是不斷出來(lái),我發(fā)現(xiàn)之前代碼沒(méi)這個(gè)問(wèn)題,但是現(xiàn)在代碼有這個(gè)問(wèn)題,但是代碼好像沒(méi)改啥,我想最好能比較一下,但是一看代碼有幾千行,讓我怎么去比較這2個(gè)版本之間的差別啊(后來(lái)經(jīng)過(guò)千辛萬(wàn)苦終于找到原因,原來(lái)是一個(gè)變量初值賦錯(cuò)了,可能是當(dāng)初的筆誤),好像很難解決啊!
問(wèn)題繼續(xù)出來(lái),同一個(gè)文件可能我在改,別人也在改,最后出了大問(wèn)題,到底是誰(shuí)改壞的呢,大家都不承認(rèn),因?yàn)槭峭粋€(gè)源文件,放在同一個(gè)地方,大家誰(shuí)需要的時(shí)候就去改,最后就不了了之了,因?yàn)楦静椴怀鰜?lái)的。
問(wèn)題還在出來(lái),我在改這個(gè)文件,剛改完覆蓋了服務(wù)器上的那個(gè)文件,孰不知有另外一個(gè)人也拿了這個(gè)文件改其他一個(gè)東西,我剛覆蓋完,他也傳上去把我的覆蓋了,最后出問(wèn)題了說(shuō)是我的責(zé)任,媽的,我明明傳上去了,誰(shuí)叫他覆蓋了。
問(wèn)題......問(wèn)題還有很多,怎么解決呢?解決方案就是咱們說(shuō)的版本控制系統(tǒng),它的功能主要也就是我上面需要解決的各個(gè)問(wèn)題,當(dāng)然遠(yuǎn)遠(yuǎn)不止這些功能啦,以后再慢慢詳說(shuō)。
目前流行的版本控制管理工具有Subversion,Clearcase,Perforce,AccuRev,VSS等等,其中Subversion是免費(fèi)的,Perforce在美國(guó)硅谷那塊用得比較多。
2、再來(lái)說(shuō)說(shuō)軟件開(kāi)發(fā)過(guò)程管理系統(tǒng)吧
所謂的軟件開(kāi)發(fā)過(guò)程管理系統(tǒng),從廣義上來(lái)說(shuō),需要包括整個(gè)軟件工程的所有部分,包括需求分析,概要設(shè)計(jì),編碼,測(cè)試和部署與維護(hù),不過(guò)今天我們說(shuō)這個(gè)僅僅只包括開(kāi)發(fā)與測(cè)試的階段,也其實(shí)就是代碼會(huì)一直改動(dòng)的那段時(shí)間(做功能與修Bug)。
還是按照上面介紹版本控制管理系統(tǒng)的方法來(lái)介紹軟件開(kāi)發(fā)管理系統(tǒng)。
在沒(méi)有這個(gè)系統(tǒng)之前,我們是怎樣管理咱們的開(kāi)發(fā)過(guò)程(包括修Bug)的呢?一般情況下,領(lǐng)導(dǎo)發(fā)給Email給你說(shuō),某某某,今天你把這個(gè)功能做了,這就完了,然后出來(lái)的問(wèn)題就是,你有沒(méi)有做完,他不來(lái)問(wèn)他就不知道,即使你跟他說(shuō)了,由于功能太多,他也忘記了。所以呢,大家就想出辦法,分配任務(wù)的時(shí)候,需要用Excel文檔來(lái)記錄,做什么事情,負(fù)責(zé)人是誰(shuí),什么時(shí)候做好的,代碼放在哪里都得記上。
這個(gè)辦法的確是很好,大家都很興奮,以為一切都控制之中了,但是漸漸地問(wèn)題又來(lái)了,功能很多,Bug又很多,都記錄在Excel文檔上,今天發(fā)我一份,明天發(fā)我一份,我太忙了,都來(lái)不及去更新這些內(nèi)容,但是每天還是有新的發(fā)過(guò)來(lái),到最后,不知道哪一份Excel文檔是最新的,這個(gè)Feature有沒(méi)有做,這個(gè)Bug有沒(méi)有修,我自己都忘記了。
三個(gè)臭皮匠頂個(gè)諸葛亮,大家一合計(jì),有了解決方法,不要這么多Excel文檔了,就一個(gè)吧,所有的都記在一個(gè)上面,放在一個(gè)地方,大家自己上去更新,雖然辦法是好,但是有時(shí)候還是忘記去更新。不過(guò)經(jīng)常有人提醒我去更新,基本上也沒(méi)落下啥。
但是不久以后問(wèn)題還是再次出現(xiàn)了,經(jīng)理想看看某段時(shí)間,小張修了多少Bug,做了多少功能,算了好久愣是沒(méi)算出來(lái),一看原來(lái)是,每個(gè)開(kāi)發(fā)和測(cè)試記錄的時(shí)間方式都不一樣,有些人喜歡用年月日,有些人喜歡再加具體時(shí)間,有些人只用月日,縱是Excel有再?gòu)?qiáng)的功能也沒(méi)法找出來(lái)。
唉,看來(lái)還得強(qiáng)制大家用統(tǒng)一格式啊,好了,問(wèn)題總算解決了,但是福無(wú)雙至,禍不單行啊,不久又出問(wèn)題了,做的功能和發(fā)現(xiàn)的Bug越來(lái)越多,但是一個(gè)功能或者修一個(gè)Bug又不一定一天能搞定,經(jīng)常弄完以后想去更新Excel,發(fā)現(xiàn)那個(gè)條目不知道在哪里了,太多了,而且有時(shí)候運(yùn)氣好很快找到,想一下子把做好的幾個(gè)狀態(tài)改掉也沒(méi)法去做,因?yàn)椴皇沁B在一起的,得一個(gè)個(gè)找到,按住Ctrl,然后再去改,太麻煩了,實(shí)在受不了了!
呵呵,問(wèn)題還不止這個(gè)了,有一個(gè)功能,有兩個(gè)再不同時(shí)間都做過(guò),后來(lái)有一個(gè)人去改了狀態(tài),但是最后發(fā)現(xiàn)這個(gè)功能有問(wèn)題,他們兩個(gè)人誰(shuí)也不承認(rèn)是自己改的狀態(tài)。
......
漸漸地,大伙兒經(jīng)常忘記去更新了(唉,也沒(méi)個(gè)自動(dòng)提醒功能),產(chǎn)品質(zhì)量越來(lái)越差,人心越來(lái)越差了。。。
然后呢,大伙兒都知道了,軟件開(kāi)發(fā)過(guò)程管理系統(tǒng)橫空出世了,全部解決以上的所有問(wèn)題,當(dāng)然也是遠(yuǎn)遠(yuǎn)不止這些功能啦,還包括了那個(gè)自動(dòng)提醒功能了,呵呵。
目前流行的軟件開(kāi)發(fā)過(guò)程管理系統(tǒng)主要有,DevSuite,ClearQuest,Bugzilla等等,其中TechExcel 的 DevSuite 是覆蓋整個(gè)軟件生命周期的,Bugzilla是免費(fèi)的,DevSuite對(duì)于中小團(tuán)隊(duì)也是免費(fèi)的
3、兩者的集成使用
好了,終于介紹完了這兩個(gè)系統(tǒng),比較簡(jiǎn)單,大家如果想了解更多的話,可以到網(wǎng)上去找找。
現(xiàn)在開(kāi)始來(lái)講他們的集成,這里所謂的集成,大家其實(shí)一想就明白了,版本控制系統(tǒng)只能管理代碼的各個(gè)版本的,那么它們的集成也必然是跟這個(gè)有關(guān)的,我們還是以問(wèn)題的方式開(kāi)始這個(gè)部分。
作為開(kāi)發(fā),我們經(jīng)常做功能和修Bug,但是有件事情不知道大家有沒(méi)有碰到過(guò),你做完一個(gè)功能或者修了一個(gè)Bug后,很久以后,測(cè)試人員發(fā)現(xiàn)還有問(wèn)題,需要你再去改,那個(gè)時(shí)候你已經(jīng)忘記代碼是哪一塊了,所以你就吭哧吭哧去看代碼,找了好久才找到。
還有件事情,有一次你修了一個(gè)Bug,后來(lái)你再次碰到一個(gè)類(lèi)似的Bug,雖然你找到了當(dāng)初修的那個(gè)Bug描述,但是你卻還是不知道當(dāng)初怎么修的,所以呢,再次吭哧吭哧去翻代碼,浪費(fèi)大量時(shí)間,也許你終于找到那塊代碼,但是卻發(fā)現(xiàn)這塊代碼后來(lái)被改過(guò)好幾次了,也就是有N多個(gè)版本了,你不知道哪一個(gè)版本是你改的那次,頭疼啊,還是再研究研究......
在這個(gè)時(shí)候,我們就在想,現(xiàn)在已經(jīng)有了開(kāi)發(fā)管理系統(tǒng),對(duì)每一個(gè)功能和Bug都有任務(wù)條進(jìn)行管理的,那么在我針對(duì)這個(gè)寫(xiě)Code的時(shí)候,是否能把該部分Code的修改時(shí)的版本與這個(gè)任務(wù)條做關(guān)聯(lián),使得以后我只要找到這個(gè)Bug(相對(duì)Code而言,有軟件開(kāi)發(fā)系統(tǒng),找到一個(gè)Bug是一件非常容易的事情,不管這個(gè)Bug多么久遠(yuǎn)了),就能知道當(dāng)初我在哪里寫(xiě)的Code,而且知道是改的是那個(gè)Code文件的哪個(gè)版本。這樣子對(duì)我們的開(kāi)發(fā)工作是幫助很大的。
既然有這個(gè)需求,各大系統(tǒng)提供商當(dāng)然不會(huì)坐視不管,紛紛推出自己的產(chǎn)品,使得代碼可以跟任務(wù)相關(guān)聯(lián),例如Perforce里有Job可以跟代碼關(guān)聯(lián),AccuRev 中Task可以跟代碼關(guān)聯(lián),當(dāng)然做的最好的還是TechExcel的VersionLink工具,可以跟主流的大多數(shù)版本管理工具集成,也就是說(shuō)如果你們公司用的是Subversion,VersionLink就可以跟Subversion集成,使得Subversion里的代碼與DevSuite里的任務(wù)關(guān)聯(lián),如果你們用的VSS,VersionLink可以跟VSS集成,讓VSS里的代碼與DevSuite里的任務(wù)做關(guān)聯(lián)。
當(dāng)今世界,開(kāi)發(fā)相關(guān)工具是越來(lái)越多,但是獨(dú)立的工具越來(lái)越?jīng)]有市場(chǎng)地位,能夠集成在一起使用的工具才是真正大家需要的,因?yàn)檐浖_(kāi)發(fā)各個(gè)部分本來(lái)就應(yīng)該是緊密結(jié)合在一起的,以前之所以有不同的產(chǎn)品,主要是行業(yè)還在摸索階段,現(xiàn)在到了成熟階段,要盡可能使流程流暢,所以當(dāng)然是誰(shuí)能有一整套的無(wú)縫集成的解決方案誰(shuí)才是王者了,所以呢,各個(gè)部分的集成就變得異常重要了。