如果說70年代的軟件危機導(dǎo)致了軟件工程思想的誕生和理論體系的發(fā)展,那么80~90年代尤其是90年代軟件產(chǎn)業(yè)的迅猛發(fā)展導(dǎo)致了另一種新思想的產(chǎn)生和實現(xiàn),這就是軟件的版本管理。
只要參加過軟件開發(fā)的人都清楚,現(xiàn)在的軟件項目完全由一個人來完成是難以想象而且也是不可能的,通常是有一個研發(fā)小組來共同分析、設(shè)計、編碼和維護,并有專門的測試小組對已完成編碼調(diào)試的軟件進行全面的測試。在軟件開發(fā)這個龐大而復(fù)雜的過程中,需要涉及到各個方面的人員,信息的交流反饋不僅僅是在研發(fā)小組的成員之間及各個研發(fā)小組之間,還存在于客戶和研發(fā)者之間。所有的這些交流反饋意見信息都有可能導(dǎo)致對軟件的修改,小的可能只是對某個源文件中的某個變量的定義改動,大到重新設(shè)計程序模塊甚至可能是整個需求分析變動。在這個工程中,由于軟件開發(fā)所固有的特征,可能會形成眾多的軟件版本,而且我們并不能保證不出現(xiàn)錯誤的修改,而這樣的一個困難局面卻又非常現(xiàn)實地擺在項目開發(fā)管理者的面前,他/她該如何有效地解決這些問題,具體地說就是如下一些問題:
1.怎樣對研發(fā)項目進行整體管理;
2.項目開發(fā)小組的成員之間如何以一種有效的機制進行協(xié)調(diào);
3.如何進行對小組成員各自承擔(dān)的子項目的統(tǒng)一管理;
4.如何對研發(fā)小組各成員所作的修改進行統(tǒng)一匯總;
5.如何保留修改的軌跡,以便撤銷錯誤的改動;
6.對在研發(fā)過程中形成的軟件的各個版本如何進行標識,管理及差異識辨等一個非常直接的反應(yīng),我們必須要引進一種管理機制,一個版本管理機制,而且是廣義上的版本管理,它不僅需要對源代碼的版本進行管理,而且還要對整個項目進行管理。以往的那種被譽為具有良好編程風(fēng)格的做法,諸如在對他人的源程序進行修改時注釋修改原因,修改人和日期,如果是多個成員同時進行了修改,那么需要進行及時的人工的差異比較和綜合以便形成一個統(tǒng)一的新版本。這種做法在當前的大型軟件的開發(fā)中已經(jīng)越來越?jīng)]有空間了,可以說是一種以小作坊的形式來面對軟件的社會化大生產(chǎn),再也不可能行得通了。
其實,版本管理的思想很早就存在于軟件開發(fā)者的頭腦之中,只是以往的認識沒有現(xiàn)在人們所意識到的那樣迫切。UNIX的程序開發(fā)系統(tǒng)較早就提供了能夠進行開發(fā)小組中源代碼版本管理的工具,現(xiàn)在的Linux更是提供功能強大的能夠跨平臺的版本管理器,國外公司的基于Windows的版本管理器也已經(jīng)有了比較成熟的產(chǎn)品,國內(nèi)的研究單位如北京大學(xué)計算機系CASE實驗室也在致力于這方面的工作。在眾多的成熟產(chǎn)品和試驗產(chǎn)品中,這里只將對使用比較廣泛,有較大用戶前景且又能較易獲得的版本管理器產(chǎn)品Microsoft公司的VisualSourceSafe6.0進行詳細的介紹,針對普通的研發(fā)小組的解決方案,及具體的實現(xiàn)。
二、Visual SourceSafe 6.0(VSS 6.0)簡介
VSS6.0現(xiàn)在是作為Microsoft Visual Studio6.0這個開發(fā)產(chǎn)品家族的一員,如Visual C++ 6.0和Visual J++6.0一樣。
1.VSS的簡單工作原理
Microsoft的VSS6.0解決了軟件開發(fā)小組長期所面臨的版本管理問題,它可能有效地幫助項目開發(fā)組的負責(zé)人對項目程序進行管理,將所有的項目源文件(包括各種文件類型)以特有的方式存入數(shù)據(jù)庫。開發(fā)組的成員不能對該數(shù)據(jù)庫中的文件進行直接的修改,而是由該版本管理器將該項目的源程序或是子項目的源程序拷貝到各個成員自己的工作目錄下進行調(diào)試和修改,然后將修改后的項目文件作Checkin提交給VSS,由它進行綜合更新。VSS也支持多個項目之間文件的快速高效的共享。當某個成員向VSS中添加文件時,該文件將會被備份到數(shù)據(jù)庫中,以便所有的成員都能共享該文件。而且每個成員對所有的項目文件所作的修改都將被記錄到數(shù)據(jù)庫中,從而使得修改的恢復(fù)和撤銷在任何時刻,任何位置都成為可能。小組的成員可能得到該項目的最新版本,對它進行修改,并保存一個新的版本。
VSS的項目組織管理使得開發(fā)小組的協(xié)調(diào)變得簡單容易且很直觀,當一個和一組文件發(fā)放給另一個成員,小組,Web站點或是任何其他的地址,VSS確保他們之間的真正共享及所選的一組文件的不同版本的安全性?,F(xiàn)在,越來越多的開發(fā)者可以通過他們的開發(fā)環(huán)境來訪問VSS的功能。而且VSS可以很容易地于MicrosoftAccess、 Visual Basic、 Visual C++、VisualFoxPro和其他的開發(fā)工具集成在一起,一旦VSS集成到開發(fā)環(huán)境中,就可以象控件一樣使用,能夠很好地體現(xiàn)出VSS的易用性和強大功能。
2.VSS中的幾個重要概念
為了更好的了解VSS,有必要對如下一些概念給予說明。
首先是項目的概念,所謂的項目是一組存在VSS中的文件(任何類型),可以在項目中或是項目之間進行文件的添加、刪除、編輯和共享。一個項目與操作系統(tǒng)的文件夾有很多的相似之處,但它更好地支持文件合并、歷史和版本控制。所有的文件存在VSS數(shù)據(jù)庫的項目中,開發(fā)組成員不能在VSS中的主備份文件上工作(除了檢查和版本比對等特殊情況外)而是VSS為每個成員在各自的工作目錄下提供一個拷貝以供工作。盡管在沒有工作目錄的情況下也可以查看某個文件,但如要真正在VSS管理下工作,就必須要創(chuàng)建一個工作目錄。
VSS能夠維護一個文件的多個版本,包括一個從不同版本之間進行修改的記錄。版本控制包括如下方面:
組內(nèi)協(xié)調(diào)—在一般情況下,確保在任何時刻都只有一個成員對某個特定的文件進行修改,這樣可以防止文件被其他成員的修改意外更新。當然,VSS管理員可以改變此缺省設(shè)置以允許對單個文件同時有多個Checkout,并且仍禁止對他人的修改進行覆蓋。
版本跟蹤—對老版本的源代碼和其他文件進行歸檔和跟蹤,而且這些版本能夠被重新得到以便進行bug跟蹤或其他目的。
跨平臺開發(fā)—支持同一代碼在跨多個開發(fā)平臺時的版本控制。
重用或面向?qū)ο蟠a—跟蹤哪些程序使用了哪些代碼可被重用的模塊。
版本控制的涵義在以后的章節(jié)中將會得到更進一步的論述。
我們已經(jīng)知道,VSS提供版本控制和歷史服務(wù),以保證一個文件的每個版本都是可恢復(fù)的。VSS用日期/時間戳來記錄文件是何時被Checkout或是何時被修改的,它主要有三種方法來跟蹤文件和項目的版本:
版本號:這是由VSS維護的內(nèi)部數(shù)碼,用戶對它沒有控制權(quán)。每個文件和項目的每個版本都有一個版本號,這些版本號總是一個整數(shù)且是遞增的。
標簽:這些是用戶賦給某個項目或文件的某個版本的一個字符串,可以是任何格式的長度不超過31字符的字符串。
日期/時間戳:它給出了一個文件何時最后被修改的信息,或者是一個文件何時被Checkin。VSS同時支持12小時和24小時的時間格式。
工作目錄是用戶真正對項目文件進行調(diào)試修改的地方,當用戶Checkout或提取一個文件時,VSS將該項拷貝到用戶的工作目錄下,當用戶修改了該文件并將其Checkin或提交時,VSS再將它從用戶的工作目錄拷回到VSS的數(shù)據(jù)庫中。在用戶作Checkout時,VSS將會自動管理他的工作目錄,諸如創(chuàng)建必要的子目錄。而且工作目錄可以隨時創(chuàng)建或修改。
3. VSS6.0的一些新增的特征和功能
歸檔和恢復(fù)—在VSS6.0中這兩個操作是在一個用戶界面友好的VSS管理員wizard中進行的,而在以前的版本中,它們只能通過命令行來實現(xiàn)。
移動文件—當用戶移動文件時,VSS6.0自動將該文件共享到一個新的項目中,并在原項目中將其刪除。在新項目中,該文件的屬性是共享的。
多個項目之間的差異比較—該功能允許用戶在不同的項目之間進行差異比較。
單個文件的展開—在以前的版本中,VSS只能展開一個目錄(文件夾),在VSS6.0中,同時可以展開一個文件。
快速提取—由于VSS6.0在性能上的提高,現(xiàn)在的文件提取速度比以往VSS版本的快兩倍左右。
歷史信息過濾—VSS 6.0支持查看那些沒有標簽的文件和項目的歷史。
清除臨時文件夾選項—該新功能可使用戶很方便地清除臨時文件夾。
檢查外部的超連接—在VSS的較早的版本中,只有內(nèi)部的超連接和項目內(nèi)的跳轉(zhuǎn)才得到檢查,VSS6.0允許用戶檢查項目之外的超連接和跳轉(zhuǎn)。
創(chuàng)建打開VSS數(shù)據(jù)庫的快捷鍵—用戶可以使用VSSExplorer中該新功能創(chuàng)建一個打開某個特定VSS數(shù)據(jù)庫的桌面快捷鍵。
HTML格式的幫助—VSS的以往版本使用的是WinHelp格式。
三、VSS6.0的解決方案
在對VSS6.0的工作原理,功能和新增特征有了一個較全面的了解后,我們開始進入到本節(jié),即如何運用VSS6.0來實際解決軟件開發(fā)工程中的版本管理和控制問題,怎樣有效地構(gòu)架一個系統(tǒng)的解決方案。
首先看一下我們的開發(fā)小組所處于的實際情況,最一般的情況是整個項目使用的就是微機環(huán)境,每個開發(fā)者在各自的Windows微機下利用Microsoft的VC、VB、VJ等等來開發(fā)項目中各個子項目或子模塊,通常這個小組是局域網(wǎng)的一部分或者是一個較為獨立的子網(wǎng),可能配有專門的服務(wù)器。這樣的一個開發(fā)環(huán)境對于實現(xiàn)用VSS6.0來進行版本控制和管理是非常有利而且是比較直觀的,因為VSS6.0也需要這個網(wǎng)絡(luò)環(huán)境。
其次是對于項目本身來說的,一個項目經(jīng)過分析設(shè)計后一般都會分成若干個子項目由若干個開發(fā)小組各自負責(zé)編碼調(diào)試,但軟件開發(fā)的實際情況決定了各個小組之間并不是完全獨立的,他們在很多情況下都需要協(xié)調(diào)交互和信息反饋,開發(fā)過程中的每一步都有可能會導(dǎo)致對前一階段工作的修正,因為軟件開發(fā)很大程度上是一個螺旋式的過程,更不用說小組之內(nèi)的相互交流了。在這個不斷交互改動的過程中,將可能形成的項目的階段版本、部分版本和完整版本的數(shù)量是可想而知的,而以往的通常的版本人工管理方法已是不能勝任了。而且還有一個非常重要的方面不可忽略,這對系統(tǒng)軟件的開發(fā)尤為明顯,即軟件的層次結(jié)構(gòu)。一般的做法是在通用的系統(tǒng)軟件之上為多個應(yīng)用開發(fā)相應(yīng)的應(yīng)用程序,與此相對照的項目開發(fā)組也一般分為系統(tǒng)開發(fā)組和各個應(yīng)用開發(fā)組,應(yīng)用軟件的開發(fā)和使用過程中將會反饋回?zé)o數(shù)的應(yīng)用本身和系統(tǒng)軟件的問題,如果只是針對每個應(yīng)用來單獨修改更新系統(tǒng)軟件版本,這樣就不可避免地導(dǎo)致多個系統(tǒng)版本的不一致,這樣對于真正解決系統(tǒng)所存在的問題就顯得力不從心了。而VSS6.0正適合于這種軟件的開發(fā)體系結(jié)構(gòu),可以為各個小組創(chuàng)建自己的項目,而這些項目又從屬于一個總的項目,所有的修改都將被匯總處理以形成一個統(tǒng)一的最新版本。
針對這樣最為普通的一個軟件開發(fā)環(huán)境和組織結(jié)構(gòu),運用VSS6.0進行版本控制管理的非常有效而且代價較小的解決方案是:

