1. 程式人生 > >軟件工程--常用軟件開發模型比較分析

軟件工程--常用軟件開發模型比較分析

開發模型 軟件工程

正如任何事物一樣,軟件也有其孕育、誕生、成長、成熟和衰亡的生存過程,一般稱其為“軟件生命周期”。軟件生命周期一般分為6個階段,即制定計劃、需求分析、設計、編碼、測試、運行和維護。軟件開發的各個階段之間的關系不可能是順序且線性的,而應該是帶有反饋的叠代過程。在軟件工程中,這個復雜的過程用軟件開發模型來描述和表示。

軟件開發模型是跨越整個軟件生存周期的系統開發、運行和維護所實施的全部工作和任務的結構框架,它給出了軟件開發活動各階段之間的關系。目前,常見的軟件開發模型大致可分為如下3種類型。

① 以軟件需求完全確定為前提的瀑布模型(Waterfall Model)。

② 在軟件開發初始階段只能提供基本需求時采用的漸進式開發模型,如螺旋模型(Spiral Model)。

③ 以形式化開發方法為基礎的變換模型(Transformational Model)。

本節將簡單地比較並分析瀑布模型、螺旋模型和變換模型等軟件開發模型。


1.瀑布模型

瀑布模型即生存周期模型,其核心思想是按工序將問題化簡,將功能的實現與設計分開,便於分工協作,即采用結構化的分析與設計方法將邏輯實現與物理實現分開。瀑布模型將軟件生命周期劃分為軟件計劃、需求分析和定義、軟件設計、軟件實現、軟件測試、軟件運行和維護這6個階段,規定了它們自上而下、相互銜接的固定次序,如同瀑布流水逐級下落。采用瀑布模型的軟件過程如圖所示。

技術分享

瀑布模型是最早出現的軟件開發模型,在軟件工程中占有重要的地位,它提供了軟件開發的基本框架。瀑布模型的本質是一次通過,即每個活動只執行一次,最後得到軟件產品,也稱為“線性順序模型”或者“傳統生命周期”。其過程是從上一項活動接收該項活動的工作對象作為輸入,利用這一輸入實施該項活動應完成的內容給出該項活動的工作成果,並作為輸出傳給下一項活動。同時評審該項活動的實施,若確認,則繼續下一項活動;否則返回前面,甚至更前面的活動。

瀑布模型有利於大型軟件開發過程中人員的組織及管理,有利於軟件開發方法和工具的研究與使用,從而提高了大型軟件項目開發的質量和效率。然而軟件開發的實踐表明,上述各項活動之間並非完全是自上而下且呈線性圖式的,因此瀑布模型存在嚴重的缺陷。

① 由於開發模型呈線性,所以當開發成果尚未經過測試時,用戶無法看到軟件的效果。這樣軟件與用戶見面的時間間隔較長,也增加了一定的風險。

② 在軟件開發前期末發現的錯誤傳到後面的開發活動中時,可能會擴散,進而可能會造成整個軟件項目開發失敗。

③ 在軟件需求分析階段,完全確定用戶的所有需求是比較困難的,甚至可以說是不太可能的。

技術分享


沿著生命周期的時間順序,把開發的全過程分解成若幹階段,每個階段再劃分為若幹步驟,使開發有計劃,有步驟,有組織的進行。

空間維:

把MIS的實體(系統)劃分為若幹個子系統。按垂直方向如分解為戰略決策與計劃,管理控制和執行處理三個層次;再按水平方向分解,如劃分為:生產管理,材料管理,財會管理等子系統。

常用方法:

把系統按空間維分成若幹個子系統,分期開發子系統,子系統的開發再遵循時間維的分解,按開發工程分步驟開發。

2.螺旋模型

螺旋模型將瀑布和演化模型(EvolutionModel)結合起來,它不僅體現了兩個模型的優點,而且還強調了其他模型均忽略了的風險分析。這種模型的每一個周期都包括需求定義、風險分析、工程實現和評審4個階段,由這4個階段進行叠代。軟件開發過程每叠代一次,軟件開發又前進一個層次。采用螺旋模型的軟件過程如圖所示。

技術分享


螺旋模型基本做法是在“瀑布模型”的每一個開發階段前引入一個非常嚴格的風險識別、風險分析和風險控制,它把軟件項目分解成一個個小項目。每個小項目都標識一個或多個主要風險,直到所有的主要風險因素都被確定。

螺旋模型強調風險分析,使得開發人員和用戶對每個演化層出現的風險有所了解,繼而做出應有的反應,因此特別適用於龐大、復雜並具有高風險的系統。對於這些系統,風險是軟件開發不可忽視且潛在的不利因素,它可能在不同程度上損害軟件開發過程,影響軟件產品的質量。減小軟件風險的目標是在造成危害之前,及時對風險進行識別及分析,決定采取何種對策,進而消除或減少風險的損害。

與瀑布模型相比,螺旋模型支持用戶需求的動態變化,為用戶參與軟件開發的所有關鍵決策提供了方便,有助於提高目標軟件的適應能力。並且為項目管理人員及時調整管理決策提供了便利,從而降低了軟件開發風險。

但是,我們不能說螺旋模型絕對比其他模型優越,事實上,這種模型也有其自身的如下缺點。

