軟件過程是為了獲得高質量軟件所需要完成的一系列任務的框架,它規定了完成各項任務的工作步驟。
概括地說,軟件過程描述了為了開發出客戶需要的軟件,什么人(who)、在什么時候(when)、做什么事(what)及怎樣做這些事(how)以實現某個特定的具體目標。
通常使用生命周期模型簡潔地描述軟件過程。生命周期模型規定了把生命周期划分成哪個階段及各個階段的執行順序,也稱為過程模型。
實際從事軟件開發工作時應該根據所承擔的項目的特點來划分階段,但是下面典型的軟件過程模型不是針對某個特定項目講的,只能使用“通用的”階段划分方法。
由於瀑布模型與快速原型模型的主要區別是獲取用戶需求的方法不同,下面在介紹生命周期模型時把“規格說明”作為一個階段獨立出來。此外,問題定義和可行性研究的主要任務都是概括地了解用戶的需求,為了簡潔地描述軟件過程,把它們都歸並到需求分析中去了。同樣,為了簡潔起見,把總體設計和詳細設計合並在一起成為“設計”。
一、瀑布模型
在20世紀80年代之前,瀑布模型一直是唯一被廣泛采用的生命周期模型,現在它仍然是軟件工程中應用的最廣泛的過程模型。
1.1 什么是瀑布模型
瀑布模型將軟件生命周期划分為制定計划、需求分析、軟件設計、程序編寫、軟件測試和運行維護等六個基本活動,並且規定了它們自上而下、相互銜接的固定次序。
從本質來講,它是一個軟件開發架構。開發過程通過一系列階段順序展開,從系統需求分析開始到產品發布和維護,每個階段都會產生循環反饋,因此如果有信息未被覆蓋或者發現了問題,那么最好 “返回”上一個階段並進行適當的修改。開發進程從一個階段“流動”到下一個階段,這也是瀑布模型名稱的由來。
1.2 特點
1、階段間具有順序性和依賴性
①必須等前一階段的工作完成后,才能開始后一階段的工作。
②前一階段的輸出文檔是后一階段的輸入文檔,因此,只有前一階段的輸出文檔正確,后一階段的工作才能獲得正確的結果。
2、推遲實現的觀點
缺乏軟件工程實踐經驗的軟件開發人員接到軟件開發任務后常常急於求成,總想盡早開始編寫程序。但實踐表明,對於規模較大的軟件項目來說,往往編碼開始的越早,最終完成開發所需的時間越長。這是因為前面階段的工作沒做或做的不扎實,過早地考慮進行程序實現,往往導致大量返工,有時甚至產生無法彌補的問題。
瀑布模型在編碼之前設置了系統分析與系統設計階段,分析與設計階段的基本任務規定,在這兩個階段主要考慮目標系統的邏輯模型而不涉及軟件的物理實現。
清楚的區分邏輯設計與物理設計,盡可能推遲程序的物理實現,是按照瀑布模型開發軟件的一條重要的指導思想。
3、質量保證的觀點
為了保證所開發的軟件的質量,在瀑布模型的每一個階段都應堅持兩個重要做法。
①每個階段都必須完成規定的文檔,沒有交出合格的文檔就是沒有完成該階段的任務。
②每個階段結束前都要對所完成的文檔進行評審,以便盡早發現問題,改正錯誤。
傳統的瀑布模型過於理想化,實際的瀑布模型是帶"反饋環"的(左下方)。如圖所示(圖中實線箭頭表示開發過程,虛線箭頭表示維護過程),當在后面階段發現前面階段的錯誤時,需要沿圖中左側的反饋線返回前面的階段,修正前面階段的產品后再回來繼續完成后面階段的任務。
1.3 優缺點
1、優點
①可強迫開發人員采用規范的方法。
②嚴格規定了每個階段必須提交的文檔。
③要求每個階段交出的所有產品都必須經過質量保證小組的仔細驗證。
2、 缺點
①在可運行的軟件產品交付給用戶之前,用戶只能通過文檔來了解產品是什么樣的。
②一旦用戶開始使用一個軟件,關於該軟件應該做什么的想法就會或多或少的發生改變,使得最初提出的需求變得不完全適用。
③瀑布模型幾乎完全依賴於書面的規格說明,很可能導致最終開發出的軟件產品不能真正滿足用戶的需要。
遵守瀑布模型的文檔約束將使軟件維護變得更加容易,從而顯著降低軟件預算。瀑布模型的成功很大程度上是由於它基本上是一種文檔驅動的模型。
二、快速原型模型
2.1 什么是快速原型模型
快速原型是快速建立起來的可以在計算機上運行的程序,它所能完成的功能往往是最終產品能完成的功能的一個子集.
快速原型模型的第一步是快速建立一個能反映用戶主要需求的原型系統,讓用戶在計算機上試用它,通過實踐了解目標系統的概貌。通常,用戶試用原型系統后會提出許多修改意見,開發人員按照用戶的意見快速的修改原行系統,然后再次請用戶試用。一旦用戶認為這個原型系統確實能做他們需要的工作,開發人員便可據此書寫規格文檔說明書,根據這份文檔開發出的軟件便可滿足用戶的真實需求。
2.2 特點
如圖所示,快速原型模型是不帶“反饋環“的。軟件產品的開發基本上是線性順序進行的。

