一、概述開發(fā)模式
?無論是瀑布式開發(fā)、敏捷式開發(fā)還是DevOps,整個(gè)流程都分為設(shè)計(jì)、開發(fā)、測(cè)試和部署四個(gè)部分,只不過各個(gè)部分的開始和結(jié)束時(shí)間節(jié)點(diǎn)不同。如下圖所示:

?從瀑布式開發(fā)到敏捷開發(fā)再到DevOps,各個(gè)階段的切換速度越來越快,瀑布式開發(fā)和敏捷開發(fā)的運(yùn)維部署工作都是放到最后,而DevOps結(jié)合敏捷開發(fā)思想,將部署工作也敏捷起來。

二、瀑布式開發(fā)
2.1 簡述瀑布式開發(fā)
?瀑布式開發(fā)是早期被廣泛采用的軟件開發(fā)模型。要求有明確的需求,按照需求一步步做好規(guī)劃,每一階段工作的完成是下一階段開始的前提,每一階段都要進(jìn)行嚴(yán)格的評(píng)審,保證各階段的工作做得足夠好時(shí)才允許進(jìn)入下一階段,它適用于需求明確的項(xiàng)目。
?最大的風(fēng)險(xiǎn)是,當(dāng)產(chǎn)品研發(fā)完成后,到了產(chǎn)品測(cè)試階段如果發(fā)現(xiàn)了問題,或者發(fā)現(xiàn)其無法滿足市場需求,那么就需要重新開發(fā),甚至需要重新規(guī)劃產(chǎn)品。
三、敏捷式開發(fā)
3.1簡述
?敏捷開發(fā)是一種以用戶需求進(jìn)化為核心、倡導(dǎo)擁抱變化、循環(huán)迭代、循環(huán)漸進(jìn)的開發(fā)方法。首先把用戶最關(guān)心的軟件原型做出來并交付給用戶,用戶在實(shí)際場景中發(fā)現(xiàn)問題并給予反饋,研發(fā)人員快速修改彌補(bǔ)需求中的不足。上述過程不斷迭代,直到用戶滿意。
?敏捷追求“更早地交付價(jià)值,更靈活地應(yīng)對(duì)變化”,適用于需求不明確、創(chuàng)新性或者需要搶占市場的項(xiàng)目,特別適合互聯(lián)網(wǎng)項(xiàng)目。
3.2 原則
- 我們最重要的目標(biāo),是通過持續(xù)不斷地及早交付有價(jià)值的軟件來使客戶滿意。
- 欣然面對(duì)需求變化,即使到了開發(fā)的后期也一樣。敏捷過程利用變化為客戶創(chuàng)造競爭優(yōu)勢(shì)。
- 經(jīng)常性地交付可以工作的軟件,交付的間隔可以從幾周到幾個(gè)月,交付的時(shí)間間隔越短越好。
- 業(yè)務(wù)人員和開發(fā)人員必須相互合作,項(xiàng)目中的每一條都不例外。
- 激發(fā)個(gè)體的斗志,以他們?yōu)楹诵拇罱?xiàng)目,提供所需的環(huán)境和支援,輔以信任,從而達(dá)成目標(biāo)。圍
- 無論團(tuán)隊(duì)內(nèi)外,最具有效果并且富有效率的傳遞信息的方法,就是面對(duì)面的交談。
- 可工作的軟件是進(jìn)度的首要進(jìn)度標(biāo)準(zhǔn)。
- 敏捷過程倡導(dǎo)可持續(xù)開發(fā)。負(fù)責(zé)人、開發(fā)者和用戶要能夠共同維持其步調(diào)穩(wěn)定連續(xù)。
- 不斷地追求技術(shù)卓越和良好設(shè)計(jì),會(huì)增強(qiáng)敏捷能力。
- 以簡潔為本,極力減少不必要工作量的藝術(shù)。
- 最好的架構(gòu)、需求和設(shè)計(jì)出自于自組織的團(tuán)隊(duì)。
- 團(tuán)隊(duì)定期地反思如何能夠提高效能,并依此調(diào)整自身的舉止表現(xiàn)。
3.3 宣言
- 個(gè)體和交互 勝過 過程和工具
- 可以工作的軟件 勝過 面面俱到的文檔
- 客戶合作 勝過 合同談判
- 響應(yīng)變化 勝過 遵循計(jì)劃
四、DevOps
4.1 簡述
?DevOps是一種方法論,DevOps = Development + Operations,即開發(fā)團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)一體化,盡可能地為公司創(chuàng)造更多價(jià)值。
?DevOps是一種軟件開發(fā)實(shí)踐,它將人員、流程和技術(shù)結(jié)合在一起,以交付持續(xù)的價(jià)值。該方法分為計(jì)劃和跟蹤、開發(fā)、生成和測(cè)試、交付以及監(jiān)視和操作。

