協(xié)同開發(fā)與cvs的使用.ppt_第1頁
協(xié)同開發(fā)與cvs的使用.ppt_第2頁
協(xié)同開發(fā)與cvs的使用.ppt_第3頁
協(xié)同開發(fā)與cvs的使用.ppt_第4頁
協(xié)同開發(fā)與cvs的使用.ppt_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、協(xié)同開發(fā)與cvs的使用(1),李鑫 北京工業(yè)大學放飛技術網(wǎng) 2003.10.30,今天將要介紹的主要內(nèi)容,版本控制的重要意義 并行開發(fā)中的注意事項和編碼規(guī)則 如何支持每日構建(Nightly Build) cvs(命令行)和WinCVS(GUI)工具的使用 如何看cvsweb,協(xié)同開發(fā)面臨的問題,代碼同步和集成困難 連調(diào)必須在所有代碼被更新、并且能夠正常編譯的情況下才能進行,傳統(tǒng)上,這一過程被安排在編碼過程之后 難以預期模塊間的相互影響,這將為整個系統(tǒng)的集成造成困難 難以評估每個人的工作量,這會打擊項目參與者的積極性,高質(zhì)量的編碼過程希望的條件,問題盡早暴露出來并被修正 代碼符合統(tǒng)一的規(guī)范 在

