北京軟件開發軟件開發模型(Software Development Model)是指軟件開發全部過程、活動和任務的結構框架。軟件開發包括需求、設計、編碼和測試等階段,有時也包括維護階段。軟件開發模型能清晰、直觀地表達軟件開發全過程,明確規定瞭要完成的主要活動和任務,用來作爲軟件項目工作的基礎。對於不同的軟件系統,可以採用不同的開發方法、使用不同的程序設計語言以及各種不同技能的人員參與工作、運用不同的管理方法和手段等,以及允許採用不同的軟件工具和不同的軟件工程環境。
軟件工程的主要環節包括人員管理、項目管理、需求分析、系統設計、程序設計、測(cè)試、維護等,如圖所示。軟件開發模型是對軟件過程的建模,即用一定的流程将各個環節連接起來,並(bìng)可用規範的方式操作全過程,好比工廠的生産線。

較早出現的軟件開發模型較早出現的軟件開發模型是1970年W•Royce提出的瀑布模型。 該模型給出瞭固定的順序,将生存期活動從上一個階段向下一個階段逐級過渡,如同流水下瀉,較終得到所開發的軟件産品,投入使用。但計算拓廣到統計分析、商業事務等領域時,大多數程序採用高級語言(如FORTRAN、COBOL等)編寫。瀑布模式模型也存在著(zhe)缺乏靈活性、無法通過並(bìng)發活動澄清本來不夠確切的需求等缺點。常見的軟件開發模型還有演化模型、螺旋模型、噴泉模型、智能模型等。編輯本段典型的開發模型典型的開發模型有:
1.邊(biān)做邊(biān)改模型(Build-and-Fix Model);
2.瀑布模型(Waterfall Model);
3.快速原型模型(Rapid Prototype Model);
4.增量模型(演化模型)(Incremental Model);
5.螺旋模型(Spiral Model);
6.噴(pēn)泉模型(fountain model);
7.智能模型(四代技術(shù)(4GL));
8.混合模型(hybrid model);
9.RUP模型;
10.IPD模型
1. 邊(biān)做邊(biān)改模型(Build-and-Fix Model)
許多産品都是使用"邊(biān)做邊(biān)改"模型來開發的。在這種模型中,既沒有規格說明,也沒有經過設計,軟件随著(zhe)客戶的需要一次又一次地不斷被修改。
在這個模型中,開發人員拿到項目立即根據需求編(biān)寫程序,調試通過後生成軟件的第一個版本。在提供給用戶使用後,如果程序出現錯(cuò)誤,或者用戶提出新的要求,開發人員重新修改代碼,直到用戶滿意爲止。

這是一種類似作坊的開發方式,對編(biān)寫幾百行的小程序來說還不錯,但這種方法對任何規模的開發來說都是不能令人滿意的,其主要問題在於(yú):
(1) 缺少規劃和設計環節,軟件的結構随著(zhe)不斷的修改越來越糟,導(dǎo)緻無法繼續修改;
(2)忽略需求環節,給軟件開發(fā)帶(dài)來很大的風險;
(3)沒有考慮測(cè)試和程序的可維護性,也沒有任何文檔(dàng),軟件的維護十分困難。
2. 瀑布模型(Waterfall Model)
1970年Winston Royce提出瞭(le)著名的"瀑布模型",直到80年代早期,它一直是唯一被廣泛採(cǎi)用的軟件開發模型。

