一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

持續(xù)集成之“分支策略”?

  現(xiàn)代版本控制系統(tǒng)(SCM)的作用已不僅僅是保存歷史版本,它還是各軟件開發(fā)組織利用其分支功能實(shí)現(xiàn)多人并行開發(fā),提高生產(chǎn)效率的一種工具。對(duì)于稍有歷史的軟件產(chǎn)品來(lái)說(shuō),一般都會(huì)有代碼分支的出現(xiàn),也常常見(jiàn)到一些歷史悠久的產(chǎn)品其錯(cuò)綜復(fù)雜的分支版本樹甚至將產(chǎn)品交付團(tuán)隊(duì)拖入“無(wú)盡維護(hù)”的泥潭。分支的目的是希望“分而治之”,而持續(xù)集成的目的是“頻繁集成”,這二者之間又有哪些聯(lián)系呢?

  在《測(cè)試三角形與分段構(gòu)建策略原則》一文中,咱們說(shuō)到:由于自動(dòng)化測(cè)試時(shí)間較長(zhǎng),Joe的團(tuán)隊(duì)實(shí)施了分階段的持續(xù)集成。雖然這么做引入了一些風(fēng)險(xiǎn)(比如因提交階段構(gòu)建中的測(cè)試覆蓋面小而不能盡早發(fā)現(xiàn)代碼中問(wèn)題),但提高了整個(gè)團(tuán)隊(duì)的開發(fā)效率。而且,Joe會(huì)根據(jù)實(shí)際運(yùn)行情況,在提交構(gòu)建和次級(jí)構(gòu)建之間不斷調(diào)整自動(dòng)化測(cè)試用例集來(lái)緩解分階段構(gòu)建帶來(lái)的風(fēng)險(xiǎn)。

  現(xiàn)在,這個(gè)軟件游戲平臺(tái)的第一個(gè)版本已經(jīng)接近完成,馬上就要進(jìn)行內(nèi)測(cè)了。團(tuán)隊(duì)面臨的問(wèn)題是:“如何做分支管理?持續(xù)集成該怎么做?”

  一、短周期發(fā)布分支策略

  今天是星期五。下班后,Joe和Alice等主要開發(fā)人員并沒(méi)有馬上回家,而是在一個(gè)小酒吧里聊天呢。

  Alice說(shuō)道:“現(xiàn)在我們一直使用主干開發(fā)方式,團(tuán)隊(duì)所有人都工作在Trunk上,與之對(duì)應(yīng)的只有一個(gè)持續(xù)集成環(huán)境。下星期就要做內(nèi)測(cè)了,我們是不是應(yīng)該拉一個(gè)測(cè)試分支,用于修復(fù)測(cè)試中發(fā)現(xiàn)的缺陷,在主干繼續(xù)開發(fā)新功能呢?一旦修復(fù)完內(nèi)測(cè)缺陷的話,我們就可以在這個(gè)分支上進(jìn)行發(fā)布,再把這個(gè)測(cè)試分支的代碼變更合并回主干。就像這樣。”她拿了一張紙畫了出來(lái)(如圖1所示)。

  “好啊,好啊。我們分成兩個(gè)團(tuán)隊(duì),一個(gè)在測(cè)試分支上工作,修復(fù)內(nèi)測(cè)過(guò)程中發(fā)現(xiàn)的缺陷;另一個(gè)在主干上工作,開發(fā)新的功能。”Bob回應(yīng)道。

  “對(duì)于拉分支做測(cè)試這件事,我沒(méi)有疑問(wèn)。但是,我不同意最后再把代碼合并到主干上。”Joe說(shuō)道。“我們一直在使用持續(xù)集成實(shí)踐,目的就是盡早集成。為什么要等到發(fā)布以后再將測(cè)試分支的代碼合并回主干,而不是每次修復(fù)一個(gè)缺陷就合并回來(lái)呢?每次缺陷修復(fù)的代碼變更不會(huì)太多,所以合并起來(lái)很容易。等到最后再合并,首先是容易漏掉一些代碼,其次是一次合并代碼太多,容易出錯(cuò)。所以,我建議下星期拉分支時(shí),為測(cè)試分支也建立一個(gè)持續(xù)集成環(huán)境。每次發(fā)現(xiàn)缺陷時(shí),都為它寫一個(gè)測(cè)試,加到測(cè)試套件中。修復(fù)代碼提交后,就會(huì)觸發(fā)測(cè)試分支對(duì)應(yīng)的持續(xù)集成構(gòu)建。一旦構(gòu)建成功,就將其合并回主干。”說(shuō)完之后,他在Alice畫的那張圖上修改了一下(如圖2所示)。

  1. 拉分支之后,開發(fā)團(tuán)隊(duì)可以繼續(xù)開發(fā)新的功能。而測(cè)試團(tuán)隊(duì)可以單獨(dú)對(duì)分支進(jìn)行測(cè)試、部署,不受開發(fā)團(tuán)隊(duì)的影響。
  2. 一旦測(cè)試中發(fā)現(xiàn)問(wèn)題,開發(fā)人員要在該分支上修復(fù)。
  3. 在分支發(fā)布之后,一旦發(fā)現(xiàn)了嚴(yán)重問(wèn)題,僅在該發(fā)布分支上修復(fù)后即可發(fā)布補(bǔ)丁版本。
  4. 在分支上做修改后,就要根據(jù)實(shí)際情況進(jìn)行分析,是否要合并回主干。如果需要合并,應(yīng)該立即進(jìn)行。

  “那由誰(shuí)來(lái)負(fù)責(zé)把發(fā)布分支中的Bugfix合并回主干呢?”

  “當(dāng)然是由Bugfix的人來(lái)負(fù)責(zé)了,他是確保合并正確性的關(guān)鍵。如果Trunk上的代碼已被修改,無(wú)法合并,Bug負(fù)責(zé)人就要與主干開發(fā)人員交流,這個(gè)Bug在主干的有效性,然后再?zèng)Q定是否修改,在哪里修改的問(wèn)題。”

  “我們要對(duì)發(fā)布分支上的Bug定義修復(fù)標(biāo)準(zhǔn),盡量在Trunk上修復(fù)Bug,除非這個(gè)Bug嚴(yán)重影響發(fā)布質(zhì)量。這樣可以避免無(wú)休止地在發(fā)布分支上做代碼修改。這樣,Bug數(shù)才會(huì)收斂,發(fā)布分支的活躍期才會(huì)縮短。”

  “嗯,相對(duì)于我們一直使用的主干開發(fā)方式來(lái)說(shuō),這種短發(fā)布分支策略的成本是:

  1. 需要多套獨(dú)立的持續(xù)集成環(huán)境。即每個(gè)分支在處于活躍期時(shí),要有與之對(duì)應(yīng)的一套持續(xù)集成環(huán)境,以便不受影響。
  2. 每次發(fā)布分支上修復(fù)缺陷后,只要分支對(duì)應(yīng)的持續(xù)集成構(gòu)建成功,就要將其合并回主干。
  3. 由于主干開發(fā)的代碼可能因架構(gòu)改進(jìn)使原有缺陷不復(fù)存在,所以每次合并時(shí)都需要人為判斷一下合并的必要性。”

  二、長(zhǎng)周期發(fā)布分支策略?

  “哦,我之前工作的一家公司,就是用這種分支策略。”Bob說(shuō)道,“但情況變得非常復(fù)雜。版本滿天飛,想做合并都不容易。”

  Joe說(shuō)道:“我想,可能是因?yàn)樗麄兊目蛻舨幌肷?jí)版本,所以必須在已發(fā)布的版本上再發(fā)小版本吧?”

  “的確是這樣的。”Bob回答道,“他們的發(fā)布周期大約是半年。由于已發(fā)布的版本質(zhì)量不佳,所以總是有緊急修復(fù)的版本上線。另外,客戶比較擔(dān)心新版本的穩(wěn)定性,所以只要滿足自己的當(dāng)前需求,就會(huì)一直使用舊版本。有些大客戶還會(huì)要求公司開發(fā)針對(duì)其自身的特別需求,并快速上線,結(jié)果可想而知。”

  Alice說(shuō)道:“其實(shí),這已經(jīng)是短周期發(fā)布分支的變形,即有多個(gè)活躍分支的長(zhǎng)周期發(fā)布分支策略(如圖3所示)。這種分支策略是應(yīng)該盡量避免的,它的復(fù)雜性和維護(hù)成本都很高,因?yàn)椋?/p>

  1. 每次都要把缺陷修復(fù)代碼合并到后續(xù)的多個(gè)發(fā)布分支上,尤其是當(dāng)該缺陷發(fā)生在較老的版本,而當(dāng)前已有多個(gè)活躍版本需要維護(hù)時(shí)。
  2. 隨著時(shí)間的推移,每個(gè)分支上的自動(dòng)化測(cè)試用例增多,更多的分支會(huì)對(duì)持續(xù)集成環(huán)境中的測(cè)試機(jī)數(shù)量的需求快速增加。
  3. 發(fā)布周期長(zhǎng)誘使團(tuán)隊(duì)在已有的發(fā)布分支上再做子分支(如圖3中的R1.1),這會(huì)讓集成和驗(yàn)證工作變得更加復(fù)雜(如圖3中從R1.1到R2.0的Cherry Picking操作表明:需要向多個(gè)分支上合并部分代碼)。
  4. 由于每個(gè)活躍分支都要對(duì)應(yīng)一個(gè)持續(xù)集成環(huán)境,因此,分支越多,對(duì)持續(xù)集成環(huán)境的維護(hù)成本也就越高。

  Bob問(wèn)道:“有什么辦法避免這種糟糕的多活躍分支開發(fā)策略嗎?”

  “辦法當(dāng)然有,但不能解決所有問(wèn)題。”Joe回答道,“比方說(shuō),首先,要確保每個(gè)版本的開發(fā)質(zhì)量,讓客戶放心升級(jí)。其次,軟件產(chǎn)品要支持自動(dòng)升級(jí)。在通常情況下,只要滿足需求,用戶就不會(huì)輕易升級(jí)軟件。所以,要讓軟件具有自動(dòng)發(fā)現(xiàn)新版本并在后臺(tái)自動(dòng)升級(jí)的能力。當(dāng)然,在升級(jí)后要通知用戶。這樣,只要將新版本發(fā)布到互聯(lián)網(wǎng)上的某個(gè)服務(wù)器上就行了。最后,也是最重要的一點(diǎn),新版本發(fā)布周期要短一些,不斷快速地推出新特性,這樣就可以讓用戶對(duì)產(chǎn)品及研發(fā)團(tuán)隊(duì)有信心,讓客戶感覺(jué)他們的需求很快就會(huì)被滿足。”

  “對(duì)于那些企業(yè)用戶來(lái)說(shuō),這種方法可能不管用。因?yàn)椋髽I(yè)內(nèi)網(wǎng)很少可以連通外網(wǎng)。”Alice說(shuō)道。

  “如果是這種情況的話,除了軟件本身質(zhì)量好且能自動(dòng)無(wú)縫升級(jí)以外,在銷售時(shí)可以與客戶簽訂協(xié)議,告知所售軟件版本的生命周期(比如18個(gè)月)以及升級(jí)條款,促使企業(yè)升級(jí)該軟件,比如免費(fèi)的大版本升級(jí),或者因缺陷原因可免費(fèi)升級(jí)等等。”Joe回答道。

  “嗯,我們開發(fā)的是游戲軟件平臺(tái),部署在互聯(lián)網(wǎng)上,所以不會(huì)遇到這個(gè)問(wèn)題。”Alice說(shuō)道。

  Joe微笑著說(shuō)道:“我們將會(huì)面臨另外一種問(wèn)題,即多個(gè)小團(tuán)隊(duì)開發(fā)不同的游戲組件問(wèn)題。”

  “哦,對(duì)了!現(xiàn)在我們的游戲平臺(tái)中雖然僅有幾個(gè)游戲,目前還一起在主干上開發(fā)。但在下一版本中,我們會(huì)增加大量的游戲組件,那應(yīng)該如何應(yīng)對(duì)?我們的持續(xù)集成環(huán)境應(yīng)該是什么樣的呢?”Alice大聲地問(wèn)道。

  “嗯,是個(gè)好問(wèn)題!”Joe回答道。“我已經(jīng)有了一些想法。我們內(nèi)測(cè)結(jié)束后,再詳細(xì)討論吧!時(shí)間也不早啦,大家回去休息吧,周末愉快!”

