文/孔曉
軟件工程中的常用軟件生命周期模型
文/孔曉
世間萬物都要經歷孕育、誕生、成長、成熟、衰亡的過程,軟件系統也是一樣。在軟件工程中我們將這一過程稱為軟件生命周期。我們可以將軟件生存周期分成幾個階段,每個階段都包含相應的任務,從而使軟件的整個開發難度顯著降低,便于管理。一般來說,軟件生命周期由可行性分析、需求分析、概要設計與詳細設計、代碼編寫、軟件測試、軟件維護等活動組成,在進行軟件開發時可以將這些活動合理的分配到軟件生命周期的不同階段去實施。
軟件工程 軟件生命周期 瀑布型
軟件生命周期模型的主要作用是確定各個軟件開發活動實施的順序。軟件開發前期就應該選擇適當的軟件生命周期模型,以達到簡化軟件開發流程,降低軟件開發難度的目的。軟件生命周期模型可以幫助開發人員提高軟件開發效率,提升軟件質量,降低軟件開發成本,更好地監督與控制軟件開發進程,降低風險。如果沒有選擇或者選擇了不合適的軟件生命周期模型將會導致軟件開發進度緩慢,造成人力、物力的無謂浪費,甚至使軟件開發項目夭折,因此,根據軟件開發項目的具體情況選擇相應的軟件生命周期模型是非常重要的。下面筆者結合多年開發經驗和大家探討一下幾種常用的軟件生命周期模型的特點,以供參考。
雖然瀑布模型已不再適應當前軟件開發的要求,但是通過分析瀑布模型的特點,我們依然能得到不少啟發。瀑布模型的主要特點是其嚴格要求軟件開發按照:需求>分析>設計>編碼>測試的順序進行,每各階段都有明確的成果和檢驗標準。因此,瀑布模型的最大優點在于能夠確保軟件產品的高質量,能夠提前發現和解決軟件產品的陷能,能夠保證開發人員在整體上充分把握軟件系統的開發,使軟件系統具有很強的高擴展性和可維護性。但是瀑布模型不適合那些前期需求不確定,而且在短時間內難以確定需求的項目。此外,在開發中小型軟件項目時,往往需要需求設計人員和開發人員在項目一開始就全部參與到項目中,而不能分階段參與,因此,采用瀑布模型將出現該項目人力資源配置不合理,人員閑置的情況。瀑布模型側重文檔,強調文檔的作用,要求軟件開發的每一個階段都要認真檢驗。但該模型的過程太過理想化,實際開發中很難執行,因此基本被軟件開發業界拋棄,其主要問題有以下幾點:
(1)開發的各個階段之間的劃分太死板,每個階段都會產生大量的文檔,大大增加了工作量。
(2)因為該模型流程是線性的,用戶只能在開發過程的末期才能看到成果,使開發風險大大增加。
(3)如果開發早期出現錯誤,很可能要等到開發后期的測試階段才會發現。
首先需要明白的是螺旋模型遵循和瀑布模型一樣的開發流程,即需求>分析>設計>編碼>測試的流程。而螺旋模型與瀑布模型相比最大的優勢在于其整個開發過程是風險驅動和迭代的,螺旋模型將瀑布模型中的多個階段轉化成迭代過程,從而達到降低項目風險的目的。
螺旋模型的每一次迭代都包含了以下六個步驟:
(1)確定個目標;
(2)備用方案和約束識別;
(3)開發風險評估方案和備用解決方案;
(4)獲得迭代的產出物并檢驗迭代產出的是否正確;
(5)準備下次迭代;
(6)提交下次迭代的方案。
采用螺旋模型的項目開發成本與風險成反比,也就是說成本投入越多,風險越小,這可以幫助開發人員更好地管理和跟蹤項目。在每一次迭代完成之后都必須對產出物進行檢驗評估,如果發現開發無法繼續下去時可以及早終止項目,減少損失。而每次迭代過程中的制定具體目標,分析風險和驗證交付物并不是容易的事情,需要開發人員具備深厚的技術功底且盡職盡責。
該模型的特點是利用程序自動生成軟件開發環境和工具,快速構建一個實際系統的簡化模型,以供開發人員和客戶進行溝通,從而使開發人員能夠更準確的理解用戶需求。
快速原型法模型首先是構建一個能夠體現用戶基本需求的原型,給用戶展示實際軟件系統的大概樣子,以便用戶可以直觀地根據實際軟件產品原型提出修改意見,使開發人員和用戶進行高效地溝通,最終幫助開發人員開發出符合用戶需求的軟件系統。換句話說,這其實就是軟件開發人員向用戶提供樣品,然后用戶根據樣品提供修改意見,然后開發人員進一步完善樣品的過程。該模型避免了瀑布模型中直到開發末期才能看見軟件產品的弊端。快速原型法根據軟件開發各個階段用戶提供的意見,實現了軟件產品快速的改造過程,放棄了瀑布模型的線性結構,采用逐步求精方法逐步完善產品原型,最大化地滿足用戶要求,是一個不斷反饋、持續改進的過程。
快速原型法存在以下兩個問題:
(1)系統開發前期往往為了讓系統盡快運作起來而考慮的不周全,常常采用那些折中的方案,可能導致產品原型僅僅是一個示例,而無法成為實際軟件產品的一部分,這樣依然無法滿足用戶需求,因此在實際開發中還是有許多的工作要做。
(2)原型法對開發工具和開發環境有較高的依賴性,也就是說原型法需要大量先進而實用的軟件工具的支持。
增量迭代模型是RUP推薦的軟件生命周期模型。RUP中將迭代定義為:迭代包括實現軟件產品發布(指可執行的穩定版本)的所有開發活動和使用該發布必需的一切外圍元素。因此,可以將開發迭代理解為一個完整經歷所有工作流程的過程,這個過程包括軟件需求,軟件分析設計,軟件開發實施,軟件測試需求。實際上它和小型的瀑布模型相似。RUP認為每一個階段都能分成若干次迭代,每次迭代都可以產生一個能夠發布的產品,這個產品是最終產品的其中一個子集。迭代模型與瀑布模型最大的不同在于風險的暴露時間。所有項目都不可避免的具有一定的風險,但如果能在軟件生命周期中及早發現問題,避免風險,就能是軟件開發計劃更加精確。在瀑布模型中直到最后才會暴露出很多問題,此時再去解決這些問題無疑有很大的風險。而在迭代模型中,開發人員根據風險列表確定需要在迭代中開發哪些新的增量內容,每次迭代之后都會產生一個可執行文件,能夠及早的發現問題,解決問題,這樣做可以有效降低項目風險。
選擇軟件生命周期模型不僅要結合項目的特點,還有考慮到用戶的參與程度和開發團隊的技術水平。沒有完全符合任何項目的模型,也沒有完全不符合任何項目的模型。關鍵根據項目特點選擇一個或結合多個模型制定出符合項目開發要求的開發流程。
[1]顧明.軟件工程中幾種常用軟件生命周期模型的簡介[J].計算機時代,2003(01):20-21.
[2]朱婕.淺談軟件生命周期模型及其選擇[J].電腦迷,2014(17).
作者單位 曲阜師范大學軟件學院 山東省曲阜市273100
孔曉(1994-),男,山東省曲阜市人。曲阜師范大學軟件學院在讀本科。軟件工程專業。