中國民航信息網絡股份有限公司研發(fā)中心資深質量保證工程師 崔航 分享大型敏捷開發(fā)應用實踐

由于全國所有的航空公司都是中國航信的客戶,但是他們分布在全國,如果只是總部研發(fā),根本支持不了,因此中國航信通過全國各地分子公司的研發(fā)團隊提供個性化版本的支持。這些大型復雜系統(tǒng)基本上都是分布式聯合開發(fā)。

據介紹,2011年12月中國航信聘請惠普公司咨詢團隊啟動了敏捷咨詢項目,2012年4月,建成了開發(fā)流程,2012年的9月就開始第一次大批量、大規(guī)模的推廣,到2013年,已經有了45個項目、445個人開始加入敏捷開發(fā)的隊伍。

2014年中國航信第一次召開了敏捷總結大會,大家都覺得敏捷實施的效果不錯。

從2011年12月引入,到現在基本上已經5年多了,在這5年的過程中既有成功,也有一些挫折,但最終的效果不錯。從流程上看,2013年之前中國航信的敏捷主要是做推廣,到了2014年、2015年,發(fā)現如果只是過程的話,沒有辦法最大程度發(fā)揮敏捷實施的價值,還是需要跟上工具、平臺,這樣才能真正的能夠持續(xù)集成、持續(xù)交付,所以在2014、2015年開始,重點建設敏捷開發(fā)的工具平臺。

以前做項目反饋比較慢,遇到問題解決起來也比較麻煩,自從實施敏捷以后,我覺得基本上不再像以前了,基本上可以不空談了,大家的質量意識、工作效率都有很大的提升,尤其中國航信還實施了最佳軟件工程的方法,都對我們團隊的無論是個人能力、團隊能力有很大的提升。

具體來說,通過敏捷實施以后,第一,統(tǒng)一版本規(guī)劃,使得定制版本的維護相對容易很多。第二,統(tǒng)一的管理平臺,減少了異地或跨部門溝通的困難。第三,統(tǒng)一的質量要求、技術要求,避免了后期才會發(fā)現的因為配置不同或者代碼質量很差而引起的一些返工,實現了持續(xù)交付,提高了客戶滿意度。

以下為崔航演講實錄:

謝謝主持人!我是第一次參加國際最佳實踐的年會,心情非常激動,感謝孫振鵬先生給我們公司這個機會,讓我站在這里跟大家一起分享我們在敏捷事件方面的一些經驗、教訓。

我今天分享的主題主要是對于大型復雜系統(tǒng),尤其是多團隊聯合開發(fā)的時候我們如何適應敏捷的。

其實對于我們公司來說,跟互聯網企業(yè)不太一樣,我們是傳統(tǒng)的IT企業(yè),剛才前面說了我們是民航的,在民航方面我們公司主要做的都是大型復雜的系統(tǒng),其實如果按照敏捷的理念來說,可能不是特別適用。但隨著互聯網的發(fā)展,對客戶的一些需要,如果我們還是按照以前瀑布式的模型來做項目的話,其實已經不太適應了,所以我們開始在2012年敏捷了。

剛才聽了前兩位演講嘉賓演講,內容都非常精彩,在講主題之前先對我們公司做一個簡單的介紹。我們是中國民航信息集團公司,有30多年歷史,我們的前身是民航總局下面的計算機信息中心,是在1978年就成立了,我們集團公司正式成立是2002年,其實是在2001年的時候就已經在香港上市了。我們就是航空運輸旅游信息專門的服務提供商,我們公司從之前的計算機信息中心不到100人的規(guī)模,經過這么多年發(fā)展已經達到了6000多人,并且有60多個分子公司。

在座各位應該經常坐飛機吧,大家有沒有用什么軟件去查這個航班信息?就是我們集團公司下面一個子公司的產品。TravelSky是我們公司的名字。

說一下我個人的信息,我是2005年開始質量工作的,我來自于航信總部的研發(fā)中心,我個人工作經歷與研發(fā)管理體系的建設是跟航信息息相關的。在2005年的時候航信通過了ISO9000認證,實施項目管理,當時我剛好有幸加入了這個團隊。2011年的時候我們通過了CMMI L3的評估,當時我作為五人評估組重要成員之一。這個階段我們相當于是航信主要做的項目開發(fā)的規(guī)范化,大家也知道我們來源是央企民航的信息中心,當時其實大家不太會做項目,只是說去維護信息系統(tǒng)就好了。但是在這個階段我們發(fā)現,你要是不會開發(fā)規(guī)范,越來越沒有辦法滿足市場需要、客戶需要。

