持續(xù)交付是一種軟件工程手法,讓軟件產(chǎn)品的產(chǎn)出過程在一個(gè)短周期內(nèi)完成,以保證軟件可以穩(wěn)定、持續(xù)的保持在隨時(shí)可以釋出的狀況。本文作者僅希望通過通俗的語言,來分享自己一點(diǎn)關(guān)于“持續(xù)交付”的認(rèn)識。
我們都知道,產(chǎn)品交付,是需求實(shí)現(xiàn)的“最后一公里”路,但交付不僅僅只是“將代碼部署到測試環(huán)境,測試通過后,即可上線”一句話這么簡單,交付過程涉及到復(fù)雜的流程、團(tuán)隊(duì)協(xié)作和交付工具等等,任何一點(diǎn)都會影響到產(chǎn)品的整個(gè)生命周期。
一般來說,產(chǎn)品經(jīng)理極少會參與到最后代碼交付過程中去,因?yàn)榻桓吨饕怯裳邪l(fā)、測試和運(yùn)維等角色在負(fù)責(zé),產(chǎn)品經(jīng)理最多參與進(jìn)測試階段。
事實(shí)上,所有的產(chǎn)品團(tuán)隊(duì)成員,都應(yīng)該對我們的產(chǎn)品目標(biāo)負(fù)責(zé)。一名合格的產(chǎn)品經(jīng)理,切勿從心理上,就將產(chǎn)品、測試甚至是研發(fā)、運(yùn)維的職責(zé)都完全割離開來,從需求的誕生到實(shí)現(xiàn),產(chǎn)品經(jīng)理應(yīng)該盡可能的了解和知悉每一個(gè)過程,才能讓需求實(shí)現(xiàn)更加的順暢,促使自己能夠換位思考,掌握全局。
本文主要來討論一個(gè)概念——持續(xù)交付,我并非技術(shù)出身的產(chǎn)品經(jīng)理,僅希望通過通俗的語言來分享自己一點(diǎn)關(guān)于“持續(xù)交付”的認(rèn)識。
持續(xù)交付是什么?
百度百科上的定義:持續(xù)交付是一種軟件工程手法,讓軟件產(chǎn)品的產(chǎn)出過程在一個(gè)短周期內(nèi)完成,以保證軟件可以穩(wěn)定、持續(xù)的保持在隨時(shí)可以釋出的狀況。
光看這句話是不是一臉懵逼?
關(guān)于持續(xù)交付的定義,其實(shí)早有前人給出了很通俗的解釋:
持續(xù)交付是軟件研發(fā)人員,如何將一個(gè)好點(diǎn)子,以最快的速度交付給用戶的方法。
感覺還是有點(diǎn)抽象?
沒關(guān)系,我們來解讀一下這句話:上句中、好點(diǎn)子,就是需求;交付給用戶,就是需求上線,這是一個(gè)眾所周知的過程。其實(shí)這句話強(qiáng)調(diào)的是:最快的速度,也就是說交付過程的重點(diǎn)是效率。
這和敏捷開發(fā)的概念是不是有點(diǎn)類似?
什么是敏捷開發(fā)呢?
提到敏捷開發(fā),不得不提到與之相對的一種開發(fā)流程:瀑布流開發(fā)——即嚴(yán)格地將開發(fā)分隔成各個(gè)階段:需求分析、要件定義、基本設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、單體測試、結(jié)合測試、系統(tǒng)測試等。有點(diǎn)像工廠流水線,前一階段的完成才能開始下一個(gè)階段的工作,意味著沒有回頭路,返工代價(jià)很大,用戶對需求無法反饋,十分不適應(yīng)。
這樣的開發(fā)方式已經(jīng)無法適應(yīng)當(dāng)前的易變、模糊、不確定的互聯(lián)網(wǎng)環(huán)境了
就像斯賓塞·約翰遜說過的:
唯一不變的,就是變化本身。
所以敏捷開發(fā)方法像凈化空氣的春雨般出現(xiàn)了,敏捷開發(fā)方法的核心是迭代,也就是通過2-4周的迭代時(shí)間,不斷的交付客戶的需求。每一次迭代都包含需求分析、設(shè)計(jì)、實(shí)現(xiàn)和測試等多個(gè)環(huán)節(jié),每一次迭代都可以生成一個(gè)穩(wěn)定和被驗(yàn)證過的軟件版本。
敏捷開發(fā)是強(qiáng)調(diào)敏捷的軟件開發(fā)項(xiàng)目管理方式,而持續(xù)交付是強(qiáng)調(diào)效率和靈活的一種軟件工程手法,持續(xù)交付就可以定義為敏捷開發(fā)管理的一個(gè)子集。
怎么看待持續(xù)交付?
經(jīng)過了以上定義,大部分人對持續(xù)交付究竟是做什么的,還很茫然。接下來將結(jié)合其他概念,讓大家更深入理解持續(xù)交付。
提到持續(xù)交付,不得不提到持續(xù)集成、持續(xù)部署,也就是我們常說的CI/CD。
- 持續(xù)集成:我所理解的持續(xù)集成是,在進(jìn)入開發(fā)階段前,會將研發(fā)工作進(jìn)行拆解,可能是拆分成不同的功能模塊,也可能是拆分成若干個(gè)任務(wù)由不同人員來進(jìn)行開發(fā)。拆分之后,就一定需要將代碼合并起來,形成完整、有效、正常運(yùn)行的代碼,這個(gè)過程叫做集成,反復(fù)持續(xù),就叫持續(xù)集成。
- 持續(xù)部署:持續(xù)部署是持續(xù)交付的最高階段,代碼在經(jīng)過自動化測試、單元測試或者評審后,自動的部署到正式(目標(biāo))環(huán)境中,快速安全的交付給用戶使用。
持續(xù)交付則是一個(gè)承上啟下的過程,它是在持續(xù)集成后,通過測試、產(chǎn)品的使用和驗(yàn)證和反饋后,不斷地對產(chǎn)品進(jìn)行優(yōu)化。
我們再回顧前面提到的定義:
持續(xù)交付是軟件研發(fā)人員,如何將一個(gè)好點(diǎn)子,以最快的速度交付給用戶的方法。
產(chǎn)品、測試就是所謂的第一個(gè)用戶,所以這個(gè)定義還是很貼切易懂的。
持續(xù)交付,從業(yè)務(wù)層面來說,其實(shí)是存在著決策的過程的,因?yàn)樗窃诓渴鸬秸江h(huán)境之前,產(chǎn)品經(jīng)理或領(lǐng)導(dǎo)者需要做業(yè)務(wù)判斷,判斷代碼是否可正常交付?是否解決業(yè)務(wù)問題?是否滿足業(yè)務(wù)需求等等?
那么持續(xù)交付從技術(shù)層面,是怎么實(shí)現(xiàn)呢?
持續(xù)交付的實(shí)現(xiàn)方向
持續(xù)交付的具體實(shí)現(xiàn)方式要從配置管理、環(huán)境管理、構(gòu)建集成和測試管理等幾個(gè)方面入手,僅僅通過一篇文章是無法講述清楚的,并且更適合由研發(fā)人員去研究和實(shí)踐,感興趣的話可以閱讀《持續(xù)交付-發(fā)布可靠軟件的系統(tǒng)方法》這本專業(yè)書籍來具體學(xué)習(xí)。
這里我僅僅從宏觀的產(chǎn)品角度,來總結(jié)持續(xù)交付的實(shí)現(xiàn)方向:
為令人痛苦的手動步驟,建立起可重復(fù)、可靠的自動化過程。每一次的修改都能夠經(jīng)過一次構(gòu)建、測試、部署、發(fā)布完整高效的自動化驗(yàn)證過程,實(shí)現(xiàn)高速頻繁驗(yàn)證,快速解決問題的閉環(huán)。
最后的結(jié)果就是:小批量/小粒度頻繁的進(jìn)行持續(xù)部署或發(fā)布,從而得以實(shí)現(xiàn)持續(xù)交付。
當(dāng)然,在前往這個(gè)方向的道路上, 一定要有猛藥去疴的決心,如:
(1)技術(shù)層面
- 改變dev/ops團(tuán)隊(duì)在PaaS層面所使用的工具和應(yīng)用方式;
- 改變系統(tǒng)架構(gòu)、部署架構(gòu)等。
(2)組織層面
- 優(yōu)化調(diào)整人員結(jié)構(gòu);
- 打破耗時(shí)、完全人工的流程束縛;
- ……
產(chǎn)品經(jīng)理能享受持續(xù)交付帶來的好處嗎?
持續(xù)交付所帶來的收益和價(jià)值是能覆蓋整個(gè)產(chǎn)品團(tuán)隊(duì),而不僅僅是開發(fā)人員。
- 產(chǎn)品的靈活交付、發(fā)布可控,隨時(shí)有一個(gè)穩(wěn)定可發(fā)布的版本,產(chǎn)品人員身為產(chǎn)品前進(jìn)方向上的主導(dǎo)者,可以有效把控版本發(fā)布節(jié)奏。而且,計(jì)劃是趕不上變化的,代碼交付、功能點(diǎn)部署,是可以根據(jù)業(yè)務(wù)要求可靈活變換的。
- 產(chǎn)品人員是曝光在大眾、用戶目光底下的人,是出現(xiàn)問題故障,要首當(dāng)其沖化解內(nèi)外矛盾的人,產(chǎn)品人員對整個(gè)產(chǎn)品上線能否正常運(yùn)行負(fù)有重要責(zé)任。同時(shí),產(chǎn)品人員還是“產(chǎn)品的第一個(gè)用戶”,我們可以享有持續(xù)交付的保護(hù),因?yàn)槌掷m(xù)交付可以保證在迭代中的每個(gè)階段或需求變化時(shí),都能夠及時(shí)測試驗(yàn)證,獲得問題反饋。
- 因?yàn)槌掷m(xù)交付,需要持續(xù)構(gòu)建和集成代碼,并且及時(shí)部署到測試環(huán)境去驗(yàn)證,產(chǎn)品經(jīng)理以此可知悉當(dāng)前開發(fā)的進(jìn)度和質(zhì)量,及時(shí)決策或調(diào)整,避免開發(fā)人員無故拖延工期所導(dǎo)致的扯皮現(xiàn)象。
- 在實(shí)施持續(xù)交付后,可以做到在保證交付質(zhì)量的前提下,加快交付速度,從而更快地得到市場的反饋,產(chǎn)品經(jīng)理就可以盡快做出判斷,更好的引領(lǐng)產(chǎn)品的方向,最終達(dá)到擴(kuò)大收益、提高價(jià)值的終極目的。
本文由 @有餡兒的丸子 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自 Pexels,基于 CC0 協(xié)議
愛盈利-運(yùn)營小咖秀(www.jza6.com) 始終堅(jiān)持研究分享移動互聯(lián)網(wǎng)App運(yùn)營推廣經(jīng)驗(yàn)、策略、全案、渠道等純干貨知識內(nèi)容;是廣大App運(yùn)營從業(yè)者的知識啟蒙、成長指導(dǎo)、進(jìn)階學(xué)習(xí)的集聚平臺;
想了解更多移動互聯(lián)網(wǎng)干貨知識,請關(guān)注微信公眾號運(yùn)營小咖秀(ID: yunyingshow)