2、團隊范圍內(nèi)共享同一份統(tǒng)一的代碼庫 明確責任和獎懲,版本控制系統(tǒng)的主要功能,保存項目文件的任何版本,并允許回退先前的任何版本 比較不同版本之間的差異(diff) 允許為文件創(chuàng)建不同的開發(fā)分支,以支持不同項目的特定需要 合并不同開發(fā)者的修改(重要!) 典型的單機版本控制系統(tǒng)是rcs(Revision Control System)。,cvs(并行版本控制系統(tǒng)),可以在單機運行,提供一般的版本控制系統(tǒng)的功能,供個人開發(fā)使用 可以在網(wǎng)絡上運行,允許多人協(xié)同開發(fā) 開放源代碼,可以被容易地定制 成熟。cvs被全世界的絕大多數(shù)開放源代碼項目使用,同時也包括相當多的非開放原代碼軟件項目。 cvs (Concu

3、rrent Version System)由rcs發(fā)展而來。,cvs重要的基本概念,Repository(代碼庫): 項目文件的所有歷史都被保存在代碼庫中 CVSROOT變量: cvs系統(tǒng)根目錄的位置,后面將會介紹 checkin/commit(提交): 將文件的新的修改送入代碼庫的過程 checkout/update: 從代碼庫中取出某一特定版本的功能,編碼規(guī)范,通用規(guī)范 文件頭部的注釋說明文件的用途、最初的作者、版權等信息,非常重要的,一個$Header$符,或者,經(jīng)過定制的符號(如:$Frontfree$,這個符號最終將被替換為包括 良好的縮進(根據(jù)語言不同有所差異) 避免行尾空格,C#

4、中的編碼規(guī)范(斷行),斷行希望放在: 逗號后面 運算符后面,如果可能,盡可能在高級運算符后面 斷行之后的行的應縮進到斷開的表達式開始的位置,C#中斷行的舉例,好的風格 longMethodCall(expr1, expr2, expr3, expr4, expr5); nVar = a * b / (c - g + f) + 4 * z; 不好的風格 nVar = a * b / (c - g + f) + 4 * z;,C#中的縮進規(guī)范,使用Tab作為縮進符 在開發(fā)團隊中統(tǒng)一Tab寬度。通常,設置為4為宜;對于代碼層次數(shù)較多的代碼,建議設置為2,但具體空多少,應該在編碼過程之前確定下來,注釋

5、規(guī)范,一般注釋/* * 第一行 * 第二行 */ 重要注釋(單行)/* * 非常重要的注釋 */,注釋規(guī)范,單行注釋/ 單行注釋 文檔注釋/ / 類定義./ 等等。常用的還有, 以及 。,變量定義,一般情況下,每行只定義一個變量,例如:int level; / indentation levelint size; / size of table 而避免:int a, b; /What is a? What does b stand for? 盡可能在定義時初始化變量,接口定義,標識符及其后面的(之間,不空格。例如:public MySample(int myInt) 類和函數(shù)的定義,單起一行,

6、例如:public MySample(int myInt)this.myInt = myInt ;,If-else、for/foreach、while/while-do、switch、try/cache語句,if、else等等,與條件的)寫在同一行,中間空一格if (condition)DoSomething();. else if(condition)DoSomethingOther();. else DoSomethingOtherAgain();.,If-else、for/foreach、while/while-do、switch、try/catch語句,基本上和這些語句的條件放在同一行

7、 case 條件:單放一行 冒號(:)后面的行縮進一級,善用空行和空格,使用空行分割不同的小型邏輯單元,例如,分割兩組完成不同任務的程序段,分隔方法、屬性、類的定義,等等 逗號后面用空格分開,例如:(a, b, c)不要寫成(a,b,c) 類型、標識符、數(shù)值對齊,命名規(guī)則,開發(fā)團隊必須指定統(tǒng)一的命名習慣,Windows上的開發(fā),通常會使用Hungarian Notation(匈牙利命名,微軟公司推薦的命名習慣),而Unix上的命名習慣與此有很大的不同。但在同一個項目中,通常只允許一種開發(fā)習慣。 命名規(guī)則請參考具體的項目組規(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ā)者的準備,向你的cvs repository meister (cvs代碼庫管理員)詢問CVSROOT環(huán)境變量的設置、獲得訪問權限,等等 安裝cvs客戶端軟件(普通的開發(fā)者只需要IDE的插件就可以了,但WinCVS或命令行的cvs能夠提供更大的靈活性) 準備一個工作目錄,并作一

9、次cvs checkout,工作準備舉例,設置CVSROOT環(huán)境變量 創(chuàng)建一個空的目錄,作為“工作目錄”:mkdir D:WorkdirMyProject 執(zhí)行checkout操作:cvs co 模塊名稱 * 如果希望checkout整個repository, 可以在模塊名稱處填寫.,WinCVS中配置cvsroot,CVSROOT各個部分的意義,:pserver:/pcvspserver - 以口令驗證身份的服務器delphij - 用戶名 - cvs服務器/pcvs - Repository位置 上述信息可以從服務器管理員那里獲得。pserver是比較常用的驗證方式,本地CVSROOT舉例

10、,:local:D:pcvs:local: - 本地cvs repositoryD:pcvs - 路徑(需要首先執(zhí)行cvs init初始化),CVSROOT與本地副本,在Windows上,本地的工作副本中包含了描述CVSROOT的一些數(shù)據(jù),如服務器、用戶口令,等等。 對于每一份工作副本,只需要在最開始checkout的時候設置一次CVSROOT,之后的cvs操作都會依據(jù)這些描述性數(shù)據(jù)自動找到服務器、用戶,等等。,檢出(checkout)和提交(commit)代碼,檢出代碼cvs co .(檢出當前目錄對應的所有代碼) 更新代碼cvs up .(更新當前目錄對應的所有代碼) 提交代碼cvs ci

11、 .(將所有本地修改過的代碼提交到代碼庫),commit log,在提交代碼時,cvs系統(tǒng)會要求提供發(fā)生這項修改的原因。 許多管理員會配置cvs使得這些日志通過郵件發(fā)給所有相關的人員。這類郵件被稱為commit mail log可以通過cvs查閱,也可以通過cvsweb之類的工具來察看,cvsweb有效的cvs代碼察看工具,允許以Web方式察看文件的任意版本 允許察看不同版本之間的diff(差異) 允許察看代碼被引入的時間、修改發(fā)生的原因,等等 允許按照不同的版本分支察看代碼 *以下演示cvsweb的一部分界面(目錄、某個文件的版本、diff),添加和刪除文件,添加文件cvs add 文件名

12、刪除文件cvs remove 文件名 * 在commit之前,這些操作并不生效; 即使文件已經(jīng)被刪除,仍然可以得到它們先前的版本,演示W(wǎng)inCVS的操作,以下我將演示W(wǎng)inCVS的操作,其中包括設置CVSROOT、初始化本地Repository、checkout、commit、add、remove、update、和沖突處理。,提問時間,問題:如何移動文件?,cvs保存每個文件的歷史(每次commit),這些歷史對于軟件開發(fā)團隊中的開發(fā)人員不斷提高具有非常重要的意義 cvs本身不提供移動文件的機制,簡單地使用add+remove,將會導致未來難以追蹤文件的修改,解決方案:repo-copy,開發(fā)

13、者向cvs repository meister (代碼庫管理員)提出repo-copy的申請,包括涉及的文件、移動的原因,等等 meister將對應的rcs文件復制到目的位置 開發(fā)者checkout代碼庫,此時,本地工作副本的“目的位置”將會出現(xiàn)那些將被移動的文件 開發(fā)者使用cvs remove刪除原來位置的文件,可選地,在新的位置做一次force commit,說明文件的移動,傳統(tǒng)開發(fā)中的編碼過程,開始模塊開發(fā) 編碼過程 本地調(diào)試 測試、連調(diào)、修正問題 后三步將反復地迭代,直到最終滿意,使用版本控制系統(tǒng)之后的編碼過程,每天開始工作之前,checkout一份代碼 修改并進行初步的測試之后,c

14、ommit代碼,并且,如果必要,解決代碼修正的沖突 簡單地說,開始修改之前作checkout,確認修改基本無誤之后commit *上述過程是樂觀并發(fā)的,盡管cvs支持對文件上鎖或配置權限,上述方法的好處,所有開發(fā)者使用同一份代碼庫,本地修改與別人的修改及時地反映在代碼庫中,意味著連調(diào)能夠盡早地開始。 改善開發(fā)者之間的溝通。修改了什么、為什么修改都在repository中反映,如果代碼庫管理員進行了適當?shù)呐渲茫@些記錄(說明部分,以及對于修改的量化描述)還能夠通過郵件直接發(fā)送到所有開發(fā)者,上述方法的好處,實際的軟件工程中,兩個人恰好修改同一代碼的同一部分,并且有不同的想法的情況很少,因此,樂觀并

