李嵩泉 劉陟升
(1 中國(guó)電子科技集團(tuán)公司第五十四研究所河北石家莊 050081)
(2 沈陽(yáng)水務(wù)集團(tuán)大東營(yíng)業(yè)分公司遼寧沈陽(yáng) 110042)
版本管理與代碼走查系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
李嵩泉1劉陟升2
(1 中國(guó)電子科技集團(tuán)公司第五十四研究所河北石家莊 050081)
(2 沈陽(yáng)水務(wù)集團(tuán)大東營(yíng)業(yè)分公司遼寧沈陽(yáng) 110042)
為優(yōu)化軟件項(xiàng)目管理,解決軟件版本管理混亂、人工代碼走查過(guò)程負(fù)責(zé)和結(jié)果難于控制的問(wèn)題,研究了軟件版本管理工具和代碼走查工具,介紹了版本管理工具和代碼走查工具在軟件項(xiàng)目管理中應(yīng)用。根據(jù)實(shí)踐中軟件項(xiàng)目管理的需求,提供了一種版本管理工具Subversion與代碼走查工具Reviewboard相結(jié)合的系統(tǒng)的實(shí)現(xiàn)方法,介紹了版本管理工具和代碼走查工具的安裝部署,給出了一種基于該系統(tǒng)的軟件開(kāi)發(fā)應(yīng)用流程。
版本管理 代碼走查 SVN Reviewboard
軟件開(kāi)發(fā)項(xiàng)目一般要經(jīng)過(guò)需求分析、軟件設(shè)計(jì)、軟件編碼和測(cè)試等過(guò)程。在軟件交付后發(fā)現(xiàn)的軟件缺陷和用戶(hù)提出的軟件改進(jìn)將重新進(jìn)行上述流程。不同的用戶(hù)對(duì)軟件的功能需求可能有差別,這樣一個(gè)軟件將出現(xiàn)若干版本給不同的用戶(hù),而且軟件開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)團(tuán)隊(duì)共同協(xié)作,需要高效有序的存放、查找和共享文件代碼,因此版本管理的引入成為軟件團(tuán)隊(duì)開(kāi)發(fā)的必然選項(xiàng)[1,2]。軟件團(tuán)隊(duì)開(kāi)發(fā)合作,相互走查代碼(Code Inspection)是將軟件缺陷提前發(fā)現(xiàn)的良好手段,如何有效地進(jìn)行人工代碼走查,管理走查結(jié)果也是團(tuán)隊(duì)開(kāi)發(fā)需要考慮的問(wèn)題。
版本管理的作用主要有以下幾個(gè)。
①能夠滿(mǎn)足軟件開(kāi)發(fā)基本需求:每個(gè)程序員都有備份程序的需要,引入版本管理工具,可以省去手工備份的麻煩;歷史改動(dòng)不會(huì)丟失,可以快速恢復(fù)到任何一個(gè)版本;方便查看某個(gè)版本的代碼改動(dòng)(例如:上次的那個(gè)bug是怎么解決的)。這些要求即便是一個(gè)人獨(dú)立開(kāi)發(fā)也需要的;
②能夠滿(mǎn)足團(tuán)隊(duì)協(xié)同開(kāi)發(fā)的需要:團(tuán)隊(duì)開(kāi)發(fā)會(huì)有多個(gè)程序員需要改動(dòng)同一個(gè)文件,需要一種工具配合開(kāi)發(fā)流程能夠簡(jiǎn)化這一問(wèn)題,記錄同一個(gè)文件中所有人的更改,并盡可能的自動(dòng)進(jìn)行代碼合并,而且能夠提供方法查詢(xún)每行代碼的改動(dòng)者,可以確定開(kāi)發(fā)人員的責(zé)任;
③能夠滿(mǎn)足工程管理需要:能夠進(jìn)行多產(chǎn)品多版本的發(fā)布管理,當(dāng)一個(gè)軟件面向多個(gè)用戶(hù)時(shí),會(huì)發(fā)布多個(gè)版本,這些版本又不是完全獨(dú)立的,一些BUG的修改和公共的功能,可能要應(yīng)用到各個(gè)版本,而一些客戶(hù)特殊需求指在個(gè)別版本中實(shí)現(xiàn),需要有效的途徑管理這些版本,如圖1所示。
圖1 軟件版本管理示意圖
版本控制能夠在代碼庫(kù)中標(biāo)識(shí)各個(gè)發(fā)布版本,能夠進(jìn)行不同版本間的代碼的融合,例如rel1.1.0中修復(fù)的bug能夠融入rel2.1.0。在Rel1.0.1上發(fā)現(xiàn)一個(gè)bug,這bug在軟件主干及Rel2.0上也有。這時(shí)可以將R1.0.1上解決的bug,合并到軟件主干上,再?gòu)能浖鞲珊喜⒌絉el2.0的分支上,這樣bug在Rel2.0.1中將解決,而且隨著軟件開(kāi)發(fā)的演進(jìn),BUG管理集成及持續(xù)集成都需要利用到版本的管理。
在軟件開(kāi)發(fā)過(guò)程中,測(cè)試作為一個(gè)開(kāi)發(fā)階段的存在,對(duì)于整個(gè)軟件的開(kāi)發(fā)過(guò)程起著重要作用,規(guī)范的軟件項(xiàng)目引入多個(gè)測(cè)試環(huán)節(jié),典型的有單元測(cè)試、軟件配置項(xiàng)測(cè)試、集成測(cè)試和系統(tǒng)測(cè)試。其中單元測(cè)試在實(shí)踐中一般由代碼人員自己進(jìn)行,包括白盒測(cè)試和黑盒測(cè)試,白盒測(cè)試又分為靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試。靜態(tài)測(cè)試不執(zhí)行程序,通過(guò)人工或工具對(duì)代碼進(jìn)行檢查,又稱(chēng)為代碼走查[3],主要介紹人工的代碼走查方式。
人工代碼走查是指請(qǐng)開(kāi)發(fā)團(tuán)隊(duì)中的專(zhuān)家和同事對(duì)一個(gè)開(kāi)發(fā)人員的編寫(xiě)的代碼進(jìn)行人工閱讀評(píng)審,對(duì)有關(guān)技術(shù)、代碼風(fēng)格、可能的錯(cuò)誤和是否違背標(biāo)準(zhǔn)等方面進(jìn)行討論,指出代碼存在的缺陷和需要改進(jìn)之處。開(kāi)發(fā)人員對(duì)這些問(wèn)題進(jìn)行整改,直至沒(méi)有人再有異議。有時(shí)也稱(chēng)為代碼走讀和代碼審查。
代碼走查相比其他測(cè)試方法,具有以下優(yōu)點(diǎn):①能夠定位問(wèn)題而非觀察測(cè)試現(xiàn)象;②盡早發(fā)現(xiàn)軟件缺陷,開(kāi)發(fā)人員修改問(wèn)題代價(jià)比較小;③能找出其他測(cè)試難以發(fā)現(xiàn)或隔離的軟件缺陷,當(dāng)然這也取決走查組成員的經(jīng)驗(yàn)[4,5]。
代碼走查主要包括3個(gè)步驟;
①走查代碼生成分發(fā):開(kāi)發(fā)人員將自己的代碼改動(dòng)生成閱讀材料,一般標(biāo)識(shí)自己改動(dòng)的部分,并包含邏輯上的上下文,將代碼分發(fā)給走查組成員;
②執(zhí)行走查:走查形式可以分為2種,電子方式和會(huì)議方式,電子方式中走查組成員分別審查代碼,提出問(wèn)題建議,并通過(guò)電子郵件方式通知走查組組長(zhǎng);會(huì)議方式中走查組與開(kāi)發(fā)人員在一起以開(kāi)會(huì)的形式進(jìn)行代碼審查,每個(gè)人的意見(jiàn)建議都被直接記錄;
③代碼修改:開(kāi)發(fā)人員根據(jù)走查組形成的問(wèn)題建議記錄,進(jìn)行代碼修改。在修改完畢后,將修改后的代碼再次提交走查,由問(wèn)題提出者確認(rèn)問(wèn)題已經(jīng)解決。
目前常用的版本控制軟件主要有IBM Rational ClearCase、Telologic Synergy、Microsoft Visual SourceSafe、GNU Arch、CVS、Subversion和Git等。前3個(gè)都是商業(yè)化的軟件比較昂貴,后4個(gè)是開(kāi)源的免費(fèi)軟件,更適合中小團(tuán)隊(duì)?wèi)?yīng)用。Subversion,即SVN,是目前最為流行的版本管理軟件之一,是CVS的替代軟件,支持CVS的幾乎所有功能,支持Window和Linux多種操作系統(tǒng)。支持本地、SVN服務(wù)和HTTP服務(wù)等多種訪(fǎng)問(wèn)方式,與Apache的HTTP服務(wù)能夠緊密結(jié)合。
在代碼走查方面各個(gè)公司的做法有很大差異性,有直接看代碼的,也有使用工具生成pdf格式代碼審查文件的,也有自己開(kāi)發(fā)代碼走查系統(tǒng)的。在開(kāi)源軟件領(lǐng)域值得一提的有Trac[6]和Reviewboard。相對(duì)與Trac,Reviewboard更專(zhuān)注與代碼走查,提供從走查代碼生成,到方便周全的代碼審查界面,到最后意見(jiàn)建議總結(jié),而且可以與SVN和Apache的HTTP服務(wù)緊密結(jié)合。
設(shè)計(jì)提供一種基于Windows平臺(tái)的SVN與Reviewboard相結(jié)合的軟件版本管理和代碼走查系統(tǒng),主要描述了系統(tǒng)的部署和使用流程。系統(tǒng)部署的一個(gè)難點(diǎn)是確定要使用的軟件和各個(gè)軟件的版本,因?yàn)橛玫奖姸嚅_(kāi)源軟件的,其版本的兼容性不是很好,當(dāng)確定一套軟件組成后,盡可能維護(hù)住這些軟件的版本。后面章節(jié)中給出了的軟件組成和其版本已經(jīng)在實(shí)際環(huán)境下使用,其中用到的軟件都是免費(fèi)軟件,在互聯(lián)網(wǎng)都能夠下載。
4.1 SVN系統(tǒng)部署
設(shè)計(jì)選擇SVN最流行的HTTP服務(wù)方式,便于后續(xù)擴(kuò)展。需要使用到的軟件包括:Subversion 1.6.5、TortoiseSVN 1.6.5和Apache 2.2.14。搭建流程如下:
4.2 Reviewboard系統(tǒng)部署
在安裝了SVN的基礎(chǔ)上,再部署Reviewboard服務(wù),可以在同一臺(tái)機(jī)器上進(jìn)行,比較方便。Reviewboard的安裝依賴(lài)較多的第三方軟件,大部分是Python的,如果在連接互連網(wǎng)的機(jī)器上安裝可以通過(guò)easy_install工具自動(dòng)下載安裝。設(shè)計(jì)實(shí)現(xiàn),整理了其所依賴(lài)的第三方軟件,即便是沒(méi)有鏈接互聯(lián)網(wǎng)的計(jì)算機(jī)也可以進(jìn)行安裝。這些軟件包括: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)在運(yùn)行Reviewboard機(jī)器上,安裝Python 2.5,并將Python的目錄及腳本目錄加入到系統(tǒng)PATH環(huán)境變量。
(2)安裝其他依賴(lài)軟件:
①patch、mod_Python、Pysvn、PythonImagingLibrary、PyCrypto、Setup-Tools都是可執(zhí)行安裝包,直接運(yùn)行安裝;
②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創(chuàng)建網(wǎng)站:運(yùn)行rb-site install c: www eviews.my.com,在這一步通過(guò)交互式的安裝腳本界面,確定域名、數(shù)據(jù)庫(kù)類(lèi)型(sqlite3)、緩存機(jī)制(memcached)、web服務(wù)(apache)、Python的接口模塊(modpython)、管理員賬戶(hù)(admin),即可安裝完畢。
(5)修改Apache的配置文件httpd.conf:
①將c:www eviews.my.comconfapache-modpython. conf中的內(nèi)容添加httpd.conf;
②修改Directory c:/www/reviews.my.com/htdocs一節(jié),訪(fǎng)問(wèn)控制選項(xiàng)為Allow from all;
③添加一行“Listen 8091”允許使用8091端口訪(fǎng)問(wèn)Reviewboard;
④添加對(duì)mod_python.so的支持:LoadModule python_module modules/mod_python.so。
(6)重新啟動(dòng)Apache服務(wù),以管理員身份(admin)登錄Reviewboard網(wǎng)頁(yè)(http://192.168.0.100:8091/)對(duì)Reviewboard進(jìn)行進(jìn)一步配置:
①?gòu)腁dmin鏈接進(jìn)入管理的Dashboard頁(yè)面,再進(jìn)入Repositories頁(yè)面,通過(guò)Add repository添加需要支持的項(xiàng)目版本庫(kù)(例如:上一節(jié)建立的http://192. 168.0.100/svn/myproject);
②進(jìn)入U(xiǎn)sers頁(yè)面添加用戶(hù),包括走查的提交者以及審查者,用戶(hù)名和密碼最好與SVN系統(tǒng)保持一致,方便記憶。
(7)客戶(hù)端安裝
在Windows系統(tǒng)下,需要使用Python、Setup-Tools、diff工具以及simplejson和RBTools,前三者直接運(yùn)行安裝程序,后2個(gè)軟件需要通過(guò)easy_install進(jìn)行安裝。如果使用Linux系統(tǒng)做為開(kāi)發(fā)環(huán)境,一般系統(tǒng)自帶了Python和diff,只需要安裝其他3個(gè)軟件。
4.3 應(yīng)用流程
以修改一個(gè)軟件發(fā)行版本上的bug為例,說(shuō)明本系統(tǒng)的使用流程。當(dāng)一個(gè)問(wèn)題反饋到研發(fā)團(tuán)隊(duì),項(xiàng)目管理者指定一個(gè)開(kāi)發(fā)人員解決,開(kāi)發(fā)人員遵循流程如圖2所示。
圖2 軟件問(wèn)題修改流程
①開(kāi)發(fā)人員將發(fā)行版本對(duì)應(yīng)代碼從SVN服務(wù)器(192.168.0.100)檢出到本地:svncheckouthttp://192. 168.0.100/svn/myproject/branches/r1.0.1/;
②分析問(wèn)題修改對(duì)應(yīng)的代碼,解決問(wèn)題;
③生成代碼走查文件:在代碼跟目錄下運(yùn)行post-review --server="http://192.168.0.100:8091/"--username=user1生成走查申請(qǐng);
④登錄到Reviewboard系統(tǒng),在Outgoing Reviews中可以看到有一個(gè)名為[Draft]的走查申請(qǐng),對(duì)它進(jìn)行編輯,編寫(xiě)題目,描述和分支等信息,選擇走查人員Reviewers,最后選擇Publish提交申請(qǐng),發(fā)送給走查組成員;
⑤走查組成員登錄Reviewboard系統(tǒng),在Incoming Reviews中可以看到所有發(fā)送給自己的走查申請(qǐng),選擇一個(gè)申請(qǐng),選擇View Diff,可以查看申請(qǐng)者對(duì)代碼的改動(dòng),所有修改的地方會(huì)以高亮的方式表示,如果發(fā)現(xiàn)問(wèn)題,點(diǎn)擊問(wèn)題行的最左邊,可以在You comment對(duì)話(huà)框添加你的意見(jiàn)建議。在走查完畢通過(guò)Edit Review按鈕,可以添加對(duì)這次走查的整體意見(jiàn),并通過(guò)Publish Review提交走查建議;
⑥開(kāi)發(fā)者在Reviewboard系統(tǒng),查看代碼走查中審查人員提出的問(wèn)題和建議,并根據(jù)問(wèn)題和建議修改代碼,提交第二次修改的走查;post-review--server="http://127.0.0.1:8091/"username=user1-r2(-r2是上次提交的申請(qǐng)?zhí)?,如果忘記了可以通過(guò)網(wǎng)頁(yè)的URL獲得,例如http://192.168.0.100: 8091/r/2/的申請(qǐng)?zhí)柧褪?)
⑦如果走查組沒(méi)有什么異議,那么這次走查完畢,開(kāi)發(fā)者可以在Reviewboard中結(jié)束(Close)走查任務(wù);
⑧開(kāi)發(fā)者將走查過(guò)的代碼提交到SVN代碼服務(wù)器;
⑨當(dāng)若干bug修改完畢后,并經(jīng)過(guò)后續(xù)測(cè)試工作,根據(jù)工作計(jì)劃發(fā)布一個(gè)新的版本。
進(jìn)行版本管理是團(tuán)隊(duì)軟件開(kāi)發(fā)的必然選擇,也是持續(xù)集成的基礎(chǔ),代碼走查是團(tuán)隊(duì)合作的一個(gè)優(yōu)勢(shì)體現(xiàn)。通過(guò)使用由SVN和Reviewboard軟件搭建的版本管理與代碼走查系統(tǒng)以及對(duì)代碼提交流程設(shè)計(jì),能夠使開(kāi)發(fā)人員代碼維護(hù)更加簡(jiǎn)單,代碼走查更加方便,研發(fā)流程更加規(guī)范,軟件產(chǎn)品管理維護(hù)更加便利,提高了軟件開(kāi)發(fā)發(fā)的效率。該系統(tǒng)已經(jīng)在幾個(gè)中小規(guī)模的項(xiàng)目中的開(kāi)始應(yīng)用。
[1]戴楠,閆明星.用SVN實(shí)現(xiàn)軟件的版本控制[J].電腦知識(shí)與技術(shù),2009,5(16):4289-4290.
[2]羅雅麗.版本控制在開(kāi)發(fā)項(xiàng)目中的應(yīng)用[J].電腦編程技巧與維護(hù),2011(14):39-40.
[3]高如莎.一種軟件單元測(cè)試策略[J].無(wú)線(xiàn)電工程,2007,37(8): 54-57.
[4]孫衛(wèi)紅.代碼走查的研究與實(shí)踐[J].計(jì)算機(jī)與網(wǎng)絡(luò),2007,33 (22):41-42.
[5]李燕.軟件質(zhì)量保證方法的研究及在同行評(píng)審改進(jìn)項(xiàng)目的應(yīng)用[D].北京:北京郵電大學(xué),2011:40-53.
[6]胡爭(zhēng)輝.從SVN Trac開(kāi)始中小團(tuán)隊(duì)項(xiàng)目管理之路[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