· 精益
? ? 提到敏捷首先最早是想到精益思想,最早在日本豐田公司體現(xiàn),最早的精益思想來自于PDCA(Plan,Do,Check,Action),PDCA循環(huán)是美國(guó)質(zhì)量管理專家休哈特博士首先提出的,在質(zhì)量管理活動(dòng)中,要求把各項(xiàng)工作按照作出計(jì)劃、計(jì)劃實(shí)施、檢查實(shí)施效果,然后將成功的納入標(biāo)準(zhǔn),不成功的留待下一循環(huán)去解決。豐田在此基礎(chǔ)上,創(chuàng)建豐田生產(chǎn)體系,也就是最早的精益生產(chǎn)。軟件行業(yè)吸收了精益思想,以及參考極限編程,自適應(yīng)軟件開發(fā)等方法逐漸發(fā)展出新的“框架”。
· 敏捷的發(fā)展歷程
? ? · 軟件交付危機(jī)
?????70年代~90年代軟件工程的實(shí)踐開始爆發(fā),當(dāng)時(shí)的開發(fā)過程大多數(shù)是采用比較經(jīng)典的瀑布式模式,這個(gè)過程完整定義了軟件從需求到部署的全生命周期的各個(gè)階段,之所以被稱為瀑布是因?yàn)樗髨F(tuán)隊(duì)在完成下一步驟之前必須已經(jīng)完成了上一個(gè)步驟:在進(jìn)行功能設(shè)計(jì)之前必須先完成需求分析,在詳細(xì)設(shè)計(jì)之前必須先完成功能設(shè)計(jì),以此類推。一旦一個(gè)階段完成,這個(gè)階段就會(huì)凍結(jié),很難將項(xiàng)目恢復(fù)到流程的更早階段。
? ? 這種方法讓管理者像管理車間流水線一樣管理軟件開發(fā),花費(fèi)大量時(shí)間在編寫計(jì)劃和設(shè)計(jì)工作上面,可交付軟件的周期也變的更長(zhǎng)。與交付可用軟件相比,該方法更加注重計(jì)劃和文檔編制。
正如《黑客與畫家》中提到過的,土木工程項(xiàng)目等項(xiàng)目很少發(fā)生大的變化,他們按部就班就可以順利交付,例如您今天設(shè)計(jì)的橋梁很少會(huì)在一兩年內(nèi)發(fā)生大的變更。
? ? 而軟件項(xiàng)目不同,他們很少能具有和傳統(tǒng)工程項(xiàng)目一樣的穩(wěn)定性,業(yè)務(wù)需求可能在一夜間發(fā)生很大變化,而我們完成一個(gè)軟件的周期至少需要幾個(gè)月甚至幾年的時(shí)間,我們?nèi)绾蚊鎸?duì)隨時(shí)可能出現(xiàn)的變化呢?很明顯軟件工程需要一種不同以往的管理方法。
? ??我們必須接受一個(gè)事實(shí):我們根本無法在構(gòu)建產(chǎn)品之前精確定義所需的各種功能需求,這是軟件工程與大多數(shù)其他工程項(xiàng)目的根本區(qū)別。
? ??到90年代初期,隨著PC在企業(yè)中的逐漸普及,市場(chǎng)對(duì)定制化軟件開發(fā)的需求越來越大,同時(shí)軟件項(xiàng)目管理方法也遇到了前所未有的挑戰(zhàn),這種危機(jī)經(jīng)常被稱為”軟件開發(fā)危機(jī)“,表現(xiàn)為軟件系統(tǒng)交付的嚴(yán)重滯后。據(jù)當(dāng)時(shí)的行業(yè)專家估計(jì),一個(gè)軟件項(xiàng)目從需求確定到軟件交付需要經(jīng)歷大概三年左右的時(shí)間,這已經(jīng)很難滿足當(dāng)時(shí)企業(yè)的快速發(fā)展需求,在三年里可能整個(gè)業(yè)務(wù)都發(fā)生了根本性變化,這意味著很多項(xiàng)目都不得不因?yàn)槭袌?chǎng)和業(yè)務(wù)的變化而被取消或延期,即使勉強(qiáng)交付了也可能已經(jīng)無法滿足企業(yè)的現(xiàn)實(shí)需求。
? ? ·敏捷的誕生
? ??2001年敏捷先驅(qū)者們發(fā)起組成了敏捷聯(lián)盟,并同時(shí)發(fā)布了“敏捷軟件開發(fā)宣言”。
????個(gè)體和互動(dòng) 高于 流程和工具
????可工作的軟件 高于 詳盡的文檔
????客戶合作 高于合同談判
????相應(yīng)變化 高于 遵循計(jì)劃
????2005年,在Alistair Cockburn和Jim Highsmith的領(lǐng)導(dǎo)下,一份根據(jù)敏捷軟件開發(fā)方法來指導(dǎo)軟件項(xiàng)目管理的附錄發(fā)布 -“相互依存聲明”。
????2009年,Robert C Martin編寫軟件工藝宣言,根據(jù)職業(yè)行為和掌握程度來指導(dǎo)敏捷軟件開發(fā)。
????2011年,敏捷聯(lián)盟創(chuàng)建敏捷實(shí)踐指南。
· Scrum的發(fā)展過程
? ??Jeff Sutherland和Ken Schwaber在90年代初構(gòu)想了Scrum管理過程,在1995年對(duì)Scrum框架進(jìn)行了梳理并發(fā)表了文章“ Scrum Software Development Process”,并在美國(guó)德克薩斯州奧斯汀舉行的OOPSLA 95會(huì)議上完整介紹了這一框架。
? ??對(duì)于新的復(fù)雜產(chǎn)品的開發(fā),只有為小型且自組織的團(tuán)隊(duì)指定目標(biāo)而不是特定任務(wù),才能達(dá)到最佳效果。團(tuán)隊(duì)可以自由決定實(shí)現(xiàn)這些目標(biāo)的最佳方法。 Scrum還定義了有時(shí)間限制的迭代開發(fā)周期,其目標(biāo)是交付有價(jià)值且可用的軟件。
? ??Ken和Jeff從兩位公認(rèn)的管理思想家Takeuchi和Nonaka于1986年發(fā)表的論文“ The New New Product Development Game”中繼承了“ Scrum”的叫法。Nonaka和Takeuchi用“ Scrum”一詞強(qiáng)調(diào)團(tuán)隊(duì)的重要性以及橄欖球等團(tuán)隊(duì)運(yùn)動(dòng)與成功開發(fā)新產(chǎn)品之間的類比關(guān)系。他們的研究表明,當(dāng)小型的,自組織的團(tuán)隊(duì)努力去滿足目標(biāo)而不是任務(wù)時(shí),就可以在開發(fā)復(fù)雜的新產(chǎn)品方面取得出色的效果。最好的團(tuán)隊(duì)是那些有方向的團(tuán)隊(duì),他們有自己的空間來制定自己的策略,以最佳的方法實(shí)現(xiàn)共同目標(biāo)。團(tuán)隊(duì)需要自治才能實(shí)現(xiàn)卓越。而Scrum軟件開發(fā)框架正是實(shí)現(xiàn)了用文中描述的理論來開發(fā)和維護(hù)復(fù)雜軟件產(chǎn)品的原理和方法。
????Scrum非常適合軟件項(xiàng)目。Scrum不僅是敏捷世界中最偉大的發(fā)明之一,還是當(dāng)今最流行的框架之一,盡管它已經(jīng)非常成功地與ExtremeProgramming結(jié)合使用,但它專注于項(xiàng)目管理而不關(guān)注軟件開發(fā)實(shí)踐。
????隨著Scrum的發(fā)展,互聯(lián)網(wǎng)上散布著各種有關(guān)Scrum的理論和主張,這使我想起盲人摸象的故事。Sutherland認(rèn)為Scrum是一個(gè)框架,其中包含了過去五十多年人們所發(fā)明的各種最佳實(shí)踐,能找到最適合你的那組實(shí)踐才是事情的關(guān)鍵,Ken曾經(jīng)說過:“不加調(diào)整地盲目應(yīng)用任何技術(shù)都是有害的”,并將Scrum與下棋做了一個(gè)很好的類比:
“框架”一詞的含義是沒有指定太多細(xì)節(jié),必須由使用框架的人員來決定如何做,我把Scrum等同于象棋游戲,您可以閱讀國(guó)際象棋的官方規(guī)則手冊(cè),學(xué)習(xí)他們,然后您可以下棋,但是你離成為一個(gè)國(guó)際象棋大師還有很長(zhǎng)的路要走。
1995年,Jeff Sutherland和Ken Schwaber規(guī)范化了Scrum框架,并在OOPSLA 95上公開發(fā)布。
2001年,第一本關(guān)于Scrum的書《Agile Software Development with Scrum》誕生。
2002年,Scrum聯(lián)盟創(chuàng)立,隨后幾年發(fā)布了ScrumMaster認(rèn)證體系及其衍生產(chǎn)品。
2006年,Jeff Sutherland創(chuàng)立了自己的公司Scrum.inc,繼續(xù)教授Scrum認(rèn)證課程。
2009年,Ken Schwaber離開Scrum聯(lián)盟,并創(chuàng)立了Scrum.org。
2010年, Jeff Sutherland和Ken Schwaber發(fā)布《 Scrum指南》,隨后對(duì)其逐步更新,建立了全球認(rèn)可的Scrum知識(shí)體系。
引用《人月神話》作者弗雷德·布魯克斯(Fred Brooks)在“?No Silver Bullet—Essence and Accidents of Software Engineering”的文章中的觀點(diǎn):沒有任何單一的技術(shù)或過程可以帶來軟件開發(fā)效率的顯著提高。這句話對(duì)敏捷同樣適用,并不是實(shí)踐了Scrum或者XP就可以解決你的所有問題,先定義清楚你們面臨的問題,然后去找到適合你的那些實(shí)踐,勇敢的嘗試并取得成功吧。