到了2012年我們開始引入了敏捷,因為從2010年開始行業(yè)發(fā)展特別快,連帶其實我們傳統(tǒng)的這些IT行業(yè)對于客戶的需求都是需要快速響應的,不是說CMMI不好,過程過重,所以我們2012年引入了敏捷開發(fā),希望能夠快速交付。

2013年我們公司就成立了PMO(項目管理辦公室),為什么之前沒有?2013年以前都是大型主機,經過這幾年的評估,主機系統(tǒng)越來越不能滿足民航業(yè)的發(fā)展了,我們現在旅客的增長量非???,我們現在信息系統(tǒng)如果仍然用大機,在五年之后絕對滿足不了,所以我們在2013年立項,要進行新一代旅客服務信息系統(tǒng)的建設,這個項目國家投資18億,是特別特別大的項目,說要成立一個PMO,當時我也有幸加入了這個PMO,主要是負責質量管理、質量保證等工作。

到了第三階段,我們引入了集成產品研發(fā)的過程,為什么呢?因為在之前我們都是在做系統(tǒng),后來發(fā)現只是做系統(tǒng)或者只是響應客戶的需要不能滿足公司自身的發(fā)展,所以我們現在逐步要去做產品。做產品我們當時就引入IBM的IPO集成產品研發(fā)過程,我們進行了一年的咨詢,經過整理,其實也是結合了快10年的過程的積累,最后發(fā)布了一個產品體系的白皮書。

下面進入主題,敏捷在我們公司是怎么開始實施的。2011年12月的時候我們開始啟動了一個咨詢項目,當時聘請的是惠普的一個咨詢團隊,孫先生應該知道,當時有幸聘請了鄭力、徐毅都是目前很資深的敏捷教練,專門到航信來給我們實施敏捷。到了2012年4月,通過這個咨詢團隊我們建成了開發(fā)流程,在2012年的9月就開始第一次大批量、大規(guī)模的推廣,一直到2013年我們已經有了45個項目、445個人開始加入敏捷開發(fā)的隊伍了。

如圖,這兩個大家可能很奇怪這是什么東西?這其實是我們公司自己設計的一個認證,是敏捷成熟度的認證。我們2012年開始試點推廣,2013年實行了一年,我們要看效果怎么樣,所以我們制定了一個成熟度等級評價方法,就是檢驗所有的實施敏捷的團隊,他們到底成熟度達到了什么水平。我們應該分成了三級,其中這三級都是有三項標準,還有三項,因為我們剛開始只有三項最佳的敏捷實踐。因為有些團隊一開始就上來了,但是后來又覺得不太適用,中途中斷了,所以我們看他的成熟度還有敏捷持續(xù)的時間。

定量的指標其實是由度量指標和敏捷實踐指標兩部分組成的,包括自動編譯、自動構建的頻率、代碼評審、分支覆蓋率等等,包括客戶演示,我們都是一些客觀的數據去看。敏捷實踐主要是,我們進行項目管理,也是有一系列的指標,通過打分的機制看它實施的情況怎么樣。對于三項敏捷實踐其中還有一個是持續(xù)集成,還有客戶參與的效果,最終會給每個團隊進行評價。

到了2014年第一次召開了敏捷總結大會,當時給所有的這些能夠得到三級敏捷成熟度團隊,由我們公司中心領導專門去給他們頒獎,并且在這個會上我們還有幸邀請了比如說阿里資深的敏捷教練,包括又把鄭力請回來給我們去講一下,因為事隔兩年了敏捷的發(fā)展有變化。我們在這個大會挺成功的,大家都覺得敏捷實施的效果還是不錯的。至今為止,我們覺得敏捷在我們研發(fā)中心都已經成為了一種文化了。

最后總結一下,其實我們的敏捷實施從2011年12月引入,到現在基本上已經5年多了,在這5年的過程中時間其實不短了,我前面介紹的可能還OK,但其實這個過程我們自己也很有體會,有很多很多的一些挫折,但最終的效果不錯,后面會跟大家分享一下敏捷給我們帶來的收獲。2013年之前我們是做推廣,主要是一些敏捷的理論、方法,手把手的去教他們,到了2014年、2015年,我們發(fā)現如果只是過程的話,其實沒有辦法最大的發(fā)揮敏捷實施的價值,所以最后發(fā)現還是需要跟上工具、平臺,這樣才能真正的能夠持續(xù)集成、持續(xù)交付,所以在2014、2015年開始我們重點是建設敏捷開發(fā)的工具平臺。這個是我們的一個發(fā)展過程。

