軟件開發(fā):敏捷開發(fā)模式,無論是產(chǎn)品還是運(yùn)營都要懂(敏捷軟件開發(fā) 原則、模式與實(shí)踐)

本文筆者將從軟件工程的角度來聊一聊敏捷開發(fā)模式,會涉及瀑布,V字、RUP、迭代、螺旋等開發(fā)模型,同時(shí)重點(diǎn)分享下敏捷模式的核心思想。

軟件開發(fā):敏捷開發(fā)模式,無論是產(chǎn)品還是運(yùn)營都要懂(敏捷軟件開發(fā) 原則、模式與實(shí)踐)

文章分兩部分:

  1. 通過舉例和對標(biāo)其他行業(yè),聊聊軟件開發(fā)模型的發(fā)展演進(jìn)。
  2. 聊聊敏捷的核心思想。

敏捷開發(fā)是互聯(lián)網(wǎng)界比較流行的軟件開發(fā)模式,產(chǎn)品、技術(shù)、項(xiàng)目管理、運(yùn)營、美術(shù)和測試等各崗位對其理解后都大有益處,運(yùn)用得當(dāng)可以事半功倍?,F(xiàn)在信息爆炸、良莠不齊,網(wǎng)上很多講敏捷的文章,Scrum詞意沒理解到位。去年看了敏捷革命的原版《Scrum:The Art of Doing Twice the Work in Half the Time》,結(jié)合大學(xué)所學(xué)的軟件工程聊一聊這個(gè)話題,here we go~

第一部分

瀑布模型

先上定義:瀑布模型是將軟件生存周期的各項(xiàng)活動(dòng)規(guī)定,為按固定順序而連接的若干階段工作軟件概念,主要分為:需求分析、架構(gòu)設(shè)計(jì)、詳細(xì)設(shè)計(jì)、實(shí)現(xiàn)、單元測試、集成部署、系統(tǒng)測試、運(yùn)營維護(hù)。

瀑布模型要求每一個(gè)階段都有明確的文檔產(chǎn)出,對于嚴(yán)格的瀑布模型每一個(gè)階段都不應(yīng)該重疊。

軟件開發(fā):敏捷開發(fā)模式,無論是產(chǎn)品還是運(yùn)營都要懂(敏捷軟件開發(fā) 原則、模式與實(shí)踐)

為什么會有瀑布模型?

如果一個(gè)人接項(xiàng)目,他也許不需要這么麻煩,但規(guī)模稍微大一些,就需要多人協(xié)作,這時(shí)候就需要有標(biāo)準(zhǔn)有規(guī)范。

最開始的時(shí)候,大家用了建筑工程領(lǐng)域的模型來對標(biāo)軟件工程。是蓋住宅還是蓋工廠,或是商廈或是辦公樓或是博物館,都需要有嚴(yán)謹(jǐn)?shù)慕ㄖO(shè)計(jì)圖,水電管道布線甚至裝修方案,才可以開始施工。

瀑布模型就是這個(gè)思維,所以瀑布模型對軟件架構(gòu)師的要求很高。在瀑布模型下,如果把開發(fā)軟件作為蓋棟建筑的話,coder只需要“搬磚”就可以了(在敏捷開發(fā)過程中,對研發(fā)團(tuán)隊(duì)人員的要求會較高。瀑布重視流程、文檔,敏捷強(qiáng)調(diào)團(tuán)隊(duì)內(nèi)人員能力,特別是cross-functional,要有跨領(lǐng)域的能力)。

也有人把瀑布模型折疊起來,變成了V字型,目的是每個(gè)階段都有要去驗(yàn)證的東西,看起來是有跡可循的,前后階段是對應(yīng)的。

個(gè)人覺得瀑布模型最重要的是給大家樹立了軟件工程的基本觀念:

  1. 前期做足功課很重要;
  2. 編碼只是軟件工程中的一部分。

軟件開發(fā):敏捷開發(fā)模式,無論是產(chǎn)品還是運(yùn)營都要懂(敏捷軟件開發(fā) 原則、模式與實(shí)踐)