① 采用螺旋模型需要具有相當豐富的風險評估經驗和專門知識,在風險較大的項目開發中,如果未能夠及時標識風險,勢必造成重大損失。

② 過多的叠代次數會增加開發成本,延遲提交時間。

3.變換模型

變換模型是基於形式化規格說明語言及程序變換的軟件開發模型,它采用形式化的軟件開發方法對形式化的軟件規格說明進行一系列自動或半自動的程序變換,最後映射為計算機系統能夠接受的程序系統。采用變換模型的軟件過程如圖所示。

技術分享


為了確認形式化規格說明與軟件需求的一致性,往往以形式化規格說明為基礎開發一個軟件原型,用戶可以從人機界面、系統主要功能和性能等幾個方面對原型進行評審。必要時,可以修改軟件需求、形式化規格說明和原型,直至原型被確認為止。這時軟件開發人員即可對形式化的規格說明進行一系列的程序變換,直至生成計算機系統可以接受的目標代碼。

“程序變換”是軟件開發的另一種方法,其基本思想是把程序設計的過程分為生成階段和改進階段。首先通過對問題的分析制定形式規範並生成一個程序,通常是一種函數型的“遞歸方程”。然後通過一系列保持正確性的源程序到源程序的變換,把函數型風格轉換成過程型風格並進行數據結構和算法的求精,最終得到一個有效的面向過程的程序。這種變換過程是一種嚴格的形式推導過程,所以只需對變換前的程序的規範加以驗證,變換後的程序的正確性將由變換法則的正確性來保證。

變換模型的優點是解決了代碼結構經多次修改而變壞的問題,減少了許多中間步驟(如設計、編碼和測試等)。但是變換模型仍有較大局限,以形式化開發方法為基礎的變換模型需要嚴格的數學理論和一整套開發環境的支持,目前形式化開發方法在理論、實踐和人員培訓方面距工程應用尚有一段距離。

4.噴泉模型

噴泉模型是一種以用戶需求為動力,以對象為驅動的模型,主要用於描述面向對象的軟件開發過程。該模型認為軟件開發過程自下而上周期的各階段是相互重疊和多次反復的,就像水噴上去又可以落下來,類似一個噴泉。各個開發階段沒有特定的次序要求,並且可以交互進行,可以在某個開發階段中隨時補充其他任何開發階段中的遺漏。采用噴泉模型的軟件過程如圖所示。

技術分享


智能模型所要解決的問題是特定領域的復雜問題,涉及大量的專業知識,而開發人員一般不是該領域的專家,他們對特定領域的熟悉需要一個過程,所以軟件需求在初始階段很難定義得很完整。因此,采用原型實現模型需要通過多次叠代來精化軟件需求。

能模型以知識作為處理對象,這些知識既有理論知識,也有特定領域的經驗。在開發過程中需要將這些知識從書本中和特定領域的知識庫中抽取出來(即知識獲取),選擇適當的方法進行編碼(即知識表示)建立知識庫。將模型、軟件工程知識與特定領域的知識分別存入數據庫,在這個過程中需要系統開發人員與領域專家的密切合作。

智能模型開發的軟件系統強調數據的含義,並試圖使用現實世界的語言表達數據的含義。該模型可以勘探現有的數據,從中發現新的事實方法指導用戶以專家的水平解決復雜的問題。它以瀑布模型為基本框架,在不同開發階段引入了原型實現方法和面向對象技術以克服瀑布模型的缺點,適應於特定領域軟件和專家決策系統的開發。

6.增量模型

增量模型融合了瀑布模型的基本成分(重復應用)和原型實現的叠代特征,該模型采用隨著日程時間的進展而交錯的線性序列,每一個線性序列產生軟件的一個可發布的“增量”。當使用增量模型時,第1個增量往往是核心的產品,即第1個增量實現了基本的需求,但很多補充的特征還沒有發布。客戶對每一個增量的使用和評估都作為下一個增量發布的新特征和功能,這個過程在每一個增量發布後不斷重復,直到產生了最終的完善產品。增量模型強調每一個增量均發布一個可操作的產品。采用增量模型的軟件過程如圖所示。

增量模型與原型實現模型和其他演化方法一樣,本質上是叠代的,但與原型實現不一樣的是其強調每一個增量均發布一個可操作產品。早期的增量是最終產品的“可拆卸”版本,但提供了為用戶服務的功能,並且為用戶提供了評估的平臺。增量模型的特點是引進了增量包的概念,無須等到所有需求都出來,只要某個需求的增量包出來即可進行開發。雖然某個增量包可能還需要進一步適應客戶的需求並且更改,但只要這個增量包足夠小,其影響對整個項目來說是可以承受的。

技術分享

采用增量模型的優點是人員分配靈活,剛開始不用投入大量人力資源。如果核心產品很受歡迎,則可增加人力實現下一個增量。當配備的人員不能在設定的期限內完成產品時,它提供了一種先推出核心產品的途徑。這樣即可先發布部分功能給客戶,對客戶起到鎮靜劑的作用。此外,增量能夠有計劃地管理技術風險。增量模型的缺點是如果增量包之間存在相交的情況且未很好處理,則必須做全盤系統分析,這種模型將功能細化後分別開發的方法較適應於需求經常改變的軟件開發過程。


文章來自https://wenku.baidu.com/view/718cb107aaea998fcc220e70.html 略有修改

軟件工程--常用軟件開發模型比較分析