陳 博,張旭航,曹 煒,武 霄
(1.國網上海市電力公司經濟技術研究院,上海 200001;2.上海電力學院,上海 200090)
在20世紀80~90年代,尤其是20世紀90年代軟件產業的迅猛發展,導致了軟件的版本管理新思想的產生和實現。只要參加過軟件開發的人都清楚,現在的軟件項目完全由一個人來完成是難以想象而且也是不可能的,通常是有一個研發小組來共同分析、設計、編碼和維護,并有專門的測試小組對已完成編碼調試的軟件進行全面的測試。
在軟件開發這個龐大而復雜的過程中,需要涉及到各個方面的人員,信息的交流反饋不僅僅是在研發小組的成員之間及各個研發小組之間,還存在于客戶和研發者之間。這些交流反饋信息都有可能導致對軟件的修改,可能是對某個源文件中的某個變量的定義改動,也有可能是重新設計程序模塊,甚至是整個需求分析變動。在這個工程中,由于軟件開發所固有的特征,可能會形成眾多的軟件版本,而且項目開發管理者并不能保證不出現錯誤的修改,而這樣的一個困難局面卻又非常現實地擺在面前,該如何有效地解決這些實際問題,例如:①怎樣整體管理研發項目;②如何以一種有效的機制進行協調項目開發小組的成員;③如何保留修改的軌跡,以便撤銷錯誤的改動;④如何統一匯總對研發小組各成員所作的修改;⑤如何統一管理小組成員各自承擔的子項目;⑥如何進行標識、管理及差異識辨在研發過程中形成的軟件的各個版本等。
一個非常直接的反應,就是必須引進一種版本管理機制,而且是廣義上的版本管理,它不僅需要對源代碼的版本進行管理,而且還要對整個項目進行管理。以往的那種被譽為具有良好編程風格的做法,諸如在對他人的源程序進行修改時注釋修改原因、修改人和日期,如果是多個成員同時進行了修改,那么需要進行及時的人工的差異比較和綜合,以便形成一個統一的新版本。這種做法在當前的大型軟件的開發中已經越來越沒有空間了,可以說是一種以小作坊的形式來面對軟件的社會化大生產,再也不可能行得通了[1]。
其實,版本管理的思想很早就存在于軟件開發者的頭腦之中,只是以往的認識沒有現在人們所意識到的那樣迫切。UNIX的程序開發系統較早提供了能夠進行開發小組中源代碼版本管理的工具,現在的Linux更是提供功能強大的能夠跨平臺的版本管理器,國外公司的基于Windows的版本管理器也已經有了比較成熟的產品,國內的研究單位如北京大學計算機系CASE實驗室也在致力于這方面的工作。
VSS(Visual Source Safe)是Visual Studio開發套件中的一員,也是美國微軟公司推出的一個工作組級的版本控制軟件,它與Visual C++、Visual Basic等開發工具有很強的親和度。VSS 2005是一種源代碼控制系統,它提供了完善的版本和配置管理功能,以及安全保護和跟蹤檢查功能。
VSS通過將有關項目文檔(包括文本文件、圖象文件、二進制文件、聲音文件、視屏文件)存入數據庫進行項目研發管理工作。客戶可以根據需要隨時快速有效地共享文件。文件一旦被添加進VSS,它的每次改動都會被記錄下來,客戶可以恢復文件的早期版本,項目組的其他成員也可以看到有關文檔的最新版本,并對它們進行修改,VSS也同樣會將新的改動記錄下來。你還會發現,用VSS來組織管理項目,使得項目組間的溝通與合作更簡易而且直觀。
VSS 2005版本控制軟件具有支持多種語言,支持Unicode,經常提醒你Analyze4、Internet訪問等優點。
VSS 2005解決了軟件開發小組長期所面臨的版本管理問題,將所有的項目源文件(包括各種文件類型)以特有的方式存入數據庫,有效地幫助項目開發組的負責人對項目程序進行管理。開發組的成員不能對該數據庫中的文件進行直接的修改,而是由該版本管理器將該項目的源程序或是子項目的源程序拷貝到各個成員自己的工作目錄下進行調試和修改,然后將修改后的項目文件作Check in提交給VSS,由它進行綜合更新。VSS也支持多個項目之間文件的快速高效的共享。小組的成員可能得到該項目的最新版本,對它進行修改,并保存一個新的版本。當某個成員向VSS中添加文件時,該文件將會被備份到數據庫中,以便所有的成員都能共享該文件。每個成員對所有的項目文件所作的修改都將被記錄到數據庫中,從而使得修改的恢復和撤銷,在任何時刻和任何位置都成為可能。
VSS的項目組織管理,使得開發小組的協調變得簡單容易而且很直觀,當一個和一組文件發送給另一個成員、小組、Web站點或是任何其他的地址,VSS確保他們之間的真正共享及所選的一組文件的不同版本的安全性[2]。
服務器和開發人員的客戶機分別裝有VSS的服務器和客戶端程序。Windows平臺下使用VSS開發的典型環境是基于C/S架構的,即開發小組的每個開發者在各自的Windows平臺下利用開發工具(比如VC)開發項目中的各個模塊,而配有專門的服務器集中控制開發過程中的文檔和代碼[3]。
VSS可以處理由各種開發語言、創作工具或應用程序所創建的任何文件類型。VSS可以同Visual Basic、Visual C++、Visual J++、Visual InterDev、Visual FoxPro開發環境以及視窗Microsoft Office應用程序集成在一起,提供方便易用、面向項目版本控制功能。在提倡文件再使用的今天,客戶可以同時在文件和項目級進行工作。VSS面向項目的特性,能更有效地管理工作組應用程序開發工作中的日常任務。
VSS 2005的不足是不能查看PDF文件,經過查詢資料,可以使用一個補丁文件:VS80-KB943847-X86-INTL,安裝之后便可以存儲和查看PDF文件了。
在軟件開發和需要比較兩種版本的文件或找回早期版本的文件時,源代碼的控制是非常有用的。版本控制是工作組軟件開發中的重要方面,它能防止文件意外丟失、允許反追蹤到早期版本,并能對版本進行分支、合并和管理。其重要性表現為:一是作為代碼倉庫,在軟件開發中對各個不同版本的源代碼和文檔進行有效的管理,占用空間小,方便獲得各個版本代碼和文檔;二是對源代碼進行有效協調的訪問(不同的版本控制軟件采取不同的協調策略)。
VSS能夠維護1個文件的多個版本,包括一個從不同版本之間進行修改的記錄。版本控制包括3個方面:
1)組內協調 在一般情況下,確保在任何時刻都只有1個成員對某個特定的文件進行修改,這樣可以防止文件被其他成員的修改意外更新。當然,VSS管理員可以改變此缺省設置,用以允許對單個文件同時有多個Check out,并且仍禁止對他人的修改進行覆蓋。
2)版本跟蹤 對老版本的源代碼和其他文件進行歸檔和跟蹤,而且這些版本能夠被重新得到,以便進行bug跟蹤或其他目的。
3)跨平臺開發 支持同一代碼在跨多個開發平臺時的版本控制。
4)重用或面向對象代碼 跟蹤哪些程序使用了哪些代碼可被重用的模塊。
VSS用日期/時間戳來記錄文件是何時被Check out,或是何時被修改的,采用3種方法來跟蹤文件和項目的版本。
1)版本號 客戶對它沒有控制權,版本號是由VSS維護的內部數碼,每個文件和項目的每個版本都有一個版本號,并且這些版本號總是1個整數而且是遞增的。
2)標簽 任何格式的長度不超過31個字符的字符串。這是客戶賦給某個項目或文件的某個版本的1個字符串。
3)日期/時間戳 給出了1個文件何時最后被修改的信息,或者是1個文件何時被Check in。VSS同時支持12h和24h的時間格式。
在工具欄當中可以看到Show Differences按鈕與Show History按鈕,它們也是很重要的版本控制功能。可以在一個指定文件的右鍵功能菜單當中找到對應的菜單項。
Show Differences可以查到本地文件與存在VSS數據庫當中的文件(最后1個版本)的異同點,如果沒有按照Check in與Check Out模式工作的話,一旦發現有不同的地方,可以使用Get Last Version將歷史版本重新從服務器數據庫中得到最新的版本。
而Show History可以對文件的歷次修改給出1個對應表,看到某選定文件在VSS數據庫中共有幾個版本,我們需要哪個版本,就可以選中哪個版本,然后單擊按鈕“Get”即可獲得。同時,可以使用Rollback按鈕將版本進行回滾。這樣的話,可以很方便的對版本進行管理[4]。
常見的版本管理軟件有3種,VSS、CVS、SVN的特點比較如下[5]。
1)VSS 微軟的版本控制工具,僅支持Windows操作系統,雖然簡單好用,但僅適用于團隊級開發,不能勝任企業級的開發。
2)CVS 全稱Concurrent Versions System,并行版本控制系統,是開放源代碼軟件世界的一個偉大杰作。由于CVS功能強大,跨平臺,支持開發版本控制,而且免費,所以在全球中小型軟件企業中得到了廣泛使用。CVS最大的遺憾是缺少相應的技術支持,許多問題的解決需要自已尋找資料,甚至是研究源代碼。CVS是一個典型的服務器/客戶端軟件,有UNIX版本的CVS、Linux版本的CVS和Windows版本的CVS。CVS支持遠程管理,項目組分布開發時一般都采用CVS。
3)SVN 全稱Subversion,采用了更先進的分支管理系統,它的設計目標是取代CVS,CVS縱然易用,但也有一些與生俱來的缺點,比如CVS不支持文件改名,只對文件控制版本而沒有針對目錄的管理等。之后CVS的創始人之一在其現任公司的資助下開發了SVN,用以針對CVS的一些弱點進行改進。
CVS對開源事業有貢獻,但CVS的命令行操作著實讓一些使用者頭疼。在對1個特定版本的文檔Check in的時候,需要輸入一長串的路徑名和文件名。在操作易用性上與CVS形成對比的是微軟家族的VSS。作為微軟的產品,在圖形界面化操作上自不用多言,但VSS只能適用于小團隊的開發工作。VSS是很好的入門級工具,但它的一些功能太過于“入門”,在驗證密碼、保存密碼這些基本功能上處理的不盡人意。CVS是開源的,免費的,它的理想替代者是SVN。
SVN針對CVS的問題作了改進,命令的設計更為合理,對二進制文檔和目錄數據加強了控制能力,并且吸收了VSS的lock-modify-update(release)的模式和modify-merge模式的優點,在一定程度上都支持并作了優化,沒有提高使用的復雜度。由于SVN的設計結構很好,所以很容易為它開發客戶端,還有Web模式的,可以遠程管理,支持RSS更改訂閱。
1)歸檔和恢復 在VSS 6.0中,這兩個操作是在一個客戶界面友好的VSS管理員wizard中進行的,而在以前的版本中,它們只能通過命令行來實現。
2)快速提取 VSS 6.0現在的文件提取速度比以往VSS版本的快2倍左右。
3)移動文件 當客戶移動文件時,VSS 6.0自動將該文件共享到一個新的項目中,并在原項目中將其刪除。在新項目中,該文件的屬性是共享的。
4)歷史信息過濾 VSS 6.0支持查看那些沒有標簽的文件和項目的歷史。
5)單個文件的展開 在以前的版本中,VSS只能展開一個目錄(文件夾),在VSS 6.0中,同時可以展開一個文件。
6)多個項目之間的差異比較 VSS 6.0允許不同的項目之間進行差異比較。
7)檢查外部的超連接 VSS 6.0允許客戶檢查項目之外的超連接和跳轉。在VSS較早的版本中,只有內部的超連接和項目內的跳轉才得到檢查。
8)清除臨時文件夾選項 該新功能可使客戶很方便地清除臨時文件夾。
9)創建打開VSS數據庫的快捷鍵 客戶可以使用VSS Explorer中該功能創建1個打開某個特定VSS數據庫的桌面快捷鍵。
10)HTML格式的幫助 VSS以往版本使用的是Win Help格式[2]。
VSS 6.0相比VSS 2005,只有打開配置庫的功能,沒有新建配置庫的功能。VSS傳統模式:Lock-Modify-Unlock Model。即1個人Check out某文件后,其他人不允許同時Check out該文件,只能進行串行開發。
VSS 2005較VSS 6.0增加一種工作模式:Copy-Modify-Merge Model,即允許多人同時Check out同一文件,支持并行開發,Check in時做合并工作。之所以說此選擇非常關鍵,是因為一旦做出選擇,創建好數據庫后,就不能再改變數據庫的工作模式了。數據庫存放路徑,所選擇路徑的目錄在以后必須共享給需要訪問此配置庫的客戶。一般在此之前,需要對服務器的空間做一個規劃,避免數據庫建立后,磁盤空間不夠影響使用。
VSS作為一種存儲工具,在電力項目規劃前期評審中的應用中起到重要作用。上海市電力公司經研院規評中心每年有評審項目,從項目資料到評審過程,從評審意見到項目批復,還有數不清的規程和規范等,查找這些資料更是困難重重,使用VSS 2005建立的一套數據系統,規范了評審過程和資料查閱等。
按照電力規劃前期評審中項目資料類型,評審資料通過VSS 2005平臺分成了審前資料、審后資料、會議資料、評審意見資料、前期文件資料等五類資料。其中,審前資料包括審前技術報告、審前計經報告等;審后資料包括審后技術報告、審后計經報告;會議資料包括會議通知、簽到單等;評審意見資料包括評審前意見、評審后意見等;前期文件資料包括評審前的設計公司資料等。
在建立以VSS 2005為平臺的資料存儲系統中,首先通過時間為順序,建立了×年的項目前期評審數據庫,可以清晰的看出×年×月×日的所有項目,打開某個項目可以看到所有有關此項目的資料(包括會議資料、評審意見、前期文件、審前資料、審后資料等),快速提取所需資料內容,高速高效。其次,VSS 2005系統對項目進行詳細的分類,比如項目性質(基建、技改)、項目實施單位(市南、市北等)、項目內容(初設、可研)。在每個項目的技術報告標題中都做了標注和分類,利于對各個類型的文件進行統一查找。
VSS不僅能方便存儲、方便快速提取,而且具有可靠性、保密性,大大提高了在電力規劃前期評審中資料存儲查詢的效率。用VSS來組織管理電力規劃前期評審中項目,使得項目組內的溝通與合作更簡易和直觀。
VSS 2005作為一種源代碼控制系統,提供了完善的版本和配置管理功能,以及安全保護和跟蹤檢查功能。用VSS來組織管理項目,使得項目組內的溝通與合作更簡易、更直觀。在版本控制管理中除了使用VSS,還可以使用CVS以及SVN版本控制系統。如果有服務器Linux系統,則CVS,SVN都可以選擇。如果.net用平臺開發,VSS無疑是首選,并且操作簡單易于掌握。VSS 2005在電力規劃前期評審中起到重要作用,可以安全方便存儲,快速高效提取。
[1]熊剛強.基于VSS的VFP項目的版本控制解決方案[J].廣西民族學院學報(自然科學版),2006,12(2):87-90.
[2]周詠梅,楊新平.版本管理及Visual Source Safe 6.0的使用[J].華南金融電腦維護與管理,2003,(1):64-67.
[3]葉文勝.淺述VSS服務器的安裝和配置[J].現代商貿工業,2007,19(8):187-188.
[4]龔劍明.基于VSS管理的ASP.net在電子政務中的開發[J].計算機與數字工程,2005,33(12):102-103.
[5]張光建.VSS軟件開發中的版本控制[J].電腦學習,2011,(1):44-45.