


全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
每日構(gòu)建在一個(gè)稍微大點(diǎn)的規(guī)模上,當(dāng)你寫代碼時(shí),你也處于一個(gè)REP循環(huán)的宏版本中,這個(gè)循環(huán)就是“編碼編譯測試”。你編寫代碼,把代碼編譯成可執(zhí)行的文件,然后測試它,看一下運(yùn)釁鵠叢趺囪?/P 關(guān)鍵一點(diǎn)是當(dāng)你寫一個(gè)程序時(shí),你的工作過程是循環(huán)的。一個(gè)循環(huán)所花時(shí)間越短,你的生產(chǎn)力就越高,當(dāng)然最短時(shí)間不會小于編譯器運(yùn)行的時(shí)間。 這就是一個(gè)程序員為什么總是要一個(gè)真正夠快的硬件而編譯器開發(fā)者們總是不斷使他們的編譯器運(yùn)行更快的正式的純計(jì)算機(jī)科學(xué)角度的原因。Visual Basic的辦法是當(dāng)你輸入代碼時(shí),它就開始進(jìn)行代碼的語法解析,這樣程序解釋運(yùn)行時(shí)速度很快。VisualC+的辦法是增量編譯(incremental compiles),預(yù)編譯頭文件(precompiled headers)和增量鏈接(incremental linking)。但是一個(gè)大型的團(tuán)隊(duì)有多個(gè)開發(fā)人員和測試人員,你碰到了同樣的循環(huán),可能不同點(diǎn)就是有更多的文檔要寫(可是這還只是草稿,天哪!)。一個(gè)測試人員發(fā)現(xiàn)了bug并報(bào)告,然后開發(fā)人員修復(fù)了這個(gè)bug。那么測試人員得到修正后的代碼需要多少時(shí)間?在一些軟件開發(fā)機(jī)構(gòu),這樣的報(bào)告修正再測試循環(huán)(Report-Fix-Retest loop)可能需要幾個(gè)禮拜。如果一個(gè)循環(huán)需要這么長的時(shí)間,通常意味著該機(jī)構(gòu)生產(chǎn)力很低。想讓整個(gè)開發(fā)過程運(yùn)轉(zhuǎn)得更平滑一點(diǎn),你必須想方設(shè)法使得報(bào)告修正再測試循環(huán)(Report-Fix-Retest loop)花的時(shí)間更少。一個(gè)好的辦法是每日構(gòu)建(daily builds)。 每日構(gòu)建意味著自動地,每天,完整地構(gòu)建整個(gè)代碼樹、(譯者按:“代碼樹”,原文為source tree,意思是將整個(gè)項(xiàng)目源代碼的目錄,子目錄,文件的位置盡可能事先固定下來,這樣在開發(fā)過程中各個(gè)模塊間,各個(gè)文件間的相對位置都不會混亂。源代碼樹指的就是一個(gè)項(xiàng)目所有的已經(jīng)組織好的代碼文件。通常代碼樹應(yīng)該用版本控制軟件管理起來。雖然這個(gè)概念很基本,但是據(jù)我的觀察,國內(nèi)還是有軟件公司在這方面做的不夠好的,所以有必要解釋一下。)自動地因?yàn)槟阍O(shè)定代碼每天在固定的時(shí)間構(gòu)建。在Unix環(huán)境下使用cron,在windows下使用“任務(wù)計(jì)劃”。每天 或者更頻繁. 當(dāng)然每天構(gòu)建的次數(shù)越多越好啦。但是有時(shí)候構(gòu)建次數(shù)還是有上限的,原因和版本控制有關(guān)系,等會兒我會談到的。完整地 很可能你的代碼有多個(gè)版本。多語言版本,多操作系統(tǒng)版本,或者高端低端版本。每日構(gòu)建(daily build)需要構(gòu)建所有這些版本。并且每個(gè)文件都需要從頭編譯,而不是使用編譯器的不完美的增量編譯功能。以下是每日構(gòu)建(daily build)能帶來的好處:1. 當(dāng)一個(gè)bug被修正了,測試者可以很快得到最新的修正后的版本開始重新測試,以驗(yàn)證bug是否真正地被修復(fù)了。 2. 開發(fā)人員可以更加確定他們對代碼做的修改不會破壞1024個(gè)操作系統(tǒng)上的任何一個(gè)版本。驗(yàn)證這一點(diǎn)不需要在他們的機(jī)器上安裝OS/2(IBM公司生產(chǎn)的PC機(jī)操作系統(tǒng))。 3. 那些每天將修改過的代碼導(dǎo)入(check in)版本控制服務(wù)器的開發(fā)人員知道,他們對一個(gè)模塊導(dǎo)入的修改不會拖別的開發(fā)人員的后腿。拖后腿的意思是,那些開發(fā)別的模塊的程序員使用這個(gè)修改過的模塊,出了問題,于是他們自己的模塊也沒有辦法開發(fā)下去了。每日構(gòu)建則不會有人拖后腿。如果把一個(gè)開發(fā)團(tuán)隊(duì)比作一臺PC機(jī),那么團(tuán)隊(duì)中的一個(gè)程序員對某個(gè)模塊的修改導(dǎo)致其他人無法開發(fā)別的模塊,相當(dāng)于PC機(jī)發(fā)生了藍(lán)屏。當(dāng)一個(gè)程序員忘記把他(她)新建立的文件導(dǎo)入到repository(指版本控制服務(wù)器上的代碼樹)時(shí),這種開發(fā)過程中的“藍(lán)屏”會經(jīng)常發(fā)生。因?yàn)樵谶@個(gè)程序員自己的計(jì)算機(jī)上有這個(gè)文件,所以他(她)構(gòu)建 這個(gè)程序沒有問題。但是其他程序員是從版本控制服務(wù)器上導(dǎo)出(check out)代碼的,由于服務(wù)器上沒有這個(gè)文件,他們遇到了鏈接錯(cuò)誤(link error),無法繼續(xù)工作了。 4. 外部團(tuán)隊(duì)(例如市場銷售部門,進(jìn)行beta測試的一些客戶)可以獲得一個(gè)比較穩(wěn)定的版本,這樣對他們開展自己的工作比較有利。 5. 假如你將每日構(gòu)建出的二進(jìn)制文件(例如一個(gè)可執(zhí)行程序,一個(gè)dll等等)存檔管理,那么當(dāng)你發(fā)現(xiàn)一個(gè)非常奇怪的,無法解決的bug時(shí),你可以通過對這些文件進(jìn)行二進(jìn)制搜索(binary search)來確定什么時(shí)候這個(gè)bug第一次出現(xiàn)。如果有對代碼進(jìn)行了完善的版本控制,你也可以找出是誰在何時(shí)對代碼進(jìn)行的導(dǎo)入(check in)導(dǎo)致了這個(gè)bug。 6. 當(dāng)開發(fā)者修正了測試者報(bào)告的一個(gè)錯(cuò)誤時(shí),如果測試者同時(shí)報(bào)告了發(fā)現(xiàn)錯(cuò)誤時(shí)的構(gòu)建的版本,開發(fā)人員可以直接在那個(gè)版本中測試是否bug真正被修復(fù)了。(譯者按:測試者報(bào)告出現(xiàn)了一個(gè)bug,只是報(bào)告了一個(gè)錯(cuò)誤癥狀,而錯(cuò)誤的原因可能有多個(gè),每個(gè)原因可能在不同的模塊中。前文中的方法是為了避免只修正了一個(gè)模塊中一個(gè)原因,別的模塊由于在變動,于是掩蓋了而不是修復(fù)了bug)以下是如何進(jìn)行每日構(gòu)建(daily build)的具體步驟。你需要用最快的電腦建立一個(gè)每日構(gòu)建服務(wù)器。寫一個(gè)腳本,可以自動從版本控制服務(wù)器中導(dǎo)出(check out)完整的代碼,(你當(dāng)然使用版本控制,不是嗎?),然后對代碼從頭開始進(jìn)行構(gòu)建(build),要構(gòu)建所有的版本。如果你有一個(gè)安裝打包程序,也要在腳本中自動運(yùn)行。所有會賣給最終用戶的東西都要包括在構(gòu)建過程中。把構(gòu)建出來的版本放在各自的的目錄里,不同時(shí)間構(gòu)建的相同版本也應(yīng)該按日期整理好,不要相互覆蓋。每天固定的時(shí)間運(yùn)行這樣的腳本。 最關(guān)鍵的是所有這些步驟都應(yīng)該由腳本自動化完成,從導(dǎo)出(check out)代碼到將最終產(chǎn)品放在網(wǎng)上供用戶下載(當(dāng)然在開發(fā)階段,產(chǎn)品是放在一臺測試服務(wù)器上的)。要保證開發(fā)過程中的任何東西的任何記錄是由文檔記錄的而不是由某個(gè)人的腦子來記錄的,這是唯一的辦法。否則你會碰到這樣的情況,產(chǎn)品需要發(fā)布了,可是只有Shaniqua知道如何將產(chǎn)品打包的,可是他剛剛被巴士撞了。在Juno公司(本文作者工作過的公司之一),要進(jìn)行每日構(gòu)建,你唯一需要學(xué)會的東西就是雙擊每日構(gòu)建服務(wù)器桌面上的一個(gè)快捷方式。 如果你在發(fā)行程序的當(dāng)天發(fā)現(xiàn)了一個(gè)小bug,沒有問題。修正它,然后重新運(yùn)行每日構(gòu)建腳本,現(xiàn)在你可以安安心心的發(fā)行程序了。當(dāng)然,黃金定律是每日構(gòu)建腳本應(yīng)該是把所有的事情從頭做一遍,遵循這個(gè)定律就不會有什么問題。 將你的編譯器的警告參數(shù)設(shè)到最大(在微軟的VC中是-W4 ; 在GCC中是-Wall),當(dāng)遇到任何一個(gè)最微小的警告時(shí)就應(yīng)該停下來。 如果每日構(gòu)建失敗了,可能整個(gè)開發(fā)團(tuán)隊(duì)的工作會因此進(jìn)行不下去。當(dāng)務(wù)之急是立刻找出原因,使得每日構(gòu)建能成功進(jìn)行下去。某天也許你會一天運(yùn)行好幾次每日構(gòu)建腳本的。 每日構(gòu)建一旦失敗,應(yīng)該自動地將失敗用email通知整個(gè)團(tuán)隊(duì)。提取錯(cuò)誤日志中的恰當(dāng)部分并包括在email正文中也不是很難。每日構(gòu)建腳本也可以將當(dāng)前的狀態(tài)報(bào)告整理成一個(gè)html文件,自動發(fā)布到一個(gè)所有人都可以訪問的web服務(wù)器上,這樣測試者可以很快知道那個(gè)版本的構(gòu)建是成功的。 當(dāng)我在微軟的Excel團(tuán)隊(duì)中工作時(shí),我們的一個(gè)有效辦法是,誰導(dǎo)致每日構(gòu)建(daily build)失敗,他(她)就得負(fù)責(zé)照看當(dāng)日的每日構(gòu)建(譯者按:微軟通常每日構(gòu)建都在半夜),直到有另一個(gè)人導(dǎo)致構(gòu)建失敗而接替他(她)。這樣做當(dāng)然可以使每個(gè)開發(fā)者都小心不要因?yàn)樽约捍a的錯(cuò)誤破壞了構(gòu)建,更重要的是團(tuán)隊(duì)中的每個(gè)人都可以學(xué)會每日構(gòu)建(daily build)的原理。 如果你的團(tuán)隊(duì)在同一個(gè)時(shí)區(qū)工作,在午飯時(shí)間進(jìn)行每日構(gòu)建(daily build)是個(gè)不錯(cuò)的主意。午飯前每個(gè)程序員導(dǎo)入(check in)代碼,這樣當(dāng)程序員在吃飯時(shí),構(gòu)建系統(tǒng)在工作。當(dāng)程序員吃完飯回來時(shí),如果每日構(gòu)建失敗了,所有的人也都在,可以盡快找出失敗的原因。當(dāng)構(gòu)建系統(tǒng)運(yùn)作起來時(shí),沒有人再會擔(dān)心別人導(dǎo)入(check in)代碼會妨礙自己的工作了。. 如果你的團(tuán)隊(duì)同時(shí)在兩個(gè)時(shí)區(qū)工作,計(jì)劃好每日構(gòu)建(daily build)的時(shí)間使得一個(gè)時(shí)區(qū)的工作不會影響另一個(gè)時(shí)區(qū)的工作。在Juno公司,紐約程序員在晚上7:00導(dǎo)入(check in)到版本控制服務(wù)器。如果他們的導(dǎo)入導(dǎo)致構(gòu)建失敗,印
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)守價(jià)議價(jià)及SP配合培訓(xùn)
- 風(fēng)電技能培訓(xùn)課件圖片素材
- 各種護(hù)理導(dǎo)管防滑脫措施
- 小學(xué)教導(dǎo)處常規(guī)管理匯報(bào)
- 肺炎的公休座談會
- 頸椎病健康教育課件
- 領(lǐng)航職業(yè)英語課件下載
- 預(yù)防踩踏班會課件
- 崗前培訓(xùn)結(jié)業(yè)匯報(bào)
- 預(yù)防小學(xué)生溺水課件
- 生命體征課件教學(xué)課件
- 2024年全國環(huán)保產(chǎn)業(yè)職業(yè)技能競賽(工業(yè)廢水處理工)考試題庫(含答案)
- 房屋及相關(guān)設(shè)施零星維修項(xiàng)目環(huán)境保護(hù)管理體系與措施
- 2024汽車行業(yè)社媒營銷趨勢【微播易CAA中國廣告協(xié)會】-2024-數(shù)字化
- 醫(yī)院藥房質(zhì)量控制制度
- 《烏魯木齊市國土空間總體規(guī)劃(2021-2035年)》
- HJ 651-2013 礦山生態(tài)環(huán)境保護(hù)與恢復(fù)治理技術(shù)規(guī)范(試行)
- SY-T 5333-2023 鉆井工程設(shè)計(jì)規(guī)范
- 冠脈介入進(jìn)修匯報(bào)
- 敘事護(hù)理學(xué)智慧樹知到期末考試答案章節(jié)答案2024年中國人民解放軍海軍軍醫(yī)大學(xué)
- 2024四川省南部縣事業(yè)單位招聘45人歷年公開引進(jìn)高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
評論
0/150
提交評論