?DevOps的獨(dú)特之處在于開發(fā)、IT運(yùn)營、質(zhì)量工程和安全團(tuán)隊(duì)協(xié)同工作,在發(fā)布新產(chǎn)品、版本或更新所涉及的所有任務(wù)中創(chuàng)造效率。
?DevOps將開發(fā)和運(yùn)營合并為一個(gè)團(tuán)隊(duì),專注于快速交付和穩(wěn)定的基礎(chǔ)架構(gòu)。其目標(biāo)包括:
- 將完成的代碼快速交付到生產(chǎn)環(huán)境;
- 最小的生產(chǎn)故障。
- 從故障中立即恢復(fù)。
4.2 價(jià)值觀
?DevOps是一種文化,是一種軟件開發(fā)的方式或者基礎(chǔ)設(shè)施的方式,也是一種構(gòu)建和部署軟件和應(yīng)用的方式。它假設(shè)開發(fā)和運(yùn)維之間沒有隔閡,他們一起合作,沒有矛盾。
?DevOps基于其它兩個(gè)領(lǐng)域的實(shí)踐:精益和敏捷。DevOps不是一個(gè)公司內(nèi)的崗位或角色;它是一個(gè)組織或團(tuán)隊(duì)對(duì)持續(xù)交付、持續(xù)部署和持續(xù)集成的堅(jiān)持不懈的追求。三種方式定義的DevOps的理念:
- 第一種:流程原則
- 第二種:反饋原則
- 第三種:持續(xù)學(xué)習(xí)原則
4.3 原則
1、持續(xù)交付的八大原則
?DevOps持續(xù)交付的八大原則對(duì)可運(yùn)維性給出了這樣的定義,在企業(yè)中研發(fā)和運(yùn)維體系必然需要相互配合,開發(fā)團(tuán)隊(duì)負(fù)責(zé)功能性需求實(shí)現(xiàn)的同時(shí),在架構(gòu)和編碼上注重非功能性需求的實(shí)現(xiàn),測(cè)試團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)將圍繞著各自職能的需求,規(guī)劃與建設(shè)DevOps流水線中對(duì)應(yīng)的工具系統(tǒng),加速企業(yè)IT價(jià)值鏈的流轉(zhuǎn),以為企業(yè)創(chuàng)造更大的商業(yè)價(jià)值。
- 為軟件的發(fā)布創(chuàng)建一個(gè)可重復(fù)且可靠的過程:標(biāo)準(zhǔn)化發(fā)布操作,建立可靠的腳本/工具,并用自動(dòng)化流程實(shí)現(xiàn)編排。
- 將幾乎所有事情自動(dòng)化:區(qū)分場景,將計(jì)劃內(nèi)任務(wù)實(shí)現(xiàn)自動(dòng)化運(yùn)維。
- 把所有的東西都納入版本控制:可描述、可度量、可監(jiān)督,并納入運(yùn)維平臺(tái)管理。
- 提前并頻繁地做出讓你感到痛苦的事情:讓錯(cuò)誤盡早的暴露,并修復(fù)它。
- “DONE”意味著“已發(fā)布”:交付到用戶受眾才是完成。
- 交付過程是每個(gè)成員的責(zé)任:協(xié)同合作,減少等待的浪費(fèi)。
- 持續(xù)改進(jìn):閉環(huán),不斷提升能力。
2、提倡的原則
- 從瓶頸入手
- Start Small:從小做起
- 痛苦的事情優(yōu)先解決
- 工具也是一種文化
- 自動(dòng)化別人,先自動(dòng)化自己
- 價(jià)值拉動(dòng),而非事務(wù)驅(qū)動(dòng)
- 構(gòu)建指標(biāo),驅(qū)動(dòng)DevOps落地。
- 創(chuàng)建從開發(fā)過程下游至上游的反饋環(huán)。
- 強(qiáng)調(diào)全局優(yōu)化,避免局部優(yōu)化
- 持續(xù)做試驗(yàn)和學(xué)習(xí)的文化,通過反復(fù)實(shí)踐來達(dá)到精通。
4.4 DevOps包含一些工具鏈
?DevOps實(shí)踐涉及到開發(fā)部門以及軟件研發(fā)的整個(gè)生命周期,這意味著在整個(gè)開發(fā)生命周期中,涉及到一大批新舊工具,包括從規(guī)劃、編碼、測(cè)試、發(fā)布、監(jiān)控等自動(dòng)化的流程工具。