15、發(fā)保證了他們能夠同時修改同一文件的不同部分,而一旦發(fā)生沖突(同時修改同一文件的同一部分,并且修改不同),后一個commit的開發(fā)者負責合并修改。 分享同一份代碼庫意味著能夠?qū)嵤┟咳諛嫿ǎ@對于提高生產(chǎn)效率,使開發(fā)更具可控性具有非常重要的意義。,每日構建(Daily Build/Nightly Build),依賴版本控制系統(tǒng),測試工程師每天(是的,每天)從代碼庫中checkout出一份最新的快照版本 測試工程師以這份源代碼構建整個系統(tǒng) 測試小組以這份編譯版本(binary)進行測試,每日構建的測試內(nèi)容,確保每日構建時的快照能夠正確編譯(可能需要適當回滾某些文件版本) 按照詳細設計檢查當天提交的

16、代碼是否符合詳細設計(單元測試) 其他適應性測試和代碼復審 將這些信息反饋給編碼員,并要求他們解決,支持每日構建需要的額外努力,保證commit的代碼至少通過了本地的編譯和簡單的運行測試(對于提交了由于代碼本身原因造成無法編譯的代碼的開發(fā)者,一旦影響每日構建過程,通常會要求他們立刻解決) 進行功能性修改時,盡可能作到每修改一項功能就commit一次,這將減少萬一出現(xiàn)問題時的改正難度,每日構建中的代碼復審,此時的代碼復審主要是對于代碼是否符合設計要求,進行的修改是否可能造成對于其他模塊的不利影響(特別是潛在的影響) 代碼復審員必須是擁有豐富經(jīng)驗的程序設計師,并且,對于整個系統(tǒng)的架構有非常深入的了

17、解 許多公司選擇把代碼復審中發(fā)現(xiàn)的問題私下地發(fā)給相關開發(fā)者,每日構建與傳統(tǒng)方式的比較,每日構建方式中,幾乎每天都有一份可以正確編譯的快照 開發(fā)團隊中的任何人都可以進行每日構建,而測試工程師對完成每日構建之后的測試負責。,傳統(tǒng)方式中,測試構建過程被放在開發(fā)接近結束的時候 通常是測試工程師完成測試構建,并分發(fā)給測試組。團隊中的其他人可能并不了解構建的細節(jié),每日構建與傳統(tǒng)方式的比較,測試過程滲透到開發(fā)過程的每一步 每日構建最終在工程交付前,很難再出現(xiàn)嚴重的連調(diào)問題 不容易發(fā)生工期延誤,測試過程集中于開發(fā)的最后階段 傳統(tǒng)方式中,交付前測試往往引起較大的震蕩,如連調(diào)失敗等等 容易發(fā)生工期延誤,總結,引入

18、版本控制(我們本次演示的是cvs,但主要的思想適用于任何其他的版本控制系統(tǒng))可以改善軟件工程中的編碼和測試過程,主要的好處體現(xiàn)在: 為開發(fā)者之間的代碼同步提供了有效的途徑,通過保存代碼的不同版本,開發(fā)團隊能夠保留過去的經(jīng)驗,并據(jù)此對開發(fā)過程進行改進,總結,每個人的工作在版本控制系統(tǒng)中得到了有效的體現(xiàn),從而,有利于明確獎懲,從而激發(fā)開發(fā)團隊的工作積極性。 通過commit mail,工作人員之間能夠更好的交流想法,而且由于每一個修正都必須寫commit log,有助于養(yǎng)成嚴謹?shù)拈_發(fā)習慣。 每日構建使得工程的進度更加容易把握,從而有助于更好地管理項目工作。,總結,每日構建使得測試被滲透到開發(fā)的整個過程中,這有助于盡早發(fā)現(xiàn)和解決問題,避免工期延誤 代碼庫中保存了開發(fā)的整個歷史,萬一發(fā)生版權爭議這樣的問題,代碼庫能夠有效地表現(xiàn)代碼的開發(fā)過程,做為開發(fā)原創(chuàng)性的重要證據(jù),謝謝大家,參考文獻,車東,cvs命令速查手冊, 如何參與到Mozilla工程中來:.br/kiko/mozse/br2002/13.php Murray Stokely,F(xiàn)reeBSD 4.4交付工程:/murray/papers/releng.pdf,參考文獻,李鑫,協(xié)作開發(fā)中的質(zhì)量保證技術并行版本控制、每日構建和交付工程 CVS 并行版本控制系統(tǒng)http:/www.c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論