快速原型的本質是“快速”。開發人員應該盡可能地建造出原型系統以加速軟件開發過程,節約軟件開發成本。原型的用途是獲知用戶的真正需求,一旦需求確定了,原型將被拋棄。
當快速原型的某個部分是利用軟件工具由計算機自動生成的時候,可以把這部分用到最終的軟件產品中。例如用戶界面通常是快速原型的一個關鍵部分,當使用屏幕生成程序和報表生成程序自動生成用戶界面時,實際上可以把得到的用戶界面用在最終的軟件產品中。
2.3 快速原型模型的思想產生、原理及運用方式
1、思想產生
在需求分析階段得到完全、一致、准確、合理的需求說明十分困難。
獲得一組基本需求說明后,就快速地將其“實現”。通過原型反饋,加深對系統的理解來滿足用戶基本要求,使用戶在試用后對需求說明進行補充和精確化,從而獲得合理完整、現實可行的需求說明。再把快速原型思想用到軟件開發的其他階段,向軟件開發的全過程擴展。
先用相對少的成本、較短的周期開發一個簡單但可以運行的系統原型向用戶演示或者讓用戶試用,及早澄清並檢驗一些主要設計策略,在此基礎上再開發實際的軟件系統。
2、原理
利用原型輔助軟件開發。
經過簡單快速分析快速實現一個原型,用戶與開發者在試用原型過程中加強通信與反饋,通過反復評價和改進原型,減少誤解,彌補漏洞,最終提高軟件質量。
3、運用方式
由於運用原型的目的和方式不同,在使用原型時也采取不同的策略。
①拋棄策略:將原型用於開發過程的某個階段,促使該階段的開發結果更加完整、准確、一致、可靠,該階段結束后原型隨之作廢。探索型快速原型和實驗型快速原型就是采用此策略。
②附加策略:將原型用於開發的全過程,原型由最基本的核心開始,逐步增加新的功能和新的需求,反復修改反復擴充,最后發展為用戶滿意的最終系統。演化型快速原型就是采用此策略。
采用何種形式、何種策略運用快速原型主要取決於軟件項目的特點、可供支持的原型開發工具和技術等,根據實際情況的特點決定
2.4 開發步驟
1、快速分析
在分析人員與用戶密切配合下,迅速確定系統的基本需求,根據原型需要體現的特征描述基本需求以滿足開發原型的需要。
2、構造原型
在快速分析的基礎上,根據基本需求說明盡快實現一個可行的系統。
要求具有強有力的軟件工具的支持,並忽略最終系統在某些細節上的要求,主要考慮原型系統能夠充分反映所要評價的特性。
3、運行原型
發現問題,消除誤解,開發者與用戶充分協調。
4、評價原型
在運行的基礎上,考核評價原型的特性,分析運行效果是否滿足用戶的願望,糾正過去交互中的誤解與分析中的錯誤,增添新的要求,並滿足因環境變化或用戶的新想法引起的系統要求變動,提出全面的修改意見。
5、修改
根據評價原型的活動結果進行修改。若原型未滿足需求說明的要求,說明對需求說明存在不一致的理解或實現方案不夠合理,根據明確的要求迅速修改原型。
三、增量模型
3.1 什么是增量模型
使用增量模型開發軟件時把軟件產品作為一系列的增量構件來設計、編碼、集成和測試,每個構件由多個相互作用的模塊構成,並且能夠完成特定的功能。
使用增量模型時,第一個增量構件往往實現軟件的基本需求,提供最核心的功能。
把軟件產品分解成增量構件時,應該使構件的規模居中。
分解時唯一必須遵守的約束條件是,當把新構件集成到現有構件中時,所形成的產品必須是可測試的。
瀑布模型或快速原型模型的目標是一次就把一個滿足所有需求的產品提交給用戶。
增量模型分批地逐步向用戶提交產品,整個軟件產品被分解成多個增量構件,開發人員一個構件接一個構件地向用戶提交產品。
3.2 特點
把瀑布模型的順序特征與快速原型法的迭代特征相結合。
將軟件看作一系列相互聯系的增量,在開發過程的各次迭代中,每次完成其中的一個增量。
使用增量模型時開發軟件和擴充軟件功能並沒有本質區別,都是向現有產品中加入新構件的過程。
風險更大的增量模型
確定用戶需求后就着手擬定第一個構件的規格說明文檔,完成后規格說明組轉向第二個構件的規格說明文檔,同時設計組開始涉及第一個構件。
使用該方法將不同的構件並行構建,可能加快工程進度,但將冒構件無法集成到一起的風險。
3.3 優缺點
1、優點
①能在較短的時間內向用戶提交可完成部分工作的產品。
②逐步增加產品功能可以使用戶有較充裕的時間學習和試用新產品,從而減少一個全新的軟件可能給用戶帶來的沖擊。
2、困難
①把每個新的增量構件集成到現有軟件體系結構中時,必須不破壞原來已經開發出的產品。
②向現有產品中加入新構建的過程必須簡單方便,即軟件體系結構必須是開放的。
四、螺旋模型
4.1 什么是螺旋模型
螺旋模型的基本思想是,使用原型及其它方法來盡量降低風險。理解這種模型的一個簡便方法是,把它看作在每個階段之前都增加了風險分析過程的快速原型模型。
每個階段開始時(左上象限)的任務是,確定該階段的目標、為完成這些目標選擇方案及設定這些方案的約束條件。然后從風險角度分析上一步的工作結果,努力排除各種潛在的風險,通常用建造原型的方法排除風險。如果風險不能排除,則停止開發工作或大幅度削減項目規模。如果成功排除了所有風險,則啟動下一個開發步驟(右下象限),這個階段的工作過程相當於純粹的瀑布模型。最后評價該階段的工作成果並計划下一個階段的工作。
1、簡化的螺旋模型
2、完整的螺旋模型

