李嵩泉 劉陟升
(1 中國電子科技集團公司第五十四研究所河北石家莊 050081)
(2 沈陽水務集團大東營業分公司遼寧沈陽 110042)
版本管理與代碼走查系統設計與實現
李嵩泉1劉陟升2
(1 中國電子科技集團公司第五十四研究所河北石家莊 050081)
(2 沈陽水務集團大東營業分公司遼寧沈陽 110042)
為優化軟件項目管理,解決軟件版本管理混亂、人工代碼走查過程負責和結果難于控制的問題,研究了軟件版本管理工具和代碼走查工具,介紹了版本管理工具和代碼走查工具在軟件項目管理中應用。根據實踐中軟件項目管理的需求,提供了一種版本管理工具Subversion與代碼走查工具Reviewboard相結合的系統的實現方法,介紹了版本管理工具和代碼走查工具的安裝部署,給出了一種基于該系統的軟件開發應用流程。
版本管理 代碼走查 SVN Reviewboard
軟件開發項目一般要經過需求分析、軟件設計、軟件編碼和測試等過程。在軟件交付后發現的軟件缺陷和用戶提出的軟件改進將重新進行上述流程。不同的用戶對軟件的功能需求可能有差別,這樣一個軟件將出現若干版本給不同的用戶,而且軟件開發過程中,開發團隊共同協作,需要高效有序的存放、查找和共享文件代碼,因此版本管理的引入成為軟件團隊開發的必然選項[1,2]。軟件團隊開發合作,相互走查代碼(Code Inspection)是將軟件缺陷提前發現的良好手段,如何有效地進行人工代碼走查,管理走查結果也是團隊開發需要考慮的問題。
版本管理的作用主要有以下幾個。
①能夠滿足軟件開發基本需求:每個程序員都有備份程序的需要,引入版本管理工具,可以省去手工備份的麻煩;歷史改動不會丟失,可以快速恢復到任何一個版本;方便查看某個版本的代碼改動(例如:上次的那個bug是怎么解決的)。這些要求即便是一個人獨立開發也需要的;
②能夠滿足團隊協同開發的需要:團隊開發會有多個程序員需要改動同一個文件,需要一種工具配合開發流程能夠簡化這一問題,記錄同一個文件中所有人的更改,并盡可能的自動進行代碼合并,而且能夠提供方法查詢每行代碼的改動者,可以確定開發人員的責任;
③能夠滿足工程管理需要:能夠進行多產品多版本的發布管理,當一個軟件面向多個用戶時,會發布多個版本,這些版本又不是完全獨立的,一些BUG的修改和公共的功能,可能要應用到各個版本,而一些客戶特殊需求指在個別版本中實現,需要有效的途徑管理這些版本,如圖1所示。

