(瀑布模型,快速原型模型,增量模型,螺旋模型,噴泉模型)各種模型的概念特點優點缺點和不同。
(張海藩,呂雲翔)著-軟件工程 復習記錄
一、瀑布模型
在20 世紀80 年代之前,瀑布模型一直是唯一被廣泛采用的生命周期模型。現在,它仍然是軟件工程中應用最廣泛的過程模型。如圖所示為傳統的瀑布模型。
-
特點:
(1) 階段間具有順序性和依賴性①必須等前一階段的工作完成之后,才能開始后一階段的工作;②前一階段的輸出文檔就是后一階段的輸入文檔。
(2) 推遲實現的觀點
實踐表明,對於規模較大的軟件項目來說,往往編碼開始得越早最終完成開發工作所需要的時間反而越長。
(3) 質量保證的觀點
①每個階段都必須完成規定的文檔,沒有交出合格的文檔就是沒有完成該階段的任務。②每個階段結束前都要對所完成的文檔進行評審,以便盡早發現問題,改正錯誤。
傳統的瀑布模型過於理想化了。事實上,人在工作過程中不可能不犯錯誤。因此,實際的瀑布模型是帶“反饋環”的,如圖所示( 圖中實線箭頭表示開發過程,虛線箭頭表示維護過程)。
加入迭代過程的瀑布模型
當在后面階段發現前面階段的錯誤時,需要沿圖中左側的反饋線返回前面的階段,修正前面階段的產品之后再回來繼續完成后面階段的任務。
-
優點:
(1) 可強迫開發人員采用規范的方法
(2) 嚴格地規定了每個階段必須提交的文檔
(3) 要求每個階段交出的所有產品都必須經過質量保證小組的仔細驗證 -
缺點:
(1) “瀑布模型是由文檔驅動的”,在可運行的軟件產品交付給用戶之前,用戶只能通過文檔來了解產品是什么樣的。很可能導致最終開發出的軟件產品不能真正滿足用戶的需求。
"瀑布模型是由文檔驅動的“這個事實也是它的一個主要缺點。在可運行的軟件產品交付給用戶之前,用戶只能通過文檔來了解產品是什么樣的。要求用戶不經過實踐就提出完整准確的需求,在許多情況下都是不切實際的。總之,由於瀑布模型幾乎完全依賴於書面的規格說明,很可能導致最終開發出的軟件產品不能真正滿足用戶的需要。
二、快速原型模型
快速原型(rapid prototype)是快速建立起來的可以在計算機上運行的程序,它所能完成的功能往往是最終產品能完成的功能的一個子集。下圖描述了快速原型模型(圖中實線箭頭表示開發過程,虛線箭頭表示維護過程)。
快速模型原型
優點:軟件產品的開發基本上是按線性順序進行的
快速原型模型是不帶反饋環的,這正是這種過程模型的主要優點:軟件產品的開發基本上是按線性順序進行的。原型系統已經通過與用戶交互而得到驗證,據此產生的規格說明文檔正確地描述了用戶需求。開發人員通過建立原型系統已經學到了許多東西,在設計和編碼階段發生錯誤的可能性也比較小。它的優點是有助於保證用戶的真實需要得到滿足。
快速原型的本質是“快速”。開發人員應該盡可能快地建造出原型系統,以加速軟件開發過程,節約軟件開發成本。原型的用途是獲知用戶的真正需求,一旦需求確定了,原型將被拋棄。
當快速原型的某個部分是利用軟件工具由計算機自動生成的時候,可以把這部分用到最終的軟件產品中。
三、增量模型
增量模型也稱為漸增模型,如圖所示。使用增量模型開發軟件時,把軟件產品作為一系列的增量構件來設計、編碼、集成和測試。每個構件由多個相互作用的模塊構成,並且能夠完成特定的功能。
增量模型
- 與瀑布模型和快速原型模型的不同:
采用瀑布模型或快速原型模型開發軟件時,目標都是一次就把一個滿足用戶需求的產品提交給用戶。增量模型則與之相反,它分批地逐步向用戶提交產品,每次提交一個滿足用戶需求子集的可運行的產品。 - 優點:
(1) 能在較短時間內向用戶提交可完成一些有用的工作的產品
(2) 逐步增加產品功能可以使用戶有較充裕的時間學習和適應新產品,從而減少一個全新的軟件可能給客戶組織帶來的沖擊。
(3) 缺點:
增量模型本身是自相矛盾的。它一方面要求開發人員把軟件看做一個整體,另一方面又要求開發人員把軟件看做構件序列,每個構件本質上都獨立於另一個構件。除非開發人員有足夠的技術能力協調好這一明顯的矛盾,否則用增量模型開發出的產品可能並不令人滿意。
增量模型分批地逐步向用戶提交產品,每次提交一個滿足用戶需求子集的可運行的產品。整個軟件產品被分解成許多個增量構件,開發人員一個構件接一個構件地向用戶提交產品。每次用戶都得到一個滿足部分需求的可運行的產品,直到最后一次得到滿足全部需求的完整產品。
能在較短時間內向用戶提交可完成一些有用的工作的產品,是增量模型的一個優點。增量模型的另一個優點是,逐步增加產品功能可以使用戶有較充裕的時間學習和適應新產品,從而減少一個全新的軟件可能給客戶組織帶來的沖擊。
使用增量模型的困難是,在把每個新的增量構件集成到現有軟件體系結構中時,必須不破壞原來已經開發出的產品。此外,必須把軟件的體系結構設計得便於按這種方式進行擴充,向現有產品中加入新構件的過程必須簡單、方便。也就是說,軟件體系結構必須是開放的。
從長遠觀點看,具有開放結構的軟件擁有真正的優勢,這種軟件的可維護性明顯好於封閉結構的軟件。盡管采用增量模型比采用瀑布模型和快速原型模型需要更精心的設計,但在設計階段多付出的勞動將在維護階段獲得回報。如果一個設計非常靈活而且足夠開放、足以支持增量模型,那么這樣的設計將允許在不破壞產品的情況下進行維護。
四、螺旋模型
在軟件開發過程中必須及時識別和分析風險,並且采取適當措施以消除或減少風險的危害。構建原型是一種能使某些類型的風險降至最低的方法。降低交付給用戶的產品不能滿足用戶
需要的風險。
- 螺旋模型的基本思想是,使用原型及其他方法來盡量降低風險。理解這種模型的一個簡便方法,是把它看做在每個階段之前都增加了風險分析過程的快速原型模型,如圖所示。圖中帶箭頭的點畫線的長度代表當前累計的開發費用,螺線旋過的角度值代表開發進度。
螺旋模型
- 基本思想:
使用原型及其他方法來盡量降低風險。
- 優點:
(1) 對可選方案和約束條件的強調有利於已有軟件的重用,也有助於把軟件質量作為軟件開發的一個重要目標;
(2) 減少了過多的測試(浪費資金)或測試不足(產品故障多)所帶來的風險;
(3) 在螺旋模型中維護只是模型的另一個周期,在維護和開發之間並沒有本質區別;
(4) 它是風險驅動的;
- 缺點:
因為它是風險驅動的,除非軟件開發人員具有豐富的風險評估經驗和這方面的專門知識,否則將出現真正的風險。
螺旋模型有許多優點: 對可選方案和約束條件的強調有利於巳有軟件的重用,也有助於把軟件質量作為軟件開發的一個重要目標;減少了過多測試( 浪費資金)或測試不足(產品故障多)所帶來的風險;更重要的是,在螺旋模型中維護只是模型的另一個周期,在維護和開發之間並沒有本質區別。
螺旋模型主要適用於內部開發的大規模軟件項目。如果進行風險分析的費用接近整個項目的經費預算,則風險分析是不可行的。事實上,項目越大,風險也越大,因此,進行風險分析的必要性也越大。使用螺旋模型開發軟件,要求軟件開發人員具有豐富的風險評估經驗和這方面的專門知識。
五、噴泉模型
迭代是軟件開發過程中普遍存在的一種內在屬性。經驗表明,軟件過程各個階段之間的迭代或一個階段內各個工作步驟之間的迭代,在面向對象范型中比在結構化范型中更常見。如圖所示的噴泉模型是典型的面向對象生命周期模型。"噴泉”這個詞體現了面向對象軟件開發過程迭代和無縫的特性。
噴泉模型
為避免使用噴泉模型開發軟件時開發過程過分無序,應該把一個線性過程(例如,快速原型模型或螺旋模型中的中心垂線)作為總目標。但是,同時也應該記住,面向對象范型本身要求經常對開發活動進行迭代或求精。
六、參考資料
[1] 張海藩,呂雲翔. 軟件工程(第4版)[M]. 北京:人民郵電出版社,2013 軟件工程
[2] 張海藩,呂雲翔. 軟件工程(第4版)學習輔導與習題解析[M]. 北京: 人民郵電出版社,2013