如果以“敏捷宣言”的發(fā)布作為敏捷開發(fā)正式推出的標(biāo)志的話,那么掐指算來,敏捷開發(fā)已經(jīng)走過10個(gè)年頭了。2001年,10位軟件開發(fā)界著名的大師聚集在一起共同發(fā)布了“敏捷宣言”,敏捷開發(fā)方法才為大眾所熟知。
數(shù)據(jù)顯示,在歐美發(fā)達(dá)國家,采用敏捷開發(fā)的企業(yè)已經(jīng)接近半數(shù),其實(shí)用性業(yè)已得到證明,但在我國其接受程度要差一些,大約20%#12316;30%左右。另一 方面,像很多新生事物一樣,作為一種有別于瀑布式開發(fā)方法的新的軟件開發(fā)方式,敏捷開發(fā)也受到很多人的質(zhì)疑,這也注定敏捷開發(fā)成為主流還有很長的路要走。
軟件開發(fā)不同于工業(yè)生產(chǎn)
在軟件開發(fā)歷史上,最有影響的事件是軟件工程學(xué)的提出。
在計(jì)算機(jī)剛走出實(shí)驗(yàn)室、開始服務(wù)于普羅大眾之初的上個(gè)世紀(jì)50、60年代,軟件開發(fā)更多地表現(xiàn)為開發(fā)者的個(gè)人行為,基本上處于一種完全無序的狀態(tài),沒有流程,也談不上控制。隨著計(jì)算機(jī)的普及,對(duì)軟件需求的快速膨脹,這種無序開發(fā)狀態(tài)的惡果馬上顯現(xiàn)出來,開發(fā)周期、成本無法控制,軟件缺陷率居高不下,最后引發(fā)了軟件危機(jī),這才有軟件工程理論的提出。
軟件工程的最大貢獻(xiàn)在于,它借鑒了工業(yè)生產(chǎn),特別是流水線生產(chǎn)的管理方法,強(qiáng)調(diào)流程的可控性,它提出的經(jīng)典瀑布式軟件開發(fā)至今仍然是最為主流的開發(fā)方式。在那個(gè)年代,軟件工程的先進(jìn)性無容置疑。瀑布式軟件開發(fā)強(qiáng)調(diào)軟件開發(fā)過程應(yīng)該嚴(yán)格按照需求分析、設(shè)計(jì)、編碼、測試、維護(hù)來進(jìn)行,從而極大地增加了軟件項(xiàng)目的可控性,成本變得可以預(yù)測了,這對(duì)于大規(guī)模的軟件開發(fā)是非常必要的。而它的不足也很明顯,它比照流水線生產(chǎn)來管理軟件開發(fā),而忽略了軟件開發(fā)是一件需要程序員想象力和創(chuàng)造力的工作。
“工業(yè)生產(chǎn)追求的是生產(chǎn)效率,如何更快地生產(chǎn)出更多的產(chǎn)品,這一追求跟軟件開發(fā)的目的是完全不一樣的。” ThoughtWorks中國區(qū)總經(jīng)理郭曉介紹說。ThoughtWorks是一家提供定制軟件開發(fā)的公司,這家擁有1000多名程序員的公司從1999年起就已全面轉(zhuǎn)向了敏捷開發(fā)。
郭曉認(rèn)為,軟件開發(fā)是一種創(chuàng)造性的、高附加值的、需要發(fā)揮人的主觀能動(dòng)性的工作,不是只靠流程改進(jìn)就可以提高效率的。軟件開發(fā)區(qū)別于傳統(tǒng)制造業(yè)的另一個(gè)不同在于,軟件的價(jià)值并不在于多長時(shí)間內(nèi)生產(chǎn)出多少份軟件,而是在于給業(yè)務(wù)提供了什么價(jià)值。
“軟件工程強(qiáng)調(diào)的是流程,而敏捷開發(fā)顛覆了軟件工程這一理論,它的核心理念是人比流程重要?!惫鶗哉f。
幫你做正確的事情
嚴(yán)格說來,敏捷開發(fā)并不是一種軟件開發(fā),而是一類軟件開發(fā)方法的總稱?!懊艚菪浴敝刑岢隽嗣艚蓍_發(fā)四原則,即個(gè)體和交互勝過過程和工具、能工作的軟件勝過面面俱到的文檔、客戶合作勝過合同談判、響應(yīng)變化勝過遵循計(jì)劃,只要是復(fù)合這四項(xiàng)原則的開發(fā)方法都可以算做敏捷開發(fā),其中最為大眾熟知的是極限編程。
“持續(xù)集成、快速迭代、重構(gòu)、測試驅(qū)動(dòng),這些都是敏捷開發(fā)方法區(qū)別于傳統(tǒng)開發(fā)方法之處?!惫鶗哉f,“正是由于敏捷開發(fā)的這些特點(diǎn),使得敏捷開發(fā)能更快速、更有效地交付可用的有價(jià)值的軟件。”
根據(jù)Forrester所進(jìn)行的一個(gè)調(diào)查,采用敏捷方法之后的軟件項(xiàng)目總體的擁有成本都有極大降低,其中缺陷率平均降低63%,核心的缺陷率降低79%,整體投入減少62%,整個(gè)項(xiàng)目開發(fā)的時(shí)間縮短69%。
不過,在郭曉看來,這些并不是敏捷的最大好處,“幫助企業(yè)做出正確的事情才是敏捷最大價(jià)值所在。至于提高生產(chǎn)率、降低軟件缺陷率等好處,都是采用敏捷開發(fā)的必然結(jié)果。”
郭曉解釋說,這里所說的做正確的事情是指,敏捷開發(fā)通過持續(xù)與用戶溝通,以及通過持續(xù)集成、快速迭代,讓用戶得以盡快看到最終結(jié)果,從而可以盡快發(fā)現(xiàn)早期設(shè)計(jì)中的錯(cuò)誤,比如不切實(shí)際的、不必要的功能。另一方面,在溝通中還可以發(fā)現(xiàn)新的、更有價(jià)值的需求。而這些在傳統(tǒng)開發(fā)方法中是不太現(xiàn)實(shí)的。比如在瀑布式開發(fā)中,一旦需求分析完成如要修改就需要比較復(fù)雜的流程,而且,進(jìn)入開發(fā)階段后程序員也很少再聽取用戶的需求意見。
前行遇阻力
目前,盡管敏捷開發(fā)方法已經(jīng)提出多年,采用這一方法來實(shí)現(xiàn)的軟件項(xiàng)目也很多,但是,質(zhì)疑者依然不少。最為典型的說法是這種開發(fā)方法僅適用于小型開發(fā)團(tuán)隊(duì)。對(duì)此郭曉表示,敏捷開發(fā)最初的確被定位為小型團(tuán)隊(duì)的開發(fā)方法。但是,這些年來,這種開發(fā)方法已經(jīng)在很多大型組織的大型軟件開發(fā)項(xiàng)目上得到很好的應(yīng)用,實(shí)踐也證明了其在大項(xiàng)目中的可行性。比如,ThoughtWorks公司有些項(xiàng)目參與的程序員就有100多人,采用敏捷開發(fā)方法很好地完成了這些項(xiàng)目。另一個(gè)例子是英國電信,其內(nèi)部有上萬人的開發(fā)團(tuán)隊(duì),也都全部采用敏捷開發(fā)方法。而在中國也有一些企業(yè)采用,比如中國移動(dòng)研究院就普遍采用這種方法。
“那些需要快速響應(yīng)市場變化的互聯(lián)網(wǎng)公司是敏捷開發(fā)的積極擁護(hù)者,因?yàn)樗鼈兊炔黄?。?郭曉說。
郭曉同時(shí)坦言,用戶的不理解給敏捷開發(fā)方法的應(yīng)用帶來不少阻力。比如,傳統(tǒng)軟件開發(fā)方法非常重視文檔,在項(xiàng)目真正開始編碼之前一般需要有完整的文檔,而敏捷開發(fā)難以做到,因?yàn)樗男枨蠓治?、設(shè)計(jì)、編碼工作等是相互交織的。另外,敏捷開發(fā)還特別強(qiáng)調(diào)持續(xù)與用戶交流,很多需求正是在這種交互過程中產(chǎn)生的,同時(shí)有些需求也會(huì)在這種交互過程中修改,其結(jié)果就是項(xiàng)目的預(yù)算不像傳統(tǒng)開發(fā)方法那樣一開始就能明確下來。
“在我們的客戶中,只要嘗試過用敏捷開發(fā)方法來完成的項(xiàng)目,很少有不滿意的?,F(xiàn)在的問題是,有些客戶不愿意嘗試。”他說。
另外,對(duì)于一個(gè)組織而言,要想采用敏捷開發(fā),也可能面臨不少困難,這也是阻礙敏捷開發(fā)普及的重要原因之一。
“最大的問題是企業(yè)文化需要變革,管理制度也需要調(diào)整。比如,對(duì)程序員的傳統(tǒng)考核辦法是考核其代碼量,而敏捷開發(fā)方法提倡結(jié)對(duì)編程和重構(gòu),提倡盡量重用代碼,過去的那套考核制度就不適用了?!盩houghtWorks中國區(qū)技術(shù)總監(jiān)徐昊說,其另外一個(gè)身份是敏捷開發(fā)的咨詢師,指導(dǎo)過很多敏捷開發(fā)的項(xiàng)目
徐昊建議,組織初次嘗試敏捷開發(fā)的方法可以以“持續(xù)集成”作為切入點(diǎn)。因?yàn)椤俺掷m(xù)集成”會(huì)盡早暴露出大量的問題,比如說架構(gòu)或者耦合度等方面的問題?!俺掷m(xù)集成不是解決問題的靈丹妙藥,但是能盡快展現(xiàn)敏捷開發(fā)方法的價(jià)值?!?/p>
不管是徐昊還是郭曉都認(rèn)為,敏捷開發(fā)目前在中國還需要教育和培訓(xùn)。也許正是基于這個(gè)原因,ThoughtWorks一直堅(jiān)持在中國舉辦敏捷開發(fā)大會(huì),今年10月14日#12316;15日舉辦的敏捷大會(huì)已經(jīng)是第5屆?!?年來,很多中國的程序員通過我們的敏捷大會(huì)認(rèn)識(shí)了敏捷開發(fā),而我們對(duì)敏捷開發(fā)的認(rèn)識(shí)也在不斷加深?!?郭曉告訴記者。