標籤:log 思想 活性 style class 技術分享 rem 基礎上 結合
敏捷式軟體開發 (Agile Software Development)與傳統軟體工程
摘要:本文從敏捷軟體、傳統軟體的概念,提出相關開發模型等方面對敏捷軟體工程和傳統軟體工程進行描述。
一、敏捷式軟體開發 (Agile Software Development)
敏捷型軟體開發是一種開發方法,是一種軟體開發的流程。從廣義上來給敏捷開發下定義,敏捷開發(agile development)是一種以人為核心、迭代、循序漸進的開發方法。在敏捷開發中,軟體項目的構建被切分成多個子項目,各個子項目的成果都經過測試,具備整合和可啟動並執行特徵。
敏捷開發模型是多種軟體開發專案管理方法的集合,其中包括了極限編程(XP)、迭代增量化模式(Scrum)等十幾種軟體開發模型。
極限編程(XP)
“Extreme(極限)”是指,對比傳統的項目開發方式,XP強調把它列出的每個方法和思想做到極限、做到最好。極限編程要求有極限的工作環境、極限的需求、極限的設計、極限的編程和極限的測試。
(1)極限的工作環境
為了在軟體開發過程中最大程度地實現和滿足客戶和開發人員的基本權利和義務,XP要求把工作環境也做得最好。
(2)極限的需求
客戶應該是項目開發隊伍中的一員,而不是和開發人員分開的。因為從項目的計划到最後驗收整個過程客戶一直起著很重要的作用。開發人員和客戶一起,把各種需求分割為一個個小的需求模組,這些模組又會根據實際情況被組合在一起或者被再次分解成更小的模組。上述需求模組都被記錄在一些小卡片(Story Card)上,之後將這些卡片分別分配給程式員們,並在一段時間內(通常不超過3個星期)實現。客戶根據每個模組的商業價值進行排序,確定開發的優先順序。開發人員要做的是確定每個需求模組的開發風險。風險高的(通常是因為缺乏類似的經驗)需求模組將被優先研究、探索和開發。經過開發人員和客戶分別從不同的角度評估每個模組後,它們被安排在不同的開發週期裡,客戶將得到一個儘可能準確的開發計劃。
(3)極限的設計
從具體開發過程的角度來看,XP內部的過程是多個基於測試驅動的開發(Test Driven Development)周期。諸如計劃和設計等外層的過程都是圍繞這些測試展開的,每個開發週期都有很多相應的單元測試(Unit Test)。
(4)極限的編程
編程是程式員使用某種程式設計語言編寫程式碼,並最終得到能夠解決某個問題的程式的過程。XP極其重視編程,提倡配對編程(Pair Programming),即兩個人一起寫同一段程式,而且代碼所有權是歸於整個開發隊伍(Collective Code Ownership)。程式員在寫程式和最佳化程式的時候,都要嚴格遵守編程規範。任何人都可以修改其他人寫的程式,修改後要確定新程式能通過單元測試。
(5)極限的測試
XP提倡開發人員經常把開發好的模組整合到一起(Continuous Integration),並且在每次整合後都進行單元測試。對代碼進行的任何複核和修改,也都要進行單元測試。發現了錯誤,就要增加相應的測試,因此XP方法不需要錯誤資料庫。
迭代增量化模式(Scrum)
Scrum 是一個用於開發和維持複雜產品的架構 ,是一個增量的、迭代的開發過程,通常用于敏捷軟體開發。。原詞來自於橄欖球中“帶球過人”。在橄欖球比賽的每次衝刺前,都將有一個計劃安排的過程,但衝刺開始後則由隊員在原計劃的基礎上隨機應發。
Scrum流程圖:
SCRUM架構:
二、
二、傳統軟體工程
傳統軟體工程是一種方法學,這種方法學強調以模組為中心,採用模組化,自頂向下,逐步求精設計過程。它的開發模型有瀑布模型、螺旋模型和快速原型模型等。
(1)瀑布模型(Waterfall Model)
瀑布模型的軟體開發過程與軟體生命週期是一致的並且它是由文檔驅動,兩相鄰階段之間存在因果關係,需要對階段性的產品進行審批。瀑布模型假定使用者的需求是不變的,因此缺乏靈活性。
(2)
(2)快速原型模型(Rapid Prototype)
快速原型模型在功能上等價於產品的一個子集。根據客戶的需要在很短的時間內解決使用者最迫切的需要,此時只是部分功能的實現,快速原型模型最重要的目的是確定使用者真正的需求並支援需求的動態變化。一般不會單獨使用,而和瀑布模型或螺旋模型一起使用。
(3)螺旋模型
螺旋模型是瀑布模型和快速原型模型的有機結合,它是由風險驅動的,它強調了其他模型所忽略的風險分析,適合較大的系統,但是缺乏對風險的評估。
總結:
(1)敏捷開發與傳統軟體開發的比較
敏捷開發的優點是輕量級、簡單、可快速交付、最大的特點是高度透明、檢驗和適應,注重Team Dev之間以及Team Dev與客戶的及時溝通,主張響應需求變化,但是不夠系統。
傳統軟體架構的優點在於預見性和系統性,能在正式開發前預見軟體的功能需求和非功能需求,最大的特點是重視文檔和結構明顯,主張固定的流水開發,很難響應客戶需求的變化,難以保證開發的靈活性。
(2)敏捷開發與傳統軟體工程的融合
將具有系統性和預見性的傳統軟體工程架構嵌套到敏捷開發的每次輕量級的迭代中,將軟體架構顆粒化,嵌套到整個敏捷開發,使軟體工程兼具軟體架構的預見性和敏捷開發的適應性,根據項目的大小來調整嵌套的程度,根據每次迭代項目的大小來選擇不同的架構,實現敏捷開發與軟體架構融合的雙贏。
【1】Kent Beck 著,唐東銘 譯 極限編程,北京 人民郵電出版社,2002
【2】百度百科:極限編程 http://baike.baidu.com/view/259207
【3】《軟體工程——實踐者的研究方法》[J]. 電腦教育, 2010(03):80-80.
【4】李航. 敏捷型軟體開發方法與極限編程概述[J]. 電腦工程與設計, 2003, 24(10):116-118.
敏捷式軟體開發 (Agile Software Development)與傳統軟體工程