瀑布模型中,如圖所示,将軟件生命周期劃分爲制定計劃、需求分析、軟件設計、程序編寫、軟件測試和運行維護等六個基本活動,並(bìng)且規定瞭(le)它們自上而下、相互銜接的固定次序,如同瀑布流水,逐級下落。
在瀑布模型中,軟件開發的各項活動(dòng)嚴格按照線性方式進行,當(dāng)前活動(dòng)接受上一項活動(dòng)的工作結果,實施完成所需的工作内容。當(dāng)前活動(dòng)的工作結果需要進行驗證,如果驗證通過,則該結果作爲下一項活動(dòng)的輸入,繼續進行下一項活動(dòng),否則返回修改。
瀑布模型強調文檔的作用,並(bìng)要求每個階段都要仔細驗證。但是,這種模型的線性過程太理想化,已不再适合現代的軟件開發模式,幾乎被業界抛棄,其主要問題在於(yú):
(1) 各個階段的劃分完全固定,階段之間産(chǎn)生大量的文檔,極大地增加瞭(le)工作量;
(2) 由於(yú)開發模型是線性的,用戶隻有等到整個過程的末期才能見到開發成果,從而增加瞭(le)開發的風險;
(3) 早期的錯(cuò)誤可能要等到開發後期的測(cè)試階段才能發現,進而帶來嚴重的後果。
我們應該認識到,"線性"是人們較容易掌握並(bìng)能熟練應用的思想方法。當人們碰到一個複雜的"非 線性"問題時,總是千方百計地将其分解或轉化爲一系列簡單的線性問題,然後逐個解決。一個軟件系統的整體可能是複雜的,而單個子程序總是簡單的,可以用線性的方式來實現,否則幹活就太累瞭(le)。線性是一種簡潔,簡潔就是美。當我們領會瞭(le)線性的精神,就不要再呆闆地套用線性模型的外表,而應該用活它。例如增量模型實質就是分段的線性模型,螺旋模型則是接連的彎曲瞭(le)的線性模型,在其它模型中也能夠找到線性模型的影子。
3. 快速原型模型(Rapid Prototype Model)
快速原型模型的第一步是建造一個快速原型,實現客戶或未來的用戶與系統的交互,用戶或客戶對原型進行評價,進一步細化待開發軟件的需求。通過逐步調整原型使其滿足客戶的要求,開發人員可以確(què)定客戶的真正需求是什麽;第二步則在第一步的基礎上開發客戶滿意的軟件産(chǎn)品。
顯然,快速原型方法可以克服瀑布模型的缺點,減少由於軟件需求不明確帶來的開發風險,具有顯著的效果。快速原型的關鍵在於盡可能快速地建造出軟件原型,一旦確定瞭(le)客戶的真正需求,所建造的原型将被丢棄。因此,原型系統的内部結構並(bìng)不重要,重要的是必須迅速建立原型,随之迅速修改原型,以反映客戶的需求。
4. 增量模型(Incremental Model)
又稱(chēng)演化模型。與建造大廈相同,軟件也是一步一步建造起來的。在增量模型中,軟件被作爲一系列的增量構件來設計、實現、集成和測(cè)試,每一個構件是由多種相互作用的模塊所形成的提供特定功能的代碼片段構成。

增量模型在各個階段並(bìng)不交付一個可運行的完整産品,而是交付滿足客戶需求的一個子集的可運行産品。整個産品被分解成若幹個構件,開發人員逐個構件地交付産品,這樣做的好處是軟件開發可以較好地适應變(biàn)化,客戶可以不斷地看到所開發的軟件,從而降低開發風險。但是,增量模型也存在以下缺陷:
(1) 由於(yú)各個構件是逐漸並(bìng)入已有的軟件體系結構中的,所以加入構件必須不破壞已構造好的系統部分,這需要軟件具備開放式的體系結構。
(2) 在開發過程中,需求的變化是不可避免的。增量模型的靈活性可以使其适應這種變化的能力大大優於(yú)瀑布模型和快速原型模型,但也很容易退化爲邊(biān)做邊(biān)改模型,從而是軟件過程的控制失去整體性。
在使用增量模型時,第一個增量往往是實現基本需求的核心産(chǎn)品。核心産(chǎn)品交付用戶使用後,經過評價形成下一個增量的開發計劃,它包括對核心産(chǎn)品的修改和一些新功能的發布。這個過程在每個增量發布後不斷(duàn)重複,直到産(chǎn)生較終的完善産(chǎn)品。
例如,使用增量模型開發字處(chù)理軟件。可以考慮,第一個增量發布基本的文件管理、編(biān)輯和文檔生成功能,第二個增量發布更加完善的編(biān)輯和文檔生成功能,第三個增量實現拼寫和文法檢查功能,第四個增量完成高級的頁面布局功能。
5.螺旋模型(Spiral Model)
1988年,Barry Boehm正式發表瞭(le)軟件系統開發的"螺旋模型",它将瀑布模型和快速原型模型結合起來,強調瞭(le)其他模型所忽視的風險分析,特别适合於(yú)大型複雜的系統。