V字模型

瀑布模型有什么問題?

慢慢大家發(fā)現(xiàn):瀑布模型有很多限制和問題,最主要的是不能擁抱變化。

蓋大樓畢竟跟開發(fā)軟件不一樣,軟件的需求往往是不斷變化的,瀑布模型往往會導(dǎo)致牽一發(fā)而動(dòng)全身,這就導(dǎo)致絕大多數(shù)瀑布模型是延期的,而且出來的東西也不是用戶最初想要的——客戶想要一把瑞士軍刀,最終只出來一把螺絲刀,甚至只是一根小木棍兒。

于是,人們逐漸想辦法克服了這個(gè)問題——這就是統(tǒng)一軟件開發(fā)過程(RUP:Rational Unified Process)

統(tǒng)一軟件開發(fā)過程:

RUP是瀑布模型的改進(jìn),可以這樣理解,這個(gè)模型把軟件開發(fā)過程的類比從建筑行業(yè)改到了汽車行業(yè)。

主要認(rèn)清了兩點(diǎn):

  1. 軟件是不斷迭代的;
  2. 軟件應(yīng)該是面向?qū)ο蟮摹?/li>

當(dāng)然,還有很多其他方面的改進(jìn)細(xì)節(jié),就不展開了。

一個(gè)車型可以是系列的,舒適版、技術(shù)版、豪華版,不同年份還不一樣,是不斷迭代更新的。要想造一輛車,團(tuán)隊(duì)可以分頭行動(dòng)。

簡化一下,比如:要做一個(gè)四只腳的木凳,甲可以先去做凳子面,乙去做凳子腿。前提是兩個(gè)人定義好怎樣連接(接口),用什么樣的螺絲,多大的孔,在什么位置連接,凳子腿多高等等,也可以有個(gè)專門的丙(項(xiàng)目經(jīng)理)去協(xié)調(diào)這些事情。這樣凳子腿可以在這個(gè)基礎(chǔ)上自由地涂些花紋,加個(gè)皮套,做些鏤空等等。

軟件開發(fā):敏捷開發(fā)模式,無論是產(chǎn)品還是運(yùn)營都要懂(敏捷軟件開發(fā) 原則、模式與實(shí)踐)

改進(jìn)后的瀑布模型

這個(gè)模型已經(jīng)具備了高內(nèi)聚低耦合的思想。但還是有個(gè)問題,客戶或領(lǐng)導(dǎo)通常想看到一些進(jìn)展,也許一輛車從設(shè)計(jì)到出廠需要兩年,但每幾個(gè)月大家可以看到一些實(shí)實(shí)在在的東西。

以上面做凳子為例:我們是可以看到凳子腿和凳子面的,也可以想象它們連接起來的樣子。而軟件不一樣,只要各個(gè)模塊還沒有效的連接起來,那基本上啥都沒有,特別是對于大多數(shù)沒有計(jì)算機(jī)知識的人,基本上是一個(gè)“黑盒”過程。這個(gè)模型同樣面臨著延期超預(yù)算的風(fēng)險(xiǎn),同時(shí)做出來的也不一定是客戶想要的。

隨著互聯(lián)網(wǎng)的發(fā)展,對軟件的變化需求越來越高,就產(chǎn)生了大家最熟悉的迭代模型——inception,elaboration,construction,transition,四個(gè)階段形成閉環(huán),不斷循環(huán)往復(fù),其核心理念是軟件是增量開發(fā)的,每次迭代都能看到些進(jìn)展。敏捷開發(fā)就是在這個(gè)生命周期模型下演變而來。

軟件開發(fā):敏捷開發(fā)模式,無論是產(chǎn)品還是運(yùn)營都要懂(敏捷軟件開發(fā) 原則、模式與實(shí)踐)

迭代模型

螺旋模型

接著,就有了螺旋模型,螺旋模型并不是推翻了瀑布和RUP,是一種改進(jìn)。從某種角度來說,螺旋也是遵循瀑布模型的——每一次螺旋迭代都要有清晰的目標(biāo),明確的需求,規(guī)劃實(shí)現(xiàn),交付條件等,這個(gè)循環(huán)也是迭代模型的迭代周期演變。

