隋 新
河南科技大學 河南洛陽 471003
高校普遍認為,軟件工程學是研究將計算機科學理論和技術(shù)以及工程管理原則和方法進行綜合,在用戶需求、生產(chǎn)預算和開發(fā)進度約束下進行軟件產(chǎn)品開發(fā)、部署和維護工程的一個學科。由此可以看出,軟件工程學對綜合性和實踐性要求很高。但是,筆者通過對相關(guān)教學改革論文研究分析后發(fā)現(xiàn),現(xiàn)有高校中軟件工程課程由于指導思想僵化落后、認識不足、經(jīng)驗缺乏等原因,仍存在如下一些問題:(1)重理論而輕實踐,軟件工程方面的教材著重介紹多種軟件開發(fā)模式、管理技術(shù)等抽象過程,學生無法真正領會理解。所授理論與實際應用的脫節(jié)則進一步影響了學生對軟件工程的掌握。(2)重個人開發(fā)而輕團隊協(xié)作。高校學生軟件開發(fā)能力參差不齊,在進行團隊分組時往往由少數(shù)能力較強的學生擔任項目負責人,容易形成該學生對項目全權(quán)負責而其他學生袖手旁觀、放棄參與的情況,團隊設置形同虛設。(3)團隊協(xié)作層次不夠深入,團隊成員之間的溝通僅僅停留在口頭交流過程中,對于軟件設計、開發(fā)維護等方面的意見無法滲入到軟件研發(fā)的實際過程中。
上述問題的出現(xiàn),導致團隊協(xié)作機制的欠缺,開發(fā)進度緩慢,版本更迭錯誤,成員開發(fā)沖突等問題不斷涌現(xiàn),甚至逐漸惡化成為影響項目進展的主要矛盾,軟件質(zhì)量與課程實踐的效果均大打折扣。解決上述問題行之有效的辦法是引入版本控制、團隊協(xié)作等相關(guān)技術(shù)。
版本控制(Revision Control)是一種在軟件工程中使用的軟件文檔、源代碼同步控制技術(shù),用于多人同時參與開發(fā)的過程,確保不同成員的開發(fā)能夠協(xié)調(diào)統(tǒng)一。在國外,已經(jīng)有多所大學嘗試將版本控制技術(shù)引入軟件工程教學中,例如:加拿大Ontario大學計算機科學系的Karen L.Reid等人利用版本控制管理學生作業(yè),美國Montana大學計算機科學與技術(shù)系的Louis Glassy在教學中應用版本控制工具后發(fā)現(xiàn)該工具可以有效地控制學生作業(yè)的進度,印度Rose-Hulman技術(shù)學院計算機科學與軟件工程系的Curtis Clifton等人使用版本控制工具改善課程管理,等等。
在實際使用中,版本控制工具會按照遞增順序自動給提交至版本倉庫中的軟件代碼修訂編號(如最初加入的版本號指定為1),軟件開發(fā)人員可以將當前工作目錄回溯到版本倉庫中的任何一個狀態(tài)。為達到存儲效率和空間利用率的平衡,版本控制軟件大部分采用里程碑節(jié)點結(jié)合差分編碼方式進行存儲,即只將版本倉庫中的某幾個大版本記錄完整版本,作為里程碑節(jié)點,而同時記錄每個版本存儲文件與前一版本之間的差異部分,以更方便地對比不同版本之間的差異。
現(xiàn)在常用的版本控制軟件按照版本倉庫存儲方式的不同可以劃分為集中式和分布式兩種:集中式版本控制系統(tǒng)由中央服務器控制版本庫維護與控制,每個成員只在本地目錄中保存一個工作副本,需要升級、查看或獲取其他版本的數(shù)據(jù)時需同中央服務器通訊。集中式版本控制系統(tǒng)的代表是CVS(Concurrent Version System)和SVN(Subversion)。分布式版本控制系統(tǒng)沒有中央倉庫,每個成員都在本地維護自己的版本庫,向版本庫中提交代碼時無需連接遠程服務器,團隊成員之間通過推送或拉取動作使版本庫的數(shù)據(jù)同步。分布式版本控制系統(tǒng)的代表是Mercurial和Git。
集中式版本控制系統(tǒng)因具有客戶端軟件支持度高、學習曲線平滑、授權(quán)控制方便等優(yōu)點,尤其適合于高校環(huán)境下的小團隊使用。筆者首先簡要介紹SVN的技術(shù)特點,以便進一步探索高校環(huán)境下利用該技術(shù)的軟件開發(fā)團隊協(xié)作模式。
SVN是一款可以從互聯(lián)網(wǎng)上免費下載的開源軟件。SVN項目由Open Source Development with CVS的作者Karl Gogel開發(fā),他與Jim Blandy改進了CVS的工作模式使其功能更為強大。
SVN借鑒了數(shù)據(jù)庫事務管理的概念管理用戶向版本倉庫提交代碼的過程—即代碼提交過程要么完整提交,要么失敗并回滾,整個過程為原子式提交—保證了每個成員查看項目倉庫時總是看到相同且完整的代碼版本。Subversion采用C/S分層結(jié)構(gòu)設計,可以使用SvnServer+Apache的方式實現(xiàn)基于路徑的安全網(wǎng)絡訪問,用戶借助SVN方便靈活的授權(quán)方式能夠在廣域網(wǎng)上有效管理對軟件倉庫的訪問與更改。
隨著S V N 技術(shù)的不斷推廣與深入應用,支持該技術(shù)的第三方工具愈發(fā)成熟完備。例如:TortoiseSVN是SVN在Windows系統(tǒng)下最常用的開源客戶端,功能強大、界面友好且隨SVN同步更新。各IDE環(huán)境中都有成熟的SVN插件,如Eclipse中的Subeclipse和Visual Studio中的AnkhSVN等都實現(xiàn)了與IDE的無縫結(jié)合,提供了許多基于IDE環(huán)境的新功能,使程序員能夠在開發(fā)中更便利地使用SVN技術(shù)進行團隊溝通與版本控制。
圖1給出了適用于高校團隊SVN的交互模式圖。以由3個成員組成的團隊為例,首先由管理員(成員1)負責建立中央版本倉庫(Repository)存儲開發(fā)技術(shù)文檔與軟件代碼,在接下來的開發(fā)過程中則由組內(nèi)3個成員通過互聯(lián)網(wǎng)或局域網(wǎng)訪問軟件倉庫,并借助“檢出”(Checkout)、“更新”(Update)、“提交”(Commit)等操作實現(xiàn)組內(nèi)各成員之間軟件開發(fā)進度的協(xié)調(diào)與統(tǒng)一。
圖1 高校團隊基于SVN的交互模式
2.2.1 版本倉庫的建立與工程項目導入
以Windows環(huán)境為例,管理員可以使用SVN自帶的命令行工具建立軟件倉庫,并向該倉庫中導入名為SvnTest軟件項目的初始版本,建立和導入的代碼如下:
svnadmin create d:svnreposSvnTest
svn import c:SvnTest f ile:///d:/svnrepos/SvnTest
上述命令會首先在d:svnreposSvnTest位置“建立”(Create)名為SvnTest的軟件庫,接下來會將位于c:SvnTest的軟件項目初始“導入”(Import)該軟件庫中。這里file:///d:/svnrepos/SvnTest為版本庫的本地URL路徑,如使用網(wǎng)絡訪問方式則類似http://hostname/path形式。初始導入后版本倉庫中的代碼處于初始版本狀態(tài),版本號為1。
2.2.2 初始檢出
在建立并導入程序初始版本后,小組內(nèi)各成員(包括導入了初始版本的管理員)需要在本地目錄進行代碼的初始“檢出”,此時將生成軟件在本地的工作副本(Working Copy),每位成員都將在本地工作副本進行代碼開發(fā)、修改等工作。初始檢出操作的命令行操作為:
svn checkout file:///d:/svnrepos/SvnTest d:my ProjectsSvnDemo
上述命令行會將版本庫中SvnTest工程導入到本地的d:my ProjectsSvnDemo中,生成相應的工作副本。
2.2.3 軟件修改的提交與更新
當小組成員檢出代碼并獨立對工程文件進行了增加、刪除和修改之后,需要將本地代碼的變化“提交”至中央軟件倉庫,所執(zhí)行的提交命令為:
svn commit d:my ProjectsSvnDemo
在未發(fā)生沖突的情況下,該命令將SvnDemo中本地工作副本的變化提交至軟件倉庫。其他成員在使用更新后的文件時注意到這一變化并自動更改其本地工作副本,進而確保不同成員工作副本的一致性:
svn update e:my programsSvnTest
上述兩個命令中特意使用了不同的路徑(d:my ProjectsSvnDemo與e:my programsSvnTest)以顯示不同成員在保存本地工作副本時路徑的不同。
2.2.4 沖突的發(fā)現(xiàn)與解決
當不同小組成員對同一文件的同一部分代碼進行了不同修改時,成員在提交代碼時會出現(xiàn)本地文件副本與代碼庫不一致的情況,即出現(xiàn)了“代碼沖突”(Conflict):假定成員2先提交了對某段代碼的更改,軟件倉庫中的代碼與成員2的工作副本一致;但當成員3要求提交同一部分代碼時,SVN會告知成員3因檢測到?jīng)_突而無法提交,此時則需要這兩名成員在線下進行協(xié)商,最終以某一成員的代碼為準修正軟件倉庫。
在實際工作中,SVN組織建議每位小組成員在進行日常開發(fā)時盡量遵循“更新—修改—沖突與解決—提交”的循環(huán)工作流程,以便能夠盡早發(fā)現(xiàn)成員之間的沖突,并保證各成員本地工作副本與軟件倉庫的協(xié)調(diào)統(tǒng)一。另外,SVN中除上述操作外還包括了權(quán)限分配、“比較”(Diff)、“回滾”(Revert)、“分支”(Branch)、“合并”(Merge)等操作,限于篇幅所限這里不再贅述。
本文從軟件工程的課程實踐出發(fā),要求學生自行分組完成大學本科生課程管理系統(tǒng)的開發(fā)。在給出了該軟件的項目初始需求后,要求各組學生按照組內(nèi)成員的特長分工,獨立完成對項目的詳細需求分析、整體軟件架構(gòu)設計、用戶交互界面設計、功能模塊細分及開發(fā)等各個階段的工作,并將技術(shù)文檔管理、軟件Bug追蹤等要求貫徹開發(fā)的全部過程。在開始項目之前,專門設置兩個學時向?qū)W生講授版本控制及SVN技術(shù),并要求各組學生必須以其在學院公共服務器上建立的版本倉庫為基礎才能進行軟件開發(fā)。這樣,在課程實踐結(jié)束后,授課教師除檢查所提交軟件代碼和技術(shù)文檔外,能夠追溯軟件倉庫中的版本迭代、日志記錄等情況,作為評定學生課程作業(yè)優(yōu)劣的重要標準。
經(jīng)過一個學期的實驗發(fā)現(xiàn),使用SVN技術(shù)后,學生在項目調(diào)研、成員分工合作方面有了較大的提升,軟件開發(fā)進度與質(zhì)量都得到了很好的保障:因使用版本跟蹤、時間戳比對等辦法可以追溯軟件開發(fā)的全過程及各成員的分工情況,能夠更為深入和全面地了解各組的實際開發(fā)過程,及早發(fā)現(xiàn)學生在編寫、協(xié)作方面遇到的問題,甚至能夠避免學生間代碼抄襲等現(xiàn)象。
筆者將版本控制與團隊協(xié)作技術(shù)引入軟件工程課程實踐環(huán)節(jié)中,初步探討了結(jié)合SVN技術(shù)的高校團隊協(xié)作模式,并用課程實踐驗證了該模式的有效性,計劃在今后的教學中進一步研究使用該技術(shù)的協(xié)作模式與評價方法。需要指出的是,軟件開發(fā)是當今技術(shù)發(fā)展最快速的領域之一,新技術(shù)、新模式不斷涌現(xiàn),高校教師有責任緊跟形勢,將當前最成熟、有效的技術(shù)傳授給學生,使其能夠快速達到社會對于軟件開發(fā)人員的需求,為我國軟件業(yè)的發(fā)展貢獻一份力量。
[1]易文龍,華晶,何火嬌.SVN版本控制在軟件工程專業(yè)實訓的應用[J].農(nóng)業(yè)網(wǎng)絡信息,2010(9):39-41.
[2]楊健,陳春玲,宗平.版本控制工具軟件Subversion在課程設計中的應用[J].計算機教育,2008(4):117-121.
[3]李志杰.版本控制技術(shù)在團隊協(xié)同開發(fā)中的應用研究[J].現(xiàn)代商貿(mào)工業(yè),2012(14):168-169.
[4]佟巍.版本控制系統(tǒng)在軟件項目管理上的應用[J].信息系統(tǒng)工程,2012(11):54-55.
[5]宋坤,周智海,史靜濤.軟件質(zhì)量控制方法研究[J].海洋技術(shù),2012(1):119-122.