下來就是以大型復雜系統(tǒng)多團隊為例講講我們怎么實行敏捷的。

在我們公司什么叫大型復雜系統(tǒng)? 首先開發(fā)周期肯定是2年以上的,而且團隊規(guī)模一般都超過40人以上。舉個例子來說,民航旅客服務系統(tǒng)、機場立崗系統(tǒng)、機場行李處理系統(tǒng),這個都叫成大型復雜系統(tǒng)。全中國所有的航空公司都是我們公司的客戶,但是他們公司總部、分部,分布在全國,如果只是總部研發(fā)我們根本支持不了,我們在全國各地都有分子公司,并且也有一定的研發(fā)團隊,尤其是做那種航空公司的個性化版本,所以我們這些系統(tǒng)基本上都是分布式開發(fā),都是聯合開發(fā),主要是讓重慶、廣州、上海這種大的研發(fā)中心跟著總部一塊做這種聯合開發(fā)的,所以我們把這種都叫復雜系統(tǒng)團隊開發(fā)。

這個大型復雜系統(tǒng)大家可能都有一些共識,最大的問題就是,因為人員比較多,而且大家都不在一起工作,大家會質疑敏捷:不是說一定要面對面的溝通嗎?這是宣言的一部分,包括我們的價值觀。但是我們實際情況,尤其是傳統(tǒng)大型IT公司是根本做不到的,但是我們怎么辦呢?但是這些問題還是得解決,因為有了距離,尤其現在,之前我們都遇到過,這種溝通不便,協(xié)調起來特別特別的困難。還有最主要的一點,就是第四點,技術實踐。因為當時我們各個分子公司的研發(fā)團隊大家的技術標準、質量標準都不太一樣,還有包括環(huán)境配置。一做集成的時候發(fā)現糟了,全都是Bug,甚至跑不通,這樣導致了多次的多輪返工,這些都是一些問題,所以我們覺得敏捷有可能能夠解決這些問題。

所以我們首先有一個大型復雜系統(tǒng)的團隊,下面有一個管理框架,在座的大型企業(yè)可能都是這么做的,有四個層次,協(xié)作、管理、決策、支撐,我們公司的特點主要集中在這里。還有我們所有的團隊里邊會有一個主責團隊和其他協(xié)同團隊,主責團隊一定是負責整個項目的產品規(guī)劃、架構設計,到最后包括整個系統(tǒng)的集成測試、UAT測試、投產上線,都是由主責團隊小組全權負責的。其他的無論你分布在哪里,OK,沒有關系,你還是各自的可以實施敏捷,我們是多團隊同步迭代的方式去做。還有一個特點,在支持這塊,我們?yōu)榱私鉀Q跨團隊、跨地域、溝通協(xié)作的困難,或者技術標準、質量標準不同的問題,我們要求統(tǒng)一平臺、統(tǒng)一制度、統(tǒng)一度量,避免剛才說的問題。

對于多團隊同步開發(fā)的問題,仍然是每個小團隊采用的是這種方式,2—4周一個迭代,在這個迭代過程中你的開發(fā)測試,按照你自己的規(guī)劃進行就可以了,我們有可能跟其他的公司或者互聯網公司不太相同的,就是我們需求這塊,我們需求分析是沒有放在迭代里頭的,因為我們剛才也說了,我們是協(xié)同開發(fā)的,這個需求必須是經過主責團隊統(tǒng)一規(guī)劃出來的,我們叫PRD文檔,就是產品需求文檔,我們有KC的概念,這個KC就是說,對于這個系統(tǒng)來說是大的功能點,這個規(guī)劃必須主責團隊來去做,把他會分解成不同的UC,就是一個個需求,這個是在分發(fā)給各個分支的協(xié)作團隊,由他們做需求分析。這個需求分析完了以后,他是需要反饋給我們整個主責團隊他們要去做評審。這個過程有可能稍微長一點,不太適用放在迭代里面,所以我們把這塊是分出去的。