比如說要做一輛汽車,我們可以先做一個(gè)自行車,再逐漸地在自行車上加個(gè)鈴鐺,加上發(fā)動(dòng)機(jī),變成4個(gè)輪子,加個(gè)篷,車把變成方向盤……在各方面持續(xù)地螺旋迭代下去,最終會出來一個(gè)跟汽車差不多的東西

這個(gè)例子有一些原型法的味道,螺旋模型往往是較大較復(fù)雜的系統(tǒng)使用,目的是減小風(fēng)險(xiǎn),每一次投入能看到一些東西的產(chǎn)出,希望把整個(gè)過程“白盒化”。

軟件開發(fā):敏捷開發(fā)模式,無論是產(chǎn)品還是運(yùn)營都要懂(敏捷軟件開發(fā) 原則、模式與實(shí)踐)

螺旋模型

總結(jié)

以上是關(guān)于軟件工程的三個(gè)主要生命周期模型,逐漸地又出現(xiàn)了極限編程、原型開發(fā)、敏捷開發(fā)等模型。

嚴(yán)格來講,瀑布模型、迭代模型是生命周期層面的模型(當(dāng)然,通常也包含了一系列開發(fā)層面的工具集),敏捷開發(fā)是基于迭代模型發(fā)展起來的一整套軟件開發(fā)指導(dǎo)原則。個(gè)人觀點(diǎn)是在實(shí)際操作中應(yīng)重視指導(dǎo)原則,弱化方法論。

迭代模型在學(xué)術(shù)上很早就有人提出,敏捷開發(fā)的作者之所以能從不同的視角去看待軟件開發(fā),并有獨(dú)特的思維和管理方法,這跟他的個(gè)人經(jīng)歷有很大關(guān)系,因?yàn)樗皇亲鲇?jì)算機(jī)出身,為了理解他的思想,我特意購買了《敏捷革命》的英文原版《Scrum,The Art of Doing Twice the work in Half the Time》來閱讀,下面部分分享其核心觀點(diǎn)。

第二部分

我們可以看看《Scrum》的作者杰夫·薩瑟蘭的經(jīng)歷,他之所以能以全新的視角來認(rèn)識和理解軟件工程這件事情,很重要的原因在于他不是做這個(gè)行業(yè)出身。

作者的經(jīng)歷

杰夫·薩瑟蘭畢業(yè)于著名的西點(diǎn)軍校,他以戰(zhàn)斗機(jī)飛行員的身份去參加越南戰(zhàn)爭,在他的隊(duì)伍里50%的飛行員會被擊落,一些會被營救,一些再也回不來。在這個(gè)環(huán)境里他構(gòu)建了自己的行動(dòng)模型——即OODA(Observe,Orient,Decide,Act)執(zhí)行任務(wù)的每時(shí)每刻都在重復(fù)著這個(gè)循環(huán),猶豫就會死。這個(gè)行為模式在他的著作里能感受到已經(jīng)深入骨髓。

參加完越南戰(zhàn)爭后,他去斯坦福進(jìn)修了統(tǒng)計(jì)學(xué)碩士學(xué)位。后來邊在空軍學(xué)院做數(shù)學(xué)教授,邊讀了一個(gè)生物統(tǒng)計(jì)學(xué)博士,研究細(xì)胞、癌癥相關(guān)的一些東西,學(xué)習(xí)了系統(tǒng)論方面的東西。

在研究細(xì)胞的時(shí)候,他會不斷考慮一個(gè)問題:whether the new state is better than the old one——現(xiàn)在這個(gè)狀態(tài)是不是比上一個(gè)好?!睹艚莞锩吩闹卸啻翁岬絪tate這個(gè)詞,這也是作者非常重要的一種思考方式。

