柏松偉
摘要:文章首先介紹敏捷開發(fā)模式發(fā)展趨勢和特點,在現(xiàn)在企業(yè)中軟件開發(fā)模式轉(zhuǎn)型的必要性,著重介紹作者在一家外資企業(yè)擔(dān)任敏捷教練(Agile Coach),通過對該企業(yè)軟件開發(fā)模式現(xiàn)狀進行分析,幫助該企業(yè)成功導(dǎo)入敏捷開發(fā)模式、理念和敏捷文化,建立起正確的工作習(xí)慣和工作方法,希望通過對該企業(yè)軟件開發(fā)模式轉(zhuǎn)型中的發(fā)展過程進行分析,為軟件企業(yè)軟件開發(fā)模式轉(zhuǎn)型提供一些參考和可借鑒的方法。
關(guān)鍵詞:軟件開發(fā)模式;敏捷開發(fā);轉(zhuǎn)型
一、引言
隨著軟件技術(shù)的發(fā)展和經(jīng)濟的全球化,軟件從原先邏輯結(jié)構(gòu)簡單、實現(xiàn)內(nèi)容和技術(shù)較單一,逐步發(fā)展演變?yōu)槭袌鲂枨髲?fù)雜多變、融合多種技術(shù)快速、高質(zhì)量的實現(xiàn)。在這種狀況下,軟件開發(fā)領(lǐng)域中傳統(tǒng)的瀑布開發(fā)模式越來越不能很好的應(yīng)對,如何在激烈的市場競爭中快速響應(yīng)客戶不斷的需求變化,交付給用戶滿意并且高質(zhì)量的軟件產(chǎn)品,已經(jīng)成為影響軟件開發(fā)成功的關(guān)鍵因素,在這個背景下,軟件行業(yè)借鑒了制造業(yè)“敏捷制造”的思想,一種輕量級的方法學(xué)“敏捷”因此也應(yīng)運而生,逐步形成了敏捷軟件開發(fā)這一新型軟件開發(fā)模式。敏捷開發(fā)模式得到了日益增多的關(guān)注度,與過去也就是傳統(tǒng)的瀑布開發(fā)模式相比,該模式強調(diào)以人為本,專注于交付對客戶有價值的軟件,在高度協(xié)作的開發(fā)環(huán)境中,使用迭代增量式的開發(fā)方法,經(jīng)常使用反饋進行思考、反省和總結(jié),不停的進行自我調(diào)整和改進。
二、敏捷開發(fā)模式分析與實踐
1.敏捷開發(fā)模式特點
20世紀(jì)90年代,敏捷開發(fā)(Agile development)在軟件行業(yè)內(nèi)獲得了高度關(guān)注。敏捷開發(fā)是一種以人為核心、迭代式增量開發(fā)的方法。在敏捷開發(fā)中,軟件項目的構(gòu)建被切分成多個子項目,各個子項目的成果都經(jīng)過測試,具備集成和可運行的特征。簡言之,就是把一個大項目分為多個相互聯(lián)系,但也可獨立運行的小項目,并分別完成,在此過程中軟件一直處于可使用狀態(tài)。與其他開發(fā)模式相比,敏捷開發(fā)模式具有以下兩個特點:
(1)敏捷開發(fā)方法是“適應(yīng)性”而非“預(yù)設(shè)性”
在軟件開發(fā)的項目中,軟件的設(shè)計難處在于軟件需求的不穩(wěn)定,從而導(dǎo)致軟件過程的不可預(yù)測。但是傳統(tǒng)的控制項目模式都是試圖對一個軟件開發(fā)項目在很長的時間跨度內(nèi)做出詳細(xì)的計劃,然后依計劃進行開發(fā)。所以,這類方法在不可預(yù)測的環(huán)境下,很難適應(yīng)變化,甚至是拒絕變化。與之相反的敏捷方法則是歡迎變化,目的就是成為適應(yīng)變化的過程,甚至能允許改變自身來適應(yīng)變化。
(2)敏捷開發(fā)方法是“面向人”而非“面向過程”
Martin Fowler認(rèn)為:“在敏捷開發(fā)過程中,人是第一位的,過程是第二位的。所以就個人來說,應(yīng)該可以從各種不同的過程中找到真正適合自己的過程?!痹趥鹘y(tǒng)的軟件開發(fā)工作中,項目團隊分配工作的重點是明確角色的定義,以個人的能力去適應(yīng)角色,而角色的定義就是為了保證過程的實施,即個人以資源的方式被分配給角色,同時,資源是可以替代的,而角色不可以替代。然而,傳統(tǒng)軟件開發(fā)的這些方法在敏捷開發(fā)方式中被顛覆。敏捷開發(fā)試圖使軟件開發(fā)工作能夠利用人的特點,充分發(fā)揮人的創(chuàng)造能力。
敏捷開發(fā)的目的是建立起一個項目團隊全員參與到軟件開發(fā)中,包括設(shè)定軟件開發(fā)流程的管理人員,只有這樣軟件開發(fā)流程才有可接受性。同時敏捷開發(fā)要求研發(fā)人員獨立自主在技術(shù)上進行決策,因為他們是最了解什么技術(shù)是需要和不需要的。再者,敏捷開發(fā)特別重視項目團隊中的信息交流,有調(diào)查顯示:“項目失敗的原因最終都可追溯到信息沒有及時準(zhǔn)確地傳遞到應(yīng)該接受它的人?!?/p>
2.敏捷開發(fā)的價值觀
(1)個體和交互勝過過程和工具
宣言認(rèn)為,雖然流程和工具重要(尤其是大型組織),但是它們無法替換有能力的個體和高效的互動,個體的技能和他們之間的互動才是最關(guān)鍵的。
(2)可以工作的軟件勝過面面俱到的文檔
宣言認(rèn)為,傳統(tǒng)的軟件開發(fā)是采用“大量的預(yù)先設(shè)計“將需求文檔看作是關(guān)鍵文檔??蛻糇罱K所需要的是可以運行的軟件,在軟件開發(fā)迭代完成時候,已集成、已測試、潛在準(zhǔn)備發(fā)布的產(chǎn)品才是關(guān)鍵度量,它能夠有效地跟蹤項目進度和對發(fā)布做出決策。
(3)客戶合作勝過合同談判
宣言認(rèn)為,不論是客戶還是供應(yīng)商,客戶協(xié)作勝過合同談判是一種全新的業(yè)務(wù)模式,能夠讓客戶在設(shè)計過程中參與到軟件開發(fā)中并密切合作,超越談判并嘗試提升與客戶的合作,建立以合作為基礎(chǔ)的關(guān)系,而不是靠公司內(nèi)的正式接口。相對而言,敏捷把對客戶努力及合作程度的審視當(dāng)成更重要的事項。
(4)響應(yīng)變化勝過遵循計劃
宣言認(rèn)為,外部環(huán)境的變化會引起軟件需求的變更,敏捷歡迎需求變化,哪怕是開發(fā)后期,只有快速響應(yīng)外部環(huán)境的變化,才能降低響應(yīng)這些變更的成本。
3.敏捷開發(fā)的12個原則
(1)最優(yōu)先要做的是通過盡早的、持續(xù)的交付有價值的軟件來使客戶滿意。
(2)擁抱需求變更,即使到了開發(fā)的后期,也歡迎改變需求。
(3)頻繁地交付可以工作的軟件,交付時間從幾周到幾個月,交付的時間間隔越短越好
(4)在整個項目開發(fā)期間,業(yè)務(wù)人員和開發(fā)人員必須天天都在一起工作。
(5)圍繞被激勵起來的個人來構(gòu)建項目。
(6)在團隊內(nèi)部,最具有效果并且富有效率的傳遞信息的方法是面對面的交談。
(7)可以工作的軟件是首要的進度度量標(biāo)準(zhǔn)。
(8)敏捷過程提倡可持續(xù)的開發(fā)速度。
(9)不斷地關(guān)注優(yōu)秀的技能和好的設(shè)計會增強敏捷性。
(10)盡量用藝術(shù)化來簡單闡述未完成工作室很有必要的。
(11)最好的構(gòu)架、需求和設(shè)計出自于自組織的團隊。
(12)每隔一定時間,團隊會在如何才能更有效地工作方面進行反省,然后相應(yīng)地對自己的行為進行調(diào)整。
4.國內(nèi)外企業(yè)敏捷開發(fā)轉(zhuǎn)型的相關(guān)實踐
國內(nèi)外很多企業(yè)嘗試敏捷開發(fā)的轉(zhuǎn)型,涵蓋了眾多類型和眾多領(lǐng)域的軟件項目,如互聯(lián)網(wǎng)、銀行、教育、醫(yī)療、通訊等行業(yè)。國內(nèi)外眾多知名企業(yè),如微軟、雅虎、愛立信、通用電氣、諾西、百度、阿里巴巴、騰訊、華為、中興通訊、創(chuàng)新工場等都存在敏捷實踐落地的痕跡或者說本身是其成功轉(zhuǎn)型的典型案例。
2006年的互聯(lián)網(wǎng)高潮后,IBM的軟件部門受到全球IT經(jīng)濟低迷的沖擊,股票開始下滑,面對開始失去信心的股東、董事會,為了生存,IBM不得不將戰(zhàn)略導(dǎo)向從穩(wěn)定業(yè)務(wù)轉(zhuǎn)向了動態(tài)業(yè)務(wù),提出“隨需應(yīng)變”的核心戰(zhàn)略,軟件部由此提出了敏捷研發(fā)方法,最大化地提高生產(chǎn)力,將產(chǎn)品更快、更好地推向市場。2008年,軟件部總裁在其個人業(yè)績承諾計劃PBC(Personal Business Commitment)中包括了關(guān)于敏捷實踐的兩個重要條目:一是加快敏捷實踐的普及,并運用精益Lean的原則,提高開發(fā)者的工作效率和對客戶需求的響應(yīng)速度;二是將IBM的“可擴展敏捷”業(yè)務(wù)模式展現(xiàn)給客戶。IBM軟件部因為推行敏捷開發(fā)模式,節(jié)省了超過30億美元的軟件研發(fā)成本。截至2012年,80%的IBM軟件開發(fā)團隊使用敏捷開發(fā),員工人數(shù)超過62000人(2011年下半年為57000人),跨越346個產(chǎn)品領(lǐng)域均使用了RTC(Rational Team Concert),幫助所有人實現(xiàn)了項目實時可視性,保證了項目的健康并行。
通過對雅虎公司內(nèi)部使用敏捷開發(fā)模式的員工調(diào)查顯示,68%受訪者認(rèn)為使用敏捷后生產(chǎn)率方面得到顯著提高;52%受訪者認(rèn)為團隊品質(zhì)得到提升;63%受訪者認(rèn)為適應(yīng)性得到加強;85%的開發(fā)團隊表示愿意繼續(xù)使用敏捷開發(fā)模式。而國內(nèi)企業(yè)百度早在2009年就開始在多個方面和維度吸納敏捷的特征,淘寶的搜索廣告引擎團隊使用敏捷開發(fā)模式進行轉(zhuǎn)型。
三、E公司研發(fā)團隊軟件開發(fā)模式轉(zhuǎn)型現(xiàn)狀分析
1.E公司研發(fā)簡介
E公司是一家外資企業(yè),擁有員工2萬多名,充分利用互聯(lián)網(wǎng)、云計算、大數(shù)據(jù)等新型技術(shù),為數(shù)據(jù)中心關(guān)鍵基礎(chǔ)設(shè)施、交換式電源、工業(yè)自動化、基礎(chǔ)設(shè)施管理、電源開關(guān)與控制、網(wǎng)絡(luò)通訊相關(guān)產(chǎn)品。該企業(yè)研發(fā)中心設(shè)立在中國(北京、上海、深圳、成都、青島、南京和西安)、美國以及歐洲等地區(qū)。
軟件SA開發(fā)團隊根據(jù)公司內(nèi)部的業(yè)務(wù)需求為內(nèi)部客戶開發(fā)互聯(lián)網(wǎng)產(chǎn)品并提供支持服務(wù),市場部門根據(jù)行業(yè)研究和特定客戶訪問等方式發(fā)現(xiàn)業(yè)務(wù)機會,然后通過分析將業(yè)務(wù)目標(biāo)和需求傳達(dá)給系統(tǒng)開發(fā)團隊,再由軟件開發(fā)團隊完成產(chǎn)品需求定義、開發(fā)和測試等工作。由于業(yè)務(wù)的不確定性,需求及其優(yōu)先級時常變化,所以快速交付和及時響應(yīng)成為系統(tǒng)開發(fā)團隊研發(fā)管理的重要目標(biāo)。
2.E公司產(chǎn)品研發(fā)過程中存在的問題
軟件SA開發(fā)團隊雖然已經(jīng)建立了一套研發(fā)流程并有嚴(yán)格要求執(zhí)行,但是管理層注意到軟件SA開發(fā)團隊運作仍然存在很多問題:
●現(xiàn)有研發(fā)流程設(shè)計得比較繁瑣,執(zhí)行時沒能產(chǎn)生相應(yīng)的價值
●對于頻繁產(chǎn)生及變化的需求響應(yīng)不足,軟件版本交付周期長,項目中修改計劃成本較大
●系統(tǒng)研發(fā)團隊整體上屬于單兵作戰(zhàn),缺乏規(guī)范的項目管理過程和正確的方法作為指導(dǎo)
●項目采用個人經(jīng)驗對功能進行估算的方式,導(dǎo)致對現(xiàn)有的功能模塊估算不夠準(zhǔn)確,項目缺乏歷史迭代速率和標(biāo)準(zhǔn)故事點基準(zhǔn)
●系統(tǒng)研發(fā)團隊工作環(huán)境缺少持續(xù)集成工具支撐
軟件SA開發(fā)團隊希望借助敏捷開發(fā)及管理的思想和方法,優(yōu)化現(xiàn)有流程,并且建立針對快速交付要求的流程。
四、軟件開發(fā)模式轉(zhuǎn)型的實施過程
在軟件開發(fā)模式轉(zhuǎn)型過程中實施過程包括項目策劃、項目準(zhǔn)備、一期試點、階段總結(jié)、二期試點、敏捷推廣六個步驟來對工作流程、管理架構(gòu)、理念和能力進行變革。
1.項目策劃
●深入現(xiàn)場與客戶高層管理人員進行溝通,了解組織軟件開發(fā)模式轉(zhuǎn)型的實施目標(biāo)和對轉(zhuǎn)型實施的期望,同時確定試點項目和敏捷團隊成員
●通過訪談相關(guān)人員了解公司整體情況、業(yè)務(wù)發(fā)展方向、項目實施狀況、研發(fā)團隊人員組成、成員的想法和困擾,一般訪談人員包括EPG、QA、項目經(jīng)理、配置管理,需求分析人員以及測試人員等
●通過對研發(fā)流程現(xiàn)狀進行差距分析,找出管理架構(gòu)上的問題及其根本原因
●召開項目啟動會議
2.項目準(zhǔn)備
●組建敏捷改進小組ETC(Enterprise Transition Community),ETC的成員通常不超過12人,包括工程與開發(fā)的資深人員、產(chǎn)品管理、市場、銷售、運營、人事等等各個小組的領(lǐng)導(dǎo)
●與敏捷改進小組ETC共同定義敏捷改進具體目標(biāo)
●制定ETC改進計劃
●制定敏捷培訓(xùn)計劃
3.一期試點
●與ETC共同確定1個敏捷試點項目,試點項目的選取需要綜合考慮項目規(guī)模、項目持續(xù)時間、項目的重要性和發(fā)起人的投入程度等因素,試點項目團隊人員控制在5-9人
●按照敏捷培訓(xùn)計劃對敏捷試點項目團隊成員完成敏捷培訓(xùn),傳遞敏捷開發(fā)原則、敏捷思想和方法,通過持續(xù)不斷地盡早交付有價值的軟件使客戶滿意
●執(zhí)行ETC改進計劃
4.階段總結(jié)
●通過目標(biāo)評估,確定一期試點項目的工作成果是否滿足預(yù)期要求,如果有偏差,調(diào)整ETC改進計劃
●根據(jù)一期試點效果制定二期目標(biāo)和方案
5.二期試點
●與ETC共同確定第2個敏捷試點團隊,敏捷試點團隊人員在5-9人
●敏捷轉(zhuǎn)型過程中,敏捷教練幫助SA團隊建立正確的工作習(xí)慣和工作方法,培養(yǎng)公司內(nèi)部敏捷教練,推廣一期試點成果
●敏捷教練結(jié)合全程參與過程中了解的情況以及敏捷應(yīng)用中出現(xiàn)的問題,幫助組織優(yōu)化現(xiàn)有流程文件和模板,作為后續(xù)敏捷項目的工作基礎(chǔ)。
6.敏捷推廣
與敏捷改進小組ETC共同討論如何保障輔導(dǎo)成果,建立推廣計劃,指導(dǎo)公司落實成果。在完成2個試點項目敏捷模式導(dǎo)入后,針對開發(fā)團隊之間實踐高效的Scrum of Scrums,采用Scrum ofScrums可以將將開發(fā)團隊與團隊棲身的產(chǎn)品關(guān)聯(lián)在一起,從多個層面建立起Scram團隊和P0之間的關(guān)聯(lián),將有助于在大型組織中采用敏捷,敏捷推廣過程中我們從兩個層面建立起這樣的關(guān)聯(lián):
●項目層面:每個團隊都擁有一位產(chǎn)品負(fù)責(zé)人,他們結(jié)合各自團隊的能力,使用產(chǎn)品待辦事項列表(Product Backlog)來推動其工作
●產(chǎn)品層面:每個項目的P0需要進行相互合作,在推廣過程中我們設(shè)置一個“P0 Leader”的角色,由三個試點項目其中一位P0擔(dān)任,由他負(fù)責(zé)管理橫跨各個項目的產(chǎn)品待辦事項列表
Scram of Scrams幫助開發(fā)團隊的成員們按照自組織的方式協(xié)調(diào)與合作,提升開發(fā)團隊之間的自組織技能,更快速地消除團隊之間阻礙,產(chǎn)出更高質(zhì)量的產(chǎn)品,并在更短的時間內(nèi)交付更高的價值。
五、E公司研發(fā)團隊敏捷轉(zhuǎn)型的效果分析
轉(zhuǎn)型是公司長久發(fā)展的生命線,是提高公司綜合競爭力的關(guān)鍵。敏捷開發(fā)模式改變了原有的運營模式、資源配置方式及其相應(yīng)的組織方式,通過敏捷開發(fā)模式企業(yè)重塑競爭優(yōu)勢。該組織在接受敏捷開發(fā)模式之前已經(jīng)在小范圍內(nèi)嘗試了敏捷的部分實踐,但是工作中遇到一些具體的困難,通過導(dǎo)入敏捷開發(fā)模式,幫助該企業(yè)解決的問題包括:
●在組織內(nèi)部對敏捷開發(fā)方法中的概念建立了一致的理解,培養(yǎng)團隊敏捷開發(fā)習(xí)慣和方法
●將敏捷開發(fā)中的組織關(guān)注的實踐映射于現(xiàn)有的流程中,并根據(jù)實踐要求優(yōu)化了現(xiàn)有流程
●建立組織級完整的敏捷開發(fā)流程文件、模板和范例
●建立并幫助組織理解敏捷項目啟動、迭代過程中各項活動在項目中的具體操作,并與現(xiàn)有的管理系統(tǒng)相結(jié)合,明確了敏捷項目的工作量管理、進度匯報、需求管理等活動在管理系統(tǒng)中的要求
除此之外,幫助組織建立了以CmiseControl、Ant和SVN為Android持續(xù)集成環(huán)境,建立了以Jenkins、Xcode和SVN為ios為解決方案的持續(xù)集成環(huán)境,建立了以Junit為框架的單元測試開發(fā)規(guī)范,實現(xiàn)了從編譯、測試、代碼檢查到部署全過程的自動化覆蓋,大大降低了重復(fù)性的人工工作,提升了代碼規(guī)范及質(zhì)量,并確保了發(fā)布版本的正確性。
敏捷注重組織和團隊,敏捷更強調(diào)發(fā)揮個人的主觀能動性,對于項目管理管理復(fù)雜、需求變更影響大、需要快速響應(yīng)客戶業(yè)務(wù)要,敏捷提供了很好的解決方法,通過敏捷開發(fā)模式實施提高了團隊的整體水平。
六、總結(jié)
總體而言,該組織通過本次敏捷教練咨詢,為該企業(yè)從傳統(tǒng)開發(fā)模式向敏捷開發(fā)轉(zhuǎn)型,快速、正確的掌握和應(yīng)用敏捷開發(fā)思想提供了一種有效的途徑,讓企業(yè)體會到如何正確的實施敏捷開發(fā)方法并有效避免常見錯誤,為企業(yè)大大縮短了導(dǎo)入時間和降低了導(dǎo)入的成本,為企業(yè)建立了符合其業(yè)務(wù)特點的、基于敏捷的研發(fā)流程、模板和范例,能夠快速響應(yīng)業(yè)務(wù)需求、及時調(diào)整項目計劃、準(zhǔn)確展示項目進展情況,在質(zhì)量管理投入和產(chǎn)出上找到了管理層期望的平衡點。本文中實踐的內(nèi)容是大型軟件研發(fā)團隊如何通過戰(zhàn)略思考和軟件產(chǎn)品研發(fā)的準(zhǔn)時交付的能力,為軟件研發(fā)企業(yè)的發(fā)展提出了一些可供借鑒的思路和具體方法。