如圖所示,螺旋模型沿著(zhe)螺線進行若幹次疊代,圖中的四個象限代表瞭(le)以下活動:
(1) 制定計劃:確(què)定軟件目标,選定實施方案,弄清項目開發(fā)的限制條件;
(2) 風(fēng)險分析:分析評估所選方案,考慮(lǜ)如何識别和消除風(fēng)險;
(3) 實施工程:實施軟件開(kāi)發(fā)和驗證;
(4) 客戶(hù)評估:評價開發(fā)工作,提出修正建議,制定下一步計劃。
螺旋模型由風險驅動,強調可選方案和約束條件從而支持軟件的重用,有助於(yú)将軟件質量作爲特殊目标融入産(chǎn)品開發之中。但是,螺旋模型也有一定的限制條件,具體如下:
(1) 螺旋模型強調風險分析,但要求許多客戶接受和相信這種分析,並(bìng)做出相關反應是不容易的,因此,這種模型往往适應於(yú)内部的大規模軟件開發。
(2) 如果執行風(fēng)險分析将大大影響項目的利潤,那麽進行風(fēng)險分析毫無意義,因此,螺旋模型隻适合於(yú)大規模軟件項目。
(3) 軟件開發人員應該擅長(zhǎng)尋找可能的風險,準確(què)地分析風險,否則将會帶來更大的風險。
一個階段首先是確(què)定該階段的目标,完成這些目标的選擇方案及其約束條件,然後從風險角度分析方案的開發策略,努力排除各種潛在的風險,有時需要通過建造原型來完成。如果某些風險不能排除,該方案立即終止,否則啓動下一個開發步驟。較後,評價該階段的結果,並(bìng)設計下一個階段。
6.噴泉模型(fountain model)(也稱(chēng)面向對(duì)象的生存期模型, OO模型)

噴泉模型與傳(chuán)統的結構化生存期比較,具有更多的增量和疊(dié)代性質,生存期的各個階段可以相互重疊和多次反複,而且在項目的整個生存期中還可以嵌入子生存期。就像水噴上去又可以落下來,可以落在中間,也可以落在較底部。
7.智能模型(四代技術(shù)(4GL))
智能模型擁有一組工具(如數據查詢、報(bào)表生成、數據處理、屏幕定義、代碼生成、高層圖形功能及電子表格等),每個工具都能使開發人員在高層次上定義軟件的某些特性,並(bìng)把開發人員定義的這些軟件自動地生成爲源代碼。
這種方法需要四代語言(4GL)的支持。4GL不同於(yú)三代語言,其主要特征是用戶界面極端友好,即使沒有受過訓練的非專業程序員,也能用它編寫程序;它是一種聲明式、交互式和非過程性編程語言。4GL還具有高效的程序代碼、智能缺省假設、完備(bèi)的數據庫和應用程序生成器。目前市場上流行的4GL(如Foxpro等)都不同程度地具有上述特征。但4GL目前主要限於(yú)事務信息系統的中、小型應用程序的開發。