it知識(shí)庫(kù)持續(xù)集成之“分支策略”?,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久精品伦理 | 一级美女毛片 | 国产色在线视频 | 日韩在线精品视频 | 五月丁香六月综合缴清无码 | 国产精品欧美韩国日本久久 | 亚洲精品福利在线观看 | 99精品久久久久久久免费看蜜月 | 国产精品福利一区二区 | 中文字幕亚洲一区二区三区 | 精品一区精品二区 | 91这里只有精品 | 水蜜桃一二二区视在线 | 中文国产成人精品久久水 | 久久性| 国产福利在线免费观看 | 香蕉成人国产精品免费看网站 | 亚洲成人毛片 | 国产成人污污网站在线观看 | 99精品免费观看 | 久久久久久久久久福利 | 被公侵犯肉体中文字幕一区二区 | 日韩成人免费一级毛片 | 69热在线观看| 日韩精品视频观看 | 欧亚激情偷乱人伦小说视频 | 国产一区二区三区在线视频 | 精品久久久久久 | 91频视 | 中文字幕精品在线 | 四虎在线永久免费观看 | 免费播放一区二区三区 | 久久婷婷午色综合夜啪 | 欧美高清强视频 | 成人播放 | 国产区亚洲区 | 国产区二区 | 在线看污片 | 福利视频一区二区 | 国产91精品一区二区视色 | 国产精品免费一区二区三区 |