軟件開發模型給出了軟件開發活動各個階段之間的關系,它是軟件開發過程的概括,是軟件工程的重要內容。軟件開發模型為軟件工程管理提供了里程碑和進度表,為軟件開發過程提供了原則和方法。
一.軟件開發模型概述
軟件開發模型可分為三種類型:1.以軟件需求完全確定為前提的瀑布模型;2.在軟件開發初期只能提供基本需求是采用的迭代式開發模型(如噴泉模型,螺旋模型,統一開發過程和敏捷方法等);3是以 形式化開發方法為基礎的變換模型。
1.瀑布模型
瀑布模型是一種嚴格定義方法,它將軟件開發的過程分為軟件計劃、需求分析、軟件設計、編碼實現、軟件測試,運行維護六個階段,最終得到軟件產品。
在瀑布模型中,依賴于早期進行的需求調查,不能適應需求的變化,由于是單一流程,開發中的經驗教訓不能反饋于本產品的過程,風險往往到后期的開發階段才顯露出來。
2.演化模型
演化模型主要針對事先不能完整定義需求的軟件開發,是在快速開發一個原型的基礎上,根據用戶在調用原型的過程中提出的反饋意見和建議,對原型進行改進,獲得原型的新版本,重復這一過程,直到演化成最終的軟件產品。演化模型的主要優點是:任何功能一經開發就能進入測試,以便驗證是否符合產品需求,其缺點是,如果不加以控制地讓用戶接觸開發中尚未穩定的功能,可能對開發人員及用戶都會產生負面影響。
3.螺旋模型
螺旋模型是瀑布模型與演化模型的結合,并加入兩者所忽略的風險分析所建立的一種軟件開發模型。螺旋模型是一種演化軟件過程模型,它將原型實現的迭代特征與線性順序模型中的控制的和系統化的方面結合起來,軟件開發是一系列的增量發布。螺旋模型沿著螺線進行若干次迭代,每次迭代包括制定計劃、風險分析、施工工程和客戶評價4個方面的工作。
4.噴泉模型
噴泉模型是一種以用戶需求為動力,以對象為驅動的模型,主要用于描述面向對象的軟件開發過程。該模型認為軟件開發過程自下而上的各階段是相互重疊呵呵多次反復的,就像水噴上去又可以落下來,類似噴泉。在噴泉模型中,各活動之間無明顯邊界,例如,分析和設計之間就沒有明顯的邊界。這種特性稱為無間隙性。
5.變換模型
變換模型是基于形式化規格說明語言和程序變換的軟件開發模型,它對形式化的軟件規格說明進行一系列自動或半自動的程序變換,最后映射為計算機能夠接受的軟件系統。
6.智能模型
智能模型也稱為基于知識的軟件開發模型,它綜合了上述若干模型,并把專家系統結合在一起,該模型應用基于規則的系統,采用規約和推理機制,幫助開發人員完成開發工作,并使維護在系統規格說明一級進行。
7.V模型
V模型是在快速應用開發的基礎上演變而來,由于將整個開發過程中構成一個V字而得名。V模型應用在軟件測試方面,和瀑布模型有一些共同的特征。V模型中的過程從左到右,描述了基本的開發過程和測試行為,其價值在于它非常明確地標明了測試過程中存在的不同級別,并清楚描述了這些測試階段和開發過程各階段的對應關系。
V模型強調軟件開發的協作和速度,將軟件實現和驗證有機結合起來,在保證較高的軟件質量情況下縮短開發周期。V模型適合企業級的軟件開發,它更清楚地揭示了軟件開發過程的特性及本質。
二.快速應用開發
快速應用開發RAD是一種比傳統生命周期法快得多的開發方法,它強調極短的開發周期。RAD模型是瀑布模型的一個高速變種,通過使用基于構件的開發方法獲得快速開發。
1.RAD的基本思想
RAD的基本思想主要體現在以下4個方面:
(1)讓用戶更主動的參與到系統分析、設計和構造活動中來。
(2)將項目開發組織成一系列重點突出的研討會,讓項目投資方、用戶、系統分析師、設計人員和開發人員一起參加。
(3)通過一種迭代的構造方法,加速需求分析和設計階段。
(4)讓用戶提前看到一個可以工作的系統。
2.RAD的開發階段
RAD的業務流程主要有業務建模,數據建模,過程建模,應用生成,測試與交付。
3.RAD的特點
RAD采用基于構件的開發方法,復用已有的程序結構或使用構件,或者創建可以復用的構件。RAD通過大量使用可復用構件,加快了開發速度,但是也有一些局限性:首先,并非所有應用都適合RAD,RAD對模塊化要求比較高,如果有些功能不能被模塊化,那么RAD所需要的構件就會有問題。其次,開發者和客戶必須在很短的時間內完成一些列需求分析;最后RAD只能適用于管理信息系統的開發,不適合技術風險很高的情況。
三.統一過程
統一過程UP是一個通用過程框架,可以用于種類廣泛的軟件系統,不同的應用領域、不同的組織類型、不同的性能水平和不同的項目規模,UP是基于構件的,在為軟件系統建模時,使用的是UML。UP具有三個顯著的特點:用例驅動,以構建為中心,迭代和增量。
1.RUP概述
RUP將項目管理、業務建模、分析與設計等統一起來,貫穿整個開發過程,采用Internet技術,可以增強團隊的開發效率,并為所有成員提供最佳的軟件實現方案。RUP中的軟件過程在時間上被分解為4個順序的階段:初始階段,細化階段,構件階段和交付階段。
2.初始階段
初始階段的任務是為系統建立業務模型并確定項目的邊界。在初始階段必須識別所有與系統交互的外部實體,定義系統與外部實體的特性。初始階段的實現過程包括:明確項目規模,評估項目風險,制定項目計劃,階段技術評審。
3.細化階段
細化階段的任務就是分析問題領域,建立完善的架構,淘汰項目中最高風險的元素。細化階段的實施過程包括:確定架構,制定構件階段計劃,建立支持環境,選擇構件,階段技術評審。
4.構件階段
在構件階段,要開發所有剩余的構件和應用程序功能,把這些構件集成為產品,并進行詳細測試。
5.移交階段
當基線已經足夠完善,可以安裝到最終與用戶實際環境中時,則進入交付階段。交付階段的重點是確保軟件對最終用戶是可以使用的。
四.敏捷方法
敏捷方法強調開發團隊與用戶之間的緊密協作、面對面的溝通、頻繁交付新的軟件版本、緊湊而自我組織型的團隊,更注重人的作用。
1.敏捷宣言
敏捷宣言認為個體和交互勝過過程和工具,可工作的軟件勝過大量的文檔,客戶合作勝過合同談判;響應變化勝過遵循計劃。敏捷方法強調讓客戶滿意和軟件盡早增量發布;小而高度自主的項目團隊;非正式的方法;最小化軟件工程工作產品以及整體精簡開發。
目前主要的敏捷方法:極限編程XP,自適應軟件開發,水晶方法,特性驅動開發FDD。
2.敏捷方法的特點
敏捷方法是一種以人為本、迭代、循序漸進的開發方法。在敏捷方法中,軟件項目的構件被切分為多個子項目,各個子項目成果經過測試,具備集成和可運行的特征。雖然敏捷方法發展很快,但是也暴露出了一些問題:客戶參與往往依賴于客戶參與的意愿和客戶自身的代表性;團隊成員的性格可能不適合激烈的投入;對系統的變更做出優先級排序可能是很困難的;維護系統的簡潔性往往需要額外的工作,可能沒時間執行系統簡化過程。
3.XP方法
敏捷方法中最有名的就是XP,XP是一種輕量級,高效,低風險,柔性,可預測的軟件開發方式,適用于中小型項目軟件開發團隊,并且客戶的需求模糊或者需求多變,與其他方法相比,具有一下不同點:
在更短的周期內,更早提出具體持續的反饋信息;迭代地進行計劃編制,首先在最開始迅速生成一個總體計劃,然后在整個項目開發過程中不斷發展;依賴于自動測試程序來監控開發進度,及早捕獲缺陷;依賴口頭交流,測試和源程序進行溝通;倡導持續的演化式的設計;依賴開發團隊內部的緊密合作。
XP的核心是其總結的四大價值觀,溝通,簡單,反饋,勇氣。