具體迭代主要是設計測試開發(fā),大家可能會說你這樣不是有點像瀑布型的,大家就在等。其實不是,跟以前最大的區(qū)別就是,我們的這個需求不是說把所有的需求都分析完了以后才去做,而是說按照我們小的產品版本的規(guī)劃,拿出來一部分,可以開始做了,這部分需求分析完以后馬上就進入迭代開發(fā)的過程。同時,在開發(fā)團隊做迭代開發(fā)的時候,我們這邊同步的產品經理再去做剩余的需求。

還有一點,各個團隊雖然是各自的迭代,但是都必須符合我們整個的版本規(guī)劃,所以我們叫同步迭代開發(fā),因為最終它的交付,我們這塊的交付有可能也是跟別的敏捷不太一樣,直接交付給客戶,我們不是,我們這個迭代出來的版本是一個可集成測試版本,不是直接交給客戶的,因為這個也是跟我們系統(tǒng)的安全性包括集成性的特點有關系的,這也是一個比較大的差別,就是我們可集成的這種測試版本以后,由主責團隊進行版本測試,最后再給客戶交付。這就是敏捷的這一部分。

下面說一下工具的部分。其實我們認為,敏捷最佳實踐我們運用比較好、也認為最有效的就是持續(xù)集成,因為尤其是多團隊開發(fā)的時候,這個持續(xù)集成是非常非常關鍵的。我們的持續(xù)集成平臺的關鍵功能包括這些,我們會有統(tǒng)一的原代碼配置庫,對于一個大的復雜系統(tǒng)項目,所有的團隊它的代碼配置庫必須是一個,就是目前都是在我們總部研發(fā)的,這樣的話可以隨時獲取這種系統(tǒng)里要集成的最新代碼。第二,我們要求必須每個團隊每天提交代碼,并且能夠自動構建,這個代碼必須可以自動編譯,而且可以編譯通過的。第三,需要實現功能單元測試,必須自動化,因為它需要快。我們在每次提交代碼以后,根據我們平臺的設置會自動的去啟發(fā)這個靜態(tài)代碼掃描,包括自動執(zhí)行單元測試,最后才是做自動的構建。

最后,問題應該是自動反饋的,不是靠人去看有問題,而是在持續(xù)集成過程中隨時發(fā)現問題、隨時就要反饋給相關的提交人員,讓他們及時處理,這樣才能保證每天提交的代碼放在服務器上都是一個可編譯的版本。這個就是我們持續(xù)交付的平臺建設,主要包括六大功能模塊,第一個是任務分解,我們用的是這個工具,尤其是對于異地開發(fā)的分布式模式,大家把任務都放在這個平臺上,任務進展、任務工作情況都是透明的,大家都可以看。還有電子看板的跟蹤,以前我們都是大白板去貼小紙條,那個也是不會的,在開會的時候面對面溝通效果比較好,最大的問題是不便于度量,因為都是一個一個小紙條,最后還是得拿下來一個一個去更新數據,比較麻煩,而且比較慢,所以我們最后應用電子看板進行跟蹤。

原代碼指的主要是靜態(tài)代碼,我們開發(fā)人員每次提交以后必須得先經過靜態(tài)代碼掃描,再做單元測試,然后才可以去做自動的構建。

我們要求代碼的質量必須是統(tǒng)一的標準,尤其是對于分團隊開發(fā),所以我們會有代碼傳送,因為是異地,以前無論是QQ開視頻的效果都不是特別好,所以我們引用了FishEye這種工具,大家把代碼拿下去之后直接評審,你的意見及時反饋,開發(fā)人員看到以后也及時修改,一整套是我們基于交付平臺的。

最后說一下敏捷對我們的幫助是什么,自從實施敏捷以后,大概5年多的時間,因為我覺得我們基本上不再像以前做項目反饋比較慢,遇到問題解決起來也比較麻煩,現在基本上可以不空談了,大家的質量意識、工作效率都有很大的提升,尤其我們還實施了最佳的軟件工程的方法,都對我們團隊的無論是個人能力、團隊能力有很大的提升。