?DevOps融合了一系列基本原則和實(shí)踐的方法論,并從這些實(shí)踐中派生出了各種工具。這些工具體現(xiàn)在軟件開發(fā)和交付過程的不斷階段。
- 編碼:代碼開發(fā)和審閱,版本控制工具、代碼合并工具
- 構(gòu)建:持續(xù)集成工具、構(gòu)建狀態(tài)統(tǒng)計(jì)工具
- 測(cè)試:通過測(cè)試和結(jié)果確定績效的工具
- 打包:成品倉庫、應(yīng)用程序部署前暫存
- 發(fā)布:變更管理、發(fā)布審批、發(fā)布自動(dòng)化
- 配置:基礎(chǔ)架構(gòu)配置和部署,基礎(chǔ)架構(gòu)即代碼工具
- 監(jiān)控:應(yīng)用程序性能監(jiān)控、最終用戶體驗(yàn)
4.5 實(shí)踐DevOps需要建立哪些能力
1、不可或缺的自動(dòng)化能力
主要體現(xiàn)在三點(diǎn)上:
- 自動(dòng)化比手動(dòng)快
- 工具不會(huì)像人一樣容易犯錯(cuò)誤
- 通過自動(dòng)化按照定義執(zhí)行確保每次執(zhí)行的一致性
2、建立持續(xù)支付能力
主要體現(xiàn)在三點(diǎn)上:
- 通過統(tǒng)一的部署流水線將從代碼提交到交付給用戶的整個(gè)過程高度可視化出來,信息透明;讓開發(fā)、測(cè)試和運(yùn)維以高度一致的方式工作在同一個(gè)流水線上,真正建立起協(xié)作。
- 每一次的軟件變更在這個(gè)完整的流水線中得到充分的驗(yàn)證,盡早發(fā)現(xiàn)有缺陷的變更。
- 將一些必不可少的控制環(huán)節(jié)內(nèi)建到自動(dòng)化過程中,比如質(zhì)量保障過程、過程度量、過程審計(jì)信息等,從而弱化很多傳統(tǒng)依靠人為檢查的管理流程。
3、利益共同體的合作文化
以提高業(yè)務(wù)響應(yīng)效率出發(fā),要有一榮俱榮、精誠合作、共同進(jìn)步的態(tài)度。

