熊柏祥
從計算機誕生開始,軟件開發(fā)工作,作為一項以單個人腦力勞動為基礎(chǔ)的工作,經(jīng)歷了從最初簡單單一到現(xiàn)在繁重復(fù)雜的發(fā)展歷程?,F(xiàn)今,軟件開發(fā)往往是一個,涉及到的知識領(lǐng)域廣,參與方和參與人員多,項目周期長,復(fù)雜程度非常高的工作。比如應(yīng)用于金融行業(yè)和電信行業(yè)的軟件系統(tǒng),往往涉及到相關(guān)應(yīng)用行業(yè)的專業(yè)知識,國家的政策法規(guī),計算機專業(yè)知識,數(shù)學(xué)等眾多學(xué)科和領(lǐng)域,參與方涉及客戶,軟件開發(fā)商,第三方軟件開發(fā)商,硬件系統(tǒng)供應(yīng)商,政府部門等,參與軟件設(shè)計和開發(fā)的人員往往達(dá)到幾百人,并可能同時分布在多個不同城市/國家,使用不同的語言進(jìn)行交流,項目周期達(dá)到幾年也很常見。這其中設(shè)計到的問題通常有:
(1)軟件開發(fā)人員對系統(tǒng)應(yīng)用領(lǐng)域的專業(yè)知識不甚了解,
(2)開發(fā)人員技術(shù)能力參差不齊,
(3)開發(fā)過程的分工合作極為復(fù)雜,
(4)軟件系統(tǒng)的需求不斷變化,
(5)開發(fā)周期無限期延長,
等等。
為了有效的組織各種相關(guān)資源,科學(xué)有序的進(jìn)行開發(fā)工作,確保軟件產(chǎn)品質(zhì)量和按時交付使用,在軟件開發(fā)過程中,人們不斷總結(jié)和嘗試,衍生出了多種軟件工程方法。其中典型的有瀑布模型,螺旋模型,迭代模型等等?,F(xiàn)在眾多的軟件開發(fā)商或者遵循其中的一種或者結(jié)合幾種,按照工程流程進(jìn)行軟件開發(fā)。為了便于后面分析對比,我們先對應(yīng)用瀑布模型的開發(fā)過程做簡要介紹。瀑布模型分為以下幾個階段依次進(jìn)行:需求分析(產(chǎn)生需求分析報告),概要設(shè)計(產(chǎn)生概要設(shè)計報告),詳細(xì)設(shè)計(產(chǎn)生詳細(xì)設(shè)計報告),編碼(產(chǎn)生可運行代碼),測試(產(chǎn)生測試報告)等。每個階段必須等到上一個階段結(jié)束后才能開始,每個階段以上一個階段的產(chǎn)出物作為起點,最后提交一個產(chǎn)出物供后續(xù)階段使用。
以上典型軟件工程方法的特點是:
(1)對開發(fā)工作和流程的劃分十分細(xì)致。整體工作被分為調(diào)研,設(shè)計,開發(fā),測試等多個環(huán)節(jié),而且必須依次進(jìn)行。
(2)開發(fā)人員的工作安排十分嚴(yán)格。(1)中各個階段的參與人員一般不能重復(fù),而且不同階段均可能需要客戶方人員協(xié)作,這就使得交流工作十分繁重。
(3)軟件開發(fā)的中間產(chǎn)物非常多,各個階段的設(shè)計文檔,技術(shù)研究報告,評審報告,軟件使用說明等必須一一提供。
使用以上典型軟件工程方法(或稱為傳統(tǒng)軟件工程方法),對軟件開發(fā)的方方面面進(jìn)行了嚴(yán)格的管理:開發(fā)工作的劃分,人員的安排,項目進(jìn)度的預(yù)設(shè),軟件質(zhì)量和成本的控制。這在很大程度上,對建立在單個人腦力勞動基礎(chǔ)上的軟件開發(fā)工作起到了很好的幫助。典型軟件工程方法的特點注定了使用其規(guī)范進(jìn)行的軟件開發(fā)工作都是一件大規(guī)模的工作,在一些大型軟件應(yīng)用系統(tǒng)的開發(fā)中具有很好的實用價值。這些方法還在不斷得到發(fā)展,特別是到最近幾年,產(chǎn)生了CMMI體系,從一個更高的層次對軟件開發(fā)工作進(jìn)行全面指導(dǎo)。
但是,軟件開發(fā)和軟件應(yīng)用發(fā)展到最近幾年,又產(chǎn)生了許多新特點:
(1)軟件應(yīng)用的多樣型。應(yīng)用于各個行業(yè)的中小型軟件系統(tǒng),游戲軟件大量產(chǎn)生。
(2)交付時間的急迫性。很多系統(tǒng)由于其應(yīng)用環(huán)境特點,要求在很短的時間內(nèi)完成并交付使用。
(3)軟件開發(fā)工作的多樣性。軟件開發(fā)技術(shù)和工具的大量出現(xiàn),第三方軟件的大量使用。
顯然,典型的軟件工程方法并不適用于這些情況。于是,在傳統(tǒng)軟件工程方法的基礎(chǔ)上,人們結(jié)合近年軟件行業(yè)出現(xiàn)的特點,不斷對其改進(jìn),提出了敏捷開發(fā)技術(shù)。
敏捷開發(fā)(agile development)是一種以人為核心、迭代、循序漸進(jìn)的開發(fā)方法。在敏捷開發(fā)中,不再依照傳統(tǒng)的軟件工程方法逐步深入進(jìn)行(傳統(tǒng)方法下,管理的重點是開發(fā)工作逐步深入的個個環(huán)節(jié)),而是在項目開始的最初,將軟件項目的構(gòu)建切分成多個子項目(這種情況下,管理的重點是開發(fā)工作被平行分割后的各個子項目),然后以各個子項目為基礎(chǔ)進(jìn)行開發(fā),各個子項目的成果都經(jīng)過測試,具備集成和可運行的特征。簡而言之,就是把一個大項目分為多個相互聯(lián)系,但也可獨立運行的小項目,并分別完成。并在整個過程中,對子項目不斷集成,在此過程中軟件一直處于可使用狀態(tài)(但可能不具備最終的全部功能)。各個子項目完成后,整個項目也就完成。在敏捷開發(fā)內(nèi)部,其實也借鑒了大量軟件工程中的方法。迭代與增量開發(fā),這兩種在傳統(tǒng)軟件工程中常用到的方法,在敏捷開發(fā)模式中也扮演了很重要的角色。再向前追溯,我們還也可見到瀑布式與快速原型法的影子。
接下來,我們從一個實例上,分析敏捷開發(fā)技術(shù)的過程要要點。
敏捷開發(fā)概念從2004年初開始廣為流行。作為倡導(dǎo)人的Bailar非常支持這一理論,他采取了”敏捷方式”組建團隊:Capital One的”敏捷團隊”包括3名業(yè)務(wù)人員、兩名操作人員和5~7名IT人員,其中包括1個業(yè)務(wù)信息指導(dǎo)(實際上是業(yè)務(wù)部門和IT部門之間的”翻譯者”);另外,還有一個由項目經(jīng)理和至少80名開發(fā)人員組成的團隊。這些開發(fā)人員都曾被Bailar送去參加過”敏捷開發(fā)”的培訓(xùn),具備相關(guān)的技能。
每個團隊都有自己的敏捷指導(dǎo)(Bailar聘用了20個敏捷指導(dǎo)),他的工作是關(guān)注流程并提供建議和支持。最初提出的需求被歸納成一個目標(biāo)、一堆記錄詳細(xì)需要的卡片及一些供參考的原型和模板。在整個項目階段,團隊人員密切合作,開發(fā)有規(guī)律地停頓,在9周開發(fā)過程中停頓3~4次,以評估過程及決定需求變更是否必要。在Capital One,大的IT項目會被拆分成多個子項目,安排給各”敏捷團隊”,這種方式在”敏捷開發(fā)”中叫”蜂巢式(swarming)”,所有過程由一名項目經(jīng)理控制。
為了檢驗這個系統(tǒng)的效果,Bailar將項目拆分,從舊的”瀑布式”開發(fā)轉(zhuǎn)變?yōu)椤辈⒘惺健遍_發(fā),形成了”敏捷開發(fā)”所倡導(dǎo)的精干而靈活的開發(fā)團隊,并將開發(fā)階段分成30天一個周期,進(jìn)行”沖刺”,每個沖刺始于一個啟動會議,到下個沖刺前結(jié)束。
在Bailar將其與傳統(tǒng)的開發(fā)方式做了對比后,他感到非常興奮,”敏捷開發(fā)”使開發(fā)時間減少了30%~40%,有時甚至接近50%,提高了交付產(chǎn)品的質(zhì)量?!辈贿^,有些需求不能用敏捷開發(fā)來處理?!?Bailar承認(rèn),”敏捷開發(fā)”也有局限性,比如對那些不明確、優(yōu)先權(quán)不清楚的需求或處于”較快、較便宜、較優(yōu)”的三角架構(gòu)中卻不能排列出三者優(yōu)先級的需求。此外,他覺得大型項目或有特殊規(guī)則的需求的項目,更適宜采用傳統(tǒng)的開發(fā)方式。盡管描述需求一直是件困難的事,但經(jīng)過陣痛之后,需求處理流程會讓CIO受益匪淺。敏捷開發(fā)是由一些業(yè)界專家針對一些企業(yè)現(xiàn)狀提出了一些讓軟件開發(fā)團隊具有快速工作、響應(yīng)變化能力的價值觀和原則,并于2001初成立了敏捷聯(lián)盟。他們正在通過親身實踐以及幫助他人實踐,揭示更好的軟件開發(fā)方法。
每隔一定時間,團隊會在如何才能更有效地工作方面進(jìn)行反省,然后相應(yīng)地對自己的行為進(jìn)行調(diào)整。
當(dāng)然,我們不得不面對的現(xiàn)實是,模式與方法的優(yōu)化并不意味著問題的終結(jié)。作為一種開發(fā)模式,敏捷開發(fā)同樣需要面對眾多挑戰(zhàn)。
大項目的拆分意味著更多子項目的出現(xiàn),協(xié)調(diào)這些同步或異步推進(jìn)的子項目,合理的資源調(diào)配都將變得更加復(fù)雜。另外,在當(dāng)前項目和項目組普遍“增容”的情況下,遇到的問題同樣成倍增長。人的重要性被提到了更高的高度,而缺乏有效協(xié)調(diào)手段,減少人員流動和項目變更對整個項目造成的影響也將成為一大挑戰(zhàn)。新方法帶來眾多便利的同時,也相應(yīng)引發(fā)了幾乎同樣多的問題。這同時,敏捷開發(fā)技術(shù)也在得到不斷的發(fā)展,這些問題也在得到不斷的改進(jìn)。
參考文獻(xiàn)
[1]冀乃庚. 軟件開發(fā)人員績效考核體系研究[D].西北農(nóng)林科技大學(xué),2012.
[2]張友生,李雄. 軟件開發(fā)模型研究綜述[J]. 計算機工程與應(yīng)用,2006,03:109-115.
[3]高禹,畢振波. 軟件開發(fā)過程模型的發(fā)展[J]. 計算機技術(shù)與發(fā)展,2008,07:83-86.