圖中帶箭頭的點划線的長度代表當前累計的開發費用,螺旋線的角度值代表開發進度,螺旋線的每個周期對應於一個開發階段。
圖中的四個象限代表了以下活動。
①制定計划:確定軟件目標,選定實施方案,弄清項目開發的限制條件。
②風險分析:分析評估所選方案,考慮如何識別和消除風險。
③實施工程:實施軟件開發和驗證。
④客戶評估:評價開發工作,提出修正建議,制定下一步計划。
4.2 特點
主要適用於內部開發的大規模軟件開發項目。項目越大,風險越大,進行風險分析的必要性越大。只有內部開發的項目才能在風險過大時方便地終止項目。
螺旋模型的主要優勢在於它是風險驅動的。但這也是一個弱點,除非軟件開發人員具有豐富的風險評估經驗和這方面的專門知識,否則將出現真正的風險:當項目實際上走向毀滅時,開發人員可能以為一切正常。
4.3 優缺點
1、優點
①對可選方案和約束條件的強調有利於已有軟件的重用,也有助於把軟件質量作為軟件開發的一個重要目標。
②減少了過多測試(浪費資金)或測試不足(產品故障多)所帶來的風險。
③在螺旋模型中維護只是模型的另一個周期,在維護和開發之間並沒有本質區別。
2、缺點
①采用螺旋模型需要具有相當豐富的風險評估經驗和專門知識,在風險較大的項目開發中,如果未能夠及時標識風險,勢必造成重大損失。
②過多的迭代次數會增加開發成本,延遲提交時間。