?DevOps成功的關(guān)鍵在于文化轉(zhuǎn)變,除了上面提到工具,組織文化的轉(zhuǎn)變也同等重要,我們總結(jié)出了很多DevOps的其他因素,比如人(People)的思想和思考方式、開發(fā)和運(yùn)維的流程(Process)、精益(Lean)、自動(dòng)化(Automation)、測(cè)量(Measurement)。
在組織文化方面,DevOps推崇:
- 尊重(Respect)
- 正視失?。℉ealthy attitude about failure)
- 不埋怨(Avoiding Blame)
- 精益求精
- 工程質(zhì)量文化
- 快速驗(yàn)證文化
- 客戶導(dǎo)向文化
4.6 最佳實(shí)踐手段:CI/CD
?DevOps是CI/CD思想的延伸,CI/CD則是DevOps的技術(shù)核心,如果沒有CI/CD,沒有自動(dòng)化測(cè)試,DevOps是沒有任何意義的。所以說DevOps是以CI/CD為基礎(chǔ)來優(yōu)化程序的開發(fā)、測(cè)試、運(yùn)維等各個(gè)不同環(huán)節(jié)。
1、CI
?CI:持續(xù)集成,是一種開發(fā)實(shí)踐,它倡導(dǎo)團(tuán)隊(duì)成員需要頻繁的集成他們的工作,每次集成都通過自動(dòng)化構(gòu)建(包括編譯、構(gòu)建、自動(dòng)化測(cè)試)來驗(yàn)證,從而盡快地發(fā)現(xiàn)集成中的錯(cuò)誤。讓正在開發(fā)的軟件始終處于可工作的狀態(tài),讓產(chǎn)品快速迭代,同時(shí)還能保持高質(zhì)量。
2、CD
CD包含了兩層內(nèi)容:持續(xù)交付和持續(xù)部署。
?持續(xù)交付是持續(xù)集成的延伸或者看作持續(xù)集成的下一步,它將集成后的代碼部署到類生產(chǎn)環(huán)境,確??梢砸钥沙掷m(xù)的方式快速向客戶發(fā)布新的更改。如果代碼沒有問題,可以手工部署到生產(chǎn)環(huán)境中。它強(qiáng)調(diào)的是,不管怎么更新,軟件是隨時(shí)隨地可以交付的。
?持續(xù)部署是持續(xù)交付的下一步,在持續(xù)交付的基礎(chǔ)上,由開發(fā)人員或運(yùn)維人員自助式的定期向生產(chǎn)環(huán)境部署穩(wěn)定的構(gòu)建版本,持續(xù)部署的目標(biāo)是代碼在任何時(shí)刻都是可部署的,并可自動(dòng)進(jìn)入到生產(chǎn)環(huán)境。
?持續(xù)交付是指團(tuán)隊(duì)確保每個(gè)變更可以部署至生產(chǎn)環(huán)境,但也許并不需要實(shí)際部署,這通??赡苁翘幱跇I(yè)務(wù)方面的原因。而持續(xù)部署是指每個(gè)變更可以自動(dòng)部署到生產(chǎn)環(huán)境。
五、比對(duì)瀑布、敏捷、DevOps
5.1 瀑布的優(yōu)劣

5.2 敏捷的優(yōu)劣

5.3 DevOps的優(yōu)勢(shì)

