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