圖1 軟件版本管理示意圖
版本控制能夠在代碼庫中標識各個發布版本,能夠進行不同版本間的代碼的融合,例如rel1.1.0中修復的bug能夠融入rel2.1.0。在Rel1.0.1上發現一個bug,這bug在軟件主干及Rel2.0上也有。這時可以將R1.0.1上解決的bug,合并到軟件主干上,再從軟件主干合并到Rel2.0的分支上,這樣bug在Rel2.0.1中將解決,而且隨著軟件開發的演進,BUG管理集成及持續集成都需要利用到版本的管理。
在軟件開發過程中,測試作為一個開發階段的存在,對于整個軟件的開發過程起著重要作用,規范的軟件項目引入多個測試環節,典型的有單元測試、軟件配置項測試、集成測試和系統測試。其中單元測試在實踐中一般由代碼人員自己進行,包括白盒測試和黑盒測試,白盒測試又分為靜態測試和動態測試。靜態測試不執行程序,通過人工或工具對代碼進行檢查,又稱為代碼走查[3],主要介紹人工的代碼走查方式。
人工代碼走查是指請開發團隊中的專家和同事對一個開發人員的編寫的代碼進行人工閱讀評審,對有關技術、代碼風格、可能的錯誤和是否違背標準等方面進行討論,指出代碼存在的缺陷和需要改進之處。開發人員對這些問題進行整改,直至沒有人再有異議。有時也稱為代碼走讀和代碼審查。
代碼走查相比其他測試方法,具有以下優點:①能夠定位問題而非觀察測試現象;②盡早發現軟件缺陷,開發人員修改問題代價比較小;③能找出其他測試難以發現或隔離的軟件缺陷,當然這也取決走查組成員的經驗[4,5]。
代碼走查主要包括3個步驟;
①走查代碼生成分發:開發人員將自己的代碼改動生成閱讀材料,一般標識自己改動的部分,并包含邏輯上的上下文,將代碼分發給走查組成員;
②執行走查:走查形式可以分為2種,電子方式和會議方式,電子方式中走查組成員分別審查代碼,提出問題建議,并通過電子郵件方式通知走查組組長;會議方式中走查組與開發人員在一起以開會的形式進行代碼審查,每個人的意見建議都被直接記錄;
③代碼修改:開發人員根據走查組形成的問題建議記錄,進行代碼修改。在修改完畢后,將修改后的代碼再次提交走查,由問題提出者確認問題已經解決。
目前常用的版本控制軟件主要有IBM Rational ClearCase、Telologic Synergy、Microsoft Visual SourceSafe、GNU Arch、CVS、Subversion和Git等。前3個都是商業化的軟件比較昂貴,后4個是開源的免費軟件,更適合中小團隊應用。Subversion,即SVN,是目前最為流行的版本管理軟件之一,是CVS的替代軟件,支持CVS的幾乎所有功能,支持Window和Linux多種操作系統。支持本地、SVN服務和HTTP服務等多種訪問方式,與Apache的HTTP服務能夠緊密結合。
在代碼走查方面各個公司的做法有很大差異性,有直接看代碼的,也有使用工具生成pdf格式代碼審查文件的,也有自己開發代碼走查系統的。在開源軟件領域值得一提的有Trac[6]和Reviewboard。相對與Trac,Reviewboard更專注與代碼走查,提供從走查代碼生成,到方便周全的代碼審查界面,到最后意見建議總結,而且可以與SVN和Apache的HTTP服務緊密結合。
設計提供一種基于Windows平臺的SVN與Reviewboard相結合的軟件版本管理和代碼走查系統,主要描述了系統的部署和使用流程。系統部署的一個難點是確定要使用的軟件和各個軟件的版本,因為用到眾多開源軟件的,其版本的兼容性不是很好,當確定一套軟件組成后,盡可能維護住這些軟件的版本。后面章節中給出了的軟件組成和其版本已經在實際環境下使用,其中用到的軟件都是免費軟件,在互聯網都能夠下載。
4.1 SVN系統部署
設計選擇SVN最流行的HTTP服務方式,便于后續擴展。需要使用到的軟件包括:Subversion 1.6.5、TortoiseSVN 1.6.5和Apache 2.2.14。搭建流程如下:


4.2 Reviewboard系統部署
在安裝了SVN的基礎上,再部署Reviewboard服務,可以在同一臺機器上進行,比較方便。Reviewboard的安裝依賴較多的第三方軟件,大部分是Python的,如果在連接互連網的機器上安裝可以通過easy_install工具自動下載安裝。設計實現,整理了其所依賴的第三方軟件,即便是沒有鏈接互聯網的計算機也可以進行安裝。這些軟件包括:Python 2.5、GNU patch 2.5.9、mod_Python 3.3.1、Pysvn 1.7.0、Python Imaging Library 1.1.7、PyCrypto2.3、Setup-Tools0.6c11、flup1.0.2、paramiko 1.7.6、Django1.3、Djblets0.6.7、recaptcha-client1.0.6、pytz-2009g、python-memcached 1.47、python-dateutil 1.5、Pygments1.4、django_evolution、ReviewBoard1.5.5、diffutils 2.8.7、simplejson 2.1.6和RBTools 0.3.2。
(1)在運行Reviewboard機器上,安裝Python 2.5,并將Python的目錄及腳本目錄加入到系統PATH環境變量。
(2)安裝其他依賴軟件:
①patch、mod_Python、Pysvn、PythonImagingLibrary、PyCrypto、Setup-Tools都是可執行安裝包,直接運行安裝;
②flup、paramiko、Django、Djblets、recaptcha-client、pytz、python-memcache、python-dateutil、Pygments、django_evolution、都是Python的包,使用easy_install安裝;
(3)安裝Reviewboard:easy_installReviewBoard-1. 5.5-py2.5.egg。
(4)為Reviewboard創建網站:運行rb-site install c: www eviews.my.com,在這一步通過交互式的安裝腳本界面,確定域名、數據庫類型(sqlite3)、緩存機制(memcached)、web服務(apache)、Python的接口模塊(modpython)、管理員賬戶(admin),即可安裝完畢。
(5)修改Apache的配置文件httpd.conf:
①將c:www eviews.my.comconfapache-modpython. conf中的內容添加httpd.conf;
②修改Directory c:/www/reviews.my.com/htdocs一節,訪問控制選項為Allow from all;
③添加一行“Listen 8091”允許使用8091端口訪問Reviewboard;
④添加對mod_python.so的支持:LoadModule python_module modules/mod_python.so。
(6)重新啟動Apache服務,以管理員身份(admin)登錄Reviewboard網頁(http://192.168.0.100:8091/)對Reviewboard進行進一步配置:
①從Admin鏈接進入管理的Dashboard頁面,再進入Repositories頁面,通過Add repository添加需要支持的項目版本庫(例如:上一節建立的http://192. 168.0.100/svn/myproject);
②進入Users頁面添加用戶,包括走查的提交者以及審查者,用戶名和密碼最好與SVN系統保持一致,方便記憶。
(7)客戶端安裝
在Windows系統下,需要使用Python、Setup-Tools、diff工具以及simplejson和RBTools,前三者直接運行安裝程序,后2個軟件需要通過easy_install進行安裝。如果使用Linux系統做為開發環境,一般系統自帶了Python和diff,只需要安裝其他3個軟件。
4.3 應用流程
以修改一個軟件發行版本上的bug為例,說明本系統的使用流程。當一個問題反饋到研發團隊,項目管理者指定一個開發人員解決,開發人員遵循流程如圖2所示。

圖2 軟件問題修改流程
①開發人員將發行版本對應代碼從SVN服務器(192.168.0.100)檢出到本地:svncheckouthttp://192. 168.0.100/svn/myproject/branches/r1.0.1/;
②分析問題修改對應的代碼,解決問題;
③生成代碼走查文件:在代碼跟目錄下運行post-review --server="http://192.168.0.100:8091/"--username=user1生成走查申請;
④登錄到Reviewboard系統,在Outgoing Reviews中可以看到有一個名為[Draft]的走查申請,對它進行編輯,編寫題目,描述和分支等信息,選擇走查人員Reviewers,最后選擇Publish提交申請,發送給走查組成員;
⑤走查組成員登錄Reviewboard系統,在Incoming Reviews中可以看到所有發送給自己的走查申請,選擇一個申請,選擇View Diff,可以查看申請者對代碼的改動,所有修改的地方會以高亮的方式表示,如果發現問題,點擊問題行的最左邊,可以在You comment對話框添加你的意見建議。在走查完畢通過Edit Review按鈕,可以添加對這次走查的整體意見,并通過Publish Review提交走查建議;
⑥開發者在Reviewboard系統,查看代碼走查中審查人員提出的問題和建議,并根據問題和建議修改代碼,提交第二次修改的走查;post-review--server="http://127.0.0.1:8091/"username=user1-r2(-r2是上次提交的申請號,如果忘記了可以通過網頁的URL獲得,例如http://192.168.0.100: 8091/r/2/的申請號就是2)
⑦如果走查組沒有什么異議,那么這次走查完畢,開發者可以在Reviewboard中結束(Close)走查任務;
⑧開發者將走查過的代碼提交到SVN代碼服務器;
⑨當若干bug修改完畢后,并經過后續測試工作,根據工作計劃發布一個新的版本。
進行版本管理是團隊軟件開發的必然選擇,也是持續集成的基礎,代碼走查是團隊合作的一個優勢體現。通過使用由SVN和Reviewboard軟件搭建的版本管理與代碼走查系統以及對代碼提交流程設計,能夠使開發人員代碼維護更加簡單,代碼走查更加方便,研發流程更加規范,軟件產品管理維護更加便利,提高了軟件開發發的效率。該系統已經在幾個中小規模的項目中的開始應用。
[1]戴楠,閆明星.用SVN實現軟件的版本控制[J].電腦知識與技術,2009,5(16):4289-4290.
[2]羅雅麗.版本控制在開發項目中的應用[J].電腦編程技巧與維護,2011(14):39-40.
[3]高如莎.一種軟件單元測試策略[J].無線電工程,2007,37(8): 54-57.
[4]孫衛紅.代碼走查的研究與實踐[J].計算機與網絡,2007,33 (22):41-42.
[5]李燕.軟件質量保證方法的研究及在同行評審改進項目的應用[D].北京:北京郵電大學,2011:40-53.
[6]胡爭輝.從SVN Trac開始中小團隊項目管理之路[J].程序員,2008(4):129-131.
Design and Implementation of Version Management and Code Walkthrough System
LI Song-quan1,LIU Xi-sheng2
(1 The 54th Research Institute of CETC,Shijiazhuang Hebei 050081,China)
(2 Dadong Branch,Shenyang Water Group Co.Ltd.,Shenyang Liaoning 110042,China)
In order to optimize the software project management and solve the problems such as orderless software version management,complicated artificial code walkthrough process and difficult control of results,this paper studies the software version management tool and the code walkthrough tool,introduces their application in the software project management.Based on the requirements of software project management in practice,this paper provides an implementation method of combination system of Subversion version management tool and Reviewboard code walkthrough tool,introduces the installation and deployment of version management tool and code walkthrough tool and proposes a software development and application process based on this system.
version management;code walkthrough;SVN;Reviewboard
TP391.4
A
1008-1739(2013)06-53-4
定稿日期:2014-2-26