(1) 瀑布模型(waterfall model)
瀑布模型核心思想是按工序將問題化簡,將功能的實現與設計分開,便於分工協作,即采用結構化的分析與設計方法將邏輯實現與物理實現分開。將軟件生命周期划分為制定計划、需求分析、軟件設計、程序編寫、軟件測試和運行維護等六個基本活動,並且規定了它們自上而下、相互銜接的固定次序,如同瀑布流水,逐級下落。從本質來講,它是一個軟件開發架構,開發過程是通過一系列階段順序展開的,從系統需求分析開始直到產品發布和維護,每個階段都會產生循環反饋,因此,如果有信息未被覆蓋或者發現了問題,那么最好 “返回”上一個階段並進行適當的修改,開發進程從一個階段“流動”到下一個階段,這也是瀑布開發名稱的由來。
瀑布模型是最早出現的軟件開發模型,在軟件工程中占有重要的地位,它提供了軟件開發的基本框架。其過程是從上一項活動接收該項活動的工作對象作為輸入,利用這一輸入實施該項活動應完成的內容給出該項活動的工作成果,並作為輸出傳給下一項活動。同時評審該項活動的實施,若確認,則繼續下一項活動;否則返回前面,甚至更前面的活動。對於經常變化的項目而言,瀑布模型毫無價值。
(2) 快速原型模型(原型模式)prototype model
原型是指模擬某種產品的原始模型,在其他產業中經常使用。軟件開發中的原型是軟件的一個早期可運行的版本,它反映了最終系統的重要特性。
快速原型模型又稱原型模型,它是增量模型的另一種形式;它是在開發真實系統之前,構造一個原型,在該原型的基礎上,逐漸完成整個系統的開發工作。快速原型模型的第一步是建造一個快速原型,實現客戶或未來的用戶與系統的交互,用戶或客戶對原型進行評價,進一步細化待開發軟件的需求。通過逐步調整原型使其滿足客戶的要求,開發人員可以確定客戶的真正需求是什么;第二步則在第一步的基礎上開發客戶滿意的軟件產品。
快速原型模型的思想產生及原理
1、快速原型模型思想的產生
由於種種原因,在需求分析階段得到完全、一致、准確、合理的需求說明是很困難的,在獲得一組基本需求說明后,就快速地使其“實現”,通過原型反饋,加深對系統的理解,並滿足用戶基本要求,使用戶在試用過程中受到啟發,對需求說明進行補充和精確化,消除不協調的系統需求,逐步確定各種需求,從而獲得合理、協調一致、無歧義的、完整的、現實可行的需求說明。又把快速原型思想用到軟件開發的其他階段,向軟件開發的全過程擴展。即先用相對少的成本,較短的周期開發一個簡單的、但可以運行的系統原型向用戶演示或讓用戶試用,以便及早澄清並檢驗一些主要設計策略,在此基礎上再開發實際的軟件系統。
2、快速原型模型的原理
快速原型是利用原型輔助軟件開發的一種新思想。經過簡單快速分析,快速實現一個原型,用戶與開發者在試用原型過程中加強通信與反饋,通過反復評價和改進原型,減少誤解,彌補漏洞,適應變化,最終提高軟件質量。
快速原型模型的類型
根據原型的不同作用,有三類原型模型:
1、探索型原理
這種類型的原型是把原型用於開發的需求分析階段,目的是要型清用戶的需求,確定所期望的特性,並探索各種方案的可行性。它主要針對開發目標模糊,用戶與開發都對項目都缺乏經驗的情況,通過對原型的開發來明確用戶的需求。
2、實驗型原型
這種原型主要用於設計階段,考核;實現方案是否合適,能否實陋。對於一個大型系統,若對設計方案心中沒有把握時,可通過這種原型來證實設計方案的正確性。
3、演化型原型
這種原型主要用於及早向用戶提交一個原型系統,該原型系統或者包含系統的框架,或者包含系統的主要功能,在得到用戶的認可后,將原型系統不斷擴充演變為最終的軟件系統。它將原型的思想擴展到軟件開發的全過程。
快速原型模型的運用方式
由於運用原型的目的和方式不同,在使用原型時也采取不同的策略,有拋棄策略和附加策略。
1、拋棄策略是將原型用於開發過程的某個階段,促使該階段的開發結果更加完整、准確、一致、可靠,該階段結束后,原型隨之作廢。探索型和實驗型就是采用此策略的。
2、附加策略是將原型用於開發的全過程,原型由最基本的核心開始,逐步增加新的功能和新的需求,反復修改反復擴充,最后發展為用戶滿意的最終系統,演化型快速原型就是采用此策略。
采用何種形式、何種策略運用快速原型主要取決於軟件項目的特點、人員素質、可供支持的原型開發工具和技術等,這要根據實際情況的特點來決定。
快速原型模型的開發步驟
1、快速分析
在分析人員與用戶密切配合下,迅速確定系統的基本需求,根據原型所要體現的特征描述基本需求以滿足開發原型的需要。
2、構造原型
在快速分析的基礎上,根據基本需求說明盡快實現一個可行的系統。這里要求具有強有力的軟件工具的支持,並忽略最終系統在某些細節上的要求,如安全性、堅固性、例外處理等等,主要考慮原型系統能夠充分反映所要評價的特性,而暫時刪除一切次要內容。
3、運行原型
這是發現問題、消除誤解、開發者與用戶充分協調的一個步驟。
4、評價原型
在運行的基礎上,考核評價原型的特性,分析運行效果是否滿足用戶的願望,糾正過去交互中的誤解與分析中的錯誤,增添新的要求,並滿足因環境變化或用戶的新想法引起的系統要求變動,提出全面的修改意見。
5、修改
根據評價原型的活動結果進行修改。若原型未滿足需求說明的要求,說明對需求說明存在不一致的理解或實現方案不夠合理,則根據明確的要求迅速修改原型。
(3) 增量模型 (Incremental Model)
增量模型融合了瀑布模型的基本成分(重復應用)和原型實現的迭代特征,該模型采用隨着日程時間的進展而交錯的線性序列,每一個線性序列產生軟件的一個可發布的“增量”。當使用增量模型時,第1個增量往往是核心的產品,即第1個增量實現了基本的需求,但很多補充的特征還沒有發布。客戶對每一個增量的使用和評估都作為下一個增量發布的新特征和功能,這個過程在每一個增量發布后不斷重復,直到產生了最終的完善產品。增量模型強調每一個增量均發布一個可操作的產品。采用增量模型的軟件過程如圖1-8所示。
增量模型與原型實現模型和其他演化方法一樣,本質上是迭代的,但與原型實現不一樣的是其強調每一個增量均發布一個可操作產品。早期的增量是最終產品的“可拆卸”版本,但提供了為用戶服務的功能,並且為用戶提供了評估的平台。增量模型的特點是引進了增量包的概念,無須等到所有需求都出來,只要某個需求的增量包出來即可進行開發。雖然某個增量包可能還需要進一步適應客戶的需求並且更改,但只要這個增量包足夠小,其影響對整個項目來說是可以承受的。
圖—采用增量模型的軟件過程
采用增量模型的優點是人員分配靈活,剛開始不用投入大量人力資源。如果核心產品很受歡迎,則可增加人力實現下一個增量。當配備的人員不能在設定的期限內完成產品時,它提供了一種先推出核心產品的途徑。這樣即可先發布部分功能給客戶,對客戶起到鎮靜劑的作用。此外,增量能夠有計划地管理技術風險。增量模型的缺點是如果增量包之間存在相交的情況且未很好處理,則必須做全盤系統分析,這種模型將功能細化后分別開發的方法較適應於需求經常改變的軟件開發過程。
四、什么是螺旋模型 (spiral model)
1988年,巴利·玻姆Barry Boehm正式發表了軟件系統開發的“螺旋模型”,它將瀑布模型和快速原型模型結合起來,強調了其他模型所忽視的風險分析,特別適合於大型復雜的系統。
螺旋模型采用一種周期性的方法來進行系統開發。這會導致開發出眾多的中間版本。使用它,項目經理在早期就能夠為客戶實證某些概念。該模型是快速原型法,以進化的開發方式為中心,在每個項目階段使用瀑布模型法。這種模型的每一個周期都包括需求定義、風險分析、工程實現和評審4個階段,由這4個階段進行迭代。軟件開發過程每迭代一次,軟件開發又前進一個層次。采用螺旋模型的軟件過程如下圖所示:
螺旋模型基本做法是在“瀑布模型”的每一個開發階段前引入一個非常嚴格的風險識別、風險分析和風險控制,它把軟件項目分解成一個個小項目。每個小項目都標識一個或多個主要風險,直到所有的主要風險因素都被確定。
螺旋模型強調風險分析,使得開發人員和用戶對每個演化層出現的風險有所了解,繼而做出應有的反應,因此特別適用於龐大、復雜並具有高風險的系統。對於這些系統,風險是軟件開發不可忽視且潛在的不利因素,它可能在不同程度上損害軟件開發過程,影響軟件產品的質量。減小軟件風險的目標是在造成危害之前,及時對風險進行識別及分析,決定采取何種對策,進而消除或減少風險的損害。
螺旋模型的優缺點
1、螺旋模型的優勢包括:
1)設計上的靈活性,可以在項目的各個階段進行變更。
2)以小的分段來構建大型系統,使成本計算變得簡單容易。
3)客戶始終參與每個階段的開發,保證了項目不偏離正確方向以及項目的可控性。
4)隨着項目推進,客戶始終掌握項目的最新信息 , 從而他或她能夠和管理層有效地交互。
5)客戶認可這種公司內部的開發方式帶來的良好的溝通和高質量的產品。
螺旋模型很大程度上是一種風險驅動的方法體系,因為在每個階段之前及經常發生的循環之前,都必須首先進行風險評估。在實踐中,螺旋法技術和流程變得更為簡單。迭代方法體系更傾向於按照開發/設計人員的方式工作,而不是項目經理的方式。螺旋模型中存在眾多變量,並且在將來會有更大幅度的增長,該方法體系正良好運作着。下表是螺旋法能夠解決的各種問題:
經常遇到的問題 螺旋模型的解決方案
用戶需求不夠充分 允許並鼓勵用戶反饋信息
溝通不明 在項目早期就消除嚴重的曲解
剛性的體系(Overwhelming architectures) 開發首先關注重要的業務和問題
主觀臆斷 通過測試和質量保證,作出客觀的評估
潛在的不一致 在項目早期就發現不一致問題
糟糕的測試和質量保證 從第一次迭代就開始測試
采用瀑布法開發 在早期就找出並關注風險
2、但是,螺旋模型並不是比其他模型擁有絕對優越,事實上,這種模型也有其自身的如下缺點。
1)采用螺旋模型需要具有相當豐富的風險評估經驗和專門知識,在風險較大的項目開發中,如果未能夠及時標識風險,勢必造成重大損失。
2)過多的迭代次數會增加開發成本,延遲提交時間。
五、噴泉模型(fountain model)
噴泉模型是一種以用戶需求為動力,以對象為驅動的模型,主要用於采用對象技術的軟件開發項目。該模型認為軟件開發過程自下而上周期的各階段是相互迭代和無間隙的特性。軟件的某個部分常常被重復工作多次,相關對象在每次迭代中隨之加入漸進的軟件成分。無間隙指在各項活動之間無明顯邊界,如分析和設計活動之間沒有明顯的界限,由於對象概念的引入,表達分析、設計、實現等活動只用對象類和關系,從而可以較為容易地實現活動的迭代和無間隙,使其開發自然地包括復用。
噴泉模型不像瀑布模型那樣,需要分析活動結束后才開始設計活動,設計活動結束后才開始編碼活動。該模型的各個階段沒有明顯的界限,開發人員可以同步進行開發。其優點是可以提高軟件項目開發效率,節省開發時間,適應於面向對象的軟件開發過程。由於噴泉模型在各個開發階段是重疊的,因此在開發過程中需要大量的開發人員,因此不利於項目的管理。此外這種模型要求嚴格管理文檔,使得審核的難度加大,尤其是面對可能隨時加入各種信息、需求與資料的情況。