版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、協(xié)同開發(fā)與cvs的使用(1),李鑫 北京工業(yè)大學(xué)放飛技術(shù)網(wǎng) 2003.10.30,今天將要介紹的主要內(nèi)容,版本控制的重要意義 并行開發(fā)中的注意事項(xiàng)和編碼規(guī)則 如何支持每日構(gòu)建(Nightly Build) cvs(命令行)和WinCVS(GUI)工具的使用 如何看cvsweb,協(xié)同開發(fā)面臨的問(wèn)題,代碼同步和集成困難 連調(diào)必須在所有代碼被更新、并且能夠正常編譯的情況下才能進(jìn)行,傳統(tǒng)上,這一過(guò)程被安排在編碼過(guò)程之后 難以預(yù)期模塊間的相互影響,這將為整個(gè)系統(tǒng)的集成造成困難 難以評(píng)估每個(gè)人的工作量,這會(huì)打擊項(xiàng)目參與者的積極性,高質(zhì)量的編碼過(guò)程希望的條件,問(wèn)題盡早暴露出來(lái)并被修正 代碼符合統(tǒng)一的規(guī)范 在
2、團(tuán)隊(duì)范圍內(nèi)共享同一份統(tǒng)一的代碼庫(kù) 明確責(zé)任和獎(jiǎng)懲,版本控制系統(tǒng)的主要功能,保存項(xiàng)目文件的任何版本,并允許回退先前的任何版本 比較不同版本之間的差異(diff) 允許為文件創(chuàng)建不同的開發(fā)分支,以支持不同項(xiàng)目的特定需要 合并不同開發(fā)者的修改(重要!) 典型的單機(jī)版本控制系統(tǒng)是rcs(Revision Control System)。,cvs(并行版本控制系統(tǒng)),可以在單機(jī)運(yùn)行,提供一般的版本控制系統(tǒng)的功能,供個(gè)人開發(fā)使用 可以在網(wǎng)絡(luò)上運(yùn)行,允許多人協(xié)同開發(fā) 開放源代碼,可以被容易地定制 成熟。cvs被全世界的絕大多數(shù)開放源代碼項(xiàng)目使用,同時(shí)也包括相當(dāng)多的非開放原代碼軟件項(xiàng)目。 cvs (Concu
3、rrent Version System)由rcs發(fā)展而來(lái)。,cvs重要的基本概念,Repository(代碼庫(kù)): 項(xiàng)目文件的所有歷史都被保存在代碼庫(kù)中 CVSROOT變量: cvs系統(tǒng)根目錄的位置,后面將會(huì)介紹 checkin/commit(提交): 將文件的新的修改送入代碼庫(kù)的過(guò)程 checkout/update: 從代碼庫(kù)中取出某一特定版本的功能,編碼規(guī)范,通用規(guī)范 文件頭部的注釋說(shuō)明文件的用途、最初的作者、版權(quán)等信息,非常重要的,一個(gè)$Header$符,或者,經(jīng)過(guò)定制的符號(hào)(如:$Frontfree$,這個(gè)符號(hào)最終將被替換為包括 良好的縮進(jìn)(根據(jù)語(yǔ)言不同有所差異) 避免行尾空格,C#
4、中的編碼規(guī)范(斷行),斷行希望放在: 逗號(hào)后面 運(yùn)算符后面,如果可能,盡可能在高級(jí)運(yùn)算符后面 斷行之后的行的應(yīng)縮進(jìn)到斷開的表達(dá)式開始的位置,C#中斷行的舉例,好的風(fēng)格 longMethodCall(expr1, expr2, expr3, expr4, expr5); nVar = a * b / (c - g + f) + 4 * z; 不好的風(fēng)格 nVar = a * b / (c - g + f) + 4 * z;,C#中的縮進(jìn)規(guī)范,使用Tab作為縮進(jìn)符 在開發(fā)團(tuán)隊(duì)中統(tǒng)一Tab寬度。通常,設(shè)置為4為宜;對(duì)于代碼層次數(shù)較多的代碼,建議設(shè)置為2,但具體空多少,應(yīng)該在編碼過(guò)程之前確定下來(lái),注釋
5、規(guī)范,一般注釋/* * 第一行 * 第二行 */ 重要注釋(單行)/* * 非常重要的注釋 */,注釋規(guī)范,單行注釋/ 單行注釋 文檔注釋/ / 類定義./ 等等。常用的還有, 以及 。,變量定義,一般情況下,每行只定義一個(gè)變量,例如:int level; / indentation levelint size; / size of table 而避免:int a, b; /What is a? What does b stand for? 盡可能在定義時(shí)初始化變量,接口定義,標(biāo)識(shí)符及其后面的(之間,不空格。例如:public MySample(int myInt) 類和函數(shù)的定義,單起一行,
6、例如:public MySample(int myInt)this.myInt = myInt ;,If-else、for/foreach、while/while-do、switch、try/cache語(yǔ)句,if、else等等,與條件的)寫在同一行,中間空一格if (condition)DoSomething();. else if(condition)DoSomethingOther();. else DoSomethingOtherAgain();.,If-else、for/foreach、while/while-do、switch、try/catch語(yǔ)句,基本上和這些語(yǔ)句的條件放在同一行
7、 case 條件:單放一行 冒號(hào)(:)后面的行縮進(jìn)一級(jí),善用空行和空格,使用空行分割不同的小型邏輯單元,例如,分割兩組完成不同任務(wù)的程序段,分隔方法、屬性、類的定義,等等 逗號(hào)后面用空格分開,例如:(a, b, c)不要寫成(a,b,c) 類型、標(biāo)識(shí)符、數(shù)值對(duì)齊,命名規(guī)則,開發(fā)團(tuán)隊(duì)必須指定統(tǒng)一的命名習(xí)慣,Windows上的開發(fā),通常會(huì)使用Hungarian Notation(匈牙利命名,微軟公司推薦的命名習(xí)慣),而Unix上的命名習(xí)慣與此有很大的不同。但在同一個(gè)項(xiàng)目中,通常只允許一種開發(fā)習(xí)慣。 命名規(guī)則請(qǐng)參考具體的項(xiàng)目組規(guī)定。,cvs的使用,Windows上的工具 WinCVS(圖形界面) c
8、vs for Windows(命令行界面) 集成環(huán)境 Igloo(Visual S集成插件) Java CVS(JBuilder等工具內(nèi)建cvs支持) Unix環(huán)境 cvs,善用空行和空格,stringname= Mr. Ed; intmyValue= 5; TestaTest= Test.TestYou;,作為一般開發(fā)者的準(zhǔn)備,向你的cvs repository meister (cvs代碼庫(kù)管理員)詢問(wèn)CVSROOT環(huán)境變量的設(shè)置、獲得訪問(wèn)權(quán)限,等等 安裝cvs客戶端軟件(普通的開發(fā)者只需要IDE的插件就可以了,但WinCVS或命令行的cvs能夠提供更大的靈活性) 準(zhǔn)備一個(gè)工作目錄,并作一
9、次cvs checkout,工作準(zhǔn)備舉例,設(shè)置CVSROOT環(huán)境變量 創(chuàng)建一個(gè)空的目錄,作為“工作目錄”:mkdir D:WorkdirMyProject 執(zhí)行checkout操作:cvs co 模塊名稱 * 如果希望checkout整個(gè)repository, 可以在模塊名稱處填寫.,WinCVS中配置cvsroot,CVSROOT各個(gè)部分的意義,:pserver:/pcvspserver - 以口令驗(yàn)證身份的服務(wù)器delphij - 用戶名 - cvs服務(wù)器/pcvs - Repository位置 上述信息可以從服務(wù)器管理員那里獲得。pserver是比較常用的驗(yàn)證方式,本地CVSROOT舉例
10、,:local:D:pcvs:local: - 本地cvs repositoryD:pcvs - 路徑(需要首先執(zhí)行cvs init初始化),CVSROOT與本地副本,在Windows上,本地的工作副本中包含了描述CVSROOT的一些數(shù)據(jù),如服務(wù)器、用戶口令,等等。 對(duì)于每一份工作副本,只需要在最開始checkout的時(shí)候設(shè)置一次CVSROOT,之后的cvs操作都會(huì)依據(jù)這些描述性數(shù)據(jù)自動(dòng)找到服務(wù)器、用戶,等等。,檢出(checkout)和提交(commit)代碼,檢出代碼cvs co .(檢出當(dāng)前目錄對(duì)應(yīng)的所有代碼) 更新代碼cvs up .(更新當(dāng)前目錄對(duì)應(yīng)的所有代碼) 提交代碼cvs ci
11、 .(將所有本地修改過(guò)的代碼提交到代碼庫(kù)),commit log,在提交代碼時(shí),cvs系統(tǒng)會(huì)要求提供發(fā)生這項(xiàng)修改的原因。 許多管理員會(huì)配置cvs使得這些日志通過(guò)郵件發(fā)給所有相關(guān)的人員。這類郵件被稱為commit mail log可以通過(guò)cvs查閱,也可以通過(guò)cvsweb之類的工具來(lái)察看,cvsweb有效的cvs代碼察看工具,允許以Web方式察看文件的任意版本 允許察看不同版本之間的diff(差異) 允許察看代碼被引入的時(shí)間、修改發(fā)生的原因,等等 允許按照不同的版本分支察看代碼 *以下演示cvsweb的一部分界面(目錄、某個(gè)文件的版本、diff),添加和刪除文件,添加文件cvs add 文件名
12、刪除文件cvs remove 文件名 * 在commit之前,這些操作并不生效; 即使文件已經(jīng)被刪除,仍然可以得到它們先前的版本,演示W(wǎng)inCVS的操作,以下我將演示W(wǎng)inCVS的操作,其中包括設(shè)置CVSROOT、初始化本地Repository、checkout、commit、add、remove、update、和沖突處理。,提問(wèn)時(shí)間,問(wèn)題:如何移動(dòng)文件?,cvs保存每個(gè)文件的歷史(每次commit),這些歷史對(duì)于軟件開發(fā)團(tuán)隊(duì)中的開發(fā)人員不斷提高具有非常重要的意義 cvs本身不提供移動(dòng)文件的機(jī)制,簡(jiǎn)單地使用add+remove,將會(huì)導(dǎo)致未來(lái)難以追蹤文件的修改,解決方案:repo-copy,開發(fā)
13、者向cvs repository meister (代碼庫(kù)管理員)提出repo-copy的申請(qǐng),包括涉及的文件、移動(dòng)的原因,等等 meister將對(duì)應(yīng)的rcs文件復(fù)制到目的位置 開發(fā)者checkout代碼庫(kù),此時(shí),本地工作副本的“目的位置”將會(huì)出現(xiàn)那些將被移動(dòng)的文件 開發(fā)者使用cvs remove刪除原來(lái)位置的文件,可選地,在新的位置做一次force commit,說(shuō)明文件的移動(dòng),傳統(tǒng)開發(fā)中的編碼過(guò)程,開始模塊開發(fā) 編碼過(guò)程 本地調(diào)試 測(cè)試、連調(diào)、修正問(wèn)題 后三步將反復(fù)地迭代,直到最終滿意,使用版本控制系統(tǒng)之后的編碼過(guò)程,每天開始工作之前,checkout一份代碼 修改并進(jìn)行初步的測(cè)試之后,c
14、ommit代碼,并且,如果必要,解決代碼修正的沖突 簡(jiǎn)單地說(shuō),開始修改之前作checkout,確認(rèn)修改基本無(wú)誤之后commit *上述過(guò)程是樂(lè)觀并發(fā)的,盡管cvs支持對(duì)文件上鎖或配置權(quán)限,上述方法的好處,所有開發(fā)者使用同一份代碼庫(kù),本地修改與別人的修改及時(shí)地反映在代碼庫(kù)中,意味著連調(diào)能夠盡早地開始。 改善開發(fā)者之間的溝通。修改了什么、為什么修改都在repository中反映,如果代碼庫(kù)管理員進(jìn)行了適當(dāng)?shù)呐渲?,這些記錄(說(shuō)明部分,以及對(duì)于修改的量化描述)還能夠通過(guò)郵件直接發(fā)送到所有開發(fā)者,上述方法的好處,實(shí)際的軟件工程中,兩個(gè)人恰好修改同一代碼的同一部分,并且有不同的想法的情況很少,因此,樂(lè)觀并
15、發(fā)保證了他們能夠同時(shí)修改同一文件的不同部分,而一旦發(fā)生沖突(同時(shí)修改同一文件的同一部分,并且修改不同),后一個(gè)commit的開發(fā)者負(fù)責(zé)合并修改。 分享同一份代碼庫(kù)意味著能夠?qū)嵤┟咳諛?gòu)建,而這對(duì)于提高生產(chǎn)效率,使開發(fā)更具可控性具有非常重要的意義。,每日構(gòu)建(Daily Build/Nightly Build),依賴版本控制系統(tǒng),測(cè)試工程師每天(是的,每天)從代碼庫(kù)中checkout出一份最新的快照版本 測(cè)試工程師以這份源代碼構(gòu)建整個(gè)系統(tǒng) 測(cè)試小組以這份編譯版本(binary)進(jìn)行測(cè)試,每日構(gòu)建的測(cè)試內(nèi)容,確保每日構(gòu)建時(shí)的快照能夠正確編譯(可能需要適當(dāng)回滾某些文件版本) 按照詳細(xì)設(shè)計(jì)檢查當(dāng)天提交的
16、代碼是否符合詳細(xì)設(shè)計(jì)(單元測(cè)試) 其他適應(yīng)性測(cè)試和代碼復(fù)審 將這些信息反饋給編碼員,并要求他們解決,支持每日構(gòu)建需要的額外努力,保證commit的代碼至少通過(guò)了本地的編譯和簡(jiǎn)單的運(yùn)行測(cè)試(對(duì)于提交了由于代碼本身原因造成無(wú)法編譯的代碼的開發(fā)者,一旦影響每日構(gòu)建過(guò)程,通常會(huì)要求他們立刻解決) 進(jìn)行功能性修改時(shí),盡可能作到每修改一項(xiàng)功能就commit一次,這將減少萬(wàn)一出現(xiàn)問(wèn)題時(shí)的改正難度,每日構(gòu)建中的代碼復(fù)審,此時(shí)的代碼復(fù)審主要是對(duì)于代碼是否符合設(shè)計(jì)要求,進(jìn)行的修改是否可能造成對(duì)于其他模塊的不利影響(特別是潛在的影響) 代碼復(fù)審員必須是擁有豐富經(jīng)驗(yàn)的程序設(shè)計(jì)師,并且,對(duì)于整個(gè)系統(tǒng)的架構(gòu)有非常深入的了
17、解 許多公司選擇把代碼復(fù)審中發(fā)現(xiàn)的問(wèn)題私下地發(fā)給相關(guān)開發(fā)者,每日構(gòu)建與傳統(tǒng)方式的比較,每日構(gòu)建方式中,幾乎每天都有一份可以正確編譯的快照 開發(fā)團(tuán)隊(duì)中的任何人都可以進(jìn)行每日構(gòu)建,而測(cè)試工程師對(duì)完成每日構(gòu)建之后的測(cè)試負(fù)責(zé)。,傳統(tǒng)方式中,測(cè)試構(gòu)建過(guò)程被放在開發(fā)接近結(jié)束的時(shí)候 通常是測(cè)試工程師完成測(cè)試構(gòu)建,并分發(fā)給測(cè)試組。團(tuán)隊(duì)中的其他人可能并不了解構(gòu)建的細(xì)節(jié),每日構(gòu)建與傳統(tǒng)方式的比較,測(cè)試過(guò)程滲透到開發(fā)過(guò)程的每一步 每日構(gòu)建最終在工程交付前,很難再出現(xiàn)嚴(yán)重的連調(diào)問(wèn)題 不容易發(fā)生工期延誤,測(cè)試過(guò)程集中于開發(fā)的最后階段 傳統(tǒng)方式中,交付前測(cè)試往往引起較大的震蕩,如連調(diào)失敗等等 容易發(fā)生工期延誤,總結(jié),引入
18、版本控制(我們本次演示的是cvs,但主要的思想適用于任何其他的版本控制系統(tǒng))可以改善軟件工程中的編碼和測(cè)試過(guò)程,主要的好處體現(xiàn)在: 為開發(fā)者之間的代碼同步提供了有效的途徑,通過(guò)保存代碼的不同版本,開發(fā)團(tuán)隊(duì)能夠保留過(guò)去的經(jīng)驗(yàn),并據(jù)此對(duì)開發(fā)過(guò)程進(jìn)行改進(jìn),總結(jié),每個(gè)人的工作在版本控制系統(tǒng)中得到了有效的體現(xiàn),從而,有利于明確獎(jiǎng)懲,從而激發(fā)開發(fā)團(tuán)隊(duì)的工作積極性。 通過(guò)commit mail,工作人員之間能夠更好的交流想法,而且由于每一個(gè)修正都必須寫commit log,有助于養(yǎng)成嚴(yán)謹(jǐn)?shù)拈_發(fā)習(xí)慣。 每日構(gòu)建使得工程的進(jìn)度更加容易把握,從而有助于更好地管理項(xiàng)目工作。,總結(jié),每日構(gòu)建使得測(cè)試被滲透到開發(fā)的整個(gè)過(guò)程中,這有助于盡早發(fā)現(xiàn)和解決問(wèn)題,避免工期延誤 代碼庫(kù)中保存了開發(fā)的整個(gè)歷史,萬(wàn)一發(fā)生版權(quán)爭(zhēng)議這樣的問(wèn)題,代碼庫(kù)能夠有效地表現(xiàn)代碼的開發(fā)過(guò)程,做為開發(fā)原創(chuàng)性的重要證據(jù),謝謝大家,參考文獻(xiàn),車東,cvs命令速查手冊(cè), 如何參與到Mozilla工程中來(lái):.br/kiko/mozse/br2002/13.php Murray Stokely,F(xiàn)reeBSD 4.4交付工程:/murray/papers/releng.pdf,參考文獻(xiàn),李鑫,協(xié)作開發(fā)中的質(zhì)量保證技術(shù)并行版本控制、每日構(gòu)建和交付工程 CVS 并行版本控制系統(tǒng)http:/www.c
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025合同模板股權(quán)投資合作合同
- 解碼生命奧秘醫(yī)療技術(shù)的未來(lái)展望
- 科技展會(huì)的活動(dòng)創(chuàng)新與亮點(diǎn)挖掘
- 水利建設(shè)對(duì)高效農(nóng)業(yè)發(fā)展的推動(dòng)作用
- 課題申報(bào)參考:客家珍稀文書文字研究
- 課題申報(bào)參考:抗戰(zhàn)時(shí)期樂(lè)西公路與沿線各民族國(guó)家認(rèn)同建構(gòu)研究
- 數(shù)字技術(shù)與生態(tài)農(nóng)業(yè)的協(xié)同創(chuàng)新策略
- 深井泵房施工組織設(shè)計(jì)
- 歷年英語(yǔ)四級(jí)真題及答案
- 2025年華師大新版七年級(jí)歷史下冊(cè)月考試卷
- 數(shù)學(xué)-山東省2025年1月濟(jì)南市高三期末學(xué)習(xí)質(zhì)量檢測(cè)濟(jì)南期末試題和答案
- 中儲(chǔ)糧黑龍江分公司社招2025年學(xué)習(xí)資料
- 湖南省長(zhǎng)沙市2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期期末考試試卷
- 船舶行業(yè)維修保養(yǎng)合同
- 2024年林地使用權(quán)轉(zhuǎn)讓協(xié)議書
- 物流有限公司安全生產(chǎn)專項(xiàng)整治三年行動(dòng)實(shí)施方案全國(guó)安全生產(chǎn)專項(xiàng)整治三年行動(dòng)計(jì)劃
- 2025屆江蘇省13市高三最后一卷生物試卷含解析
- 產(chǎn)鉗助產(chǎn)護(hù)理查房
- 招聘專員轉(zhuǎn)正述職報(bào)告
- (完整版)小學(xué)生24點(diǎn)習(xí)題大全(含答案)
- 四川省2023年普通高等學(xué)校高職教育單獨(dú)招生文化考試(中職類)數(shù)學(xué)試題(原卷版)
評(píng)論
0/150
提交評(píng)論