柏松偉

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