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