前言:本篇文章對於軟體管理系統與版本控制系統將作一定介紹,然後再介紹他們之間需要做的整合。
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裡的任務做關聯。
當今世界,開發相關工具是越來越多,但是獨立的工具越來越沒有市場地位,能夠整合在一起使用的工具才是真正大家需要的,因為軟體開發各個部分本來就應該是緊密結合在一起的,以前之所以有不同的產品,主要是行業還在摸索階段,現在到了成熟階段,要儘可能使流程流暢,所以當然是誰能有一整套的無縫整合的解決方案誰才是王者了,所以呢,各個部分的整合就變得異常重要了。