瀑布模型的本意是:軟件生存周期是由立項(xiàng)、需求分析,、策劃,、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì),、編程,、測(cè)試、發(fā)布,、維護(hù)等階段所組成的,把每個(gè)階段當(dāng)做瀑布中的一個(gè)臺(tái)階(階梯),,把軟件生存過(guò)程比喻成瀑布中的流水,軟件生存過(guò)程在這些臺(tái)階中由上向下地奔流。瀑布模型規(guī)定了各項(xiàng)關(guān)鍵軟件工程活動(dòng),,自上而下、相互銜接,、逐級(jí)下落,如同瀑布的固定次序,。當(dāng)發(fā)現(xiàn)某階段的上游存在缺陷時(shí),可以通過(guò)追溯,,予以消除或改進(jìn),但要付出很大代價(jià),,因?yàn)樗谄俨寂_(tái)階上倒過(guò)來(lái)向上流動(dòng),需要消耗很多能源或動(dòng)力。 瀑布模型認(rèn)為:項(xiàng)目經(jīng)理或軟件管理人員,,只要控制好每級(jí)臺(tái)階的高度和寬度,在每個(gè)臺(tái)階處設(shè)立里程碑或基線,,并組織好對(duì)基線的評(píng)審與審計(jì),就可以控制好項(xiàng)目的開(kāi)發(fā)成本,、進(jìn)度和質(zhì)量,。
瀑布模型的特點(diǎn)是: (1)里程碑或基線驅(qū)動(dòng),,或者說(shuō)文檔驅(qū)動(dòng),。 (2)過(guò)程逆轉(zhuǎn)性很差或者說(shuō)不可逆轉(zhuǎn),,因?yàn)楦鶕?jù)上流的錯(cuò)誤會(huì)在下流進(jìn)行發(fā)散性傳播的原理,,所以逆轉(zhuǎn)將會(huì)延誤工期,增加成本,,造成重大損失,。
(1)在開(kāi)發(fā)時(shí)間內(nèi)需求沒(méi)有或很少變化。 (2)分析設(shè)計(jì)人員對(duì)應(yīng)用領(lǐng)域很熟悉。 (3)低風(fēng)險(xiǎn)項(xiàng)目(對(duì)目標(biāo),、環(huán)境很熟悉),。 (4)用戶(hù)使用環(huán)境很穩(wěn)定。 (5)用戶(hù)除提出需求以外,,很少參與開(kāi)發(fā)工作。
瀑布模型的缺點(diǎn)是:傳統(tǒng)的項(xiàng)目組織方法是按順序完成每個(gè)工作流程,,即瀑布式生存周期,。瀑布只能—個(gè)個(gè)臺(tái)階地往下流,不可能倒著往上流,,這就是它致命的缺點(diǎn),。瀑布式生存周期通常會(huì)導(dǎo)致在項(xiàng)目后期,如實(shí)施階段(當(dāng)?shù)谝淮螛?gòu)建產(chǎn)品并開(kāi)始測(cè)試時(shí))出現(xiàn)“問(wèn)題堆積”,,在整個(gè)分析,、設(shè)計(jì)和實(shí)現(xiàn)階段隱藏下來(lái)的問(wèn)題,會(huì)在這個(gè)時(shí)候逐步暴露出來(lái),。更可怕的是,錯(cuò)誤的傳遞會(huì)采取發(fā)散擴(kuò)大的方式,,比如,,在需求階段中的一個(gè)錯(cuò)誤或遺漏,在編程階段就可能引發(fā)幾十個(gè)錯(cuò)誤或遺漏,。因?yàn)轫?xiàng)目有較長(zhǎng)的開(kāi)發(fā)周期,,其進(jìn)度會(huì)被嚴(yán)重拖延,,最終導(dǎo)致成本和質(zhì)量的失控,。
增量模型的本意是:要開(kāi)發(fā)一個(gè)大的軟件系統(tǒng),先開(kāi)發(fā)其中的一個(gè)核心模塊(或子系統(tǒng)),,然后再開(kāi)發(fā)其他模塊(或子系統(tǒng)),,這樣一個(gè)個(gè)模塊(或子系統(tǒng))地增加上去,就像搭積木一樣,,直至整個(gè)系統(tǒng)開(kāi)發(fā)完畢為止,。當(dāng)然,在每增加一個(gè)模塊前,,先要對(duì)該模塊進(jìn)行模塊測(cè)試,。通過(guò)后再將此模塊加入到系統(tǒng)中,然后還要進(jìn)行系統(tǒng)集成測(cè)試(聯(lián)調(diào)),。系統(tǒng)集成測(cè)試成功后,,再增加新的模塊,。這樣多次循環(huán),直到系統(tǒng)搭建完畢為止,。由此可見(jiàn),這樣的軟件系統(tǒng)本身應(yīng)該是模塊化的,,每個(gè)模塊應(yīng)該是高內(nèi)聚(模塊內(nèi) 部的數(shù)據(jù)與信息關(guān)系緊密)、低耦合(模塊之間的數(shù)據(jù)與信息聯(lián)系松散),、信息隱蔽(模塊包裝后信息很少外露)的,這樣的模塊當(dāng)然是可組裝的,、可拆卸的,。
(1)任務(wù)或功能模塊驅(qū)動(dòng),可以分階段提交產(chǎn)品,。 (2)有多個(gè)任務(wù)單,這些多個(gè)任務(wù)單的集合,,構(gòu)成項(xiàng)目的一個(gè)總《任務(wù)書(shū)》,,或總《用戶(hù)需求報(bào)告》/《需求規(guī)格說(shuō)明書(shū)》,。
(1)在整個(gè)項(xiàng)目開(kāi)發(fā)過(guò)程中,需求都可能發(fā)生變化,,客戶(hù)接受分階段交付。 (2)分析設(shè)計(jì)人員對(duì)應(yīng)用領(lǐng)域不熟悉,,難以一步到位。 (3)中等或高風(fēng)險(xiǎn)項(xiàng)目(工期過(guò)緊且可分階段提交的系統(tǒng)或目標(biāo),、 環(huán)境不熟悉),。 (4)用戶(hù)可參與到整個(gè)軟件開(kāi)發(fā)過(guò)程中,。 (5)使用面向?qū)ο笳Z(yǔ)言或第4代語(yǔ)言。 (6)軟件公司自己有較好的類(lèi)庫(kù),、構(gòu)件庫(kù)。
若軟件系統(tǒng)的組裝和拆卸性不強(qiáng),,或開(kāi)發(fā)人員全局把握水平不高(沒(méi)有數(shù)據(jù)庫(kù)設(shè)計(jì)專(zhuān)家進(jìn)行系統(tǒng)集成),或者客戶(hù)不同意分階段提交產(chǎn)品,,或者開(kāi)發(fā)人員過(guò)剩,都不宜采用這種模型,。
在計(jì)算方法這門(mén)課中,迭代是一種逼近真值的算法,。這就是迭代模型思想的來(lái)源。為使項(xiàng)目能夠比較順利地進(jìn)行,,一種較靈活(并且風(fēng)險(xiǎn)更小) 的方法是:多次執(zhí)行各個(gè)開(kāi)發(fā)工作流程,從而更好地理解需求,,設(shè)計(jì)出更為強(qiáng)壯的軟件構(gòu)架,,逐步提高開(kāi)發(fā)組織能力,最終交付一系列逐步完善的實(shí)施成果,,這就是迭代式生存周期模型,。每次按順序完成這一系列工作流程就叫做一次迭代,每次迭代均以次要里程解結(jié)束,,按照特定的迭代成功標(biāo)準(zhǔn),,對(duì)迭代的結(jié)果進(jìn)行評(píng)估,。每個(gè)階段都可以進(jìn)一步細(xì)分為迭代。迭代是產(chǎn)生可執(zhí)行的產(chǎn)品發(fā)布(內(nèi)部的或外部的)的完整開(kāi)發(fā)循環(huán),,所發(fā)布的產(chǎn)品是開(kāi)發(fā) 過(guò)程最終產(chǎn)品的子集,它將通過(guò)一次又一次的迭代遞增成長(zhǎng),,最后形成最終的軟件系統(tǒng)或產(chǎn)品,。
迭代或迭代循環(huán)驅(qū)動(dòng),,每一次迭代或迭代循環(huán),,均要走完初始、精化,、構(gòu)建、移交4個(gè)階段,。根據(jù)軟件開(kāi)發(fā)的實(shí)際情況,建議以下類(lèi)型的項(xiàng)目,,可以考慮使用迭代式生存周期: (1)生存周期模型是以迭代為主要特征的,。 (2)項(xiàng)目組的管理人員和核心成員應(yīng)對(duì)軟件工程的核心過(guò)程:系統(tǒng)建模,、需求分析、系統(tǒng)設(shè)計(jì),、系統(tǒng)實(shí)現(xiàn)、項(xiàng)目管理,、配置管理,、測(cè)試等比較熟悉,。 (3)面向?qū)ο蠹夹g(shù)比較適合采用迭代的開(kāi)發(fā)方式來(lái)進(jìn)行,采用面向?qū)ο蠹夹g(shù)的項(xiàng)目組,,建議使用迭代式生存周期,。 (4)本生存周期模型是以軟件構(gòu)架為中心的開(kāi)發(fā)方式,,項(xiàng)目組的核心設(shè)計(jì)人員,應(yīng)具備一定程度的軟件架構(gòu)的知識(shí),,并熟練掌握軟件架構(gòu)設(shè)計(jì)技能。 (5)項(xiàng)目組全體成員應(yīng)熟悉UML,,并能利用建模工具(如Rose等)進(jìn)行分析、策劃,、設(shè)計(jì)、測(cè)試等,。 (6)本生存周期模型是以風(fēng)險(xiǎn)管理為驅(qū)動(dòng)的開(kāi)發(fā)方式,,項(xiàng)目組的管理人員應(yīng)具備風(fēng)險(xiǎn)管理的知識(shí)和技能。 (7)擁有實(shí)施軟件產(chǎn)品開(kāi)發(fā),、組裝的軟件組織,。
(1)在項(xiàng)目開(kāi)發(fā)早期需求可能有所變化。 (2)分析設(shè)計(jì)人員對(duì)應(yīng)用領(lǐng)域很熟悉,。 (3)高風(fēng)險(xiǎn)項(xiàng)目,。 (4)用戶(hù)可不同程度地參與整個(gè)項(xiàng)目的開(kāi)發(fā)過(guò)程,。 (5)使用面向?qū)ο蟮恼Z(yǔ)言或UML語(yǔ)言。 (6)使用CASE工具,,如Rose。 (7)具有高素質(zhì)的項(xiàng)目管理者和軟件研發(fā)團(tuán)隊(duì),。
迭代模型是采取循環(huán)的工作方式,,每次循環(huán)均使工作產(chǎn)品更靠近目標(biāo)產(chǎn)品一次,這就要求項(xiàng)目組成員具有很高的水平井掌握先進(jìn)的開(kāi)發(fā)工具,。反之,,就會(huì)存在較大的技術(shù)風(fēng)險(xiǎn)和技能風(fēng)險(xiǎn)。
在初步需求分析之后,,馬上向客戶(hù)展示一個(gè)軟件產(chǎn)品原型,,對(duì)客戶(hù)進(jìn)行培訓(xùn),,讓客戶(hù)試用,,在試用中收集客戶(hù)意見(jiàn),根據(jù)客戶(hù)意見(jiàn)立刻修改原型,,之后再讓客戶(hù)試用,反復(fù)循環(huán)幾次,,直到客戶(hù)確認(rèn)為止。
開(kāi)發(fā)者必須先有一個(gè)原型,,至少要有一個(gè)原型的核心,。原型模型與迭代模型相同點(diǎn)是:反復(fù)循環(huán)幾次,,直到客戶(hù)確認(rèn)為止,。不同點(diǎn)是:原型模型事先有一個(gè)展示性的產(chǎn)品原型,而 迭代模型可能沒(méi)有,。
(1)已有產(chǎn)品或產(chǎn)品的原型,只需客戶(hù)化的工程項(xiàng)目,。 (2)簡(jiǎn)單而熟悉的行業(yè)或領(lǐng)域,。 (3)有快速原型開(kāi)發(fā)工具,。 (4)進(jìn)行產(chǎn)品移植或升級(jí)。
因?yàn)槭孪扔幸粋€(gè)展示性的產(chǎn)品原型,,所以在一定程度大,不利于開(kāi)發(fā)人員的創(chuàng)新,。 摘自:《實(shí)用軟件工程》 |
|
來(lái)自: wanglh5555 > 《待分類(lèi)》