




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
協(xié)同開發(fā)與cvs的使用(1)李鑫<delphij[at]frontfree[dot]net>2003.10.30今天將要介紹的主要內(nèi)容版本控制的重要意義并行開發(fā)中的注意事項和編碼規(guī)則如何支持每日構(gòu)建(NightlyBuild)cvs(命令行)和WinCVS(GUI)工具的使用如何看cvsweb協(xié)同開發(fā)面臨的問題代碼同步和集成困難連調(diào)必須在所有代碼被更新、并且能夠正常編譯的情況下才能進(jìn)行,傳統(tǒng)上,這一過程被安排在編碼過程之后難以預(yù)期模塊間的相互影響,這將為整個系統(tǒng)的集成造成困難難以評估每個人的工作量,這會打擊項目參與者的積極性版本控制系統(tǒng)的主要功能保存項目文件的任何版本,并允許回退先前的任何版本比較不同版本之間的差異(diff)允許為文件創(chuàng)建不同的開發(fā)分支,以支持不同項目的特定需要合并不同開發(fā)者的修改(重要!)典型的單機(jī)版本控制系統(tǒng)是rcs(RevisionControlSystem)。cvs(并行版本控制系統(tǒng))可以在單機(jī)運(yùn)行,提供一般的版本控制系統(tǒng)的功能,供個人開發(fā)使用可以在網(wǎng)絡(luò)上運(yùn)行,允許多人協(xié)同開發(fā)開放源代碼,可以被容易地定制成熟。cvs被全世界的絕大多數(shù)開放源代碼項目使用,同時也包括相當(dāng)多的非開放原代碼軟件項目。cvs(ConcurrentVersionSystem)由rcs發(fā)展而來。cvs重要的基本概念Repository(代碼庫):項目文件的所有歷史都被保存在代碼庫中CVSROOT變量:cvs系統(tǒng)根目錄的位置,后面將會介紹checkin/commit(提交):將文件的新的修改送入代碼庫的過程checkout/update:從代碼庫中取出某一特定版本的功能C#中的編碼規(guī)范(斷行)斷行希望放在:逗號后面運(yùn)算符后面,如果可能,盡可能在高級運(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)隊中統(tǒng)一Tab寬度。通常,設(shè)置為4為宜;對于代碼層次數(shù)較多的代碼,建議設(shè)置為2,但具體空多少,應(yīng)該在編碼過程之前確定下來注釋規(guī)范單行注釋
//單行注釋文檔注釋
///<summary>
///類定義...
///</summary>
等等。常用的還有<summary>,<param>以及<exception>。變量定義一般情況下,每行只定義一個變量,例如:
intlevel;//indentationlevel
intsize;//sizeoftable而避免:
inta,b;//Whatis'a'?Whatdoes'b'standfor?盡可能在定義時初始化變量接口定義標(biāo)識符及其后面的(之間,不空格。例如:
publicMySample(intmyInt)類和函數(shù)的定義,{}單起一行,例如:
publicMySample(intmyInt)
{
this.myInt=myInt;
}If-else、for/foreach、while/while-do、switch、try/catch語句基本上{和這些語句的條件放在同一行case條件:單放一行冒號(:)后面的行縮進(jìn)一級善用空行和空格使用空行分割不同的小型邏輯單元,例如,分割兩組完成不同任務(wù)的程序段,分隔方法、屬性、類的定義,等等逗號后面用空格分開,例如:
(a,b,c)
不要寫成
(a,b,c)類型、標(biāo)識符、數(shù)值對齊命名規(guī)則開發(fā)團(tuán)隊必須指定統(tǒng)一的命名習(xí)慣,Windows上的開發(fā),通常會使用HungarianNotation(匈牙利命名,微軟公司推薦的命名習(xí)慣),而Unix上的命名習(xí)慣與此有很大的不同。但在同一個項目中,通常只允許一種開發(fā)習(xí)慣。命名規(guī)則請參考具體的項目組規(guī)定。善用空行和空格string name ="Mr.Ed";int myValue =5;Test aTest =Test.TestYou;作為一般開發(fā)者的準(zhǔn)備向你的cvsrepositorymeister(cvs代碼庫管理員)詢問CVSROOT環(huán)境變量的設(shè)置、獲得訪問權(quán)限,等等安裝cvs客戶端軟件(普通的開發(fā)者只需要IDE的插件就可以了,但WinCVS或命令行的cvs能夠提供更大的靈活性)準(zhǔn)備一個工作目錄,并作一次cvscheckout工作準(zhǔn)備舉例設(shè)置CVSROOT環(huán)境變量創(chuàng)建一個空的目錄,作為“工作目錄”:
mkdirD:\Workdir\MyProject執(zhí)行checkout操作:
cvsco[模塊名稱]**如果希望checkout整個repository,可以在模塊名稱處填寫.CVSROOT各個部分的意義:pserver::/pcvs
pserver->以口令驗證身份的服務(wù)器
delphij->用戶名
->cvs服務(wù)器
/pcvs->Repository位置上述信息可以從服務(wù)器管理員那里獲得。pserver是比較常用的驗證方式本地CVSROOT舉例:local:D:\pcvs
:local:->本地cvsrepository
D:\pcvs->路徑(需要首先執(zhí)行cvsinit初始化)CVSROOT與本地副本在Windows上,本地的工作副本中包含了描述CVSROOT的一些數(shù)據(jù),如服務(wù)器、用戶口令,等等。對于每一份工作副本,只需要在最開始checkout的時候設(shè)置一次CVSROOT,之后的cvs操作都會依據(jù)這些描述性數(shù)據(jù)自動找到服務(wù)器、用戶,等等。commitlog在提交代碼時,cvs系統(tǒng)會要求提供發(fā)生這項修改的原因。許多管理員會配置cvs使得這些日志通過郵件發(fā)給所有相關(guān)的人員。這類郵件被稱為commitmaillog可以通過cvs查閱,也可以通過cvsweb之類的工具來察看cvsweb——有效的cvs代碼察看工具允許以Web方式察看文件的任意版本允許察看不同版本之間的diff(差異)允許察看代碼被引入的時間、修改發(fā)生的原因,等等允許按照不同的版本分支察看代碼**以下演示cvsweb的一部分界面(目錄、某個文件的版本、diff)添加和刪除文件添加文件
cvsadd文件名刪除文件
cvsremove文件名*在commit之前,這些操作并不生效;即使文件已經(jīng)被刪除,仍然可以得到它們先前的版本演示W(wǎng)inCVS的操作以下我將演示W(wǎng)inCVS的操作,其中包括設(shè)置CVSROOT、初始化本地Repository、checkout、commit、add、remove、update、和沖突處理。提問時間問題:如何移動文件?cvs保存每個文件的歷史(每次commit),這些歷史對于軟件開發(fā)團(tuán)隊中的開發(fā)人員不斷提高具有非常重要的意義cvs本身不提供移動文件的機(jī)制,簡單地使用add+remove,將會導(dǎo)致未來難以追蹤文件的修改解決方案:repo-copy開發(fā)者向cvsrepositorymeister(代碼庫管理員)提出repo-copy的申請,包括涉及的文件、移動的原因,等等meister將對應(yīng)的rcs文件復(fù)制到目的位置開發(fā)者checkout代碼庫,此時,本地工作副本的“目的位置”將會出現(xiàn)那些將被移動的文件開發(fā)者使用cvsremove刪除原來位置的文件,可選地,在新的位置做一次forcecommit,說明文件的移動傳統(tǒng)開發(fā)中的編碼過程開始模塊開發(fā)編碼過程本地調(diào)試測試、連調(diào)、修正問題后三步將反復(fù)地迭代,直到最終滿意使用版本控制系統(tǒng)之后的編碼過程每天開始工作之前,checkout一份代碼修改并進(jìn)行初步的測試之后,commit代碼,并且,如果必要,解決代碼修正的沖突簡單地說,開始修改之前作checkout,確認(rèn)修改基本無誤之后commit*上述過程是樂觀并發(fā)的,盡管cvs支持對文件上鎖或配置權(quán)限上述方法的好處所有開發(fā)者使用同一份代碼庫,本地修改與別人的修改及時地反映在代碼庫中,意味著連調(diào)能夠盡早地開始。改善開發(fā)者之間的溝通。修改了什么、為什么修改都在repository中反映,如果代碼庫管理員進(jìn)行了適當(dāng)?shù)呐渲茫@些記錄(說明部分,以及對于修改的量化描述)還能夠通過郵件直接發(fā)送到所有開發(fā)者上述方法的好處實際的軟件工程中,兩個人恰好修改同一代碼的同一部分,并且有不同的想法的情況很少,因此,樂觀并發(fā)保證了他們能夠同時修改同一文件的不同部分,而一旦發(fā)生沖突(同時修改同一文件的同一部分,并且修改不同),后一個commit的開發(fā)者負(fù)責(zé)合并修改。分享同一份代碼庫意味著能夠?qū)嵤┟咳諛?gòu)建,而這對于提高生產(chǎn)效率,使開發(fā)更具可控性具有非常重要的意義。每日構(gòu)建(DailyBuild/NightlyBuild)依賴版本控制系統(tǒng),測試工程師每天(是的,每天)從代碼庫中checkout出一份最新的快照版本測試工程師以這份源代碼構(gòu)建整個系統(tǒng)測試小組以這份編譯版本(binary)進(jìn)行測試每日構(gòu)建的測試內(nèi)容確保每日構(gòu)建時的快照能夠正確編譯(可能需要適當(dāng)回滾某些文件版本)按照詳細(xì)設(shè)計檢查當(dāng)天提交的代碼是否符合詳細(xì)設(shè)計(單元測試)其他適應(yīng)性測試和代碼復(fù)審將這些信息反饋給編碼員,并要求他們解決支持每日構(gòu)建需要的額外努力保證commit的代碼至少通過了本地的編譯和簡單的運(yùn)行測試(對于提交了由于代碼本身原因造成無法編譯的代碼的開發(fā)者,一旦影響每日構(gòu)建過程,通常會要求他們立刻解決)進(jìn)行功能性修改時,盡可能作到每修改一項功能就commit一次,這將減少萬一出現(xiàn)問題時的改正難度每日構(gòu)建中的代碼復(fù)審此時的代碼復(fù)審主要是對于代碼是否符合設(shè)計要求,進(jìn)行的修改是否可能造成對于其他模塊的不利影響(特別是潛在的影響)代碼復(fù)審員必須是擁有豐富經(jīng)驗的程序設(shè)計師,并且,對于整個系統(tǒng)的架構(gòu)有非常深入的了解許多公司選擇把代碼復(fù)審中發(fā)現(xiàn)的問題私下地發(fā)給相關(guān)開發(fā)者每日構(gòu)建與傳統(tǒng)方式的比較每日構(gòu)建方式中,幾乎每天都有一份可以正確編譯的快照開發(fā)團(tuán)隊中的任何人都可以進(jìn)行每日構(gòu)建,而測試工程師對完成每日構(gòu)建之后的測試負(fù)責(zé)。傳統(tǒng)方式中,測試構(gòu)建過程被放在開發(fā)接近結(jié)束的時候通常是測試工程師完成測試構(gòu)建,并分發(fā)給測試組。團(tuán)隊中的其他人可能并不了解構(gòu)建的細(xì)節(jié)每日構(gòu)建與傳統(tǒng)方式的比較測試過程滲透到開發(fā)過程的每一步每日構(gòu)建最終在工程交付前,很難再出現(xiàn)嚴(yán)重的連調(diào)問題不容易發(fā)生工期延誤測試過程集中于開發(fā)的最后階段傳統(tǒng)方式中,交付前測試往往引起較大的震蕩,如連調(diào)失敗等等容易發(fā)生工期延誤總結(jié)引入版本控制(我們本次演示的是cvs,但主要的思想適用于任何其他的版本控制系統(tǒng))可以改善軟件工程中的編碼和測試過程,主要的好處體現(xiàn)在:為開發(fā)者之間的代碼同步提供了有效的途徑,通過保存代碼的不同版本,開發(fā)團(tuán)隊能夠保留過去的經(jīng)驗,并據(jù)此對開發(fā)過程進(jìn)行改進(jìn)總結(jié)每個人的工作在版本控制系統(tǒng)中得到了有效的體現(xiàn),從而,有利于明確獎懲,從而激發(fā)開發(fā)團(tuán)隊的工作積極性。通過commitmail,工作人員之間能夠更好的交流想法,而且由于每一個修正都必須寫commitlog,有助于養(yǎng)成嚴(yán)謹(jǐn)?shù)拈_發(fā)習(xí)慣。每日構(gòu)建使得工程的進(jìn)度更加容易把握,從而有助于更好地管理項目工作??偨Y(jié)每日構(gòu)建使得測試被滲透到開發(fā)的整個過程中,這有助于盡早發(fā)現(xiàn)和解決問題,避免工期延誤代碼庫中保存了開發(fā)的整個歷史,萬一發(fā)生版權(quán)爭議這樣的問題,代碼庫能夠有效地表現(xiàn)代碼的開發(fā)過程,做為開發(fā)原創(chuàng)性的重要證據(jù)謝謝大家參考文獻(xiàn)車東,cvs命令速查手冊,如何參與到Mozilla工程中來:
MurrayStokely,F(xiàn)reeBSD4.4交付工程:
參考文獻(xiàn)李鑫,協(xié)作開發(fā)中的質(zhì)量保證技術(shù)——并行版本控制、每日構(gòu)建和交付工程
CVS–并行版本控制系統(tǒng)
版權(quán)聲明版權(quán)所有?2003李鑫<delphij[at]frontfree[dot]net>,保留所有權(quán)力。在滿足下列條件的前提下,允許重新分發(fā)修改過或未經(jīng)修改的,以源代碼或已編譯形式存在的本軟件:以源代碼形式的發(fā)布必須保留未經(jīng)修改的上述版權(quán)聲明、本許可條件,以及其后的不承諾條款。以已編譯形式的發(fā)布必須在發(fā)布
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 賣場合作合同范本
- 代購訂貨拿貨合同范本
- 泰州潔凈手術(shù)室施工方案
- 2025江西省建筑安全員C證考試題庫
- 農(nóng)具合同范本
- 儀器生產(chǎn)安裝合同范本
- 二年級口算題目練習(xí)集100道
- 二年級口算練習(xí)題100道
- 2025陜西省建筑安全員-B證考試題庫及答案
- 出海服務(wù)合同范本
- 《全科醫(yī)學(xué)概論》課件-以家庭為單位的健康照顧
- 自來水廠安全施工組織設(shè)計
- 《跟單信用證統(tǒng)一慣例》UCP600中英文對照版
- 《醫(yī)院應(yīng)急培訓(xùn)》課件
- 提高教育教學(xué)質(zhì)量深化教學(xué)改革措施
- 招標(biāo)代理機(jī)構(gòu)遴選投標(biāo)方案(技術(shù)標(biāo))
- 證件使用協(xié)議書(2篇)
- KTV商務(wù)禮儀培訓(xùn)
- 三級安全教育試題(公司級、部門級、班組級)
- 2024年《論教育》全文課件
- 貧血醫(yī)學(xué)教學(xué)課件
評論
0/150
提交評論