
若問(wèn)現(xiàn)今軟件開(kāi)發(fā)模式的熱詞,那就非“敏捷”莫屬了!敏捷開(kāi)發(fā)的確蘊(yùn)涵著無(wú)限商機(jī),但同時(shí)也是對(duì)中國(guó)軟件產(chǎn)業(yè)的嚴(yán)峻挑戰(zhàn)。對(duì)于起步遠(yuǎn)遠(yuǎn)滯后于西方的中國(guó)軟件業(yè)來(lái)說(shuō),各種提高軟件開(kāi)發(fā)速度及降低軟件開(kāi)發(fā)成本的方式和措施都是值得探討與借鑒的。筆者認(rèn)為敏捷開(kāi)發(fā)模式對(duì)中國(guó)的軟件企業(yè)正是一個(gè)行之有效的開(kāi)發(fā)方式。
早在上世紀(jì)60年代,北約(NATO)就提出了軟件危機(jī)這一概念。在《人月神話(huà)》一書(shū)中,軟件開(kāi)發(fā)則被喻為讓眾多史前巨獸痛苦掙扎,卻無(wú)力擺脫的“焦油坑”。隨著需求和應(yīng)用的日趨深入與復(fù)雜化,軟件開(kāi)發(fā)的難度和遇到的問(wèn)題正以幾何級(jí)數(shù)增長(zhǎng),“焦油坑”也由此變得更深、更大。
復(fù)雜程度高、開(kāi)發(fā)周期長(zhǎng)、結(jié)果無(wú)保證等等,作為軟件開(kāi)發(fā)的通病,激發(fā)了人們的無(wú)限潛能,并由此產(chǎn)生了軟件工程學(xué)。但在實(shí)際工作過(guò)程中,需求變更在整個(gè)軟件開(kāi)發(fā)的生命周期中仍是一個(gè)永恒的話(huà)題,也是客戶(hù)與服務(wù)提供方最糾纏不清的地方。改變的導(dǎo)火索源自方方面面,既有可能是一覺(jué)醒來(lái)后的靈光一現(xiàn),也有可能是來(lái)自客戶(hù)外部商業(yè)環(huán)境的改變。我至今還依稀記得最初從事ERP開(kāi)發(fā)時(shí),其中的某個(gè)項(xiàng)目排程模塊,當(dāng)團(tuán)隊(duì)按客戶(hù)最初的要求完成并測(cè)試順利通過(guò)時(shí),客戶(hù)的新要求突如其來(lái),180度大轉(zhuǎn)彎完全出于團(tuán)隊(duì)預(yù)料之外,項(xiàng)目開(kāi)始時(shí)全隊(duì)苦心經(jīng)營(yíng)的開(kāi)發(fā)架構(gòu)體系就這么被摧毀了,既然是現(xiàn)實(shí),只能勇于接受!誠(chéng)然,處理得當(dāng),這種變化就能協(xié)助雙方得到一個(gè)更優(yōu)秀的軟件,也讓客戶(hù)對(duì)團(tuán)隊(duì)的快速應(yīng)變產(chǎn)生好感,否則,如果固守原始的設(shè)計(jì)稿件,或者永遠(yuǎn)作為一個(gè)新功能要求追加資金,有可能得到一個(gè)Case,卻失去一個(gè)用戶(hù)。可見(jiàn)無(wú)論是業(yè)界公認(rèn)的需求、變更、人員流動(dòng),還是各種看起來(lái)并不起眼的小事件,都有可能讓軟件開(kāi)發(fā)流程重新洗牌。其實(shí),一個(gè)過(guò)程中的再設(shè)計(jì),有可能會(huì)降低開(kāi)發(fā)的成本。
顛覆傳統(tǒng) 適應(yīng)變化
在傳統(tǒng)的軟件開(kāi)發(fā)工作中,項(xiàng)目團(tuán)隊(duì)分配工作的重點(diǎn)是明確角色的定義,以個(gè)人的能力去適應(yīng)角色,而角色的定義就是為了保證過(guò)程的實(shí)施,即個(gè)人以資源的方式被分配給角色,同時(shí),資源是可以替代的,而角色不可以替代。
然而,傳統(tǒng)軟件開(kāi)發(fā)的這些方法在敏捷開(kāi)發(fā)方式中被完全顛覆。敏捷開(kāi)發(fā)試圖使軟件開(kāi)發(fā)工作能夠利用人的特點(diǎn),充分發(fā)揮人的創(chuàng)造能力。敏捷開(kāi)發(fā)的目的是建立起一個(gè)項(xiàng)目團(tuán)隊(duì)全員參與到軟件開(kāi)發(fā)中,包括設(shè)定軟件開(kāi)發(fā)流程的管理人員,只有這樣,軟件開(kāi)發(fā)流程才有可接受性。同時(shí)敏捷開(kāi)發(fā)要求研發(fā)人員在技術(shù)上獨(dú)立自主地進(jìn)行決策,因?yàn)樗麄冏盍私馐裁醇夹g(shù)是需要和不需要的。再者,敏捷開(kāi)發(fā)特別重視項(xiàng)目團(tuán)隊(duì)中的信息交流,有調(diào)查顯示:“項(xiàng)目失敗的原因最終都可追溯到信息沒(méi)有及時(shí)準(zhǔn)確地傳遞到應(yīng)該接受它的人。”
在土木工程實(shí)踐中,有比較穩(wěn)定的需求,同時(shí)建設(shè)項(xiàng)目的要求也相對(duì)固定,所以此類(lèi)項(xiàng)目通常非常強(qiáng)調(diào)施工前的設(shè)計(jì)規(guī)劃。只要圖紙?jiān)O(shè)計(jì)得合理并考慮充分,施工隊(duì)伍可以完全遵照?qǐng)D紙順利建造,并且可以很方便地把圖紙劃分為許多更小的部分交給不同的施工人員分別完成。
然而,在軟件開(kāi)發(fā)項(xiàng)目中,這些穩(wěn)定的因素卻很難尋求。軟件的設(shè)計(jì)難處在于軟件需求的不穩(wěn)定,從而導(dǎo)致軟件過(guò)程的不可預(yù)測(cè)。但是傳統(tǒng)的控制項(xiàng)目模式都是試圖對(duì)一個(gè)軟件開(kāi)發(fā)項(xiàng)目在很長(zhǎng)的時(shí)間跨度內(nèi)做出詳細(xì)的計(jì)劃,然后依計(jì)劃進(jìn)行開(kāi)發(fā)。傳統(tǒng)方法在不可預(yù)測(cè)的環(huán)境下,很難適應(yīng)變化,甚至是拒絕變化。而與之相反的敏捷方法則是歡迎變化,目的就是成為適應(yīng)變化的過(guò)程,甚至能允許改變自身來(lái)適應(yīng)變化。
企業(yè)管理挑戰(zhàn)多多
敏捷開(kāi)發(fā)要求將大項(xiàng)目分解成為很多小項(xiàng)目,這樣雖然易于考察、易于管理和易于控制,但同時(shí)也帶來(lái)了項(xiàng)目?jī)?nèi)部各個(gè)小項(xiàng)目的協(xié)調(diào)問(wèn)題。對(duì)于各個(gè)小項(xiàng)目的執(zhí)行,人員分配和其它資源分配的沖突及進(jìn)度的沖突是最主要的沖突,而且這些沖突如果解決不徹底,將會(huì)對(duì)整個(gè)大項(xiàng)目帶來(lái)難以預(yù)測(cè)的負(fù)面結(jié)果。
敏捷開(kāi)發(fā)最大的問(wèn)題還是管理的問(wèn)題。這和很多軟件企業(yè)重技術(shù)、輕管理的做法是截然相反的,企業(yè)的這種心智模式一方面是源自管理人才的缺乏和項(xiàng)目組成員對(duì)管理制度的排斥;另一方面則是因?yàn)楝F(xiàn)行規(guī)范和管理制度與實(shí)際工作中的不合拍。從這一層面而言,敏捷開(kāi)發(fā)對(duì)管理水平要求的提高是對(duì)軟件企業(yè)領(lǐng)導(dǎo)者觀念的一種挑戰(zhàn)。
敏捷方法對(duì)需求不確定或常常變更的情形是有效的。但是,沒(méi)有哪一種開(kāi)發(fā)方法是適用于所有項(xiàng)目開(kāi)發(fā)的。敏捷方法給傳統(tǒng)軟件開(kāi)發(fā)帶來(lái)了一種新的思路和開(kāi)發(fā)模式,但也給企業(yè)帶來(lái)了軟件研發(fā)項(xiàng)目管理開(kāi)發(fā)過(guò)程的整合困難。
在敏捷開(kāi)發(fā)中,一個(gè)很重要的因素就是團(tuán)隊(duì)成員的自律性,換句話(huà)說(shuō),就是營(yíng)建一個(gè)自管理的團(tuán)隊(duì)。雖然敏捷是一個(gè)項(xiàng)目管理層的理念,但這個(gè)理念決定了項(xiàng)目的每一個(gè)參與者,即程序員都需要有較高的素質(zhì)。事實(shí)上,敏捷開(kāi)發(fā)的實(shí)施很大程度上是一個(gè)自下而上的過(guò)程:無(wú)論是怎樣的敏捷方法,都需要參與者主動(dòng)領(lǐng)取任務(wù),更重要的是主動(dòng)交流。因此,有著良好自律性和主動(dòng)性的程序員將成為項(xiàng)目成功的重要因素。雖然傳統(tǒng)的項(xiàng)目也需要優(yōu)秀的程序員,但不得不說(shuō)敏捷開(kāi)發(fā)對(duì)于每個(gè)程序員的要求會(huì)更加的高。
敏捷開(kāi)發(fā)現(xiàn)在在歐美已非常普及,在國(guó)內(nèi)也已經(jīng)流傳實(shí)踐了幾年,現(xiàn)在正逐漸進(jìn)入到越來(lái)越多的項(xiàng)目中。雖然敏捷開(kāi)發(fā)既有成功的案例也有失敗的案例,但其高效可靠、節(jié)省成本的潛在特性決定了敏捷開(kāi)發(fā)的廣泛應(yīng)用性。
但縱觀國(guó)內(nèi)整體市場(chǎng),尚有不少軟件企業(yè)并未采用敏捷開(kāi)發(fā),主要還是出于以下幾點(diǎn)考慮:要做一個(gè)成功的敏捷開(kāi)發(fā)者,需要同時(shí)具備碼農(nóng)、架構(gòu)師、測(cè)試工程師和客戶(hù)經(jīng)理的能力,公司為培訓(xùn)這樣的員工代價(jià)頗高;加之不少優(yōu)秀程序員都是不善于社交、溝通的;并且對(duì)一個(gè)大型項(xiàng)目而言,每個(gè)人只負(fù)責(zé)其中的一個(gè)小功能,一旦某個(gè)人休假或者離職,那么頂替上的程序員可能對(duì)這塊功能的業(yè)務(wù)不是特了解,當(dāng)他去和客戶(hù)溝通的時(shí)候就會(huì)顯得不專(zhuān)業(yè)。
總而言之,在實(shí)際開(kāi)發(fā)過(guò)程中,需要根據(jù)實(shí)際項(xiàng)目的需要選擇合適的開(kāi)發(fā)方法,并盡最大可能發(fā)揮人的創(chuàng)造性和潛能,利用不同人的不同特點(diǎn),充分溝通,這才是在敏捷方法中真正需要學(xué)習(xí)的。