其離開大學(xué)的第一份工作是做美國的ATM,這個(gè)時(shí)候他把自己在戰(zhàn)爭和研究細(xì)胞中的方法應(yīng)用于IT領(lǐng)域,后通過大量實(shí)踐(其中有為FBI構(gòu)建犯罪嫌疑人數(shù)據(jù)庫,著作中的重要案例)逐步總結(jié)發(fā)展出了敏捷模型理論。

另外,Scrum不是作者的首創(chuàng),作者是根據(jù)日本兩個(gè)教授的理論發(fā)展總結(jié)而來。在學(xué)術(shù)界,日本的兩個(gè)教授質(zhì)疑瀑布,他們認(rèn)為:最好的團(tuán)隊(duì)?wèi)?yīng)該像打橄欖球一樣,球在隊(duì)伍中間穿梭,隊(duì)伍整體快速向目標(biāo)移動(dòng)(這才是Scrum想要表達(dá)的意思),日本的大企業(yè)最開始用這種指導(dǎo)思想(細(xì)算一下正是日本IT大發(fā)展的時(shí)代)。

理論早就有了,但很少有美國人這樣去實(shí)踐,作者為了理解日本人的Scrum思想,練習(xí)了多年合氣道,并用合氣道來類比Scrum,并再次用到了“state”思維方式來解釋。

說到Scrum,我們來聊聊cross-functional。

橄欖球大家可能不熟,我們來聊聊籃球:

球隊(duì)里最吃香的是哪種人,當(dāng)然是那種什么位置都能打且都打得好的,俗稱萬金油。勒布朗·詹姆斯號稱可以從1號位打到5號位,這種人可以體會到在各個(gè)位置的人的“不容易”,從而更有利于團(tuán)隊(duì)發(fā)展。奧尼爾給人籃下巨無霸的印象,但其實(shí)他有靈活的運(yùn)球技巧和出色的娛樂表演天賦,這些綜合到一起才成為球迷心中大鯊魚的人設(shè)。

NBA里那些最受人崇拜的頂級后衛(wèi),基本都會多種絕學(xué),喬丹科比韋德等人,控球、得分、突破、搶板、分球等各項(xiàng)技能均能登堂入室,有些方面甚至前無古人。有一項(xiàng)技能特別突出基本就可以獨(dú)步武林,但想成為頂級選手,一定是cross-functional的。

而作為球隊(duì)老板,希望在有限的資源下,盡可能多地把這種選手招致麾下,才有可能對拉里·奧布萊恩杯發(fā)起沖擊。勇士的“死亡五小”更是將這種理念發(fā)揮到了極致,場上隊(duì)員幾乎都能快攻、投籃和搶板。

回頭來看,軟件開發(fā)也是,cross-functional是對團(tuán)隊(duì)人員素質(zhì)要求的提高,正所謂不會寫代碼的產(chǎn)品不是好美術(shù)。軟件開發(fā)也是個(gè)跨兵種共同協(xié)作的同時(shí)不斷面臨變化的事情,從這個(gè)角度來看,跟打籃球和橄欖球是相同的,還記得NBA賽場上暫停時(shí)大家是怎么解決問題的么?

結(jié)合上面說的場景“球在隊(duì)伍中間穿梭,隊(duì)伍整體快速向目標(biāo)移動(dòng)”,這是Scrum中非常重要的理念。

敏捷作者的一些核心觀點(diǎn)(為保原汁原味,摘抄部分原文):

傳統(tǒng)的瀑布模型其實(shí)是由一大堆圖表構(gòu)成,作者表達(dá)了對圖表的一些觀點(diǎn):

“Planning is useful.Blindly following Plans is stupid.”——計(jì)劃是有用的,但盲目的按計(jì)劃走是愚蠢的。這跟作者的從軍經(jīng)歷有關(guān),其執(zhí)行任務(wù)的時(shí)候都是隨機(jī)應(yīng)變,也應(yīng)了中國的那句老話“計(jì)劃沒有變化快”。

“Every project involves discovery of problems and bursts of inspiration,scrum embraces uncertainty and creativity.”——任何一個(gè)項(xiàng)目都包含了未發(fā)現(xiàn)的問題以及隨著項(xiàng)目進(jìn)行的靈感爆發(fā),圖表會限制這些,Scrum“擁抱”這些不確定性和創(chuàng)造性。