剛才前面提到了大規(guī)模項目有5個問題,我們基本上有4個問題得到了一定程度的解決,我們通過敏捷實施以后統(tǒng)一版本規(guī)劃這樣使得定制版本的維護就會相對容易一些。第二,統(tǒng)一的管理平臺,我們一定程度上減少了異地或者是跨部門這種溝通的困難。第三,我們有統(tǒng)一的質量要求、技術要求,這樣避免了一些后期才會發(fā)現的因為配置不同或者代碼質量很差而引起的一些返工。因為我們實施敏捷以后基本上可以做到持續(xù)的交付,避免了我們以前航空公司的客戶老是抱怨說,你們這個航信開發(fā)太慢,還不如找外包呢,現在基本上滿意度已經提高了很多。

前面有可能沒有感覺,這是一些數據可以說一下。從產品質量來說,我們這個產品比較寬泛,不是說最后交付的產品,指工作產品。從缺陷密度、故障率、缺陷泄漏率我們連續(xù)3年,因為我們實施敏捷以后就開始度量,從2013年開始度量,以后連續(xù)3年我們都是在持續(xù)降低的。

靜態(tài)代碼質量,我們也是在2013年剛剛引入嗩吶這種掃描工具,當時其實我們的編碼規(guī)則基本上引用的就是Google、微軟的規(guī)則。當時一掃嚇了一跳,我們大多數項目都在D級和E級,差別差,因為一共分為5級最低就是E級,我們大多數項目在D級和E級,經過3年以后我們現在基本上90%以上的項目都在C級以上了,有大概20%的項目都已經能保持在A級。

開發(fā)過程,我們在實施敏捷之前基本上沒有自動化測試,這幾年不斷的建設,當然這都是有成本的,大家可以看,我們增長到了24%,雖然不多,但其實對于我們來說已經是一個很大的進步了。

還有單元測試分支覆蓋率,當時也是我們的開發(fā)團隊在代碼質量意識上還是挺弱的,后來實施敏捷以后我們從0增長到了大概30%,這是一個平均數,我們有的團隊做的特別好的都已經達到了80%,還有55%的團隊已經真的是能夠實現每日提交代碼并自動構建了。

對于交付效率,我現在從實施敏捷已經開始,當然這個數據已經是去年的了,我們可以實現每月去給客戶演示,達到平均1.33次了,這個在以前都是不可想象得。并且每個系統(tǒng)每月都能投產一次新版本了,大家可能覺得你這個敏捷每個月才投產一次是不是慢一點,因為我們公司還是跟那個不太一樣,因為我們的安全性要求還是非常高的,因為民航所有的信息系統(tǒng),大家的訂票、離港都是公司來維護,不敢出一點錯,對于我們來說已經是很大的進步了。

最后說一點體會,其實主要還是三個,如果實施敏捷的話,大家一定要說你的目標是什么,目標千萬不是你要實施敏捷,而是說你到底要解決什么問題,是不是能夠通過實施敏捷來解決,所以這個目標的設定是非常重要的。第二,實施過程當中,經過5年多,我們后來發(fā)現,其實我們在2014年的時候,其實花了很大的成本去建設工具平臺,是因為發(fā)現到了2014年我們在實施過程中遇到了瓶頸,大家說我都做了,我都采用了什么,也都怎么樣了,但是好像這個效率沒有特別大的提升,所以我們當時覺得,尤其是對于那種異地來說,你沒辦法解決這種溝通問題,所以我們覺得敏捷實施有效性,工具和流程的建設還是非常重要的,就是你要繼續(xù)想往深里做的話。第三,這個有可能不是說工具流程能夠解決的,就是團隊,每一個敏捷的開發(fā)團隊的管理者是非常重要的,他必須有自己敏捷的理念才能夠真正的把這個團隊帶好,真正的去實施敏捷。

我們舉一個例子就是,我們有一個團隊,剛才我提到我們單元測試覆蓋率達到80%,就是因為我們的SM非常棒,他是一門心思覺得敏捷非常好,他會要把他所實施的敏捷實踐真正的運用起來,目標就是要提升他們代碼的質量,還有團隊的使用效率。但是有的團隊,到目前為止我們還有的團隊處在一級的水平,就是我們自己的能力成熟度,那就跟他的SM還是有很大的關系的。

最后的變化,每個企業(yè)特點不同、業(yè)務特點不同,你的文化也是不一樣的,我覺得敏捷實施還是要因地制宜,我們剛開始就是相當于照搬惠普那一套在2013年的時候也是遇到了很多問題,最后我們會去做一些優(yōu)化、改良,然后去適應我們自己的特點,最后才比較能夠順利的實施。

我今天的分享就到這里。謝謝大家!

分享到

zhoub

相關推薦