8.混合模型(hybrid model)
過程開發模型又叫混合模型(hybrid model),或元模型(meta-model),把幾種不同模型組合成一種混合模型,它允許一個項目能沿著(zhe)較有效的路徑發展,這就是過程開發模型(或混合模型)。實際上,一些軟件開發單位都是使用幾種不同的開發方法組成他們自己的混合模型。各種模型的比較每個軟件開發組織應該選擇适合於該組織的軟件開發模型,並(bìng)且應該随著(zhe)當前正在開發的特定産品特性而變化,以減小所選模型的缺點,充分利用其優點,下表列出瞭幾種常見模型的優缺點。各種模型的優點和缺點:
模型優點缺點
瀑布模型文檔(dàng)驅動(dòng)系統可能不滿足客戶的需求
快速原型模型關注滿足客戶需求可能導(dǎo)緻系統設計差、效率低,難於(yú)維護
增量模型開發(fā)早期反饋及時,易於(yú)維護需要開放式體系結構,可能會設計差、效率低
螺旋模型風(fēng)險驅動(dòng)風(fēng)險分析人員需要有經驗且經過充分訓練
9.RUP模型
RUP(Rational Unified Process)模型是Rational公司提出的一套開發過程模型,它是一個面向對象軟件工程的通用業務流程。它描述瞭(le)一系列相關的軟件工程流程,它們具有相同的結構,即相同的流程構架。RUP 爲在開發組織中分配任務和職責提供瞭(le)一種規範方法,其目标是確保在可預計的時間安排和預算内開發出滿足較終用戶需求的高品質的軟件。RUP具有兩個軸,一個軸是時間軸,這是動态的。另一個軸是工作流軸,這是靜态的。在時間軸上,RUP劃分瞭(le)四個階段:初始階段、細化階段、構造階段和發布階段。每個階段都使用瞭(le)疊代的概念。在工作流軸上,RUP設計瞭(le)六個核心工作流程和三個核心支撐工作流程,核心工作流軸包括:業務建模工作流、需求工作流、分析設計工作流、實現工作流、測試工作流和發布工作流。核心支撐工作流包括:環境工作流、項目管理工作流和配置與變更管理工作流。RUP 彙集現代軟件開發中多方面的較佳經驗,並(bìng)爲适應各種項目及組織的需要提供瞭(le)靈活的形式。作爲一個商業模型,它具有非常詳細的過程指導和模闆。但是同樣由於該模型比較複雜,因此在模型的掌握上需要花費比較大的成本。尤其對項目管理者提出瞭(le)比較高的要求。
它具有如下特點:
(1)增量疊(dié)代,每次疊(dié)代都遵循瀑布模型能夠在前期控制好和解決風(fēng)險;
(2)模型的複(fù)雜化,需要項目管理者具有較(jiào)強的管理能力。
10.IPD模型
IPD(Integrated Product Development)流程是由IBM提出來的一套集成産(chǎn)品開發流程,非常适合於(yú)複雜的大型開發項目,尤其涉及到軟硬件結合的項目。
IPD從整個産品角度出發,流程綜合考慮瞭(le)從系統工程、研發(硬件、軟件、結構工業設計、測試、資料開發等)、制造、财務到市場、採(cǎi)購、技術支援等所有流程。是一個端到端的流程。
在IPD流程中總共劃分瞭(le)六個階段(概念階段、計劃階段、開發階段、驗證階段、發布階段和生命周期階段),四個個決策評審點(diǎn)(概念階段決策評審點(diǎn)、計劃階段決策評審點(diǎn)、可獲得性決策評審點(diǎn)和生命周期終止決策評審點(diǎn))以及六個技術評審點(diǎn)。
IPD流程是一個階段性模型,具有瀑布模型的影子。該模型通過使用全面而又複雜的流程來把一個龐大而又複雜的系統進行分解並(bìng)降低風險。一定程度上,該模型是通過流程成本來提高整個産品的質量並(bìng)獲得市場的占有。由於該流程沒有定義如何進行流程回退的機制,因此對於需求經常變動的項目該流程就顯得不大适合瞭(le)。並(bìng)且對於一些小的項目,也不是非常适合使用該流程。