“Stop doing what you’re doing,review what you’ve done.”——放下手中的事情,想一想我們在干啥。

作者對“敏捷”的一些觀點(diǎn):

MVP:“Minimum viable products to get immediate feed back from consumers,rather waiting until a project is finished.”——最小化可行產(chǎn)品Minimum viable products,也簡稱MVP(搜索這個(gè)短語會有大量方法論)。用最小化的可行產(chǎn)品來從用戶那里快速獲得回饋,而不是一直等項(xiàng)目完成,就是我們通常說的“小步快跑”。

InspectandAdapt cycle:上面說的OODA行動(dòng)模型的抽象,“觀察—適應(yīng)”,這兩個(gè)過程不斷循環(huán)。

這里面作者提到了一個(gè)常用的方法5W2H,在每一個(gè)階段(state)都問自己:

What:我們要做的是什么,有什么意義,現(xiàn)在是什么狀態(tài);

Why:我們?yōu)槭裁匆鲞@個(gè),可不可不做,有替代方案么;

When:什么時(shí)候做,deadline是什么;

Where:在哪做,哪里要用;

Who:誰來做,誰對此負(fù)責(zé);

How:怎么來做,如何配合;

Howmuch:多少、程度,多大開銷,做到什么程度;

敏捷革命可以應(yīng)用在各行各業(yè),作者已經(jīng)在汽車制造、開洗衣店、學(xué)生培訓(xùn)、制造宇宙飛創(chuàng)、婚禮策劃等領(lǐng)域展開實(shí)踐。所以說,Scrum模型不只是一套軟件開發(fā)工具集,是具有普世性的價(jià)值觀:

“Agile Manifesto,It declared the following values:people over process;products that actually work over documenting what that product is suposed to do;collaborating with customers over negotiating with them;and responding to change over following a plan,Scrum is the framework I built to put those values into practice.There is no methodology.”

這就是敏捷宣言的所有原文,后來被各種媒體放大和解讀,其實(shí)它非常簡潔——敏捷宣言,它強(qiáng)調(diào)了以下價(jià)值觀:

  • 人重于過程;
  • 產(chǎn)品真正好用重于文檔里的設(shè)計(jì);
  • 跟用戶合作重于跟他們談判;
  • 對變化做回應(yīng)重于按計(jì)劃去做;
  • 我建立Scrum模型就是為了把以上價(jià)值觀揉進(jìn)一套工具集以方便更好地實(shí)踐,敏捷模型沒有方法論(沒有方法論,沒有方法論,沒有方法論,這是作者的原話啊,啪啪啪打臉有木有)。

總結(jié)

Scrum原著以案例來表達(dá)了他對圖表、文檔、對計(jì)劃、對團(tuán)隊(duì)、對過程管理的一些觀點(diǎn),而Scrum正是這一系列價(jià)值觀的合集,這才是Scrum的精髓所在。

為了快速實(shí)踐和方便理解這些價(jià)值觀,作者提供了一些方法,比如:每日立會、sprint、backlog等。

具體方法不贅述了,網(wǎng)上有很多介紹。這些方法都是為了落實(shí)上面的觀點(diǎn):我們處在什么狀態(tài),我們有什么,如何做下個(gè)狀態(tài)會比現(xiàn)在的好……

相比于拿過來方法直接使用,理解好上面的觀點(diǎn)再根據(jù)實(shí)際情況選擇方法是更有效的思路。

作者:齊齊獸,公眾號:齊齊獸,從技術(shù)轉(zhuǎn)型到產(chǎn)品經(jīng)理,北郵MBA,千萬DAU平臺型產(chǎn)品負(fù)責(zé)人,擅長社交和棋牌。

本文由@齊齊獸 原創(chuàng)發(fā)布與人人都是產(chǎn)品經(jīng)理,未經(jīng)允許,禁止轉(zhuǎn)載。

題圖來自Unsplash, 基于CC0協(xié)議

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部