版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章軟件工程概述1.1軟件1.2軟件危機(jī)1.3軟件工程1.4軟件工程知識(shí)體系(SWEBOK)1.5軟件過(guò)程1.6軟件項(xiàng)目管理基礎(chǔ)1.7小結(jié) 1.1軟件
1.1.1軟件的定義
在軟件的發(fā)展過(guò)程中,軟件從手工作坊式的程序演變?yōu)楣こ袒漠a(chǎn)品,人們對(duì)軟件的看法也發(fā)生了根本性的變化?!败浖?程序”顯然不能涵蓋軟件的完整內(nèi)容,除了程序之外,軟件還應(yīng)包括與之相關(guān)的文檔和配置數(shù)據(jù),用以保證這些程序的正確運(yùn)行。
《IEEEStandardGlossaryofSoftwareEngineeringTerminology》給出了有關(guān)軟件的定義:軟件是計(jì)算機(jī)程序、規(guī)程以及運(yùn)行計(jì)算機(jī)系統(tǒng)可能需要的相關(guān)文檔和數(shù)據(jù)。其中:①計(jì)算機(jī)程序是計(jì)算機(jī)設(shè)備可以接受的一系列指令和說(shuō)明,為計(jì)算機(jī)執(zhí)行提供所需的功能和性能;②數(shù)據(jù)是事實(shí)、概念或指令的結(jié)構(gòu)化表示,能夠被計(jì)算機(jī)設(shè)備接受、理解或處理;③文檔是描述過(guò)程、方法及使用的圖文材料。
然而,軟件的真正含義卻不是一個(gè)形式的定義所能體現(xiàn)的。從軟件的內(nèi)容來(lái)看,軟件更像是一種嵌入式的數(shù)字化知識(shí),其形成是一個(gè)通過(guò)交互對(duì)話和抽象理解而不斷演化的
過(guò)程。
軟件的應(yīng)用領(lǐng)域十分廣泛,呈現(xiàn)形式也是多種多樣的,在某種程度上很難對(duì)軟件的類型給出一個(gè)通用的界定。根據(jù)軟件服務(wù)對(duì)象的范圍不同,一般可以將軟件劃分為通用軟件和定制軟件兩種類型。
1.通用軟件(GenericSoftware)
通用軟件是由軟件開發(fā)組織開發(fā),面向市場(chǎng)用戶公開銷售的獨(dú)立運(yùn)行系統(tǒng),像操作系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)、字處理軟件、繪圖軟件包和項(xiàng)目管理工具等都屬于這種類型。有時(shí),通用軟件也被稱為套裝軟件(PackagedSoftware)
2.定制軟件(CustomizedSoftware)
定制軟件是受某個(gè)特定客戶委托,由軟件開發(fā)組織在合同的約束下開發(fā)的軟件,像企業(yè)ERP系統(tǒng)、衛(wèi)星控制系統(tǒng)和空中交通指揮系統(tǒng)等都屬于這種類型。通用軟件由開發(fā)組織根據(jù)市場(chǎng)調(diào)研自主提出產(chǎn)品需求,并以此進(jìn)行設(shè)計(jì)和開發(fā)。其最大的優(yōu)勢(shì)在于,可以通過(guò)近乎零成本的復(fù)制來(lái)分?jǐn)傋畛跬度氲囊淮涡蚤_發(fā)成本,最終使原本昂貴的軟件產(chǎn)品的價(jià)格降至眾多用戶可接受的程度,從而有效地提高市場(chǎng)份額和利潤(rùn)。但是,為了分?jǐn)傋畛醯拈_發(fā)投入,通用軟件必須面對(duì)足夠大的市場(chǎng)空間,其功能設(shè)計(jì)也只能面向大規(guī)模用戶普遍存在的共性需求。
對(duì)于不同的用戶來(lái)說(shuō),除了共性需求之外還存在著個(gè)性化的需求,而這些個(gè)性化需求對(duì)于很多用戶來(lái)說(shuō),恰恰是應(yīng)用的關(guān)鍵所在。定制軟件完全是訂單開發(fā),即按照單個(gè)客戶的個(gè)性化要求,以軟件項(xiàng)目的方式為其提交個(gè)性化的解決方案,從而更好地滿足客戶的需求。1.1.2軟件的特性
計(jì)算機(jī)在使社會(huì)生產(chǎn)力得到迅速解放、使人類生活高度自動(dòng)化和信息化的同時(shí),卻沒(méi)有使計(jì)算機(jī)本身的軟件生產(chǎn)得到類似的巨大進(jìn)步。軟件開發(fā)依然面臨著過(guò)分依賴人工、軟件難以重用、大量重復(fù)開發(fā)和生產(chǎn)率低下等問(wèn)題,而導(dǎo)致這些問(wèn)題的關(guān)鍵在于軟件本身的特性。
(1)軟件是復(fù)雜的。軟件是人類思維和智能的一種延伸和在異體上的再現(xiàn),遠(yuǎn)比任何以往人類的創(chuàng)造物都復(fù)雜得多。在大型軟件系統(tǒng)中,無(wú)數(shù)種數(shù)據(jù)、狀態(tài)和邏輯關(guān)系的組合以及人類思維的復(fù)雜性和不確定性導(dǎo)致的理解歧義和差異,使整個(gè)系統(tǒng)的復(fù)雜性急劇增加,也使軟件的設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試都變得相當(dāng)困難。在著名的《沒(méi)有銀彈:軟件工程中的根本和次要問(wèn)題》一文中,F(xiàn)redBrooks認(rèn)為正是軟件固有的復(fù)雜性造成了軟件開發(fā)的諸多問(wèn)題。由于復(fù)雜性,人們難以全面理解問(wèn)題,團(tuán)隊(duì)成員之間的溝通也變得非常困難,從而導(dǎo)致了產(chǎn)品缺陷、成本超支和進(jìn)度拖延;由于復(fù)雜性,描述和理解軟件系統(tǒng)所有可能的狀態(tài)是極其困難的,影響了產(chǎn)品的可靠性;由于軟件結(jié)構(gòu)及其依賴關(guān)系的復(fù)雜性,軟件的任何更改和擴(kuò)充都有可能帶來(lái)災(zāi)難性的后果,形成所謂的“雪崩效應(yīng)”。
(2)軟件是不可見的。一般情況下,人們可以通過(guò)幾何抽象模型準(zhǔn)確地描述有形的物體,例如建筑師可以用平面圖描述建筑物的結(jié)構(gòu),硬件工程師可以用電路圖描述計(jì)算機(jī)的系統(tǒng)結(jié)構(gòu),甚至化學(xué)家也可以用分子模型描述客觀事物的微觀結(jié)構(gòu)。但是,軟件是客觀世界空間和計(jì)算機(jī)空間之間的一種邏輯實(shí)體,不具有物理的形體特征。人們一直試圖用不同的圖形技術(shù)來(lái)描述軟件結(jié)構(gòu),即便是現(xiàn)在流行的面向?qū)ο蠹夹g(shù),也仍然無(wú)法給出其準(zhǔn)確、完整的描述。
(3)軟件是不斷變化的。軟件是純粹思維活動(dòng)的產(chǎn)物,它不會(huì)像硬件一樣發(fā)生磨損,而是需要隨著應(yīng)用、硬件、用戶和社會(huì)等各種因素的變化不斷地被修改和擴(kuò)展。由于軟件是人類思維和智能的一種延伸,因此當(dāng)軟件被真正應(yīng)用之后,人們往往希望超越原有的應(yīng)用邊界進(jìn)行軟件功能的提升或擴(kuò)展;另外,由于軟件必須依附于硬件平臺(tái),因此需要隨著硬件設(shè)備的更新和接口的不同而變化。
人們總是認(rèn)為軟件是很容易被修改的,通常忽視了修改帶來(lái)的副作用,即引入新的錯(cuò)誤,造成故障率的升高。圖1.1顯示了軟件修改對(duì)其質(zhì)量帶來(lái)的沖擊,不斷的修改最終將導(dǎo)致軟件的退化,從而結(jié)束其生命周期。圖1.1軟件的故障率曲線
(4)大多數(shù)軟件仍然是定制的,而不是通過(guò)已有構(gòu)件組裝而成的。在軟件的發(fā)展歷程中,曾經(jīng)涌現(xiàn)出許多開發(fā)技術(shù)和開發(fā)工具,當(dāng)前流行的面向?qū)ο箝_發(fā)技術(shù)也日趨成熟,但是手工作坊式的軟件開發(fā)方式仍占主導(dǎo)地位。隨著數(shù)字化、網(wǎng)絡(luò)化、智能化成為信息產(chǎn)業(yè)的發(fā)展趨勢(shì),軟件復(fù)用和軟件構(gòu)件技術(shù)受到了廣泛的關(guān)注,并成為一種社會(huì)化的開發(fā)方法,有助于軟件工程化、工廠化生產(chǎn)的實(shí)現(xiàn)。1.1.3軟件的發(fā)展
伴隨著第一臺(tái)計(jì)算機(jī)的問(wèn)世,計(jì)算機(jī)程序就出現(xiàn)了。在以后幾十年的發(fā)展過(guò)程中,人們逐步認(rèn)識(shí)了軟件的本質(zhì)特性,發(fā)明了許多有意義的開發(fā)技術(shù)與開發(fā)工具,同時(shí)軟件的規(guī)模也在不斷擴(kuò)大,其應(yīng)用幾乎滲透到各個(gè)領(lǐng)域。縱觀整個(gè)軟件的發(fā)展過(guò)程,大致可以將其分成以下4個(gè)重要的階段:
(1)第一階段:20世紀(jì)50~60年代。在計(jì)算機(jī)發(fā)展的早期階段,計(jì)算機(jī)的主要應(yīng)用是快速計(jì)算,出現(xiàn)了以Algol、Fortune等編程語(yǔ)言為標(biāo)志的算法技術(shù)。在這一時(shí)期,程序設(shè)計(jì)被認(rèn)為是一種任人發(fā)揮創(chuàng)造才能的活動(dòng),不存在什么系統(tǒng)化的方法和開發(fā)管理,程序的質(zhì)量完全依賴于程序員個(gè)人的技巧。隨著軟件規(guī)模的擴(kuò)大,20世紀(jì)60年代末期出現(xiàn)了“軟件危機(jī)”。
(2)第二階段:20世紀(jì)70年代。計(jì)算機(jī)應(yīng)用開始涉及各種以非數(shù)值計(jì)算為特征的商業(yè)事務(wù)領(lǐng)域,交互技術(shù)、多用戶操作系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)等隨之發(fā)展起來(lái),出現(xiàn)了以Pascal、Cobol等編程語(yǔ)言和關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)為標(biāo)志的結(jié)構(gòu)化軟件技術(shù)。在這一時(shí)期,軟件的概念不再僅僅是程序,還包括開發(fā)、使用、維護(hù)程序需求的所有文檔,軟件的工作范圍從只考慮程序的編寫擴(kuò)展到從定義、編碼、測(cè)試到使用、維護(hù)等整個(gè)軟件生命周期,瀑布模型被普遍使用。
(3)第三階段:20世紀(jì)80年代。微處理器的出現(xiàn)與應(yīng)用使計(jì)算機(jī)真正成為大眾化的東西,而軟件系統(tǒng)的規(guī)模、復(fù)雜性以及在關(guān)鍵領(lǐng)域的廣泛應(yīng)用,促進(jìn)了軟件開發(fā)過(guò)程的管理及工程化開發(fā)。在這一時(shí)期,軟件工程開發(fā)環(huán)境CASE及其相應(yīng)的集成工具大量涌現(xiàn),軟件開發(fā)技術(shù)中的度量問(wèn)題受到重視,出現(xiàn)了著名的軟件工作量估計(jì)COCOMO模型、軟件過(guò)程改進(jìn)模型CMM等。20世紀(jì)80年代后期,以Smalltalk、C++等為代表的面向?qū)ο蠹夹g(shù)重新崛起,傳統(tǒng)的結(jié)構(gòu)化技術(shù)受到了嚴(yán)峻的考驗(yàn)。
(4)第四階段:20世紀(jì)90年代至今。Internet技術(shù)的迅速發(fā)展使軟件系統(tǒng)從封閉走向開放,Web應(yīng)用成為人們?cè)贗nternet上最主要的應(yīng)用模式,異構(gòu)環(huán)境下分布式軟件的開發(fā)成為一種主流需求,軟件復(fù)用和構(gòu)件技術(shù)成為技術(shù)熱點(diǎn),出現(xiàn)了以Sun公司的EJB/J2EE、Microsoft的COM+和OMG的CORBA/OMA為代表的3個(gè)分支。與此同時(shí),需求工程、軟件過(guò)程、軟件體系結(jié)構(gòu)等方面的研究也取得了有影響的成果。進(jìn)入21世紀(jì),Internet正在向智能網(wǎng)絡(luò)時(shí)代發(fā)展,以網(wǎng)格計(jì)算(GridComputing)和網(wǎng)絡(luò)服務(wù)(WebServices)為代表的分布式計(jì)算日趨成熟,從而實(shí)現(xiàn)了信息充分共享和服務(wù)無(wú)處不在的應(yīng)用環(huán)境;高信度計(jì)算(TrustworthyComputing)普遍引起了人們的高度重視,從而為人們創(chuàng)造了一個(gè)安全、可靠、值得信賴的環(huán)境。 1.2軟件危機(jī)
所謂軟件危機(jī),是指在計(jì)算機(jī)軟件的開發(fā)和維護(hù)過(guò)程中遇到的一系列嚴(yán)重問(wèn)題。軟件危機(jī)在20世紀(jì)60年代末全面爆發(fā),至今四十多年過(guò)去了,雖然軟件開發(fā)的新工具和新方法層出不窮,但是軟件危機(jī)依然沒(méi)有消除。
(1)軟件開發(fā)的成本和進(jìn)度難以準(zhǔn)確估計(jì),延遲交付甚至取消項(xiàng)目的現(xiàn)象屢見不鮮。1995年,美國(guó)Standish咨詢集團(tuán)公布了題為“混沌”的研究報(bào)告,如圖1.2所示的研究數(shù)據(jù)表明:在20世紀(jì)90年代初期,軟件項(xiàng)目的平均成功率只有16.2%,在這里,成功的含義是指在計(jì)劃的時(shí)間和預(yù)算內(nèi)實(shí)現(xiàn)項(xiàng)目目標(biāo)。僅1995年這一年間,有30%的項(xiàng)目在完工之前就被取消了,其余53.8%的項(xiàng)目由于各種原因在開發(fā)過(guò)程中遇到了這樣或那樣的問(wèn)題,在開發(fā)成本、交付時(shí)間、產(chǎn)品功能或性能等方面沒(méi)有實(shí)現(xiàn)預(yù)期的目標(biāo)。近幾年,有關(guān)統(tǒng)計(jì)資料顯示:軟件項(xiàng)目的平均成功率上升到26%,但仍有46%的項(xiàng)目超出預(yù)算和最后期限,另有28%的項(xiàng)目沒(méi)有完成。圖1.220世紀(jì)90年代初期軟件項(xiàng)目的成功率
(2)軟件存在著錯(cuò)誤多、性能低、不可靠、不安全等質(zhì)量問(wèn)題。投入極大努力開發(fā)出來(lái)的軟件常常出現(xiàn)人們無(wú)法預(yù)料的錯(cuò)誤,甚至造成嚴(yán)重的后果。1996年6月,Ariane5火箭在發(fā)射37秒之后突然發(fā)生爆炸,其錯(cuò)誤原因是浮點(diǎn)數(shù)轉(zhuǎn)換成整數(shù)時(shí)發(fā)生溢出,系統(tǒng)對(duì)此也沒(méi)有提供相關(guān)的異常處理程序。就這樣,一個(gè)簡(jiǎn)單的疏漏造成了這枚耗資70億美元的火箭發(fā)射失敗。另一個(gè)例子是在1991年的海灣戰(zhàn)爭(zhēng)期間,美國(guó)對(duì)抗伊拉克的飛毛腿導(dǎo)彈曾發(fā)生過(guò)幾次對(duì)抗失利,其中一枚導(dǎo)彈在沙特阿拉伯的多哈誤擊了28名美國(guó)士兵,而問(wèn)題的癥結(jié)在于導(dǎo)彈的軟件存在一個(gè)累加計(jì)時(shí)的故障。一個(gè)很小的系統(tǒng)時(shí)鐘錯(cuò)誤積累起來(lái)就可能產(chǎn)生14個(gè)小時(shí)的誤差,從而使跟蹤系統(tǒng)失去準(zhǔn)確度。今天,隨著計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用的不斷普及,計(jì)算機(jī)病毒的傳播、拒絕服務(wù)的攻擊、網(wǎng)絡(luò)信息的安全等問(wèn)題日益突出,軟件的質(zhì)量保證成為人們關(guān)注的焦點(diǎn)。
(3)軟件成本在計(jì)算機(jī)系統(tǒng)的整個(gè)成本中所占比例越來(lái)越大。在過(guò)去的四十多年里,硬件性能至少跨越了8個(gè)重要的階段,其成本也隨著硬件技術(shù)的飛速發(fā)展而大幅度地下降。但令人遺憾的是,軟件開發(fā)的能力卻未能與硬件的發(fā)展保持同步。伴隨著軟件規(guī)模和復(fù)雜性的不斷增長(zhǎng),軟件成本在整個(gè)系統(tǒng)成本中所占的比例也持續(xù)上升,圖1.3顯示了軟件成本的上升趨勢(shì)。圖1.3軟件成本在系統(tǒng)總成本中所占比例
(4)軟件維護(hù)極其困難,而且很難適應(yīng)不斷變化的用戶需求和使用環(huán)境。在軟件交付使用的初期,需要識(shí)別和糾正軟件的錯(cuò)誤,改正軟件性能上的缺陷,避免實(shí)施中的錯(cuò)誤使用。即使軟件進(jìn)入了正常的使用期,由于計(jì)算機(jī)新技術(shù)的出現(xiàn)和用戶新需求的提出,也需要修改和改進(jìn)軟件。然而,軟件維護(hù)依然是一件非常困難的工作,常常出現(xiàn)諸如錯(cuò)誤難以修改或者修改又帶來(lái)新的錯(cuò)誤等現(xiàn)象,長(zhǎng)期不斷的修改也引起了軟件的退化。
另外,由于軟件開發(fā)本身的缺陷和軟件維護(hù)技術(shù)的不成熟,軟件維護(hù)需要消耗大量的工作量,從而造成維護(hù)成本相當(dāng)昂貴。統(tǒng)計(jì)數(shù)據(jù)表明,軟件維護(hù)費(fèi)用占軟件整個(gè)生存周期總費(fèi)用的55%~70%。 1.3軟件工程
1.3.1軟件工程的概念
1968年10月,NATO科學(xué)委員會(huì)在德國(guó)的加爾密斯(Garmisch,Germany)開會(huì)討論軟件可靠性與軟件危機(jī)的問(wèn)題,F(xiàn)ritzBauer首次提出了“軟件工程”的概念,他認(rèn)為:軟件工程是為了經(jīng)濟(jì)地獲得能夠在實(shí)際機(jī)器上高效運(yùn)行的可靠軟件而建立和使用的一系列好的工程化原則。
后來(lái),人們?cè)?jīng)多次給出了有關(guān)軟件工程的定義。這里引用《IEEEStandardGlossaryofSoftwareEngineeringTerminology》給出的一個(gè)更為全面的定義:①軟件工程是將系統(tǒng)性的、規(guī)范化的、可定量的方法應(yīng)用于軟件的開發(fā)、運(yùn)行和維護(hù),即將工程化應(yīng)用到軟件上;②對(duì)①中所述方法的研究。
從上述定義中可以看出,軟件工程包括以下兩方面的內(nèi)容:
(1)軟件工程是工程概念在軟件領(lǐng)域里的一個(gè)特定應(yīng)用。與其他工程一樣,軟件工程是在環(huán)境不確定和資源受約束的條件下,采用系統(tǒng)性的、規(guī)范化的、可定量的方法進(jìn)行有關(guān)原則的實(shí)施和應(yīng)用,這些原則一般是以往經(jīng)驗(yàn)的積累和提煉,經(jīng)過(guò)時(shí)間檢驗(yàn)并證明是正確的。因此,軟件工程師需要選擇和應(yīng)用適當(dāng)?shù)睦碚?、方法和工具,同時(shí)還要不斷探索新的理論和方法,解決新的問(wèn)題。
(2)軟件工程涉及軟件產(chǎn)品的所有環(huán)節(jié)。人們往往偏重于軟件開發(fā)技術(shù),忽視軟件項(xiàng)目管理的重要性。統(tǒng)計(jì)數(shù)據(jù)表明,導(dǎo)致軟件項(xiàng)目失敗的主要原因幾乎與技術(shù)和工具沒(méi)有任何關(guān)系,更多的是由于不適當(dāng)?shù)墓芾碓斐傻摹?/p>
1.3.2軟件工程的三要素
軟件工程以關(guān)注軟件質(zhì)量為目標(biāo),由過(guò)程、方法和工具三個(gè)要素組成,如圖1.4所示。圖1.4軟件工程的三要素軟件工程的方法為軟件開發(fā)提供了“如何做”的技術(shù),通常包括某種語(yǔ)言或圖形的模型表示方法、良好的設(shè)計(jì)實(shí)踐以及質(zhì)量保證標(biāo)準(zhǔn)等,其中使用最廣泛的兩種方法是傳統(tǒng)的軟件開發(fā)方法和當(dāng)前流行的面向?qū)ο蠓椒ā?/p>
軟件工程的過(guò)程是管理和控制產(chǎn)品質(zhì)量的關(guān)鍵,它定義了技術(shù)方法的采用、工程產(chǎn)品(包括模型、文檔、數(shù)據(jù)、報(bào)告、表格等)的產(chǎn)生、里程碑的建立、質(zhì)量的保證和變更的管理,從而將人員、技術(shù)、組織與管理有機(jī)地結(jié)合在一起,實(shí)現(xiàn)在規(guī)定的時(shí)間和預(yù)算內(nèi)開發(fā)高質(zhì)量軟件的目標(biāo)。軟件工具為軟件工程方法提供了自動(dòng)的或半自動(dòng)的軟件支撐環(huán)境,輔助軟件開發(fā)任務(wù)的完成。現(xiàn)有的軟件工具覆蓋了需求分析、系統(tǒng)建模、代碼生成、程序調(diào)試和軟件測(cè)試等多個(gè)方面,形成了集成化的軟件工程開發(fā)環(huán)境CASE(ComputerAidedSoftwareEngineering,計(jì)算機(jī)輔助軟件工程),提高了開發(fā)效率和軟件質(zhì)量,降低了開發(fā)成本。1.3.3軟件質(zhì)量的特性
軟件工程的一個(gè)重要目標(biāo)是“開發(fā)出高質(zhì)量的軟件”,那么如何看待“軟件質(zhì)量”的含義呢?簡(jiǎn)單地說(shuō),軟件質(zhì)量是軟件產(chǎn)品與明確的和隱含的需求相一致的程度,它通常由一系列的質(zhì)量特性來(lái)描述。例如,除了要求軟件正確運(yùn)行之外,人們可能還希望軟件運(yùn)行的響應(yīng)時(shí)間符合要求、軟件使用方便快捷、程序代碼易于理解等,而“程序代碼易于理解”往往是一種用戶沒(méi)有明確提出的需求,但卻是影響軟件質(zhì)量的重要因素。
需要強(qiáng)調(diào)的是,軟件質(zhì)量并不取決于開發(fā)人員的觀點(diǎn),它通常與用戶、維護(hù)人員等提出的要求密切相關(guān)。圖1.5顯示了不同的軟件質(zhì)量視角。圖1.5不同的軟件質(zhì)量視角1.3.4軟件工程方法
傳統(tǒng)的軟件開發(fā)方法主要是以功能分析和數(shù)據(jù)分析為基礎(chǔ)的結(jié)構(gòu)化方法,它以算法作為基本構(gòu)造單元,強(qiáng)調(diào)自頂向下的功能分解,對(duì)功能和數(shù)據(jù)進(jìn)行了一定程度的分離。結(jié)構(gòu)化設(shè)計(jì)要求控制集中在高層模塊中,不同模塊之間的控制信息需要通過(guò)上、下調(diào)用來(lái)傳遞。隨著軟件系統(tǒng)的日益復(fù)雜,結(jié)構(gòu)化開發(fā)方法暴露出嚴(yán)重的不足,主要體現(xiàn)在以下方面:
(1)由于采用功能與數(shù)據(jù)分離的軟件設(shè)計(jì)結(jié)構(gòu),它與人類的現(xiàn)實(shí)世界環(huán)境有著根本性的差別,因此,人們對(duì)現(xiàn)實(shí)世界的認(rèn)識(shí)與編程之間存在著理解上的鴻溝。
(2)由于強(qiáng)調(diào)自頂向下的功能分解,上下層模塊存在著十分緊密的依賴關(guān)系,因此系統(tǒng)的變動(dòng)和修改十分困難,而且這也在很大程度上限制了軟件的重用。
(3)由于控制集中在高層模塊中,模塊之間的直接通信受到了限制,同時(shí)控制信息的傳送效率低且易出錯(cuò),因此,結(jié)構(gòu)化開發(fā)方法無(wú)法適應(yīng)需要突出控制特性的系統(tǒng)的要求。面向?qū)ο蠓椒◤默F(xiàn)實(shí)世界中客觀存在的事物(即對(duì)象)出發(fā),盡可能地運(yùn)用人類的自然思維方式來(lái)構(gòu)造軟件系統(tǒng)。它運(yùn)用人類在日常的邏輯思維中經(jīng)常采用的思想方法與原則,例如抽象、分類、繼承、聚合、封裝等,將其貫穿于整個(gè)分析和設(shè)計(jì)過(guò)程中,實(shí)現(xiàn)了客觀世界到計(jì)算機(jī)系統(tǒng)的平滑過(guò)渡。當(dāng)前,面向?qū)ο蠓椒ㄒ殉蔀檐浖こ虒W(xué)中的主流方法,其主要優(yōu)勢(shì)在于:
(1)按照人類的自然思維方式,面對(duì)客觀世界建立軟件系統(tǒng)模型,有利于對(duì)問(wèn)題域和系統(tǒng)責(zé)任的理解,也有利于人員的交流。
(2)在整個(gè)開發(fā)過(guò)程中采用統(tǒng)一的概念和模型表示,填平了語(yǔ)言之間的鴻溝,使得開發(fā)活動(dòng)之間能夠平滑過(guò)渡。
(3)在面向?qū)ο蟮姆椒ㄖ?,系統(tǒng)由對(duì)象構(gòu)成,對(duì)象是一個(gè)包含屬性和操作的獨(dú)立單元,對(duì)象之間通過(guò)消息聯(lián)系。這樣的系統(tǒng)一旦出錯(cuò),容易定位和修改,系統(tǒng)的可維護(hù)性好。
(4)對(duì)象所具有的封裝性和信息隱蔽等特性,使其容易實(shí)現(xiàn)軟件復(fù)用。對(duì)象類可以派生出新類,類可以產(chǎn)生實(shí)例對(duì)象,從而實(shí)現(xiàn)了對(duì)象類的數(shù)據(jù)結(jié)構(gòu)和操作代碼的軟構(gòu)件的復(fù)用。
圖1.6顯示了傳統(tǒng)的軟件工程方法與面向?qū)ο蠓椒ǖ谋容^。圖1.6傳統(tǒng)的軟件工程方法與面向?qū)ο蠓椒ǖ谋容^ 1.4軟件工程知識(shí)體系(SWEBOK)
1.4.1SWEBOK項(xiàng)目介紹
1998年,SWECC發(fā)起研究和制定軟件工程知識(shí)體系(SoftwareEngineeringBodyofKnowledge,SWEBOK)的項(xiàng)目。整個(gè)項(xiàng)目分為草人(Strawman)、石人(Stoneman)和鐵人(Ironman)三個(gè)階段。1998年9月完成“草人”版的SWEBOK指南,形成了軟件工程知識(shí)體系的框架;2001年5月完成“石人”版SWEBOK指南,目前最新發(fā)布的是《SWEBOK指南V1.00(試用版)》。
開展SWEBOK項(xiàng)目的目的是為軟件工程學(xué)科的邊界提供一致確認(rèn)的特征,為支持該學(xué)科的知識(shí)體系提供指導(dǎo),其具體目標(biāo)如下:
(1)描述軟件工程學(xué)科的內(nèi)容和特征;
(2)確定軟件工程知識(shí)體系的各個(gè)專題;
(3)促進(jìn)軟件工程知識(shí)體系在世界范圍內(nèi)的共識(shí);
(4)明確軟件工程與其他相關(guān)學(xué)科(諸如計(jì)算機(jī)科學(xué)、項(xiàng)目管理、計(jì)算機(jī)工程、數(shù)學(xué)等)的關(guān)系,并設(shè)定軟件工程學(xué)科的邊界;
(5)為軟件工程課程計(jì)劃的開發(fā)和職業(yè)資格的認(rèn)證提供依據(jù)。1.4.2SWEBOK的組成
SWEBOK將軟件工程知識(shí)分解成若干知識(shí)域(KnowledgeAreas)及其組成部分,并將其組織成一個(gè)多級(jí)層次化的體系結(jié)構(gòu),以此確定軟件工程學(xué)科的內(nèi)容和邊界。
在SWEBOK中,軟件工程知識(shí)體系被劃分為10個(gè)知識(shí)域,即軟件需求、軟件設(shè)計(jì)、軟件構(gòu)造、軟件測(cè)試、軟件維護(hù)、軟件配置管理、軟件工程管理、軟件工程過(guò)程、軟件工程工具與方法、軟件質(zhì)量,其組成結(jié)構(gòu)如圖1.7所示。圖1.7軟件工程知識(shí)體系的組成
1.軟件需求(SoftwareRequirements)
需求是解決現(xiàn)實(shí)世界問(wèn)題所必須展示的特性。SWEBOK將軟件需求知識(shí)域進(jìn)一步劃分為6個(gè)知識(shí)子域,分別是需求工程過(guò)程、需求獲取、需求分析、需求規(guī)格說(shuō)明、需求驗(yàn)證和需求管理。
(1)需求工程過(guò)程說(shuō)明需求工程與整個(gè)軟件工程過(guò)程的吻合程度,包括過(guò)程模型、過(guò)程參與者、過(guò)程支持與管理、過(guò)程質(zhì)量改進(jìn)等內(nèi)容;
(2)需求獲取涉及從何處獲取以及如何收集需求,包括需求來(lái)源和獲取技術(shù)等內(nèi)容;
(3)需求分析涉及分析需求的過(guò)程,如發(fā)現(xiàn)和解決需求之間的沖突、發(fā)現(xiàn)系統(tǒng)邊界及其與周圍環(huán)境的交互、將軟件需求細(xì)化成系統(tǒng)需求等,包括需求分類、概念模型、體系結(jié)構(gòu)設(shè)計(jì)以及需求分配和需求協(xié)商等內(nèi)容;
(4)需求規(guī)格說(shuō)明描述了需求文檔的結(jié)構(gòu)、質(zhì)量和確認(rèn),包括系統(tǒng)需求定義文檔和軟件需求規(guī)格說(shuō)明書兩個(gè)部分;
(5)需求驗(yàn)證的目的是在提交需求分析結(jié)果之前找出問(wèn)題,保證需求文檔正確地定義了正確的系統(tǒng),包括需求評(píng)審、開發(fā)原型、模型驗(yàn)證和驗(yàn)收測(cè)試等內(nèi)容;
(6)需求管理是一項(xiàng)跨越整個(gè)軟件生命周期的活動(dòng),主要涉及變更管理和需求維護(hù),以保證需求說(shuō)明準(zhǔn)確地反映了待開發(fā)或已開發(fā)軟件,它包括變更管理、需求屬性和需求跟蹤等內(nèi)容。
2.軟件設(shè)計(jì)(SoftwareDesign)
根據(jù)IEEE的定義,設(shè)計(jì)既是定義系統(tǒng)或構(gòu)件的結(jié)構(gòu)、組成、接口和其他特征的過(guò)程,也是該過(guò)程的結(jié)果。從過(guò)程來(lái)看,軟件設(shè)計(jì)是軟件生命周期中的一個(gè)活動(dòng),其任務(wù)是分析軟件需求,從而生成有關(guān)系統(tǒng)內(nèi)部結(jié)構(gòu)與組成的描述,并以此作為軟件構(gòu)造的基礎(chǔ)。從結(jié)果來(lái)看,軟件設(shè)計(jì)必須描述系統(tǒng)的體系結(jié)構(gòu),即系統(tǒng)被分解和組織成各個(gè)構(gòu)件的方式以及這些構(gòu)件之間的接口,并且詳細(xì)描述這些構(gòu)件以方便后續(xù)的構(gòu)造。
SWEBOK將軟件設(shè)計(jì)知識(shí)域進(jìn)一步劃分為6個(gè)知識(shí)子域,分別是基本概念、關(guān)鍵問(wèn)題、構(gòu)成與體系結(jié)構(gòu)、質(zhì)量分析與評(píng)價(jià)、設(shè)計(jì)符號(hào)以及設(shè)計(jì)策略與方法。
(1)軟件設(shè)計(jì)基本概念是理解軟件設(shè)計(jì)的作用和范圍的基礎(chǔ),包括軟件設(shè)計(jì)的一般概念、軟件設(shè)計(jì)的內(nèi)容、設(shè)計(jì)過(guò)程和可采用的技術(shù)等;
(2)軟件設(shè)計(jì)關(guān)鍵問(wèn)題包括并發(fā)性、事件控制與處理、分布性、錯(cuò)誤和異常處理、交互系統(tǒng)和持久性等問(wèn)題;
(3)軟件構(gòu)成與體系結(jié)構(gòu)主要包括體系結(jié)構(gòu)風(fēng)格、設(shè)計(jì)模式、程序及其框架的體系;
(4)軟件設(shè)計(jì)質(zhì)量分析與評(píng)價(jià)包括軟件設(shè)計(jì)的質(zhì)量屬性、質(zhì)量分析、評(píng)估工具與度量;
(5)軟件設(shè)計(jì)符號(hào)包括結(jié)構(gòu)描述和行為描述;
(6)軟件設(shè)計(jì)策略與方法包括一般設(shè)計(jì)策略、面向功能的方法、面向?qū)ο蟮姆椒?、以?shù)據(jù)結(jié)構(gòu)為中心的設(shè)計(jì),以及諸如形式化與轉(zhuǎn)換方法等其他方法。
3.軟件構(gòu)造(SoftwareConstruction)
軟件構(gòu)造是軟件工程的基本活動(dòng),其任務(wù)是通過(guò)編碼、驗(yàn)證和單元測(cè)試構(gòu)造出有意義的、可工作的軟件。進(jìn)一步分解軟件構(gòu)造知識(shí)域的首要方法是認(rèn)識(shí)對(duì)軟件構(gòu)造最具影響的4項(xiàng)原則,即降低復(fù)雜性、預(yù)知多樣性、結(jié)構(gòu)化驗(yàn)證和使用外部標(biāo)準(zhǔn);其次是認(rèn)識(shí)軟件構(gòu)造的3種方法,即語(yǔ)言方法、形式化方法和可視化方法。
(1)降低復(fù)雜性涉及軟件構(gòu)造過(guò)程中用于減少?gòu)?fù)雜性的3個(gè)主要技術(shù),即消除復(fù)雜性、自動(dòng)消除復(fù)雜性以及使復(fù)雜性局部化;
(2)預(yù)知多樣性是預(yù)測(cè)軟件在整個(gè)生命周期可能發(fā)生的變化,包括通用化、實(shí)驗(yàn)法和局部化3種技術(shù);
(3)結(jié)構(gòu)化驗(yàn)證是指以模塊化方式構(gòu)造軟件,以便能夠在單元測(cè)試和后續(xù)的測(cè)試活動(dòng)中容易地發(fā)現(xiàn)錯(cuò)誤和遺漏;
(4)由專用語(yǔ)言構(gòu)造的軟件在長(zhǎng)期的使用過(guò)程中會(huì)遇到嚴(yán)重的障礙,因此,應(yīng)當(dāng)采用符合外部標(biāo)準(zhǔn)的構(gòu)造語(yǔ)言(如一般編程語(yǔ)言),或者提供足夠詳細(xì)的語(yǔ)法說(shuō)明,以方便人們理解。
4.軟件測(cè)試(SoftwareTesting)
軟件測(cè)試是采用從無(wú)限執(zhí)行域中適當(dāng)挑選有限測(cè)試用例集,對(duì)照預(yù)期指定的行為,動(dòng)態(tài)驗(yàn)證程序?qū)嶋H行為的過(guò)程,包括基本概念和定義、測(cè)試級(jí)別、測(cè)試技術(shù)、測(cè)試相關(guān)度量和測(cè)試過(guò)程管理。
(1)基本概念和定義包括測(cè)試術(shù)語(yǔ)、測(cè)試?yán)碚摶A(chǔ)以及測(cè)試與其他活動(dòng)的關(guān)系;
(2)測(cè)試級(jí)別包括單元測(cè)試、集成測(cè)試和系統(tǒng)測(cè)試3個(gè)階段,而從測(cè)試的目標(biāo)劃分,還可以分為驗(yàn)收測(cè)試、安裝測(cè)試、a測(cè)試與b測(cè)試、功能測(cè)試、衰退測(cè)試、性能測(cè)試、壓力測(cè)試、回歸測(cè)試、恢復(fù)測(cè)試、配置測(cè)試和可用性測(cè)試等;
(3)測(cè)試技術(shù)包括測(cè)試用例選取標(biāo)準(zhǔn)、測(cè)試技術(shù)以及如何選擇和組合這些技術(shù);
(4)測(cè)試相關(guān)度量包括評(píng)價(jià)所測(cè)試的程序和評(píng)價(jià)所執(zhí)行的測(cè)試;
(5)測(cè)試過(guò)程管理涉及與測(cè)試管理相關(guān)的問(wèn)題和測(cè)試活動(dòng)。
5.軟件維護(hù)(SoftwareMaintenance)
軟件一旦交付使用,就進(jìn)入維護(hù)階段,其任務(wù)包括糾正軟件運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤、改進(jìn)軟件系統(tǒng)以便適應(yīng)環(huán)境的變化和滿足用戶新的需求等。軟件維護(hù)包括基本概念、維護(hù)過(guò)程、關(guān)鍵問(wèn)題和維護(hù)技術(shù)這4個(gè)知識(shí)子域。
(1)基本概念涉及軟件維護(hù)的定義、類型和問(wèn)題;
(2)維護(hù)過(guò)程描述基于IEEE1219和ISO/IEC14764標(biāo)準(zhǔn)的過(guò)程模型以及有關(guān)活動(dòng);
(3)關(guān)鍵問(wèn)題涉及軟件維護(hù)過(guò)程中的技術(shù)、管理、成本、預(yù)算和度量等方面的問(wèn)題;
(4)維護(hù)技術(shù)包括程序理解、再工程、逆向工程和影響分析等。
6.軟件配置管理(SoftwareConfigurationManagement)
軟件配置管理在明確的時(shí)間點(diǎn)上確定系統(tǒng)的配置,從而保證在整個(gè)系統(tǒng)生命周期中系統(tǒng)地控制配置的變化并維護(hù)配置的完整性和可跟蹤性。軟件配置管理包括配置過(guò)程管理、配置識(shí)別、配置控制、配置狀態(tài)報(bào)告、配置審計(jì)以及軟件發(fā)布管理與交付6個(gè)知識(shí)子域。
(1)配置過(guò)程管理包括配置組織環(huán)境、配置約束與指南、配置計(jì)劃與監(jiān)督等;
(2)配置識(shí)別就是確定要控制的配置項(xiàng),為配置項(xiàng)及其版本建立標(biāo)識(shí)模式,并建立用于采集和管理這些配置項(xiàng)的工具和技術(shù);
(3)配置控制對(duì)軟件生命周期中的變化進(jìn)行管理,包括申請(qǐng)、評(píng)估和批準(zhǔn)軟件變更、實(shí)施變更以及轉(zhuǎn)移和放棄變更等3個(gè)方面;
(4)配置狀態(tài)報(bào)告用于記錄和報(bào)告軟件配置管理所需的信息;
(5)配置審計(jì)由軟件功能配置審計(jì)、軟件物理配置審計(jì)和軟件基線審計(jì)等組成;
(6)軟件發(fā)布管理與交付包括軟件建立和軟件發(fā)布管理。
7.軟件工程管理(SoftwareEngineeringManagement)
軟件工程管理包括組織管理、過(guò)程/項(xiàng)目管理、軟件工程度量這3個(gè)知識(shí)子域。
(1)組織管理由策略管理、個(gè)人管理、溝通管理、協(xié)調(diào)管理和采購(gòu)管理等組成;
(2)過(guò)程/項(xiàng)目管理包括項(xiàng)目啟動(dòng)和范圍定義、計(jì)劃的制定、規(guī)定的建立、項(xiàng)目評(píng)審和評(píng)價(jià)、項(xiàng)目收尾等;
(3)軟件工程度量涉及軟件度量的基本原理,包括度量目標(biāo)、度量選擇、軟件度量及其發(fā)展、數(shù)據(jù)收集和軟件測(cè)量模型。
8.軟件工程過(guò)程(SoftwareEngineeringProcess)
軟件工程過(guò)程涉及軟件工程過(guò)程本身的定義、實(shí)施、度量、管理、變更和改進(jìn),可進(jìn)一步分為軟件過(guò)程概念、過(guò)程基礎(chǔ)設(shè)施、過(guò)程度量、過(guò)程定義、定性分析以及過(guò)程實(shí)施與變更這6個(gè)知識(shí)子域。
(1)軟件過(guò)程概念包括軟件工程過(guò)程的活動(dòng)和術(shù)語(yǔ);
(2)過(guò)程基礎(chǔ)設(shè)施包括建立軟件工程過(guò)程小組和經(jīng)驗(yàn)工廠,從而為過(guò)程分析、實(shí)施和改進(jìn)提供有力的支持;
(3)過(guò)程度量描述軟件工程過(guò)程的度量方法和范例;
(4)過(guò)程定義描述過(guò)程定義類型、生命周期框架模型和軟件過(guò)程模型等有關(guān)知識(shí),并說(shuō)明這些定義的符號(hào)、方法與自動(dòng)化;
(5)定性分析主要包括過(guò)程定義評(píng)審和根本原因分析;
(6)過(guò)程實(shí)施與變更包括過(guò)程實(shí)施與變更的范例、指南和效果評(píng)價(jià)。
9.軟件工程工具與方法(SoftwareEngineeringToolsandMethods)
軟件工程工具與方法包括軟件開發(fā)工具和開發(fā)方法。其中:軟件開發(fā)工具是支持軟件開發(fā)過(guò)程的計(jì)算機(jī)工具;軟件開發(fā)方法是指軟件開發(fā)活動(dòng)的組織方法,目的是系統(tǒng)化地組織開發(fā)活動(dòng)以實(shí)現(xiàn)成功最大化。
(1)軟件開發(fā)工具包括需求分析、設(shè)計(jì)、構(gòu)造、測(cè)試、維護(hù)、過(guò)程、質(zhì)量、配置、管理、基礎(chǔ)設(shè)施和其他活動(dòng)所需的各種工具;
(2)軟件開發(fā)方法包括啟發(fā)式方法、形式化方法、原型法和其他混合方法等。
10.軟件質(zhì)量(SoftwareQuality)
軟件質(zhì)量是貫穿于整個(gè)軟件工程活動(dòng)的關(guān)注焦點(diǎn),包括軟件質(zhì)量概念、軟件質(zhì)量保證(SoftwareQualityAssurance,SQA)與驗(yàn)證和確認(rèn)(VerificationandValidation,V&V)的目的與計(jì)劃、SQA與V&V的活動(dòng)與技術(shù)適用于SQA與V&V的度量。
(1)軟件質(zhì)量概念包括質(zhì)量值的度量、ISO9126的質(zhì)量描述、可靠性、特殊類型系統(tǒng)與質(zhì)量要求;
(2)?SQA與V&V的目的與計(jì)劃包括通用計(jì)劃活動(dòng)、SQA計(jì)劃和V&V計(jì)劃;
(3)?SQA與V&V的活動(dòng)與技術(shù)用于描述SQA與V&V的活動(dòng)和計(jì)劃,包括靜態(tài)技術(shù)、動(dòng)態(tài)技術(shù)以及其他的SQA與V&V測(cè)試技術(shù);
(4)適用于SQA與V&V的度量描述用于SQA與V&V的度量技術(shù),包括度量原理、測(cè)量、度量分析技術(shù)、缺陷特征以及有關(guān)數(shù)據(jù)使用等。1.4.3軟件工程與其他相關(guān)學(xué)科的關(guān)系
軟件工程是一門交叉性的工程學(xué)科,如圖1.8所示,它將計(jì)算機(jī)科學(xué)、數(shù)學(xué)、工程科學(xué)和管理科學(xué)等基本原理應(yīng)用于軟件開發(fā)的工程實(shí)踐中,并借鑒傳統(tǒng)工程的原則和方法,以系統(tǒng)的、可控的、有效的方式產(chǎn)生高質(zhì)量的軟件。圖1.8軟件工程與其他相關(guān)學(xué)科的關(guān)系軟件工程以計(jì)算機(jī)科學(xué)和數(shù)學(xué)為基礎(chǔ),將這些學(xué)科的基本原理應(yīng)用于構(gòu)造軟件的模型與算法,力求提出更系統(tǒng)化和更形式化的軟件開發(fā)方法,并采用適當(dāng)?shù)姆椒?yàn)證即將開發(fā)的軟件。
然而,正確的軟件開發(fā)實(shí)踐不僅僅需要計(jì)算學(xué)科的基本原理,更重要的是將工程化的原則和方法應(yīng)用于軟件的分析與評(píng)價(jià)、規(guī)格說(shuō)明、設(shè)計(jì)、實(shí)現(xiàn)和演化等過(guò)程。軟件工程運(yùn)用工程科學(xué)的基本原理,結(jié)合特定領(lǐng)域的基礎(chǔ)知識(shí)和相關(guān)的專業(yè)知識(shí),通過(guò)評(píng)估成本與確定權(quán)衡,提出合理的問(wèn)題解決方案,在軟件開發(fā)實(shí)踐的基礎(chǔ)上總結(jié)制定標(biāo)準(zhǔn)與規(guī)范,重用設(shè)計(jì)和設(shè)計(jì)制品。事實(shí)證明,成功的軟件開發(fā)往往離不開規(guī)范化的開發(fā)管理。軟件工程將管理科學(xué)應(yīng)用于軟件開發(fā)的計(jì)劃、資源、質(zhì)量、成本等管理,協(xié)調(diào)和控制整個(gè)過(guò)程與項(xiàng)目的進(jìn)展,組織和建設(shè)開發(fā)團(tuán)隊(duì),實(shí)施風(fēng)險(xiǎn)分析和變更管理,最終實(shí)現(xiàn)軟件開發(fā)的目標(biāo)。
需要強(qiáng)調(diào)的是,由于軟件自身的特殊性,軟件工程與傳統(tǒng)工程存在著明顯的區(qū)別,它更強(qiáng)調(diào)抽象、建模、信息組織與表示以及變更管理,另外還包括軟件開發(fā)過(guò)程的質(zhì)量控制活動(dòng),而且持續(xù)的演變(即“維護(hù)”)也尤為重要。 1.5軟件過(guò)程
1.5.1軟件過(guò)程的概念
1.任務(wù)思維與過(guò)程思維
在軟件發(fā)展的前期階段,人們強(qiáng)調(diào)軟件開發(fā)的結(jié)果而忽略軟件開發(fā)的過(guò)程,所采用的開發(fā)模式如圖1.9所示。在這種任務(wù)思維的模式中,整個(gè)軟件開發(fā)過(guò)程仿佛是一個(gè)混沌的“黑盒子”,軟件需求必須在開發(fā)初期完全確定下來(lái),用戶的交互只能發(fā)生在確定需求之時(shí)和產(chǎn)品發(fā)布之后,這種要求顯然不符合軟件開發(fā)的實(shí)際情況。軟件更像是一種嵌入式的數(shù)字化知識(shí),其形成是一個(gè)通過(guò)交互對(duì)話和抽象理解而不斷演化的過(guò)程,尤其是在軟件系統(tǒng)規(guī)模日益擴(kuò)大的情況下,軟件開發(fā)必須在適應(yīng)需求不斷變化的過(guò)程中迭代式地演進(jìn)。圖1.9軟件開發(fā)的任務(wù)思維模式
WattsHumphrey首先將過(guò)程管理的原則和思想引入到軟件開發(fā)之中,他認(rèn)為:為了解決軟件的問(wèn)題,首要的步驟是將整個(gè)軟件開發(fā)任務(wù)看做是一個(gè)可控的、可度量的和可改進(jìn)的過(guò)程。在圖1.10所示的過(guò)程思維模式中,整個(gè)軟件開發(fā)過(guò)程被劃分成若干可管理的開發(fā)階段,人們可以“聽見”過(guò)程的聲音,并讓用戶的聲音與過(guò)程的聲音相吻合。圖1.10軟件開發(fā)的過(guò)程思維模式
2.軟件過(guò)程的定義
在軟件工程的三要素中,軟件過(guò)程將人員、技術(shù)、組織與管理有機(jī)地結(jié)合在一起,下面給出的定義說(shuō)明了軟件過(guò)程的“黏合”性質(zhì):
軟件過(guò)程是軟件工程人員為了獲得軟件產(chǎn)品而在軟件工具的支持下實(shí)施的一系列軟件工程活動(dòng)。
圖1.10顯示了軟件過(guò)程的基本組件與運(yùn)行機(jī)制。其中軟件過(guò)程的基本元素由一系列軟件工程活動(dòng)和活動(dòng)之間的關(guān)系組成,通過(guò)一系列順序和步驟執(zhí)行這些活動(dòng),可以產(chǎn)生諸如代碼、文檔和數(shù)據(jù)等各種過(guò)程制品,最終取得預(yù)期的過(guò)程結(jié)果。另外,軟件過(guò)程需要參與活動(dòng)的人員和活動(dòng)工具等過(guò)程資源的支持,并通過(guò)反饋和度量過(guò)程的結(jié)果來(lái)實(shí)現(xiàn)過(guò)程的可持續(xù)改進(jìn)。
3.軟件過(guò)程的基本活動(dòng)
由于軟件的復(fù)雜性和多樣性,軟件開發(fā)并沒(méi)有一個(gè)理想的過(guò)程,不同的開發(fā)組織或者不同的軟件類型往往存在著完全不同的軟件開發(fā)過(guò)程。盡管如此,一般的軟件過(guò)程都包括問(wèn)題提出、軟件需求規(guī)格說(shuō)明、軟件設(shè)計(jì)、軟件實(shí)現(xiàn)、軟件確認(rèn)和軟件演化等基本活動(dòng)。
1)問(wèn)題提出
軟件產(chǎn)品往往起源于人們的設(shè)想或者現(xiàn)實(shí)問(wèn)題,但是這些設(shè)想或問(wèn)題的描述可能是模糊的、不合理的或不可能實(shí)現(xiàn)的。因此,人們通過(guò)開展技術(shù)探索和市場(chǎng)調(diào)查等活動(dòng),研究系統(tǒng)的可行性和可能的解決方案,確定待開發(fā)系統(tǒng)的總體目標(biāo)和范圍。在可行性分析過(guò)程中,人們需要研究現(xiàn)有的軟件和硬件技術(shù)是否能夠?qū)崿F(xiàn)待開發(fā)系統(tǒng)的要求、實(shí)際開發(fā)是否虧本等問(wèn)題,從技術(shù)、市場(chǎng)、效益等方面確定該系統(tǒng)是否值得開發(fā)。
2)軟件需求規(guī)格說(shuō)明
在完成可行性研究和軟件計(jì)劃之后,系統(tǒng)分析人員開始著手分析、整理和提煉所收集到的客戶需求,建立完整的需求分析模型,編寫軟件需求規(guī)格說(shuō)明。最后,通過(guò)評(píng)審需求規(guī)格說(shuō)明,確保對(duì)用戶需求達(dá)到共同的理解與認(rèn)識(shí)。
軟件需求規(guī)格說(shuō)明是將需求分析活動(dòng)中獲得的信息以文檔的形式確定下來(lái),它明確地描述了軟件的功能,列出軟件必須滿足的所有約束條件,并定義軟件的輸入和輸出接口。
3)軟件設(shè)計(jì)
軟件設(shè)計(jì)的目標(biāo)是決定軟件怎么做,設(shè)計(jì)人員根據(jù)軟件需求規(guī)格說(shuō)明文檔,確定軟件的體系結(jié)構(gòu),再進(jìn)一步設(shè)計(jì)每個(gè)系統(tǒng)部件的實(shí)現(xiàn)算法、數(shù)據(jù)結(jié)構(gòu)和接口等,編寫軟件設(shè)計(jì)說(shuō)明書,并組織進(jìn)行設(shè)計(jì)評(píng)審。
軟件設(shè)計(jì)說(shuō)明書是將體系結(jié)構(gòu)設(shè)計(jì)和詳細(xì)設(shè)計(jì)的結(jié)果以文檔的形式描述出來(lái)。其中,體系結(jié)構(gòu)設(shè)計(jì)確定組成該系統(tǒng)的所有子系統(tǒng)及其相互之間的關(guān)系,詳細(xì)設(shè)計(jì)確定每一個(gè)子系統(tǒng)的接口、數(shù)據(jù)結(jié)構(gòu)和實(shí)現(xiàn)算法。
4)軟件實(shí)現(xiàn)
軟件實(shí)現(xiàn)是將所設(shè)計(jì)的各個(gè)子系統(tǒng)編寫成計(jì)算機(jī)可接受的程序代碼。與實(shí)現(xiàn)相關(guān)的文檔就是源程序以及合適的注釋。
5)軟件確認(rèn)
軟件確認(rèn)是檢查和驗(yàn)證所開發(fā)的系統(tǒng)是否符合客戶的期望,它涉及從用戶需求定義到軟件實(shí)現(xiàn)的每一個(gè)階段的審查和評(píng)審,以及程序?qū)崿F(xiàn)之后的軟件測(cè)試。軟件測(cè)試首先測(cè)試系統(tǒng)的各個(gè)組件,然后將各個(gè)組件集成在一起進(jìn)行測(cè)試,最后使用客戶的數(shù)據(jù)測(cè)試整個(gè)產(chǎn)品的功能和性能是否滿足要求。
在軟件確認(rèn)的過(guò)程中,一旦發(fā)現(xiàn)軟件有缺陷,開發(fā)人員就需要回到前面的開發(fā)階段進(jìn)行修改,然后再進(jìn)行修改后的確認(rèn),這是一個(gè)不斷反復(fù)的過(guò)程。
6)軟件演化
人們一直習(xí)慣于將軟件過(guò)程劃分為軟件開發(fā)和軟件維護(hù)兩部分。軟件開發(fā)覆蓋從概念的提出到形成一個(gè)可運(yùn)行系統(tǒng)的整個(gè)過(guò)程;軟件維護(hù)則是系統(tǒng)投入使用后所產(chǎn)生的修改。于是,人們總是將軟件開發(fā)視為一項(xiàng)富有創(chuàng)造性的工作,而認(rèn)為軟件維護(hù)工作缺少挑戰(zhàn)性和吸引力。
今天,大部分的軟件都是在已有組件或原有系統(tǒng)的基礎(chǔ)上開發(fā)出來(lái)的,開發(fā)與維護(hù)的界限越來(lái)越不清晰,因此整個(gè)軟件過(guò)程被看做是一個(gè)不斷演化的過(guò)程。
4.軟件過(guò)程的制品
在軟件過(guò)程的不同階段,有可能產(chǎn)生各種不同的軟件制品,諸如需求規(guī)格說(shuō)明、設(shè)計(jì)說(shuō)明、源程序與構(gòu)件、測(cè)試用例、用戶手冊(cè)以及各種開發(fā)管理文檔等。圖1.11列出了軟件過(guò)程的一些基本活動(dòng)以及所產(chǎn)生的主要過(guò)程制品。圖1.11軟件過(guò)程的基本活動(dòng)及其制品軟件過(guò)程制品涉及軟件需求、軟件設(shè)計(jì)、軟件實(shí)現(xiàn)、軟件測(cè)試和軟件實(shí)施等活動(dòng)產(chǎn)生的結(jié)果,這些制品通常在不同的開發(fā)活動(dòng)之間進(jìn)行轉(zhuǎn)移和演進(jìn),其主要內(nèi)容包括:
(1)軟件需求制品:構(gòu)想文檔描述了所開發(fā)系統(tǒng)的整個(gè)構(gòu)想,形成了投資方和開發(fā)組織對(duì)項(xiàng)目范圍的共同認(rèn)定;需求模型涉及系統(tǒng)原型和描述系統(tǒng)需求的各種模型,諸如用例模型和領(lǐng)域模型等;軟件需求規(guī)格說(shuō)明清楚地描述了所開發(fā)軟件的功能、性能和接口等要求。
(2)軟件設(shè)計(jì)制品:軟件體系結(jié)構(gòu)文檔描述系統(tǒng)的基本構(gòu)件及其之間的關(guān)系;設(shè)計(jì)模型反映各個(gè)構(gòu)件的內(nèi)部結(jié)構(gòu)和行為信息。
(3)軟件實(shí)現(xiàn)制品:源代碼表示構(gòu)件的具體實(shí)現(xiàn);目標(biāo)代碼是源代碼編譯產(chǎn)生的文件;可執(zhí)行構(gòu)件包括定制的組件、商業(yè)組件或遺留組件等。
(4)軟件測(cè)試制品:測(cè)試規(guī)程描述測(cè)試運(yùn)行環(huán)境、測(cè)試方法和測(cè)試步驟;測(cè)試用例描述測(cè)試的輸入數(shù)據(jù)和預(yù)期的輸出結(jié)果等;軟件測(cè)試報(bào)告記錄所檢測(cè)的軟件缺陷,并分析這些缺陷的嚴(yán)重程度。
(5)軟件實(shí)施制品:相關(guān)的運(yùn)行時(shí)文件包括可執(zhí)行軟件、安裝腳本以及使用軟件所需的特定目標(biāo)數(shù)據(jù)等;用戶手冊(cè)是用戶使用已交付的軟件所需要的參考文檔。
(6)開發(fā)管理制品:涉及與開發(fā)過(guò)程的計(jì)劃和執(zhí)行有關(guān)的文檔,這些文檔通常由項(xiàng)目相關(guān)人員采用變更分析和正式評(píng)審的方式進(jìn)行評(píng)價(jià),其主要內(nèi)容包括:
●工作分解結(jié)構(gòu)實(shí)現(xiàn)對(duì)項(xiàng)目活動(dòng)的分解,為項(xiàng)目計(jì)劃和財(cái)務(wù)分析等奠定基礎(chǔ);
●業(yè)務(wù)案例提供必要的信息來(lái)確定項(xiàng)目是否值得投資;
●發(fā)布規(guī)格說(shuō)明描述軟件發(fā)布版本的范圍、計(jì)劃和基線目標(biāo);
●軟件開發(fā)計(jì)劃涉及整個(gè)軟件開發(fā)的資源、成本、進(jìn)度、質(zhì)量等的具體規(guī)劃;
●發(fā)布版本說(shuō)明記錄每次發(fā)布的結(jié)果;●狀態(tài)評(píng)估反映項(xiàng)目進(jìn)展的實(shí)際情況,包括風(fēng)險(xiǎn)評(píng)估、質(zhì)量指標(biāo)和管理指標(biāo)等;
●軟件變更申請(qǐng)描述軟件基線的變更內(nèi)容和結(jié)果;
●實(shí)施文檔涉及項(xiàng)目收尾、市場(chǎng)計(jì)劃、用戶培訓(xùn)和系統(tǒng)演示等內(nèi)容;
●環(huán)境包括系統(tǒng)的硬件和軟件配置、軟件開發(fā)工具以及相應(yīng)的間接培訓(xùn)等。1.5.2軟件過(guò)程模型
軟件過(guò)程模型描述軟件過(guò)程的整體框架,它是軟件過(guò)程的一種抽象表示。下面介紹一些常見的軟件過(guò)程模型,這些模型以不同的方式定義了軟件過(guò)程活動(dòng)的流程框架,并在實(shí)際應(yīng)用中體現(xiàn)出各自的特點(diǎn)。
1.瀑布模型
在20世紀(jì)80年代之前,瀑布模型一直是唯一被廣泛采用的生命周期模型,現(xiàn)在它仍然是軟件工程中應(yīng)用最廣泛的過(guò)程模型。圖1.12所示為傳統(tǒng)的瀑布模型。圖1.12傳統(tǒng)的瀑布模型按照傳統(tǒng)的瀑布模型來(lái)開發(fā)軟件,有如下幾個(gè)特點(diǎn):
(1)階段間具有順序性和依賴性。階段間具有順序性和依賴性特點(diǎn)有兩重含義:①必須等前一階段的工作完成之后,才能開始后一階段的工作;②前一階段的輸出文檔就是后一階段的輸入文檔。因此,只有前一階段的輸出文檔正確,后一階段的工作才能獲得正確的結(jié)果。可是,萬(wàn)一在生命周期某一階段發(fā)現(xiàn)了問(wèn)題,很可能需要追溯到在它之前的一些階段,必要時(shí)還要修改前面已經(jīng)完成的文檔。然而,在生命周期后期改正早期階段造成的問(wèn)題,需要付出很高的代價(jià),這就好像水已經(jīng)從瀑布頂部流瀉到底部,再想使它返回到高處需要付出很大能量一樣。
(2)推遲實(shí)現(xiàn)的觀點(diǎn)。缺乏軟件工程實(shí)踐經(jīng)驗(yàn)的軟件開發(fā)人員,接到軟件開發(fā)任務(wù)以后常常急于求成,總想盡早開始編寫程序。但是,實(shí)踐表明,對(duì)于規(guī)模較大的軟件項(xiàng)目來(lái)說(shuō),往往編碼開始得越早,最終完成開發(fā)工作所需要的時(shí)間反而越長(zhǎng)。這是因?yàn)?,前面階段的工作沒(méi)做或做得不扎實(shí),過(guò)早地考慮進(jìn)行程序?qū)崿F(xiàn),往往導(dǎo)致大量返工,有時(shí)甚至發(fā)生無(wú)法彌補(bǔ)的問(wèn)題,帶來(lái)災(zāi)難性的后果。
瀑布模型在編碼之前設(shè)置了系統(tǒng)分析與系統(tǒng)設(shè)計(jì)這兩個(gè)階段,用于分析與設(shè)計(jì)階段的基本任務(wù)規(guī)定。在這兩個(gè)階段主要考慮目標(biāo)系統(tǒng)的邏輯模型,不涉及軟件的物理實(shí)現(xiàn)。
清楚地區(qū)分邏輯設(shè)計(jì)與物理設(shè)計(jì),盡可能推遲程序的物理實(shí)現(xiàn),是按照瀑布模型開發(fā)軟件的一條重要的指導(dǎo)思想。
(3)質(zhì)量保證的觀點(diǎn)。軟件工程的基本目標(biāo)是優(yōu)質(zhì)、高產(chǎn)。為了保證所開發(fā)的軟件的質(zhì)量,在瀑布模型的每個(gè)階段都應(yīng)堅(jiān)持以下兩個(gè)重要做法:
①每個(gè)階段都必須完成規(guī)定的文檔,沒(méi)有交出合格的文檔就是沒(méi)有完成該階段的任務(wù)。完整、準(zhǔn)確的合格文檔不僅是軟件開發(fā)時(shí)期各類人員之間相互通信的媒介,也是運(yùn)行時(shí)期對(duì)軟件進(jìn)行維護(hù)的重要依據(jù)。
②每個(gè)階段結(jié)束前都要對(duì)所完成的文檔進(jìn)行評(píng)審,以便盡早發(fā)現(xiàn)問(wèn)題,改正錯(cuò)誤。事實(shí)上,越是早期階段犯下的錯(cuò)誤,暴露出來(lái)的時(shí)間就越晚,排除故障或改正錯(cuò)誤所需付出的代價(jià)也越高。因此,及時(shí)審查是保證軟件質(zhì)量、降低軟件成本的重要措施。傳統(tǒng)的瀑布模型過(guò)于理想化,事實(shí)上,人在工作過(guò)程中不可能不犯錯(cuò)誤。在設(shè)計(jì)階段可能發(fā)現(xiàn)規(guī)格說(shuō)明文檔中的錯(cuò)誤,而設(shè)計(jì)上的缺陷或錯(cuò)誤可能在實(shí)現(xiàn)過(guò)程中顯現(xiàn)出來(lái);在綜合測(cè)試階段將發(fā)現(xiàn)需求分析、設(shè)計(jì)或編碼階段的許多錯(cuò)誤。因此,實(shí)際的瀑布模型是帶“反饋環(huán)”的,如圖1.13所示(圖中實(shí)線箭頭表示開發(fā)過(guò)程,虛線箭頭表示維護(hù)過(guò)程)。當(dāng)在后面階段發(fā)現(xiàn)前面階段的錯(cuò)誤時(shí),需要沿圖中左側(cè)的反饋線返回前面的階段,修正前面階段的產(chǎn)品之后再回來(lái)繼續(xù)完成后面階段的任務(wù)。圖1.13瀑布模型的開發(fā)過(guò)程與維護(hù)過(guò)程瀑布模型有許多優(yōu)點(diǎn):可強(qiáng)迫開發(fā)人員采用規(guī)范的方法(例如結(jié)構(gòu)化技術(shù));嚴(yán)格地規(guī)定了每個(gè)階段必須提交的文檔;要求每個(gè)階段交出的所有產(chǎn)品都必須經(jīng)過(guò)質(zhì)量保證小組的仔細(xì)驗(yàn)證。
各個(gè)階段產(chǎn)生的文檔是維護(hù)軟件產(chǎn)品時(shí)必不可少的,沒(méi)有文檔的軟件幾乎是不可能維護(hù)的,遵守瀑布模型的文檔約束,將使軟件維護(hù)變得比較容易一些。由于絕大部分軟件預(yù)算都花費(fèi)在軟件維護(hù)上,因此,使軟件變得比較容易維護(hù)就能顯著降低軟件預(yù)算??梢哉f(shuō),瀑布模型的成功在很大程度上是由于它基本上是一種文檔驅(qū)動(dòng)的模型。但是,“瀑布模型是由文檔驅(qū)動(dòng)的”這個(gè)事實(shí)也是它的一個(gè)主要缺點(diǎn)。在可運(yùn)行的軟件產(chǎn)品交付給用戶之前,用戶只能通過(guò)文檔來(lái)了解產(chǎn)品是什么樣的。僅僅通過(guò)寫在紙上的靜態(tài)的規(guī)格說(shuō)明,很難全面、正確地認(rèn)識(shí)動(dòng)態(tài)的軟件產(chǎn)品。而且事實(shí)證明,一旦一個(gè)用戶開始使用一個(gè)軟件,在他的頭腦中關(guān)于該軟件應(yīng)該做什么的想法就會(huì)或多或少地發(fā)生變化,這就使得最初提出的需求變得不完全適用了。其實(shí),要求用戶不經(jīng)過(guò)實(shí)踐就提出完整準(zhǔn)確的需求,在許多情況下都是不切實(shí)際的??傊?,由于瀑布模型幾乎完全依賴于書面的規(guī)格說(shuō)明,很可能導(dǎo)致最終開發(fā)出的軟件產(chǎn)品不能真正滿足用戶的需要。而下面將要介紹快速原型模型,有助于保證用戶的真實(shí)需要得到滿足。
2.快速原型模型
快速原型模型又稱原型模型,它是增量模型的另一種形式,是在開發(fā)真實(shí)系統(tǒng)之前,構(gòu)造一個(gè)原型,在該原型的基礎(chǔ)上,逐漸完成整個(gè)系統(tǒng)的開發(fā)工作的。快速建立起來(lái)的可以在計(jì)算機(jī)上運(yùn)行的程序,它所能完成的功能往往是最終產(chǎn)品能完成功能全集的一個(gè)子集。
圖1.14描述了快速原型模型的應(yīng)用過(guò)程,快速原型模型的第一步是快速建立一個(gè)能反映用戶主要需求的原型系統(tǒng),讓用戶在計(jì)算機(jī)上試用它,通過(guò)實(shí)踐來(lái)了解目標(biāo)系統(tǒng)的概貌。通常,用戶試用原型系統(tǒng)之后會(huì)提出許多修改意見,開發(fā)人員按照用戶的意見快速地修改原型系統(tǒng),然后再次請(qǐng)用戶試用,反復(fù)迭代這一過(guò)程,軟件隨之演進(jìn)。一旦用戶認(rèn)為這個(gè)原型系統(tǒng)確實(shí)能完成他們的業(yè)務(wù),開發(fā)人員便可據(jù)此寫出規(guī)格說(shuō)明文檔,根據(jù)這份文檔開發(fā)出的軟件則可更準(zhǔn)確地滿足用戶的真實(shí)需求。圖1.14快速原型模型應(yīng)用過(guò)程快速原型模型是不帶反饋環(huán)的,軟件產(chǎn)品的開發(fā)基本上是以線性順序進(jìn)行的,這一點(diǎn)正是該過(guò)程模型的主要優(yōu)點(diǎn)??焖僭湍P湍茏龅骄€性順序開發(fā)的主要原因如下:
①原型系統(tǒng)已經(jīng)通過(guò)與用戶交互而得到驗(yàn)證,據(jù)此產(chǎn)生的規(guī)格說(shuō)明文檔正確地描述了用戶的需求,因此,在開發(fā)過(guò)程的后續(xù)階段不會(huì)因?yàn)榘l(fā)現(xiàn)了規(guī)格說(shuō)明文檔的錯(cuò)誤而進(jìn)行較大的返工。
②開發(fā)人員通過(guò)建立原型系統(tǒng)已經(jīng)學(xué)到了許多東西(至少知道了“系統(tǒng)不應(yīng)該做什么,以及怎樣不去做不該做的事情”),因此,在設(shè)計(jì)和編碼階段發(fā)生錯(cuò)誤的可能性也比較小,這自然減少了在后續(xù)階段需要改正前面階段所犯錯(cuò)誤的可能性。軟件產(chǎn)品一旦交付給用戶使用之后,維護(hù)便開始了。根據(jù)所需完成維護(hù)工作的不同分類,可能需要返回到需求分析、規(guī)格說(shuō)明、設(shè)計(jì)或編碼等不同階段。
快速原型的本質(zhì)是“快速”,開發(fā)人員應(yīng)該盡可能快地建造出原型系統(tǒng),以加速軟件開發(fā)過(guò)程,節(jié)約軟件開發(fā)成本。原型的用途是獲知用戶的真正需求,一旦需求確定了,原型將被拋棄,因此,原型系統(tǒng)的內(nèi)部結(jié)構(gòu)并不重要,重要的是,必須迅速地構(gòu)建原型,然后根據(jù)用戶意見迅速地修改原型。UNIXShell和超文本都是廣泛使用的快速原型語(yǔ)言,近年來(lái),這一技術(shù)趨勢(shì)發(fā)展為廣泛地使用第四代語(yǔ)言(4GL)來(lái)構(gòu)建快速原型。當(dāng)快速原型的某個(gè)部分是利用軟件工具由計(jì)算機(jī)自動(dòng)生成的時(shí)候,可以把這部分用到最終的軟件產(chǎn)品中。例如,用戶界面通常是快速原型的一個(gè)關(guān)鍵部分,當(dāng)使用屏幕生成程序和報(bào)表生成程序自動(dòng)生成用戶界面時(shí),實(shí)際上可以把這樣得到的用戶界面用在最終的軟件產(chǎn)品中。
3.增量模型
增量模型也稱為漸增模型,如圖1.15所示。使用增量模型開發(fā)軟件時(shí),是把軟件產(chǎn)品作為一系列的增量構(gòu)件來(lái)設(shè)計(jì)、編碼、集成和測(cè)試的。每個(gè)構(gòu)件都由多個(gè)相互作用的模塊構(gòu)成,并且能夠完成特定的功能。使用增量模型時(shí),第一個(gè)增量構(gòu)件往往實(shí)現(xiàn)軟件的基本需求,提供最核心的功能。例如,使用增量模型開發(fā)字處理軟件時(shí),第一個(gè)增量構(gòu)件可能提供基本的文件管理、編輯和文檔生成功能;第二個(gè)增量構(gòu)件提供更完善的編輯和文檔生成功能;第三個(gè)增量構(gòu)件實(shí)現(xiàn)拼寫和語(yǔ)法檢查功能;第四個(gè)增量構(gòu)件完成高級(jí)的頁(yè)面排版功能。把軟件產(chǎn)品分解成增量構(gòu)件時(shí),應(yīng)該使構(gòu)件的規(guī)模適中,規(guī)模過(guò)大或過(guò)小都不好。最佳分解方法因軟件產(chǎn)品特點(diǎn)和開發(fā)人員的習(xí)慣而異。分解時(shí)唯一必須遵守的約束條件是,當(dāng)把新構(gòu)件集成到現(xiàn)有軟件中時(shí),所形成的產(chǎn)品必須是可測(cè)試的。圖1.15增量模型采用瀑布模型或快速原型模型開發(fā)軟件時(shí),目標(biāo)都是一次就把一個(gè)滿足所有需求的產(chǎn)品提交給用戶。增量模型則與之相反,它分批地逐步向用戶提交產(chǎn)品,每次提交一個(gè)滿足用戶需求子集的可運(yùn)行的產(chǎn)品。整個(gè)軟件產(chǎn)品被分解成許多個(gè)增量構(gòu)件,開發(fā)人員一個(gè)構(gòu)件接一個(gè)構(gòu)件地向用戶提交產(chǎn)品,每次用戶都得到一個(gè)滿足部分需求的可運(yùn)行的產(chǎn)品,直到最后一次得到滿足全部需求的完整產(chǎn)品。從第一個(gè)構(gòu)件交付之日起,用戶就能做一些有用的工作。顯然,能在較短時(shí)間內(nèi)向用戶提交可完成一些有用的工作的產(chǎn)品,是增量模型的一個(gè)優(yōu)點(diǎn)。增量模型的另一個(gè)優(yōu)點(diǎn)是,逐步增加產(chǎn)品功能可以使用戶有較充裕的時(shí)間學(xué)習(xí)和適應(yīng)新產(chǎn)品,從而減少一個(gè)全新的軟件可能給客戶組織帶來(lái)的沖擊。
使用增量模型的困難是,在把每個(gè)新的增量構(gòu)件集成到現(xiàn)有軟件體系結(jié)構(gòu)中時(shí),必須不破壞原來(lái)已經(jīng)開發(fā)出的產(chǎn)品。此外,必須把軟件的體系結(jié)構(gòu)設(shè)計(jì)得便于按這種方式進(jìn)行擴(kuò)充,向現(xiàn)有產(chǎn)品中加入新構(gòu)件的過(guò)程必須簡(jiǎn)單、方便,也就是說(shuō),軟件體系結(jié)構(gòu)必須是開放的。從長(zhǎng)遠(yuǎn)觀點(diǎn)看,具有開放結(jié)構(gòu)的軟件擁有真正的優(yōu)勢(shì),這樣的軟件的可維護(hù)性明顯好于封閉結(jié)構(gòu)的軟件。因此,盡管采用增量模型比采用瀑布模型和快速原型模型需要更精心的設(shè)計(jì),但在設(shè)計(jì)階段多付出的勞動(dòng)將在維護(hù)階段獲得回報(bào)。如果一個(gè)設(shè)計(jì)非常靈活而且足夠開放,足以支持增量模型,那么,這樣的設(shè)計(jì)將允許在不破壞產(chǎn)品的情況下進(jìn)行維護(hù)。事實(shí)上,使用增量模型時(shí)開發(fā)軟件和擴(kuò)充軟件功能(完善性維護(hù))并沒(méi)有本質(zhì)區(qū)別,都是向現(xiàn)有產(chǎn)品中加入新構(gòu)件的過(guò)程。
從某種意義上說(shuō),增量模型本身是自相矛盾的。它一方面要求開發(fā)人員把軟件看做一個(gè)整體,另一方面又要求開發(fā)人員把軟件看做構(gòu)件序列,每個(gè)構(gòu)件本質(zhì)上都獨(dú)立于另一個(gè)構(gòu)件。除非開發(fā)人員有足夠的技術(shù)能力協(xié)調(diào)好這一明顯的矛盾,否則用增量模型開發(fā)出的產(chǎn)品可能并不令人滿意。圖1.15所示的增量模型表明,必須在開始實(shí)現(xiàn)各個(gè)構(gòu)件之前就全部完成需求分析、規(guī)格說(shuō)明和概要設(shè)計(jì)的工作,由于在開始構(gòu)建第一個(gè)構(gòu)件之前已經(jīng)有了總體設(shè)計(jì),因此風(fēng)險(xiǎn)較小。圖1.16描繪了一種風(fēng)險(xiǎn)更大的增量模型:一旦確定了用戶需求之后,就著手?jǐn)M定第一個(gè)構(gòu)件的規(guī)格說(shuō)明文檔,完成后,規(guī)格說(shuō)明組將轉(zhuǎn)向第二個(gè)構(gòu)件的規(guī)格說(shuō)明,與此同時(shí)設(shè)計(jì)組開始設(shè)計(jì)第一個(gè)構(gòu)件……用這種方式開發(fā)軟件,不同的構(gòu)件將并行地構(gòu)建,因此有可能加快工程進(jìn)度。但是,使用這種方法將冒構(gòu)件無(wú)法集成到一起的風(fēng)險(xiǎn),除非密切地監(jiān)控整個(gè)開發(fā)過(guò)程,否則整個(gè)工程可能毀于一旦。圖1.16風(fēng)險(xiǎn)更大的增量模型
4.螺旋模型
軟件開發(fā)幾乎總要冒一定風(fēng)險(xiǎn),例如,產(chǎn)品交付給用戶之后用戶可能不滿意,到了預(yù)定的交付日期軟件可能還未開發(fā)出來(lái),實(shí)際的開發(fā)成本可能超過(guò)預(yù)算,產(chǎn)品完成前一些關(guān)鍵的開發(fā)人員可能“跳槽”了,產(chǎn)品投入市場(chǎng)之前競(jìng)爭(zhēng)對(duì)手發(fā)布了一個(gè)功能相近、價(jià)格更低的軟件等等。軟件風(fēng)險(xiǎn)是任何軟件開發(fā)項(xiàng)目中都普遍存在的實(shí)際問(wèn)題,項(xiàng)目越大,軟件越復(fù)雜,承擔(dān)該項(xiàng)目所冒的風(fēng)險(xiǎn)也越大。軟件風(fēng)險(xiǎn)可能在不同程度上損害軟件開發(fā)過(guò)程和軟件產(chǎn)品質(zhì)量,因此,在軟件開發(fā)過(guò)程中必須及時(shí)識(shí)別和分析風(fēng)險(xiǎn),并且采取適當(dāng)措施以消除或減少風(fēng)險(xiǎn)的危害。構(gòu)建原型是一種能使某些類型的風(fēng)險(xiǎn)降至最低的方法。為了降低交付給用戶的產(chǎn)品不能滿足用戶需要的風(fēng)險(xiǎn),一種行之有效的方法就是在需求分析階段快速地構(gòu)建一個(gè)原型,在后續(xù)的階段中也可以通過(guò)構(gòu)造適當(dāng)?shù)脑蛠?lái)降低某些技術(shù)風(fēng)險(xiǎn)。當(dāng)然,原型并不能“包治百病”,對(duì)于某些類型的風(fēng)險(xiǎn)(例如聘請(qǐng)不到需要的專業(yè)人員或關(guān)鍵的技術(shù)人員在項(xiàng)目完成前“跳槽”),原型方法是無(wú)能為力的。螺旋模型的基本思想是:使用原型及其他方法來(lái)盡量降低風(fēng)險(xiǎn)。理解這種模型的一個(gè)簡(jiǎn)便方法,是把它看做在每個(gè)階段之前都增加了風(fēng)險(xiǎn)分析過(guò)程的快速原型模型,如圖1.17所示。圖1.17螺旋模型完整的螺旋模型如圖1.18所示,圖中帶箭頭的虛線的長(zhǎng)度代表當(dāng)前累計(jì)的開發(fā)費(fèi)用,螺旋線旋過(guò)的角度值代表開發(fā)進(jìn)度。螺旋線的每一周對(duì)應(yīng)于一個(gè)開發(fā)階段。每個(gè)階段開始時(shí)(左上象限)的任務(wù)是,確定該階段的目標(biāo)、為完成這些目標(biāo)選擇方案及設(shè)定這些方案的約束條件。接下來(lái)的任務(wù)是,從風(fēng)險(xiǎn)角度分析上一步的工作結(jié)果,努力排除各種潛在的風(fēng)險(xiǎn),通常用建造原型的方法來(lái)排除風(fēng)險(xiǎn)。如果風(fēng)險(xiǎn)不能排除,則停止開發(fā)工作或大幅度地削減項(xiàng)目規(guī)模。如果成功地排除了所有風(fēng)險(xiǎn),則啟動(dòng)下一個(gè)開發(fā)步驟(右下象限),這個(gè)步驟的工作過(guò)程相當(dāng)于純粹的瀑布模型。最后是評(píng)價(jià)該階段的工作成果并計(jì)劃下一個(gè)階段的工作。圖1.18完整的螺旋模型螺旋模型有許多優(yōu)點(diǎn):對(duì)可選方案和約束條件的強(qiáng)調(diào)有利于已有軟件的重用,也有助于把軟件質(zhì)量作為軟件開發(fā)的一個(gè)重要目標(biāo);減少了過(guò)多測(cè)試(浪費(fèi)資金)或測(cè)試不足(產(chǎn)品故障多)所帶來(lái)的風(fēng)險(xiǎn);更重要的是,在螺旋模型中維護(hù)只是模型的另一個(gè)周期,在維護(hù)和開發(fā)之間并沒(méi)有本質(zhì)區(qū)別。
螺旋模型主要適用于內(nèi)部開發(fā)的大規(guī)模軟件項(xiàng)目。如果進(jìn)行風(fēng)險(xiǎn)分析的費(fèi)用接近整個(gè)項(xiàng)目的經(jīng)費(fèi)預(yù)算,則風(fēng)險(xiǎn)分析是不可行的。事實(shí)上,項(xiàng)目越大,風(fēng)險(xiǎn)也越大,因此,進(jìn)行風(fēng)險(xiǎn)分析的必要性也越大。此外,只有內(nèi)部開發(fā)的項(xiàng)目,才能在風(fēng)險(xiǎn)過(guò)大時(shí)方便地中止項(xiàng)目。螺旋模型的主要優(yōu)勢(shì)在于,它是風(fēng)險(xiǎn)驅(qū)動(dòng)的,但是,這也可能是它的一個(gè)弱點(diǎn)。除非軟件開發(fā)人員具有豐富的風(fēng)險(xiǎn)評(píng)估經(jīng)驗(yàn)和這方面的專門知識(shí),否則將出現(xiàn)真正的風(fēng)險(xiǎn):當(dāng)項(xiàng)目實(shí)際上正在走向?yàn)?zāi)難時(shí),開發(fā)人員可能還認(rèn)為一切正常。
5.噴泉模型
迭代是軟件開發(fā)過(guò)程中普遍存在的一種內(nèi)在屬性。經(jīng)驗(yàn)表明:軟件過(guò)程各個(gè)階段之間的迭代或一個(gè)階段內(nèi)各個(gè)工作步驟之間的迭代,在面向?qū)ο蠓缎椭斜仍诮Y(jié)構(gòu)化范型中更常見。圖1.19所示的噴泉模型是典型的面向?qū)ο笊芷谀P?。圖1.19噴泉模型“噴泉”這個(gè)詞體現(xiàn)了面向?qū)ο筌浖_發(fā)過(guò)程迭代和無(wú)縫的特性。圖1.19中代表不同階段的圓圈相互重疊,這明確表示兩個(gè)活動(dòng)之間存在交疊;而面向?qū)ο蠓椒ㄔ诟拍詈捅硎痉椒ㄉ系囊恢滦?,保證了在各項(xiàng)開發(fā)活動(dòng)之間的無(wú)縫過(guò)渡。事實(shí)上,用面向?qū)ο蠓椒ㄩ_發(fā)軟件時(shí),在分析、設(shè)計(jì)和編碼等項(xiàng)開發(fā)活動(dòng)之間并不存在明顯的邊界。圖中在一個(gè)階段內(nèi)的向下箭頭代表該階段內(nèi)的迭代(或求精),較小的圓圈代表維護(hù),圓圈較小象征著采用了面向?qū)ο蠓缎椭缶S護(hù)時(shí)間縮
短了。
為避免使用噴泉模型開發(fā)軟件時(shí)開發(fā)過(guò)程過(guò)分無(wú)序,應(yīng)該把一個(gè)線性過(guò)程(例如,快速原型模型或圖1.19中的中心垂線)作為總目標(biāo)。但是,同時(shí)也應(yīng)該記住,面向?qū)ο蠓缎捅旧硪蠼?jīng)常對(duì)開發(fā)活動(dòng)進(jìn)行迭代或求精。
1.6軟件項(xiàng)目管理基礎(chǔ)
隨著計(jì)算機(jī)應(yīng)用的飛速發(fā)展,軟件開發(fā)規(guī)模和開發(fā)隊(duì)伍日益龐大,軟件開發(fā)不再像過(guò)去那樣是由個(gè)別開發(fā)人員即可解決的事情,因此,有必要將軟件項(xiàng)目管理引入到軟件開發(fā)活動(dòng)中,從而有效地保證軟件項(xiàng)目能夠按照預(yù)定的成本、進(jìn)度、質(zhì)量要求順利完成。事實(shí)證明,軟件項(xiàng)目管理有利于將軟件開發(fā)人員的個(gè)人開發(fā)能力轉(zhuǎn)化成企業(yè)的開發(fā)能力,并使企業(yè)的軟件開發(fā)能力不斷提高和成熟。
從概念上講,軟件項(xiàng)目管理是為了使軟件項(xiàng)目能夠按照預(yù)定的成本、進(jìn)度、質(zhì)量順利完成,而對(duì)成本、人員、進(jìn)度、質(zhì)量、風(fēng)險(xiǎn)等進(jìn)行分析和管理的活動(dòng)。目前,軟件仍然是一種新興的特殊工程領(lǐng)域,它遠(yuǎn)遠(yuǎn)沒(méi)有其他工程領(lǐng)域那么規(guī)范,其開發(fā)過(guò)程缺乏成熟的理論和統(tǒng)一的標(biāo)準(zhǔn),因此,軟件項(xiàng)目管理具有相當(dāng)?shù)奶厥庑院蛷?fù)雜性,它對(duì)軟件開發(fā)具有決定性的意義。
1.軟件項(xiàng)目的特征
與其他工程項(xiàng)目相比,軟件項(xiàng)目具有以下顯著特征:
(1)軟件產(chǎn)品的不可見性。軟件開發(fā)不同于其他產(chǎn)品的制造,其整個(gè)過(guò)程都是設(shè)計(jì)過(guò)程,其開發(fā)過(guò)程和產(chǎn)品既看不見又摸不著。因此,軟件項(xiàng)目具有特別的復(fù)雜性和抽象性。
(2)項(xiàng)目的高度不確定性。軟件的不可見性給項(xiàng)目的估算和計(jì)劃帶來(lái)了極大的不確定性,項(xiàng)目管理者也難以預(yù)見問(wèn)題的出現(xiàn),容易造成項(xiàng)目的預(yù)定計(jì)劃與實(shí)際情況存在較大的偏差。另外,計(jì)算機(jī)技術(shù)的飛速發(fā)展使得軟件項(xiàng)目的技術(shù)更新非???,過(guò)去積累的經(jīng)驗(yàn)教訓(xùn)難以在新的項(xiàng)目中發(fā)揮作用。
(3)軟件過(guò)程的多變化性。在軟件開發(fā)過(guò)程中,需求分析、架構(gòu)設(shè)計(jì)、詳細(xì)設(shè)計(jì)、軟件測(cè)試和交付等各個(gè)工作環(huán)節(jié)通常是一個(gè)典型的迭代和增量發(fā)展的動(dòng)態(tài)變化過(guò)程。因此,軟件項(xiàng)目的開發(fā)過(guò)程具有復(fù)雜性、多樣性和不穩(wěn)定性的特點(diǎn),特別是客戶需求的不確定性和多變性往往給軟件開發(fā)帶來(lái)極大的困難和風(fēng)險(xiǎn)。
(4)軟件人員的高流動(dòng)性。在軟件開發(fā)過(guò)程中,不需要使用大量的物質(zhì)資源,人力資源往往是關(guān)鍵性的因素。由于軟件產(chǎn)業(yè)發(fā)展迅速,人才需求旺盛,因此開發(fā)人員,尤其是項(xiàng)目的核心技術(shù)人才流動(dòng)性高,這也給項(xiàng)目管理帶來(lái)了很大的風(fēng)險(xiǎn)。
總而言之,“復(fù)雜”和“變化”給軟件項(xiàng)目的管理帶來(lái)了相當(dāng)大的難度,降低復(fù)雜性和控制變化成為軟件項(xiàng)目管理面臨的關(guān)鍵問(wèn)題。
2.軟件項(xiàng)目管理的“4P”
有效的軟件項(xiàng)目管理集中于4個(gè)方面:人員(People)、產(chǎn)品(Product)、過(guò)程(Process)和項(xiàng)目(Project),簡(jiǎn)稱為項(xiàng)目管理的“4P”,其關(guān)系如圖1.20所示。圖1.20項(xiàng)目管理中的“4P”
1)人員(People)
軟件開發(fā)是人類從事的對(duì)智力創(chuàng)造要求較高的一項(xiàng)工作,故相對(duì)于工具或技術(shù)來(lái)說(shuō),軟件人員的素質(zhì)和組織管理是保證項(xiàng)目成功的更為重要的因素。一般來(lái)說(shuō),大型軟件項(xiàng)目需要整個(gè)團(tuán)隊(duì)的努力和協(xié)作,其開發(fā)人員的選擇、組織、分工與管理是一項(xiàng)十分重要而又復(fù)雜的工作,它直接影響到整個(gè)項(xiàng)目的成敗。
在微軟公司的成功經(jīng)驗(yàn)中,最值得研究的就是如何得到優(yōu)秀的員工,以及如何讓員工盡量發(fā)揮自己的能力。因此,軟件開發(fā)的管理應(yīng)處處體現(xiàn)“以人為本”的思想,注重發(fā)現(xiàn)和培養(yǎng)有創(chuàng)造力的、技術(shù)水平高的軟件人員,并使這些人員保持高昂的斗志和不斷的創(chuàng)新。
2)產(chǎn)品(Product)
軟件項(xiàng)目的目標(biāo)是在規(guī)定的時(shí)間和預(yù)算內(nèi)開發(fā)出滿足客戶需求的軟件產(chǎn)品。但是,以往的統(tǒng)計(jì)資料表明,軟件產(chǎn)品的問(wèn)題主要發(fā)生在軟件需求階段,其根源在于軟件需求的不確定和需求規(guī)格說(shuō)明的不準(zhǔn)確。
在軟件開發(fā)的整個(gè)過(guò)程中,軟件需求為準(zhǔn)確的項(xiàng)目估算、有效的風(fēng)險(xiǎn)評(píng)估、適當(dāng)?shù)娜蝿?wù)劃分和合理的進(jìn)度安排等奠定了可靠的基礎(chǔ),是軟件項(xiàng)目成功的一個(gè)關(guān)鍵因素。因此,軟件項(xiàng)目管理必須有效地解決需求分析和需求變更的問(wèn)題,使開發(fā)人員能夠獲取用戶的真正需求,準(zhǔn)確完整地描述需求分析結(jié)果,并能有效地控制需求的變化。
3)過(guò)程(Process)
軟件產(chǎn)品從概念的提出到最終的形成需要經(jīng)歷一個(gè)復(fù)雜的過(guò)程。軟件過(guò)程將軟件開發(fā)和維護(hù)所用到的技術(shù)、方法、活動(dòng)和工具有機(jī)地結(jié)合起來(lái),確保項(xiàng)目的成功經(jīng)驗(yàn)和最佳實(shí)踐得以有效的總結(jié)和重用,并且在以后的項(xiàng)目實(shí)踐中不斷地完善和優(yōu)化。
在軟件過(guò)程管理中,人們需要定義整個(gè)軟件開發(fā)的活動(dòng)、所采用的技術(shù)方法、各個(gè)階段的里程碑、各種工程制品等,這
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈丘縣輔警招聘公安基礎(chǔ)知識(shí)考試題庫(kù)及答案
- 動(dòng)火監(jiān)火人安全能力測(cè)試題及答案
- 2025年甘肅省安全員B證考試題庫(kù)附答案
- 高血壓孕婦的全程護(hù)理管理
- 靜脈輸血藥物相互作用與配伍禁忌
- 初中體育教師試題及答案
- 2026魯南技師學(xué)院第一批招聘教師8人備考題庫(kù)附答案
- 上饒高鐵經(jīng)濟(jì)試驗(yàn)區(qū)社區(qū)工作者招聘【16人】參考題庫(kù)必考題
- 中國(guó)水科院巖土所科研助理招聘參考題庫(kù)必考題
- 樂(lè)清市人力資源和社會(huì)保障局關(guān)于公開選調(diào)2名下屬事業(yè)單位工作人員的參考題庫(kù)必考題
- 焊工焊接協(xié)議書(2篇)
- 蘇教版六年級(jí)數(shù)學(xué)上冊(cè)全套試卷
- 培訓(xùn)機(jī)構(gòu)轉(zhuǎn)課協(xié)議
- 河道治理、拓寬工程 投標(biāo)方案(技術(shù)方案)
- 創(chuàng)客教室建設(shè)方案
- 政治審查表(模板)
- 《最奇妙的蛋》完整版
- SEMI S1-1107原版完整文檔
- 內(nèi)蒙古衛(wèi)生健康委員會(huì)綜合保障中心公開招聘8人模擬預(yù)測(cè)(共1000題)筆試備考題庫(kù)及答案解析
- 2023年中級(jí)財(cái)務(wù)會(huì)計(jì)各章作業(yè)練習(xí)題
- 金屬罐三片罐成型方法與罐型
評(píng)論
0/150
提交評(píng)論