敏捷軟件開(kāi)發(fā)方法概念
自從軟件工程産生以來,我們在降低軟件開(kāi)發(fā)項目的風險過(guò)程中嘗試過(guò)多種(zhǒng)方法,雖然面(miàn)向(xiàng)對(duì)象、結構化、CMM等技術有利于幫助軟件危機的解決,然而其複雜的過(guò)程使軟件行業陷入低效泥沼中。2001年Kent beck Martin Fowler Robert Martin等經(jīng)驗論陣營的頭領發(fā)起(qǐ)了敏捷聯盟向(xiàng)全世界發(fā)布了他們的宣言:個體和交互勝過(guò)過(guò)程和工具;工作軟件高于理解文檔;客戶合作勝過(guò)合同談判;響應變化勝過(guò)遵循計劃。宣言體現了軟件開(kāi)發(fā)方法必須去适應軟件變化的特征,在宣言的基礎上就(jiù)提出了敏捷軟件開(kāi)發(fā)方法。
1 敏捷方法概述
截止現在敏捷軟件開(kāi)發(fā)方法還(hái)沒(méi)有一個确定的定義。但它的特點是重視軟件生産效率的,适用于軟件需求不确定、用戶易溝通并且能(néng)參與開(kāi)發(fā)、開(kāi)發(fā)人員有責任感并且積極向(xiàng)上、十個人以下的小項目的開(kāi)發(fā),是以保證軟件開(kāi)發(fā)有成(chéng)功産出爲前提的,盡可能(néng)減少在開(kāi)發(fā)過(guò)程中制成(chéng)品的方法,體現“剛剛夠”(Just enough)的觀點。
人作爲核心、循序漸進(jìn)和叠代算法是敏捷軟件開(kāi)發(fā)的宗旨。在敏捷軟件開(kāi)發(fā)過(guò)程中,軟件項目被(bèi)分解成(chéng)很多個小項目,每個小項目的成(chéng)果都(dōu)經(jīng)過(guò)測試,再把他們集成(chéng)起(qǐ)來。它的靈活性、協作性和軟件的商業價值上作出的貢獻是敏捷軟件開(kāi)發(fā)方法的優勢。這(zhè)都(dōu)在“敏捷宣言”的核心原則中得到了體現:交互和獨立工作是建立在工具和過(guò)程基礎上的、軟件使用是建立在文檔基礎上的、客戶的協作是建立在合同談判基礎上的、對(duì)變更做出的響應是建立在遵循計劃基礎上的。
2 幾種(zhǒng)常用的敏捷方法比較
2.1 極限編程(XP)
極限編程(簡稱XP)是由KentBeck于1996年提出的,極限編程要求把它列出的每一個思想和方法都(dōu)做到極限、做到最好(hǎo)。
極限編程的核心價值是我們在開(kāi)發(fā)中必須注意的:Communication(溝通)、Simplicity(簡單)、Feedback(反饋)、Courage(勇氣)、此外還(hái)有第五個價值: Modesty(謙虛)。因爲計劃趕不上變化,使用極限編程的軟件開(kāi)發(fā)人員隻需要在開(kāi)發(fā)的初期做出一些文檔。極限編程把軟件測試放在首位,這(zhè)樣(yàng)以後(hòu)出現漏洞的幾率就(jiù)會(huì)降到最低。
極限編程是一種(zhǒng)近螺旋式的開(kāi)發(fā)方法,它把複雜的開(kāi)發(fā)分解爲相對(duì)比較簡單的小軟件;通過(guò)溝通、反饋和其它的方法,客戶和開(kāi)發(fā)人員就(jiù)可以清楚的了解到開(kāi)發(fā)進(jìn)度、變化、困難和急需解決的問題等,并及時地調整開(kāi)發(fā)過(guò)程。
2.2 SCRUM
SCRUM的宗旨是發(fā)揮構件技術和面(miàn)向(xiàng)對(duì)象的開(kāi)發(fā)方法,對(duì)叠代式面(miàn)向(xiàng)對(duì)象方法進(jìn)行改進(jìn),适用于需求不确定的産品的開(kāi)發(fā)。是叠代的增量化過(guò)程,便于工作管理和産品研發(fā)。更綜合了各種(zhǒng)開(kāi)發(fā)的經(jīng)驗。
SCRUM把項目分成(chéng)N個爲期15-30天的叠代階段,稱之爲“沖刺”(sprint)。每個“沖刺”之前,你明确這(zhè)一個“沖刺”需要實現的功能(néng),然後(hòu)讓開(kāi)發(fā)人員去完成(chéng)。但是,在“沖刺”時,SCRUM的核心是所有開(kāi)發(fā)都(dōu)圍繞著(zhe)叠代,需求是固定的。SCRUM方法中隻有3中角色:SCRUM主管、開(kāi)發(fā)團隊、産品負責人。
2.3 動态系統開(kāi)發(fā)方法(DSDM)
開(kāi)發(fā)一種(zhǒng)面(miàn)向(xiàng)領域的快速開(kāi)發(fā)方法是産生動态系統開(kāi)發(fā)方法的原因,動态系統開(kāi)發(fā)方法在技術支持、應用推廣、研究改進(jìn)培訓認證和培訓認證等方面(miàn)都(dōu)比其他方法要完善,适用于對(duì)時間要求很緊的開(kāi)發(fā)項目,動态系統開(kāi)發(fā)方法應用範圍不再僅僅局限于IT行業。
DSDM方法提倡以業務爲核心,快速而有效地進(jìn)行系統開(kāi)發(fā),并提出了探索式開(kāi)發(fā)方法的概念。強調軟件使用者一開(kāi)始就(jiù)預見所有需求是不可能(néng)的。該方法中,隻要進(jìn)能(néng)入下一步,當前的算法就(jiù)是可行的。
2.4 水晶方法(Crystal)
水晶方法是Alistair Cockburn于上世紀90年代末提出的,水晶方法目的是發(fā)展一種(zhǒng)提倡“機動性的”方法。
Crystal是根據項目重要性和規模來區别項目的,并給出相應的辦法。所以,crystal是多種(zhǒng)方法的組合.它闡明了要把對(duì)話和交流放在第一位的觀點。Crystal方法中有兩(liǎng)條準則:(1)應用反思工作室促使方法學(xué)的自适應,(2)使用的增量式循環不超過(guò)4個月。
2.5 特性驅動開(kāi)發(fā)(FDD)
特性驅動開(kāi)發(fā)是一個強調快速叠代、特性驅動的軟件開(kāi)發(fā)方法,适用于周期短的開(kāi)發(fā)。它既能(néng)保證文檔和質量,又能(néng)保證軟件的快速開(kāi)發(fā),并提出劃分的每一個功能(néng)開(kāi)發(fā)時間不超過(guò)兩(liǎng)星期,要求兩(liǎng)星期内生産出可見的、能(néng)運行的代碼。
特性驅動開(kāi)發(fā)方法認爲簡單的過(guò)程和良好(hǎo)的定義就(jiù)能(néng)很好(hǎo)地被(bèi)執行,它強調的是實用、簡化、易于被(bèi)開(kāi)發(fā)人員接受,是一個特性驅動快速叠代的過(guò)程,适用的項目爲軟件需求經(jīng)常變動。
2.6 自适應軟件開(kāi)發(fā)(ASD)
自适應軟件開(kāi)發(fā)方法的理論來源是複雜自适應系統理論,目的是通過(guò)提高自适應性用來應對(duì)互聯網時代下的軟件需求難于預測并高速變化的軟件開(kāi)發(fā),它與水晶方法正在相互借鑒和融合。
在一個環境中,結果是不可預測的,把計劃看成(chéng)是一個自相矛盾的。在計劃中,偏離計劃就(jiù)是錯誤的,要糾正。而在一個适配性環境裡(lǐ),偏離計劃恰恰是在引導開(kāi)發(fā)人員走向(xiàng)正确的目标。在不可預測的環境中,需要我們用各式各樣(yàng)的方法來應對(duì)不确定性。在管理中,重點在于鼓勵大家交流溝通,而不是告訴大家需要做什麼(me),從而使開(kāi)發(fā)人員能(néng)自己提出具有創造性的解決方案。
不同的開(kāi)發(fā)方法對(duì)于不同的開(kāi)發(fā)人員來說,意義是不同。不同的項目規模,不同的開(kāi)發(fā)環境,也決定了開(kāi)發(fā)團隊采用哪種(zhǒng)開(kāi)發(fā)方法,本文僅僅對(duì)敏捷開(kāi)發(fā)方法做了一個簡單介紹,相信能(néng)爲開(kāi)發(fā)團隊在實踐中選擇方法提供一個比較客觀的參考。