在一臺Windows NT服務(wù)器或者是一臺較為獨立的Windows 98/95 PC上安裝VSS6.0的服務(wù)器端軟件,創(chuàng)建一個為該整個項目存放用的數(shù)據(jù)庫,然后在該數(shù)據(jù)庫中創(chuàng)建各個項目和子項目,并由VSS管理員為小組的每個成員創(chuàng)建一個帳號及他們各自的權(quán)限;
在開發(fā)小組其他成員的PC上安裝VSS的客戶端軟件,并創(chuàng)建自己的工作目錄,這樣在軟件的開發(fā)過程中,他們只要通過該客戶端軟件登錄到VSS服務(wù)器上,Checkout當前要進行工作的項目或文件,如有修改的在工作結(jié)束時將其Checkin提交給VSS服務(wù)器進行統(tǒng)一更新。
四、VSS6.0服務(wù)器的安裝
在我們給出整個解決方案后,現(xiàn)在來看一下如何安裝VSS服務(wù)器。VSS6.0是Microsoft Visual Studio 6.0套件的成員,我們就以這個版本為例進行說明。
第一步,將Visual Studio 6.0的CD1放入CD-ROM,自動進入安裝程序,選擇第二項“Server Applicationsand Tools(Add Only)”;
第二步,然后在“Server Setups”的“ServerComponents”中選擇“Visual Source SafeServer”,按“Install”按鈕后,根據(jù)提示放入CD2;
第三步,根據(jù)InstallationWizard的提示,繼續(xù)安裝過程,選擇安裝路徑,按左上角的按鈕,系統(tǒng)繼續(xù)進行安裝,直至提示你重啟以使新安裝的程序生效,重啟計算機。
VSS6.0服務(wù)器的安裝比較簡單,它既可以安裝在WindowsNT下,也可以安裝在Windows 9x下。
五、VSS 6.0客戶端的安裝
在VSS6.0服務(wù)器安裝完畢后,就可以在VSS管理員的指導(dǎo)下安裝客戶端的軟件。由于我們是在一個Windows環(huán)境的子網(wǎng)內(nèi),每臺PC客戶機均可通過網(wǎng)上鄰居來訪問VSS服務(wù)器。在VSS管理員為用戶指明VSS客戶端軟件的安裝程序“Netsetup.exe”的位置后,用戶可以直接通過資源管理器“Explorer”在網(wǎng)上鄰居中找到該程序,并雙擊以運行它。
Netsetup.exe被啟動后進入VSS客戶端的安裝,在如下提示框中輸入用戶名和工作組名。
選擇VSS的安裝路徑后,點擊安裝圖標,進入實際安裝步驟,以后的工作將由系統(tǒng)自動完成。
當系統(tǒng)提示你,VSS已成功安裝,到此所有的安裝工作已經(jīng)完成。
六、VSS6.0服務(wù)器的配置和管理
在VSS6.0服務(wù)器安裝完畢后,就可以針對開發(fā)項目進行VSS服務(wù)器的配置和管理,這些工作均需由VSS管理員來完成。
首先,為整個項目創(chuàng)建一個VSS數(shù)據(jù)庫(在VSS服務(wù)器安裝時,系統(tǒng)已經(jīng)創(chuàng)建了一個缺省數(shù)據(jù)庫Common),啟動VisualSourceSafe 6.0 Admin(Start /Programs/Microsoft Visual Studio6.0/Microsoft Visual SourceSafe/Visual SourceSafe 6.0Admin),跳出窗口,點擊下拉菜單Tools中的CreateDatabase...菜單項,選擇新數(shù)據(jù)庫的路徑,例如創(chuàng)建MyApp數(shù)據(jù)庫,然后點擊OK按鈕,系統(tǒng)將完成創(chuàng)建工作。
第二步,為新創(chuàng)建的數(shù)據(jù)庫(例如MyApp)建立用戶,首先需要打開該數(shù)據(jù)庫,點擊下拉菜單Users/OpenSourceSafeDatabase...,然后選擇數(shù)據(jù)庫MyApp,打開它,再選擇菜單項AddUser...,輸入用戶名和口令,然后依次創(chuàng)建其他的用戶。
第三步,在該新建的數(shù)據(jù)庫中創(chuàng)建項目Project。啟動Microsoft VisualSourceSafe 6.0 (Start/Programs/Microsoft Visual Studio6.0/Microsoft Visual SourceSafe/Microsoft Visual SourceSafe6.0),點擊下拉菜單File中Open SourceSafeDatabase...,選擇一個數(shù)據(jù)庫(例如MyApp),雙擊它或按Open按鈕一打開該數(shù)據(jù)庫;一個項目Project是一組相關(guān)的文檔或者是一個文件的集合,VSS允許你以任何的層次結(jié)構(gòu)來存貯和組織你的項目。在VSS數(shù)據(jù)庫中,你可以創(chuàng)建一個或者多個項目。點擊菜單File中的命令CreateProject...,創(chuàng)建一個項目,例如MyProject,創(chuàng)建完項目MyProject后,需要向MyProject中添加文件,點擊File中AddFiles命令,將跳出對話框,選擇相應(yīng)文件或目錄,點擊Add按鈕,將它們添加到MyProject中去。
VSS服務(wù)器的配置到此基本上已經(jīng)完成了,創(chuàng)建了數(shù)據(jù)庫和項目,并為它們建立了相應(yīng)的用戶,這樣用戶在客戶端的VC等集成開發(fā)環(huán)境中就可以直接登錄到VSS服務(wù)器上,進行在VSS控制管理下的開發(fā)工作。
七、在客戶端的VC中使用Source Code Control
當VSS服務(wù)器端的安裝配置工作全部完成,并在客戶端也完成了VSS的安裝,這樣就可啟用VSS來管理控制整個開發(fā)小組的源代碼和文檔的版本管理。本節(jié)我們以應(yīng)用比較廣泛的VC++6.0為例來說明如何坐在客戶端運用VSS,以實現(xiàn)所有的開發(fā)工作均處于VSS的有效的控制管理之下。
啟動Microsoft Visual C++6.0,在VC的集成開發(fā)環(huán)境中,點擊File菜單的Open Workspace命令,與沒有安裝VSS客戶端軟件的VC有一個明顯的區(qū)別:在對話框的底部增加了一項“Opena project from source code control source control”。
點擊source control按鈕,將跳出登錄對話框,輸入你的用戶名和口令,通過Browse...按鈕選擇你要登錄的數(shù)據(jù)庫。選擇一個項目Project,在文本區(qū)輸入它在本地的工作目錄,VSS服務(wù)器將在該工作目錄下拷貝一份源代碼以供用戶開發(fā)調(diào)試和修改。其他的操作就如同在本地開發(fā)一樣,將鼠標移至VC窗口的邊框,按右鍵選上SourceControl,就會出現(xiàn)Source Control工具條,選擇SourceControl工具條中的相應(yīng)按鈕,可以完成諸如獲取某項目文件的最新版本,向VSS數(shù)據(jù)庫中添加新文件,將修改后的文件Checkin提交給VSS數(shù)據(jù)庫,查看某個項目文件的歷史信息,進行不同版本文件及不同項目之間文件的差異比對,還有共享某個項目或文件。這樣操作起來是不是很輕松呢?!
愛華網(wǎng)


