持續(xù)交付成熟度模型的解析和理解
持續(xù)交付的原則和方法,正在迅速地被越來(lái)越多的人認(rèn)可為一種真正的業(yè)務(wù)敏捷的成功策略。對(duì)于許多組織結(jié)構(gòu),問(wèn)題不再是“為什么要采用”,而是“如何采用”:持續(xù)交付如何起步,以及組織機(jī)構(gòu)應(yīng)該進(jìn)行哪些調(diào)整,才能保證得到可以接受的成果。本文介紹的這個(gè)成熟度模型,目的在于給出一個(gè)框架以及對(duì)幾個(gè)關(guān)鍵方面的理解,這些方面是你在組織中采用持續(xù)交付時(shí)需要重點(diǎn)考慮的。
為什么要有這個(gè)成熟度模型?
持續(xù)交付的中心思想就在于著眼全局,去考慮影響軟件開(kāi)發(fā)和發(fā)布的方方面面。不幸的是,對(duì)于任何正常規(guī)模的,比較重要的業(yè)務(wù),這些影響因素都會(huì)包括相當(dāng)多的步驟和活動(dòng)。從軟件開(kāi)發(fā)到發(fā)布的端到端過(guò)程往往冗長(zhǎng)而笨重,牽扯到許許多多的員工、部門(mén)和障礙,使得持續(xù)交付的實(shí)現(xiàn)看起來(lái)力不從心。我們從哪里開(kāi)始呢?我們是不是什么 都要做,有哪些部分可以省略?在哪些部分我們能得到最顯著、最快速的效果?這些都是在你開(kāi)始接觸持續(xù)交付的實(shí)現(xiàn)時(shí),不可避免會(huì)出現(xiàn)的問(wèn)題。
這就是我們?yōu)槭裁匆獎(jiǎng)?chuàng)造持續(xù)交付成熟度模型,給出結(jié)構(gòu)和理解持續(xù)交付及其核心部件的實(shí)現(xiàn)。這種模型的靈感主要來(lái)源于我們?cè)趲讉€(gè)持續(xù)交付實(shí)施項(xiàng)目中結(jié)合起來(lái)的經(jīng)驗(yàn),也來(lái)自于根據(jù)這個(gè)主題選定的書(shū)籍,論文和博客文章,其中 Jez Humble 和 David Farley 的開(kāi)創(chuàng)性著作持續(xù)交付(http://www.amazon.com/dp/0321601912?tag=contindelive-20)和Eric Minick 與 Jeffrey Fredricks了不起的白皮書(shū) 企業(yè)持續(xù)交付模型(http://www.urbancode.com/html/resources/white-papers/Enterprise_Continuous_Delivery_Maturity_Model/) 是值得特別表?yè)P(yáng)的兩個(gè)。有了這個(gè)模型,我們的目標(biāo)更廣泛了,擴(kuò)展出超越自動(dòng)化的概念,突顯了你要在整個(gè)組織之間成功實(shí)施持續(xù)交付所需考慮的所有關(guān)鍵方面。
一種結(jié)構(gòu)化的嘗試
敏捷開(kāi)發(fā)這場(chǎng)十年前開(kāi)始的旅程,到今天終于在工業(yè)界站穩(wěn)了腳跟?,F(xiàn)在的業(yè)務(wù)***開(kāi)始逐漸接受這個(gè)事實(shí):軟件開(kāi)發(fā)有“敏捷”這么一種新的思考方式。這種思考模式的轉(zhuǎn)移,如果你不介意這么叫的話(huà),最終會(huì)不可避免地將工業(yè)界分裂為兩派:一派在競(jìng)爭(zhēng)中艱難掙扎,另一派則有能力保持敏捷,IT 組織反應(yīng)快速而高效,能提供可靠的業(yè)務(wù)保證,從而在競(jìng)爭(zhēng)中立于不敗之地。在昂貴、緩慢、不可預(yù)知而過(guò)時(shí)的流程面前,IT 再次推動(dòng)了革新。進(jìn)入這個(gè)新領(lǐng)域的方法有很多,在此我們主要介紹一種結(jié)構(gòu)化的嘗試,以期獲得***的結(jié)果。盡管敏捷方法一般被認(rèn)為***從組織內(nèi)部成長(zhǎng)起來(lái),我們發(fā)現(xiàn)這種嘗試仍有局限性。組織的某些部門(mén)還不夠成熟,無(wú)法適應(yīng)和調(diào)整,因此阻礙了開(kāi)發(fā),形成了頑固不化的組織邊界。要想讓整個(gè)組織一起改變,***方法是建立一個(gè)穩(wěn)固的平臺(tái),這個(gè)平臺(tái)需要具有一些重要的先決條件,確保組織向正確的方向發(fā)展。平臺(tái)需要采用特定的工具、原則、方法和實(shí)踐方式,我們歸為關(guān)鍵的5類(lèi):文化與體制,設(shè)計(jì)與架構(gòu),構(gòu)建與部署,測(cè)試與證明,信息與報(bào)告。將持續(xù)交付模型根據(jù)自然的推進(jìn)過(guò)程結(jié)構(gòu)化為這5類(lèi),可以給你提供一個(gè)堅(jiān)實(shí)的基礎(chǔ),來(lái)進(jìn)行快速的改革并獲得可接受的成果。
創(chuàng)建成熟度模型是為了強(qiáng)調(diào)這五個(gè)基本類(lèi)別,并讓你掌握公司的成熟度。當(dāng)計(jì)劃持續(xù)交付實(shí)現(xiàn)時(shí),你的評(píng)估講給你提供很好的基準(zhǔn)并幫助你確定最快、***效率的初步行動(dòng)。這個(gè)模塊會(huì)指明哪個(gè)實(shí)踐必不可少,哪個(gè)應(yīng)該歸位高級(jí)或者專(zhuān)家級(jí)的以及從一個(gè)基本遷移到下一個(gè)需要什么條件。
五個(gè)級(jí)別
這個(gè)模型定義了五個(gè)成熟度級(jí)別:基礎(chǔ)、初級(jí)、中級(jí)、高級(jí)和專(zhuān)家級(jí)。它是基于我們可見(jiàn)的,現(xiàn)在大部分機(jī)構(gòu)采用的基礎(chǔ)級(jí)別附近的一個(gè)典型的工業(yè)平均水平為基點(diǎn)校準(zhǔn)的。一些機(jī)構(gòu)在某些類(lèi)別達(dá)到初級(jí),另一些(模型外)低于基礎(chǔ)級(jí)別,但平均來(lái)說(shuō),基礎(chǔ)級(jí)別是很多機(jī)構(gòu)的典型起點(diǎn)。中級(jí)級(jí)別是指一個(gè)能讓你受益于更大影響的持續(xù)交付實(shí)踐的成熟度級(jí)別。高級(jí)級(jí)別包括那些可以產(chǎn)生更高實(shí)質(zhì)性?xún)r(jià)值和影響的實(shí)踐。***的成熟度級(jí)別:專(zhuān)家級(jí)包含對(duì)某些希望或需要專(zhuān)注特定實(shí)踐的機(jī)構(gòu)非常重要的實(shí)踐。
層級(jí)并不是需要順序通過(guò)的強(qiáng)制的階段,但是它們可以做為評(píng)估和計(jì)劃的基礎(chǔ)。無(wú)論試圖保持總體的成熟度水平公平多什么重要,一定要牢記大的變化可能會(huì)在組織里引起批評(píng)和大家的不情愿,因此推薦通過(guò)漸進(jìn)的方法來(lái)推進(jìn)層級(jí)的發(fā)展。
五個(gè)域(分類(lèi))
模型已經(jīng)定義 了五個(gè)域(分類(lèi)),這些分類(lèi)代表了在實(shí)施持續(xù)的發(fā)布時(shí)需要考慮的核心的角度。每個(gè)分類(lèi)都有它自身的成熟度的連續(xù)性,但是一個(gè)組織一般是逐步達(dá)到某些域(分類(lèi))的成熟度而不是只有一個(gè)或兩個(gè)域(分類(lèi)),因?yàn)樗鼈兩媳舜岁P(guān)聯(lián),一定程度上相互影響的。
文化與組織
當(dāng)目標(biāo)是創(chuàng)建一個(gè)穩(wěn)定的持續(xù)發(fā)布環(huán)境時(shí),組織和它的文化是需要考慮的重要的角度,這個(gè)環(huán)境會(huì)受到它們的影響。
基本階段
典型的組織在基本階段,開(kāi)始在后臺(tái)日志進(jìn)行優(yōu)化工作,定義了一些流程,這些流程進(jìn)行了簡(jiǎn)單的文檔化,開(kāi)發(fā)人員習(xí)慣了經(jīng)常提交版本控制。
初始階段
進(jìn)入初始階段,項(xiàng)目團(tuán)隊(duì)是穩(wěn)定的,組織逐步開(kāi)始移除測(cè)試之間的邊界。大量的后臺(tái)日志自然而然的合并到每個(gè)團(tuán)隊(duì),基本的敏捷方法已開(kāi)始應(yīng)用,相對(duì)健壯的團(tuán)隊(duì)已共同體會(huì)到了糟糕的事情發(fā)生時(shí)的痛苦。
中間級(jí)
在中間級(jí)你將會(huì)收獲一個(gè)擴(kuò)展性更好的團(tuán)隊(duì)合作,數(shù)據(jù)庫(kù)管理員、配置管理員和運(yùn)維人員開(kāi)始成為團(tuán)隊(duì)的一部分,或者至少團(tuán)隊(duì)頻繁的與他們溝通。多個(gè)流程已經(jīng)穩(wěn)定,所有的變更、問(wèn)題、新功能、緊急修復(fù)等都依照相同的方式進(jìn)入生產(chǎn)環(huán)境。決策分散到項(xiàng)目團(tuán)隊(duì),組件的所有者已經(jīng)定義了,這些使得項(xiàng)目團(tuán)隊(duì)可以高質(zhì)量的構(gòu)建,可以為持續(xù)的生產(chǎn)和過(guò)程改進(jìn)制定計(jì)劃。
高階級(jí)
在高階級(jí),團(tuán)隊(duì)有了能力和信心,它需要自始至終為產(chǎn)品的變更負(fù)責(zé)。持續(xù)的改進(jìn)機(jī)制是適當(dāng)?shù)?,例如成立了?zhuān)門(mén)的工具團(tuán)隊(duì)通過(guò)改進(jìn)工具和自動(dòng)化來(lái)為其它團(tuán)隊(duì)提供服務(wù)。在這個(gè)階段,功能的發(fā)布可以與實(shí)際的布署相分離,這會(huì)給項(xiàng)目產(chǎn)生不同的角色。一個(gè)項(xiàng)目可以關(guān)注于一個(gè)或多個(gè)團(tuán)隊(duì)的產(chǎn)品需求,當(dāng)所有的或者相當(dāng)數(shù)據(jù)的需求已被驗(yàn)證并布署到生產(chǎn)環(huán)境,項(xiàng)目組應(yīng)當(dāng)計(jì)劃并組織針對(duì)不同用戶(hù)的實(shí)用版本。這種關(guān)注的分離優(yōu)化了項(xiàng)目打包和發(fā)布功能的的靈活性,同時(shí)使得開(kāi)發(fā)團(tuán)隊(duì)更好的跟進(jìn)產(chǎn)品,因?yàn)樗麄儾恍枰奂幼兏?,不需要因協(xié)調(diào)項(xiàng)目的發(fā)布而等待。
專(zhuān)家級(jí)
在專(zhuān)家級(jí),一些組織選擇花費(fèi)很大的努力形成完整的跨職能的團(tuán)隊(duì),這些完全是自發(fā)的。因?yàn)橛袠O短的迭代周期和相當(dāng)成熟的發(fā)布通道,這樣的組織有信心適應(yīng)相當(dāng)嚴(yán)格的從策略到產(chǎn)品推進(jìn)的失敗率要求。
設(shè)計(jì)和架構(gòu)
你的產(chǎn)品和服務(wù)的設(shè)計(jì)和架構(gòu)將對(duì)持續(xù)發(fā)布產(chǎn)生至關(guān)重要的影響。如果從一開(kāi)始,一個(gè)系統(tǒng)的構(gòu)建是依照持續(xù)的發(fā)布通道,有一個(gè)快速的發(fā)布心態(tài),那么這個(gè)過(guò)程會(huì)相當(dāng)?shù)钠交?。然而,超前完成重?gòu)整個(gè)系統(tǒng)對(duì)于大多數(shù)組織而言并不是一個(gè)理想的選擇,這就是為什么我們要把這個(gè)分類(lèi)包括到成熟度模型中的原因。
基本級(jí)
通常一個(gè)組織會(huì)有一個(gè)或者多個(gè)包含了開(kāi)發(fā)、構(gòu)建和發(fā)布的完整功能的遺留系統(tǒng)。在基本級(jí)的許多組織會(huì)有一個(gè)多樣的技術(shù)棧,但是已經(jīng)開(kāi)始鞏固這些技術(shù)方案和平臺(tái),這對(duì)于從已花費(fèi)在自動(dòng)化上的許多努力來(lái)獲取***的價(jià)值來(lái)說(shuō)是相當(dāng)重要的。
開(kāi)始
在開(kāi)始階段,系統(tǒng)的單片結(jié)構(gòu)就采用將系統(tǒng)分成模塊的方法解決的。模塊給開(kāi)發(fā)、構(gòu)建和部署提供了很好的結(jié)構(gòu),但是不能像元件一樣單獨(dú)的發(fā)布。做這些也將會(huì)驅(qū)動(dòng)一種API的管理方式去描述內(nèi)部的獨(dú)立性,也將會(huì)影響運(yùn)用結(jié)構(gòu)方式去管理第三方的庫(kù)。在這個(gè)階段,運(yùn)用版本控制數(shù)據(jù)庫(kù)的改變的重要性也將會(huì)揭示這一點(diǎn)。
中間層
移動(dòng)中間層將會(huì)導(dǎo)致固定的架構(gòu)基礎(chǔ)。這樣做是為了當(dāng)采用抽象方式的分支和其他的技術(shù)特性能夠隱藏(隱藏的目的是減小倉(cāng)庫(kù)的分支,去確保真正的持續(xù)性集成)時(shí)候,能夠提供持續(xù)性的交付。這一層的工作是模塊化,它將用于鑒定和分割模塊成元件,元件是具有自我保持和分開(kāi)部署的特點(diǎn)。在這個(gè)階段,它很自然會(huì)開(kāi)始分散的遷移、特設(shè)管理應(yīng)用和運(yùn)行時(shí)間配置到版本控制中,將它視為像其他代碼一樣的應(yīng)用中的一部分。
高級(jí)
在高級(jí)階段,你將會(huì)把整個(gè)系統(tǒng)分成自我保持的元件,采用嚴(yán)格的基于API的方式去完成內(nèi)部的溝通。這樣每個(gè)元件都能夠被獨(dú)立的部署和發(fā)布?;诩軜?gòu)的成熟元件中,每個(gè)元件是一個(gè)自我保持可發(fā)布的單元,具有業(yè)務(wù)價(jià)值;你將會(huì)完成小的、高頻率的發(fā)布和整個(gè)短的發(fā)布周期。在這個(gè)層面,對(duì)于業(yè)務(wù)而言,很容易去快速的發(fā)布新的特性、監(jiān)測(cè)和確認(rèn)預(yù)期的業(yè)務(wù)結(jié)果;所以從應(yīng)用去推動(dòng)業(yè)務(wù)模塊的技術(shù)將會(huì)變得越來(lái)越重要,它將成為整個(gè)設(shè)計(jì)和架構(gòu)的一部分。
專(zhuān)家級(jí)
在專(zhuān)家級(jí),一些組織進(jìn)一步引入了基于架構(gòu)的組件和評(píng)估盡可能多的削減共享基礎(chǔ)架構(gòu)的完善性,這樣就可以把基礎(chǔ)架構(gòu)做為代碼把它與應(yīng)用組件關(guān)聯(lián)起來(lái)。這將導(dǎo)致相對(duì)于源代碼控制、操作系統(tǒng),系統(tǒng)完全是可以重寫(xiě)的,可以直接重用到應(yīng)用程序。這樣降低了工具和一些技術(shù)的復(fù)雜性和成本。例如對(duì)生產(chǎn)環(huán)境的災(zāi)難恢復(fù)變得相當(dāng)容易。不必有一個(gè)單獨(dú)的流程,災(zāi)難恢復(fù)只是簡(jiǎn)單的從通道中像抽取其它版本一樣,抽取它的上一個(gè)版本。與此同時(shí)虛擬化使得搭建測(cè)試和生產(chǎn)環(huán)境相當(dāng)?shù)撵`活,只需要很少的人力成本。構(gòu)建 & 部署
對(duì)于持續(xù)交付而言,構(gòu)建和部署無(wú)疑是核心。在這個(gè)過(guò)程中,很多工具和自動(dòng)化被應(yīng)用進(jìn)來(lái);一旦持續(xù)交付被論及,這個(gè)過(guò)程也是最常被認(rèn)知的。乍看起來(lái),一個(gè)典型且成熟的交付方式是非常具有壓倒性?xún)?yōu)勢(shì)的;但鑒于組織中當(dāng)前構(gòu)建和部署的成熟程度不同,該交付方式的復(fù)雜程度或大或小。從這個(gè)層面來(lái)說(shuō),我們將描述一個(gè)有邏輯的成熟的過(guò)程,為不同的部分和環(huán)節(jié)提供結(jié)構(gòu)知識(shí)來(lái)方便理解。
基礎(chǔ)
基本上,你將會(huì)擁有一套代碼庫(kù),它是受版本控制的、被腳本化構(gòu)建的,同時(shí)它定期運(yùn)行在一個(gè)專(zhuān)用的構(gòu)建服務(wù)器上。部署的過(guò)程是個(gè)手工或者帶有部分腳本和基本記錄的半手工過(guò)程。
初學(xué)者
初學(xué)者水平介紹了為了更快的反饋而進(jìn)行頻繁的輪詢(xún)構(gòu)建,為了更易于依賴(lài)關(guān)系管理而將構(gòu)件存檔。標(biāo)簽和版本的構(gòu)建是結(jié)構(gòu)化的,不過(guò)手冊(cè)和部署的過(guò)程,連同文檔、腳本和工具,正在逐漸變得更標(biāo)準(zhǔn)化。
中間級(jí)
在中間級(jí)水平上,構(gòu)建通常會(huì)在源代碼控制系統(tǒng)的每一次提交中被觸發(fā),即嘗試把一項(xiàng)細(xì)節(jié)提交到一個(gè)特定的構(gòu)建中。標(biāo)簽和版本的構(gòu)建是自動(dòng)化的,部署的過(guò)程在所有環(huán)境中是標(biāo)準(zhǔn)化的。構(gòu)件或者發(fā)布包只被構(gòu)建一次,且被設(shè)計(jì)成可以部署在任何環(huán)境中。標(biāo)準(zhǔn)化的部署過(guò)程還將包含一個(gè)為自動(dòng)化數(shù)據(jù)庫(kù)部署(或者遷移)提供的源碼。這個(gè)源碼中包含大量的數(shù)據(jù)庫(kù)修改和腳本運(yùn)行時(shí)配置的修改。一個(gè)基本的交付通道恰好涵蓋了從源碼控制到生產(chǎn)的各個(gè)階段。
高級(jí)
在這個(gè)階段,它也可能成為向外擴(kuò)展的構(gòu)建所必需的,這里說(shuō)到的構(gòu)建是在多臺(tái)機(jī)器上為了并行處理和特定的目標(biāo)環(huán)境所進(jìn)行的構(gòu)建。零當(dāng)機(jī)部署的技術(shù)可以是重要的,包括自動(dòng)化過(guò)程中獲得更好的靈活性和在發(fā)布時(shí)降低風(fēng)險(xiǎn)和成本。在這個(gè)層次上,你可以探索那些能夠使更復(fù)雜的數(shù)據(jù)庫(kù)更改和遷移變的自動(dòng)化的技術(shù),來(lái)完全避免數(shù)據(jù)庫(kù)更新時(shí)的手工慣例。
專(zhuān)家級(jí)
專(zhuān)家級(jí)的實(shí)踐特征之一是無(wú)接觸的持續(xù)布署到產(chǎn)品,每條命令都可以自動(dòng)化的運(yùn)用到產(chǎn)品中。專(zhuān)家級(jí)實(shí)踐的另一個(gè)特點(diǎn)是把架構(gòu)做為代碼,進(jìn)一步的虛擬化,使得構(gòu)造過(guò)程不僅布署了人工的部分,還完成了虛擬機(jī),該虛擬無(wú)須停掉下層通道,直接替換現(xiàn)有的虛擬機(jī)。
#p#
測(cè)試與驗(yàn)證
測(cè)試無(wú)須質(zhì)疑對(duì)于任何一軟件開(kāi)發(fā)都相當(dāng)重要,它絕對(duì)是實(shí)現(xiàn)持續(xù)發(fā)布的至關(guān)重要的重要部分。與構(gòu)造與布署類(lèi)似,這個(gè)類(lèi)別的成熟度包括了工具與自動(dòng)化。然而,同樣重要的還有持續(xù)的增量的對(duì)應(yīng)用的測(cè)試覆蓋,這構(gòu)成了快速發(fā)布的可信度。通常測(cè)試包括了用不同方式依照需求驗(yàn)證期待的功能,但是我們同樣需要強(qiáng)調(diào)驗(yàn)證預(yù)期的發(fā)布的版本特征的業(yè)務(wù)價(jià)值的重要性。
基本階段
在基本階段的成熟度模型中,開(kāi)發(fā)團(tuán)隊(duì)或者開(kāi)發(fā)組織通常會(huì)實(shí)踐單元測(cè)試,有一個(gè)或多個(gè)專(zhuān)用的測(cè)試環(huán)境,這些環(huán)境與本地的開(kāi)發(fā)機(jī)器是分離的。這些系統(tǒng)和整體層測(cè)試都會(huì)由一個(gè)單獨(dú)的部門(mén)執(zhí)行,在開(kāi)發(fā)代碼凍結(jié)后持續(xù)的開(kāi)展一個(gè)長(zhǎng)期的、冗長(zhǎng)的測(cè)試周期內(nèi)執(zhí)行。
初始階段
在進(jìn)入初始階段后你將自然而然的開(kāi)始研究漸近的自動(dòng)化,通過(guò)自動(dòng)化使現(xiàn)存的人工的集成測(cè)試快速的反饋,使得回歸測(cè)試更易于理解。為了精準(zhǔn)的測(cè)試,組件必須在與產(chǎn)品類(lèi)似的環(huán)境中布署和測(cè)試,這個(gè)環(huán)境要包括所有必需的依賴(lài)條件。
中間階段
初始階段中你把自動(dòng)化測(cè)試的范圍擴(kuò)大到功能測(cè)試,包括了比單元測(cè)試更大的組件,但是會(huì)使用樁來(lái)實(shí)現(xiàn)它的外部依賴(lài),例如數(shù)據(jù)庫(kù)或其它后臺(tái)服務(wù)。當(dāng)你在一個(gè)高度基于組件的架構(gòu)中工作或者好的完整的集成測(cè)試的實(shí)施相當(dāng)困難或者運(yùn)行頻度太慢時(shí),這些測(cè)試是相當(dāng)有價(jià)值的。在這一階段你將可能開(kāi)始把接收測(cè)試的一些部分逐步的自動(dòng)化。集成測(cè)試是一些特殊的組件,接收測(cè)試是掃描大量的組件并跨越多個(gè)系統(tǒng)。
高級(jí)階段
高級(jí)階段的實(shí)踐包含完全自動(dòng)化的驗(yàn)收測(cè)試和從需求中可能直接產(chǎn)生結(jié)構(gòu)化的驗(yàn)收標(biāo)準(zhǔn),需求的詳述是通過(guò)案例和特定領(lǐng)域的語(yǔ)言來(lái)完成的。這意味著沒(méi)有測(cè)試手冊(cè)用來(lái)測(cè)試或者驗(yàn)證,驗(yàn)證就是需要通過(guò)驗(yàn)收,但是典型的處理還是會(huì)包含許多探索性測(cè)試。通過(guò)這種探索性測(cè)試反饋到自動(dòng)化測(cè)試中,不斷地改進(jìn)測(cè)試的覆蓋率和質(zhì)量。如果你關(guān)聯(lián)測(cè)試的覆蓋率與更改的可回溯性,你就能實(shí)踐基于風(fēng)險(xiǎn)的測(cè)試,為指導(dǎo)探索性測(cè)試帶來(lái)更好的價(jià)值。在高級(jí)階段,許多機(jī)構(gòu)可能會(huì)持續(xù)關(guān)注自動(dòng)化的性能測(cè)試和針對(duì)安全的掃描。
專(zhuān)家階段
這樣的表述可能看起來(lái)很特別,驗(yàn)證期待的商業(yè)結(jié)果是一個(gè)專(zhuān)家級(jí)的實(shí)踐過(guò)程,但是這很實(shí)在的東西。現(xiàn)今,一個(gè)自然而然的開(kāi)發(fā)和發(fā)布過(guò)程,很少會(huì)去做這樣的一個(gè)驗(yàn)證。當(dāng)組織,文化和工具已經(jīng)達(dá)到一個(gè)成熟的階段,驗(yàn)證改變所帶來(lái)的商業(yè)價(jià)值變得更為自然而然,并且相關(guān)業(yè)務(wù)標(biāo)準(zhǔn)的反饋是高效化的和易操作的。以一個(gè)新特性的實(shí)現(xiàn)為例,必須包含有效的方法通過(guò)確認(rèn)相關(guān)指標(biāo)去驗(yàn)證期待的商業(yè)結(jié)果是推進(jìn)還是拉低了應(yīng)用的效果。完成的定義必須被擴(kuò)展到當(dāng)發(fā)布的特點(diǎn)和更改的效果被商業(yè)分析之后。
信息和上報(bào)
任何的商業(yè)過(guò)程都包含一個(gè)特殊的可以被上報(bào)的信息集合。軟件的開(kāi)發(fā)和發(fā)布過(guò)程也不例外,并且在這個(gè)領(lǐng)域的信息集合包含一些特定的概念包括組件,需求,版本,開(kāi)發(fā)者,發(fā)布,開(kāi)發(fā)環(huán)境等等。當(dāng)采用持續(xù)交付模型時(shí),我們希望在這個(gè)分類(lèi)里針對(duì)重要的處理能顯示正確的信息。信息必須簡(jiǎn)潔,切題和易于理解,還要在對(duì)的時(shí)間,對(duì)的人,為了獲得完全的速度和可能的靈活性促進(jìn)持續(xù)交付。除了通過(guò)開(kāi)發(fā)和發(fā)布新特性來(lái)讓信息直接被用于實(shí)現(xiàn)業(yè)務(wù)需求,同樣重要的是獲取信息需要測(cè)量過(guò)程的本身,并不斷改進(jìn)它。
基本階段
在基本階段,在分類(lèi)中最重要的是為當(dāng)前的過(guò)程建立一個(gè)基礎(chǔ)的指標(biāo),這樣你就可以評(píng)估和跟蹤。在這個(gè)階段通常是手動(dòng)去做并且需求是由個(gè)體決定。有趣的指標(biāo)例如:循環(huán)周期,交付日期,發(fā)布個(gè)數(shù),緊急修復(fù)個(gè)數(shù),事件個(gè)數(shù),每次發(fā)布的特性個(gè)數(shù),集成測(cè)試期間發(fā)現(xiàn)的bug等等。
初級(jí)階段
在初級(jí)階段,開(kāi)始衡量進(jìn)度并跟蹤績(jī)效,有助于更好地了解哪里需要進(jìn)一步改善,以及獲得的改善是否是期望的結(jié)果。在這個(gè)階段獲得的報(bào)表包括代碼的靜態(tài)分析,并且這個(gè)報(bào)表必須是周期性的,才能保證用***的報(bào)表來(lái)輔助決策或者發(fā)現(xiàn)哪里需要改進(jìn)。
中級(jí)階段
到了中級(jí)階段,你必須建立一個(gè)通用的信息模型,用來(lái)標(biāo)準(zhǔn)化所有概念的含義,以及定義好它們之間的聯(lián)系。模型經(jīng)常能回答類(lèi)似的問(wèn)題: 什么是組件? 改變組件有什么需求?不僅模型可以自動(dòng)構(gòu)建,測(cè)試和部署,并且你能建立可追溯性和信息透明度,自動(dòng)生成發(fā)布信息和測(cè)試計(jì)劃。對(duì)事件的自動(dòng)報(bào)告和反饋也實(shí)現(xiàn)在這個(gè)階段,同時(shí)這個(gè)階段也會(huì)存儲(chǔ)關(guān)于構(gòu)建和其他事件的歷史報(bào)告。這些報(bào)告能為管理層提供信息,進(jìn)而調(diào)整流程和優(yōu)化工作流和工作量。
高級(jí)階段
在高級(jí)階段,當(dāng)你開(kāi)始頻繁發(fā)布和加工時(shí),生產(chǎn)和服務(wù)變得足夠成熟。例如:商業(yè)指標(biāo)被自然地設(shè)置成圖形化,這個(gè)時(shí)候,人們可以得到特定的實(shí)時(shí)信息,而且這些信息是他們特定需要的。在這個(gè)階段,實(shí)時(shí)圖形和其他的報(bào)告手段通常是隨著時(shí)間的推移反映整體趨勢(shì)。作為靜態(tài)代碼分析和單元測(cè)試覆蓋報(bào)告的輔助,在這個(gè)階段你可能會(huì)開(kāi)始關(guān)注動(dòng)態(tài)測(cè)試覆蓋和來(lái)自產(chǎn)品的分析信息,類(lèi)似運(yùn)行時(shí)環(huán)境,例如:當(dāng)運(yùn)行自動(dòng)化集成測(cè)試的時(shí)候。
專(zhuān)家階段
至此,在這個(gè)分類(lèi)中,專(zhuān)家階段通常包含改進(jìn)的實(shí)時(shí)信息服務(wù),它提供動(dòng)態(tài)的自助實(shí)用信息和自定義的控制面板。這樣你就可以通過(guò)不同的組織邊界交叉引用和關(guān)聯(lián)報(bào)告及指標(biāo)。這樣,信息就能讓你開(kāi)闊針對(duì)持續(xù)改進(jìn)的視角以及更易于驗(yàn)證改變所帶來(lái)的商業(yè)結(jié)果預(yù)期。
跳轉(zhuǎn)到開(kāi)始的行程
每個(gè)公司都是獨(dú)特的,當(dāng)涉及到改變工作方式,如實(shí)施持續(xù)交付時(shí),都會(huì)遇到特定的挑戰(zhàn)。成熟度模型給你了一個(gè)起點(diǎn)和計(jì)劃公司向持續(xù)交付轉(zhuǎn)型的基礎(chǔ)。根據(jù)該模型評(píng)估您的組織之后,你需要設(shè)定目標(biāo),并確定哪些實(shí)踐會(huì)給您的組織***的結(jié)果。如果有一些實(shí)踐你不想采取,你需要分析不采取他們的后果。決定實(shí)施策略是同樣重要的,例如你能從小事開(kāi)始利用淡季在已存在的過(guò)程中一次提高一件事情。然而,從我們的經(jīng)驗(yàn),你將有一個(gè)更好的成功實(shí)施的機(jī)會(huì),如果你跳轉(zhuǎn)到開(kāi)始的行程,有一個(gè)專(zhuān)門(mén)的項(xiàng)目有明確的命令和積極的目標(biāo)例如降低循環(huán)時(shí)間。一個(gè)典型的持續(xù)交付實(shí)施項(xiàng)目需要的技能和能力是根據(jù)成熟度模型的分類(lèi)和實(shí)踐,以實(shí)現(xiàn)一套讓組織能持續(xù)成長(zhǎng)和完善的工具、方法和實(shí)踐的堅(jiān)實(shí)平臺(tái)。
(點(diǎn)擊放大圖片)
關(guān)于作者
Andreas Rehn 是一個(gè)企業(yè)架構(gòu)師,也是持續(xù)交付,開(kāi)發(fā)運(yùn)維,系統(tǒng)開(kāi)發(fā)敏捷和精益方法的積極倡導(dǎo)者。在軟件開(kāi)發(fā)許多學(xué)科有豐富的經(jīng)驗(yàn),并對(duì)信息和管理的理論與實(shí)踐流程有深刻的理解。他致力于幫助客戶(hù)實(shí)現(xiàn)持續(xù)交付,并采用高效的和現(xiàn)代的軟件開(kāi)發(fā)新方法改造他們的業(yè)務(wù)。
Tobias Palmborg 認(rèn)為持續(xù)交付描繪了Scrum,極限編程和敏捷宣言曾打算的愿景。持續(xù)交付不只是關(guān)于自動(dòng)化發(fā)布渠道,而是在一種藝術(shù)形態(tài)狀態(tài)里,如何獲得類(lèi)似從面粉到面包的完整變更的流程 。他是一個(gè)歐洲***的在線(xiàn)游戲公司的前主管。Tobias目前正在為幾個(gè)客戶(hù)實(shí)施持續(xù)交付的項(xiàng)目。
Patrik Boström 是Diabol的創(chuàng)始人之一。 高級(jí)開(kāi)發(fā)人員,有大型系統(tǒng)的操作經(jīng)驗(yàn)的架構(gòu)師。他堅(jiān)信持續(xù)交付和開(kāi)發(fā)運(yùn)維是敏捷和精益運(yùn)動(dòng)演化的自然的一步。要改變我們今天看系統(tǒng)開(kāi)發(fā)的方式,要變化到下一個(gè)級(jí)別,我們將更多的時(shí)間在開(kāi)發(fā)功能而不是手工做重復(fù)性的任務(wù)的級(jí)別。從下一級(jí)別中可以想像和理解從構(gòu)思到它發(fā)布并帶來(lái)商業(yè)價(jià)值的道路。
英文原文:The Continuous Delivery Maturity Model
譯文鏈接:http://www.oschina.net/translate/continuous-delivery-maturity-model