原文:Top benefits of continuous integration
過(guò)去的十多年里,軟件開(kāi)發(fā)團(tuán)隊(duì)都從敏捷開(kāi)發(fā)(agile development)方式獲益不少赞厕。他們采用這種增長(zhǎng)式的開(kāi)發(fā)方式,通過(guò)協(xié)作開(kāi)發(fā),協(xié)作解決方案也得到了發(fā)展烦绳。 本文將談?wù)勈裁词浅掷m(xù)集成(CI态蒂,continuous integration)以及持續(xù)集成的好處骡苞。
什么是持續(xù)集成巷嚣?
讓我從解釋什么是CI開(kāi)始喘先,然后我們會(huì)逐一說(shuō)明CI的主要好處。CI和測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(test-driven development TDD)作為基礎(chǔ)架構(gòu)方法的一部分廷粒,拓展基礎(chǔ)的敏捷方式苹祟,并有很高的質(zhì)量和項(xiàng)目靈活性。
CI為敏捷開(kāi)發(fā)而生的评雌。 它將開(kāi)發(fā)整理成功能性的用戶故事。(User Stories)
Story就是一個(gè)可測(cè)試的小功能點(diǎn)(Story:功能點(diǎn)=1:1)直焙、或者是多個(gè)繼承性的小功能點(diǎn)組成的一個(gè)Story(Story:功能點(diǎn)=1:N)景东、或者是一個(gè)無(wú)法再分割的功能點(diǎn)(再分割這個(gè)功能點(diǎn)就無(wú)法進(jìn)行測(cè)試了)包含多個(gè)Story(Story:功能點(diǎn)=N:1)。
這些故事分成一組組的奔誓,變成一個(gè)個(gè)Sprint斤吐。CI的由來(lái)就是為了快速地找到issue, 給每個(gè)開(kāi)發(fā)者反饋他們的問(wèn)題厨喂。而TTD能快速地評(píng)估那個(gè)工作和措。你建立測(cè)試,然后開(kāi)發(fā)功能蜕煌,直到代碼通過(guò)測(cè)試派阱。當(dāng)你搭建好集成工作,每次你添加新的代碼的時(shí)候斜纪,它能運(yùn)行相應(yīng)的測(cè)試贫母。這樣確保新添加的不會(huì)破壞之前的功能性工作文兑。如果有開(kāi)發(fā)者的代碼確實(shí)阻礙了構(gòu)建,他們能夠得到快速地反饋腺劣。
敏捷方式可以讓軟件和系統(tǒng)團(tuán)隊(duì)快速應(yīng)對(duì)變化绿贞。 CI幫助系統(tǒng)開(kāi)發(fā)團(tuán)隊(duì)變的敏捷并且應(yīng)對(duì)好快速地業(yè)務(wù)變化,與此同時(shí)橘原,又能確保實(shí)時(shí)同步開(kāi)發(fā)中的實(shí)際硬件和軟件籍铁。CI讓團(tuán)隊(duì)成員在他們的域組(domain group)中高效地工作,專注于他們最擅長(zhǎng)的事趾断。 每天結(jié)束的時(shí)候拒名,他對(duì)項(xiàng)目的貢獻(xiàn)(個(gè)人理解為項(xiàng)目的修改和提交的代碼)將被集成,每部分工作被組合在一起歼冰。 而如果有人沒(méi)有集成靡狞,能夠快速被發(fā)現(xiàn)。
從技術(shù)的角度來(lái)看隔嫡,CI幫助團(tuán)隊(duì)更高效地一起工作甸怕。這些團(tuán)隊(duì)可以有功能交叉的,也可以是地理上分開(kāi)的腮恩,因?yàn)镃I能夠讓你不偏離設(shè)計(jì)梢杭。 人能夠在大團(tuán)隊(duì)工作,因?yàn)橐粋€(gè)復(fù)雜系統(tǒng)的不同組成部分會(huì)更加實(shí)實(shí)在在在一起工作秸滴。它很好地規(guī)避一些沒(méi)有使用CI的傳統(tǒng)敏捷開(kāi)發(fā)團(tuán)隊(duì)可能會(huì)遭遇的早期陷阱武契。 CI和TDD組合開(kāi)發(fā)讓更多人都能敏捷開(kāi)發(fā),因?yàn)樗屆艚蓍_(kāi)發(fā)方式更加高效荡含。
CI是一種軟件開(kāi)發(fā)方式咒唆,適合軟件成員需要頻繁地集成他們的工作(例如代碼),通常每個(gè)成員每天至少集成一次释液,甚至一天多次集成全释。每次集成都會(huì)自動(dòng)構(gòu)建(包括測(cè)試)來(lái)驗(yàn)證,來(lái)盡可能快的檢測(cè)出集成的錯(cuò)誤误债。很多團(tuán)隊(duì)返現(xiàn)這種方式對(duì)減少集成問(wèn)題有重要意義浸船,讓團(tuán)隊(duì)開(kāi)發(fā)集成軟件更加快速。
CI的目的是如果有缺陷被引入代碼庫(kù)中寝蹈,能提供迅速的反饋李命,讓它能被盡快的確認(rèn)和糾正。CI軟件攻擊能被用于自動(dòng)化測(cè)試和建立文件追蹤箫老。
CI的好處是什么封字?
- 預(yù)防集成問(wèn)題
- 集成bug能夠較早地檢測(cè)到,并且由于每次集成都是小變化組成,也更加便于追蹤周叮。這就在整個(gè)項(xiàng)目的生命周期中節(jié)約了時(shí)間和金錢辩撑。
- 避免最后發(fā)布版本前的混亂,當(dāng)每個(gè)人都試著提交稍不兼容的版本仿耽。
- 頻繁地提交代碼
- 將開(kāi)發(fā)測(cè)試歸類
- 使用專用的集成構(gòu)建機(jī)器
- 使用持續(xù)反饋機(jī)制
- 演示構(gòu)建
- 當(dāng)單元測(cè)試失敗或者出現(xiàn)bug合冀,如果開(kāi)發(fā)者需要在沒(méi)有調(diào)試的情況下恢復(fù)倉(cāng)庫(kù)的代碼到?jīng)]有bug的狀態(tài),只有很小部分的代碼會(huì)丟失(因?yàn)榧墒欠浅nl繁的)项贺。
- 當(dāng)前的構(gòu)建具有持續(xù)的可用性君躺,可用于測(cè)試,演示开缎,發(fā)布棕叫。
- 經(jīng)常提交代碼推動(dòng)開(kāi)發(fā)者編寫模塊化的,復(fù)雜度低的代碼
- 強(qiáng)制要求頻繁地自動(dòng)化測(cè)試
- 即時(shí)反饋本地變化對(duì)系統(tǒng)影響
- 自動(dòng)化測(cè)試和CI產(chǎn)生的度量(代碼的覆蓋度奕删,代碼的復(fù)雜度俺泣,特性的完整度)讓開(kāi)發(fā)者專注于代碼的功能性和質(zhì)量,推進(jìn)團(tuán)隊(duì)的開(kāi)發(fā)進(jìn)度
- 將軟件構(gòu)建從軟件部署中分離出來(lái)
- 和冗長(zhǎng)和高強(qiáng)度的集成說(shuō)再見(jiàn)
- 提高透明度完残,能更加方便溝通
- 花費(fèi)更少的時(shí)間調(diào)試伏钠,讓更多的時(shí)間用于新特性的開(kāi)發(fā)
- 當(dāng)你在一個(gè)可靠的基礎(chǔ)構(gòu)建,代碼能夠運(yùn)行得更好
- 減少集成問(wèn)題谨设,讓你交付軟件更加快速
- 自動(dòng)構(gòu)建
- 讓你的構(gòu)建自我測(cè)試(大概是自動(dòng)測(cè)試吧)
- 自動(dòng)部署
- CI是高質(zhì)量的保險(xiǎn)
從業(yè)務(wù)的角度來(lái)看熟掂,CI也有很多好處,它能帶來(lái)更好的績(jī)效扎拣,更快地將產(chǎn)品推向市場(chǎng)赴肚,能及早發(fā)現(xiàn)小問(wèn)題進(jìn)行修改,不用等到它變大變復(fù)雜二蓝。它們能更好應(yīng)對(duì)在開(kāi)發(fā)過(guò)程中引進(jìn)的需求誉券。這能給用戶創(chuàng)造更好的產(chǎn)品,這是敏捷的真正意義所在刊愚。