5.4 敏捷與DevOps共存
?關(guān)于 DevOps 和敏捷,最重要的一點(diǎn)是它們不是互斥的。
?DevOps 是一種文化,促進(jìn)所有參與軟件開發(fā)和維護(hù)的參與者之間的協(xié)作。
?敏捷可以被描述為一種開發(fā)方法,旨在需求不斷變化的現(xiàn)實(shí)中維護(hù)工作效率和驅(qū)動(dòng)發(fā)布。
?盡管 DevOps 和敏捷是不同的,但是如果將這兩種方法結(jié)合使用,將會(huì)帶來更高的效率和更可靠的結(jié)果。DevOps是敏捷的有效補(bǔ)充,是將運(yùn)維納入產(chǎn)品開發(fā)過程的思維方式,是敏捷開發(fā)方法論的升級(jí),更強(qiáng)調(diào)自動(dòng)化工具的實(shí)現(xiàn)與應(yīng)用,以幫助實(shí)現(xiàn)軟件的快速迭代。
六、未來發(fā)展
?DevOps是精益思想應(yīng)用在IT領(lǐng)域的必然結(jié)果,源起于開發(fā)側(cè)的敏捷運(yùn)動(dòng),由于端到端的系統(tǒng)優(yōu)化需求,發(fā)展到開發(fā)、測(cè)試、運(yùn)維的聯(lián)動(dòng)。
?從其發(fā)展脈絡(luò),可以發(fā)現(xiàn)DevOps的必然發(fā)展方向,那就是向業(yè)務(wù)側(cè)延伸。
6.1 BizDevOps
?業(yè)務(wù)是產(chǎn)品開發(fā)和運(yùn)維的源頭,完整的價(jià)值流必須從源頭開始。這不是預(yù)測(cè),而是正在發(fā)生的事實(shí),大部分DevOps的實(shí)施都已經(jīng)將業(yè)務(wù)側(cè)包含在內(nèi),成為BizDevOps。
?BizDevOps需要達(dá)成的目標(biāo)如下所示:
- 需求管理:分別從業(yè)務(wù)代表/產(chǎn)品經(jīng)理/開發(fā)人員/測(cè)試人員等視角提供符合各自角色的需求看板
- 鏈路打通:打通從需求到設(shè)計(jì),研發(fā),測(cè)試,運(yùn)維,運(yùn)行的信息鏈條
- 價(jià)值流可視化:從端到端可視化地傳遞價(jià)值流
- 促進(jìn)交付質(zhì)量:設(shè)置驗(yàn)收標(biāo)準(zhǔn),統(tǒng)計(jì)標(biāo)準(zhǔn)達(dá)成率,反饋需求最終交付質(zhì)量
6.2 MLDevOps
?機(jī)器學(xué)習(xí)(ML)系統(tǒng)是一種軟件系統(tǒng),所以DevOps也適用于構(gòu)建和運(yùn)維可靠的ML系統(tǒng)。然而,ML系統(tǒng)與其他軟件系統(tǒng)有以下不同:
- 團(tuán)隊(duì)技能:一個(gè)ML項(xiàng)目中,通常有專注于數(shù)據(jù)分析,模型開發(fā)和實(shí)驗(yàn)數(shù)據(jù)科學(xué)家和ML研究人員,他們對(duì)構(gòu)建生產(chǎn)級(jí)別的服務(wù)可能沒有太多經(jīng)驗(yàn)。
- 開發(fā):ML本事帶有實(shí)驗(yàn)性質(zhì)。你可能會(huì)用不同的特征、算法、建模方法、參數(shù)設(shè)置,去更快的解決問題。最大的挑戰(zhàn)是追蹤哪種方式有效果或者沒有效果,并且用最可復(fù)用的代碼保證結(jié)果可重現(xiàn)。
- 測(cè)試:測(cè)試ML系統(tǒng)比測(cè)試其它軟件系統(tǒng)更復(fù)雜。你需要數(shù)據(jù)驗(yàn)證,模型的評(píng)價(jià)標(biāo)準(zhǔn)還有模型驗(yàn)證。
- 部署:在ML系統(tǒng)中,部署不會(huì)像部署一個(gè)線下模型作為一個(gè)預(yù)測(cè)服務(wù)那樣簡單。還要有一個(gè)可以重復(fù)訓(xùn)練模型的多階段流水線。并可以將數(shù)據(jù)科學(xué)家在部署之前手動(dòng)完成的步驟自動(dòng)化,以訓(xùn)練和驗(yàn)證新模型。
- 投產(chǎn):ML模型性能可能會(huì)降低,這不僅是由于編碼不理想,還因?yàn)椴粩鄶U(kuò)充的數(shù)據(jù)配置文件。模型比傳統(tǒng)軟件系統(tǒng)更可能發(fā)生偏離。因此您需要跟蹤數(shù)據(jù)的匯總統(tǒng)計(jì)并監(jiān)控模型的在線性能,以便在值偏離您的預(yù)期時(shí)發(fā)送通知或回滾。
?ML系統(tǒng)和其他軟件系統(tǒng)在源代碼控制的持續(xù)集成、單元測(cè)試、集成測(cè)試以及軟件模塊或包的持續(xù)交付也有一些顯著的差異:
- CI 不再只是測(cè)試和驗(yàn)證代碼和組件,還包括測(cè)試和驗(yàn)證數(shù)據(jù)、數(shù)據(jù)模式和模型。
- CD 不再是關(guān)于單個(gè)軟件包或服務(wù),而是一個(gè)可以自動(dòng)部署另一個(gè)模型預(yù)測(cè)服務(wù)的流水線。
- CT(持續(xù)訓(xùn)練)是機(jī)器學(xué)習(xí)系統(tǒng)獨(dú)有的特性,包含自動(dòng)化重復(fù)訓(xùn)練和為模型提供服務(wù)。
6.3 APPDevOps
?客戶端涉及H5、Android、iOS,手工作業(yè)比較多,管理愈發(fā)困難。DevOps可以通過自動(dòng)化通過減少手工作業(yè),實(shí)現(xiàn)一站式構(gòu)建與運(yùn)維平臺(tái)。
- H5應(yīng)用的離線包構(gòu)建以及發(fā)布
- Android應(yīng)用的安裝包構(gòu)建
- IOS應(yīng)用的安裝包構(gòu)建
七、小結(jié)
?本文是本人整理總結(jié)的,內(nèi)容來源于網(wǎng)絡(luò)與書籍,如果引用作者的文章,可以聯(lián)系我,我會(huì)在來源進(jìn)行備注。
如果需要給我修改意見的發(fā)送郵箱:erghjmncq6643981@163.com
資料參考:《敏捷軟件開發(fā)》
轉(zhuǎn)發(fā)博客,請(qǐng)注明,謝謝。