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