軟件工程與項(xiàng)目管理(第2版) 課件 (王素芬)第1、2章 概述、軟件生命周期與軟件過程_第1頁(yè)
軟件工程與項(xiàng)目管理(第2版) 課件 (王素芬)第1、2章 概述、軟件生命周期與軟件過程_第2頁(yè)
軟件工程與項(xiàng)目管理(第2版) 課件 (王素芬)第1、2章 概述、軟件生命周期與軟件過程_第3頁(yè)
軟件工程與項(xiàng)目管理(第2版) 課件 (王素芬)第1、2章 概述、軟件生命周期與軟件過程_第4頁(yè)
軟件工程與項(xiàng)目管理(第2版) 課件 (王素芬)第1、2章 概述、軟件生命周期與軟件過程_第5頁(yè)
已閱讀5頁(yè),還剩63頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1.1

軟件

1.2軟件工程

1.3軟件工程發(fā)展中的軟件開發(fā)方法與技術(shù)

1.4計(jì)算機(jī)輔助軟件工程

1.5軟件工程與其他相關(guān)學(xué)科的關(guān)系

1.6軟件工程職業(yè)道德規(guī)范

1.7軟件項(xiàng)目成敗情況統(tǒng)計(jì)

1.8全球軟件產(chǎn)業(yè)的現(xiàn)狀、趨勢(shì)與挑戰(zhàn)1.1軟件1.1.1軟件及軟件特性1.軟件軟件的定義是隨著計(jì)算機(jī)技術(shù)的發(fā)展而逐步完善的。在20世紀(jì)50年代,人們認(rèn)為軟件就等于程序;60年代人們認(rèn)識(shí)到軟件的開發(fā)文檔在軟件中的作用,提出軟件等于程序加文檔,但這里的文檔僅是指軟件開發(fā)過程中所涉及的分析、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試、維護(hù)等文檔,不包括軟件管理文檔;到了70年代人們又給軟件的定義中加入了數(shù)據(jù)。因此,軟件是計(jì)算機(jī)系統(tǒng)中與硬件相互依存的一部分,它包括:(1)在運(yùn)行中能提供所希望的功能與性能的程序;(2)使程序能夠正確運(yùn)行的數(shù)據(jù)及其結(jié)構(gòu);(3)描述軟件研制過程和方法所用的文檔。2.軟件的特性從廣義來說,軟件與硬件一樣也是產(chǎn)品,但兩者之間是有差別的,了解并理解這種差別對(duì)理解軟件工程是非常重要的。(1)軟件角色的雙重性。(2)軟件是被開發(fā)或設(shè)計(jì)的,而不是傳統(tǒng)意義上的被制造。(3)軟件不會(huì)“磨損”,但會(huì)退化。(4)絕大多數(shù)軟件都是定制的且是手工的。(5)軟件開發(fā)過程復(fù)雜且費(fèi)用昂貴。1.1.2軟件的發(fā)展及分類1.軟件的發(fā)展自20世紀(jì)40年代出現(xiàn)了世界上第一臺(tái)計(jì)算機(jī)以后,經(jīng)歷了幾十年的發(fā)展,計(jì)算機(jī)軟件經(jīng)歷了程序設(shè)計(jì)、程序系統(tǒng)和軟件工程三個(gè)發(fā)展時(shí)期。表1.1列出了三個(gè)發(fā)展時(shí)期主要特征的對(duì)比,由此可以看出幾十年來軟件最根本的變化。2.軟件的分類軟件的應(yīng)用非常廣泛,幾乎滲透到了各行各業(yè)。因此,要給出一個(gè)科學(xué)的、統(tǒng)一的、嚴(yán)格的計(jì)算機(jī)軟件分類標(biāo)準(zhǔn)是不現(xiàn)實(shí)也是不可能的,但可以從不同的角度對(duì)軟件進(jìn)行適當(dāng)?shù)姆诸?。常用的分類方法及意義如表1.2所示。1.1.3軟件危機(jī)及其產(chǎn)生的主要原因隨著社會(huì)對(duì)計(jì)算機(jī)應(yīng)用需求的增長(zhǎng),軟件系統(tǒng)規(guī)模越來越龐大,生產(chǎn)難度和生產(chǎn)成本越來越高,軟件需求量劇增,質(zhì)量沒有可靠的保證,軟件開發(fā)的生產(chǎn)率低等因素構(gòu)成軟件生產(chǎn)的惡性循環(huán)。軟件生產(chǎn)的復(fù)雜性和高成本,使大型軟件的生產(chǎn)出現(xiàn)了很大的困難,因此出現(xiàn)了軟件危機(jī)。其具體表現(xiàn)如下:(1)開發(fā)人員和用戶之間存在矛盾。用戶在開發(fā)初期,由于各種原因往往不能準(zhǔn)確地提出需求描述;開發(fā)人員在還沒有準(zhǔn)確、完整地了解用戶的實(shí)際需求后就急于編程。(2)大型軟件項(xiàng)目需要組織一定的人力共同完成,多數(shù)管理人員缺少開發(fā)大型軟件系統(tǒng)的經(jīng)驗(yàn);多數(shù)軟件開發(fā)人員缺乏協(xié)同方面的經(jīng)驗(yàn);軟件項(xiàng)目開發(fā)人員不能有效地、獨(dú)立自主地處理大型軟件的全部關(guān)系和各個(gè)分支,因此容易產(chǎn)生疏漏和錯(cuò)誤。(3)缺乏有力的方法學(xué)和工具方面的支持,過分依靠程序設(shè)計(jì)人員的技巧和創(chuàng)造性。重編程,輕需求分析;重開發(fā),輕維護(hù);重程序,輕文檔。這樣做的后果就是在軟件系統(tǒng)中“埋藏”了許多故障隱患,直接危害著系統(tǒng)的可靠性和穩(wěn)定性。人們把在軟件開發(fā)與維護(hù)過程中遇到的一系列嚴(yán)重問題稱為軟件危機(jī)。1.1.4軟件危機(jī)的表現(xiàn)軟件危機(jī)的主要表現(xiàn)如下:(1)軟件開發(fā)進(jìn)度難以預(yù)測(cè);(2)軟件開發(fā)成本難以控制;(3)用戶對(duì)軟件產(chǎn)品的功能要求難以滿足;(4)軟件產(chǎn)品的質(zhì)量無法保證,系統(tǒng)中的錯(cuò)誤難以消除;(5)軟件產(chǎn)品難以維護(hù);(6)軟件缺少適當(dāng)?shù)奈臋n資料;(7)軟件開發(fā)的生產(chǎn)速度難以滿足社會(huì)需求的增長(zhǎng)。1.1.5解決軟件危機(jī)的途徑分析了造成軟件危機(jī)的原因后,人們開始探索用工程的方法進(jìn)行軟件生產(chǎn)的可能性,即用軟件工程的概念、原理、技術(shù)和方法進(jìn)行軟件的開發(fā)、管理、維護(hù)和更新。于是,計(jì)算機(jī)科學(xué)的一個(gè)領(lǐng)域——“軟件工程”誕生了。1.2軟件工程1.2.1軟件工程的概念軟件工程是指導(dǎo)計(jì)算機(jī)開發(fā)和維護(hù)的工程學(xué)科。借用傳統(tǒng)工程設(shè)計(jì)的基本思想,采用工程化的概念、原理、技術(shù)和方法來開發(fā)與維護(hù)軟件,突出軟件生產(chǎn)的科學(xué)方法,把經(jīng)過時(shí)間考驗(yàn)而證明正確的管理技術(shù)與當(dāng)前能夠得到的最好的技術(shù)和方法結(jié)合進(jìn)來,降低開發(fā)成本,縮短研制周期,提高軟件的可靠性和生產(chǎn)效率。軟件的工程化生產(chǎn)已成為軟件產(chǎn)業(yè)。軟件已成為產(chǎn)品,它涉及產(chǎn)值、市場(chǎng)、版權(quán)、法律保護(hù)等方面的問題。軟件工程是一門交叉學(xué)科,需要用管理學(xué)的原理和方法來進(jìn)行軟件生產(chǎn)管理;用工程學(xué)的觀點(diǎn)來進(jìn)行費(fèi)用估算、制訂進(jìn)度和實(shí)施方案;用數(shù)學(xué)方法來建立軟件可靠性模型以及分析各種算法。1.2.2軟件工程的三要素軟件工程以關(guān)注軟件質(zhì)量為目標(biāo),由方法、工具和過程三個(gè)要素構(gòu)成,如圖1.3所示。軟件工程方法為軟件開發(fā)提供了“如何做”的技術(shù),涉及軟件工程的多個(gè)方面,如項(xiàng)目計(jì)劃與估算、軟件系統(tǒng)需求分析、數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)總體結(jié)構(gòu)的設(shè)計(jì)、算法過程的設(shè)計(jì)、編碼、測(cè)試、維護(hù)等。軟件工具為軟件工程方法提供了自動(dòng)的或半自動(dòng)的軟件支撐環(huán)境。目前,已經(jīng)推出了許多軟件工具,這些軟件工具集成起來,建立起稱之為計(jì)算機(jī)輔助軟件工程(ComputerAidedSoftwareEngineering,CASE)的軟件開發(fā)支撐系統(tǒng)。CASE將各種軟件工具、開發(fā)機(jī)器和一個(gè)存放開發(fā)過程信息的工程數(shù)據(jù)庫(kù)組合起來形成一個(gè)軟件工程環(huán)境。軟件工程的過程將軟件工程的方法和工具綜合起來,以達(dá)到合理、及時(shí)地進(jìn)行計(jì)算機(jī)軟件開發(fā)的目的。過程定義了方法使用的順序、要求交付的文檔資料、為保證質(zhì)量和協(xié)調(diào)變化所需要的管理及軟件開發(fā)各個(gè)階段完成的里程碑。1.2.3軟件工程的目標(biāo)軟件工程研究的對(duì)象是大型軟件系統(tǒng)的開發(fā)過程,它研究的內(nèi)容是生產(chǎn)流程,各生產(chǎn)步驟的目的、任務(wù)、方法、技術(shù)、工具、文檔和產(chǎn)品規(guī)格。軟件工程的基本目標(biāo)是生產(chǎn)具有正確性、可用性及開銷合宜(合算性)的產(chǎn)品。正確性意指軟件產(chǎn)品達(dá)到預(yù)期功能的程度;可用性意指軟件基本結(jié)構(gòu)、實(shí)現(xiàn)及文檔達(dá)到用戶可用的程度;開銷合宜意指軟件開發(fā)、運(yùn)行的整個(gè)開銷滿足用戶的需求。在給定成本和進(jìn)度的前提下,開發(fā)出具有適用性、有效性、可修改性、可靠性、可理解性、可維護(hù)性、可重用性、可移植性、可追蹤性、可互操作性和滿足用戶需求的產(chǎn)品。追求這些目標(biāo)有助于提高軟件產(chǎn)品的質(zhì)量和開發(fā)效率,降低維護(hù)的困難。(1)適用性:軟件在不同的系統(tǒng)約束條件下,使用戶需求得到滿足的難易程度。(2)有效性:軟件系統(tǒng)能最有效地利用計(jì)算機(jī)的時(shí)間和空間資源。各種軟件無不把系統(tǒng)的時(shí)/空開銷作為衡量軟件質(zhì)量的一項(xiàng)重要技術(shù)指標(biāo)。很多場(chǎng)合,在追求時(shí)間有效性和空間有效性時(shí)會(huì)發(fā)生矛盾,這時(shí)不得不犧牲時(shí)間有效性來?yè)Q取空間有效性,或犧牲空間有效性以換取時(shí)間有效性。時(shí)/空折中是經(jīng)常采用的技巧。(3)可修改性:允許對(duì)系統(tǒng)進(jìn)行修改而不增加原系統(tǒng)的復(fù)雜性。支持軟件的調(diào)試和維護(hù),是一個(gè)難以達(dá)到的目標(biāo)。(4)可靠性:能防止因概念、設(shè)計(jì)、結(jié)構(gòu)等方面的不完善而造成軟件系統(tǒng)的失效,具有挽回因操作不當(dāng)而造成軟件系統(tǒng)失效的能力。(5)可理解性:系統(tǒng)具有清晰的結(jié)構(gòu),能直接反映問題的所在。可理解性有助于控制軟件的復(fù)雜性,并支持軟件的維護(hù)、移植或重用。(6)可維護(hù)性:軟件交付使用后,能夠?qū)λM(jìn)行修改,以改正潛伏的錯(cuò)誤,改進(jìn)性能和其他屬性,使軟件產(chǎn)品能適應(yīng)環(huán)境的變化等。軟件維護(hù)費(fèi)用在軟件開發(fā)費(fèi)用中占有很大的比重??删S護(hù)性是軟件工程中一項(xiàng)十分重要的目標(biāo)。(7)可重用性:把概念或功能相對(duì)獨(dú)立的一個(gè)或一組相關(guān)模塊定義為一個(gè)軟部件,可組裝在系統(tǒng)的任何位置,降低開發(fā)工作量。(8)可移植性:軟件從一個(gè)計(jì)算機(jī)系統(tǒng)或環(huán)境搬到另一個(gè)計(jì)算機(jī)系統(tǒng)或環(huán)境的難易程度。(9)可追蹤性:根據(jù)軟件需求對(duì)軟件設(shè)計(jì)、程序進(jìn)行正向追蹤,或根據(jù)軟件設(shè)計(jì)、程序?qū)浖枨筮M(jìn)行逆向追蹤的能力。(10)可互操作性:多個(gè)軟件元素相互通信并協(xié)同完成任務(wù)的能力。1.2.4軟件工程的開發(fā)原則軟件工程的目標(biāo)為軟件開發(fā)提出了明確的要求。為了達(dá)到這些要求,在軟件開發(fā)過程中必須遵循下列軟件工程的原則:抽象、信息隱藏、模塊化、局部化、一致性、完整性和可驗(yàn)證性。(1)抽象(Abstraction):抽取事物最基本的特性和行為,忽略其非基本的細(xì)節(jié),以控制軟件開發(fā)過程的復(fù)雜性,有利于軟件的可理解性和開發(fā)過程的管理。(2)信息隱藏(InformationHiding):將模塊中的軟件設(shè)計(jì)內(nèi)容和實(shí)現(xiàn)決策封裝起來,在系統(tǒng)的結(jié)構(gòu)分析與設(shè)計(jì)中把模塊看成是一個(gè)“黑箱”,模塊內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)被隱藏,而外部只提供功能和接口的有關(guān)說明,使軟件開發(fā)人員能夠?qū)⒆⒁饬性诟邔哟蔚某橄笊稀?3)模塊化(Modularity):將大的、復(fù)雜的程序,分成一個(gè)個(gè)邏輯上相對(duì)獨(dú)立、功能相對(duì)簡(jiǎn)單的小程序,只要定義好這些小程序的接口和設(shè)計(jì)關(guān)系,就可以將復(fù)雜的程序分解為若干簡(jiǎn)單的程序來處理,有助于信息隱藏和抽象,也有助于降低軟件系統(tǒng)的復(fù)雜性。(4)局部化(Localization):在物理模塊內(nèi)集中邏輯上相互關(guān)聯(lián)的計(jì)算資源,從物理和邏輯兩個(gè)方面保證系統(tǒng)中模塊內(nèi)部的高內(nèi)聚性和模塊之間的低耦合性,有助于模塊的獨(dú)立性。(5)一致性(Consistency):整個(gè)軟件系統(tǒng)(包括程序和文檔)使用一致的概念、符號(hào)和術(shù)語(yǔ),一致的程序內(nèi)部接口和硬、軟件接口,一致的系統(tǒng)規(guī)格說明與形式化公理系統(tǒng),一致的系統(tǒng)界面、編碼風(fēng)格和數(shù)據(jù)組織形式等。一致性原則支持系統(tǒng)的正確性和可靠性。(6)完整性(Completeness):軟件系統(tǒng)不丟失任何重要成分,系統(tǒng)具有服從需求的完整功能和實(shí)現(xiàn)功能所需的數(shù)據(jù)。(7)可驗(yàn)證性(Verifiability):大型軟件在功能分解和實(shí)施中,遵循系統(tǒng)容易檢查、測(cè)試、評(píng)審的原則,以保證軟件系統(tǒng)的正確性和可用性。1.2.5軟件工程涉及的人員1.利益相關(guān)者參與軟件過程(及每一個(gè)軟件項(xiàng)目)的利益相關(guān)者可以分為以下5類。(1)高級(jí)管理者:負(fù)責(zé)定義業(yè)務(wù)問題,這些問題往往會(huì)對(duì)項(xiàng)目產(chǎn)生很大的影響。(2)項(xiàng)目(技術(shù))管理者:必須計(jì)劃、激勵(lì)、組織和控制軟件開發(fā)人員。(3)開發(fā)人員:擁有開發(fā)產(chǎn)品或應(yīng)用軟件所需的技能。(4)客戶:闡明待開發(fā)軟件的需求,包括關(guān)心項(xiàng)目成敗的其他利益相關(guān)者。(5)最終用戶:軟件發(fā)布成為產(chǎn)品后直接與軟件進(jìn)行交互的人。2.團(tuán)隊(duì)負(fù)責(zé)人一個(gè)具有實(shí)戰(zhàn)能力的項(xiàng)目經(jīng)理應(yīng)該具有以下4種關(guān)鍵品質(zhì)。(1)解決問題:具有實(shí)戰(zhàn)能力的軟件項(xiàng)目經(jīng)理能夠準(zhǔn)確地診斷出最為密切相關(guān)的技術(shù)問題和組織問題;能夠系統(tǒng)地制訂解決方案,適當(dāng)?shù)丶?lì)其他開發(fā)人員來實(shí)現(xiàn)該方案;能夠?qū)⒃谶^去項(xiàng)目中學(xué)到的經(jīng)驗(yàn)應(yīng)用到新環(huán)境中;如果最初的解決方案沒有結(jié)果,則能夠靈活地改變方向。(2)管理者的特性:優(yōu)秀的項(xiàng)目經(jīng)理必須能夠掌管整個(gè)項(xiàng)目。必要時(shí)要有信心進(jìn)行項(xiàng)目控制,同時(shí)還要允許優(yōu)秀的技術(shù)人員按照他們的本意行事。(3)成就:為了優(yōu)化項(xiàng)目團(tuán)隊(duì)的生產(chǎn)效率,一位稱職的項(xiàng)目經(jīng)理必須獎(jiǎng)勵(lì)那些工作積極主動(dòng)并且做出成績(jī)的人。必須通過自己的行為表明出現(xiàn)可控風(fēng)險(xiǎn)并不會(huì)受到懲罰。(4)影響和隊(duì)伍建設(shè):具有實(shí)戰(zhàn)能力的項(xiàng)目經(jīng)理必須能夠“理解”人。他必須能理解語(yǔ)言和非語(yǔ)言的信號(hào),并對(duì)發(fā)出這些信號(hào)的人的要求做出反應(yīng)。項(xiàng)目經(jīng)理必須能在高壓力的環(huán)境下保持良好的控制能力。3.軟件團(tuán)隊(duì)作為一種復(fù)雜的工程活動(dòng),軟件工程不是由獨(dú)立的個(gè)人而是由團(tuán)隊(duì)進(jìn)行的。通常情況下,一個(gè)團(tuán)隊(duì)可以有多個(gè)小組,較小的小組由3~4人組成,較大的小組由10余人組成。在軟件工程團(tuán)隊(duì)中,常見的分工角色有:(1)需求工程師,又稱為需求分析師:承擔(dān)需求開發(fā)任務(wù)。軟件產(chǎn)品的需求開發(fā)工作通常由多個(gè)需求工程師來完成,他們共同組成一個(gè)需求工程師小組,在首席需求工程師領(lǐng)導(dǎo)下開展工作。他們跟客戶一起工作,并把客戶想要實(shí)現(xiàn)的目標(biāo)分解為離散的需求。通常一個(gè)團(tuán)隊(duì)只有一個(gè)需求工程師小組。(2)軟件體系結(jié)構(gòu)師:承擔(dān)軟件體系結(jié)構(gòu)的設(shè)計(jì)任務(wù)。通常也是由多人組成一個(gè)小組,并在首席軟件體系結(jié)構(gòu)師的領(lǐng)導(dǎo)下開展工作。通常一個(gè)團(tuán)隊(duì)只有一個(gè)軟件體系結(jié)構(gòu)師小組。(3)軟件設(shè)計(jì)師:承擔(dān)詳細(xì)設(shè)計(jì)任務(wù)。在軟件體系結(jié)構(gòu)設(shè)計(jì)完成之后,可以將其部件分配給不同的開發(fā)小組。開發(fā)小組中負(fù)責(zé)分配部件詳細(xì)設(shè)計(jì)工作的人員就是軟件設(shè)計(jì)師。一個(gè)團(tuán)隊(duì)可能有一個(gè)或多個(gè)開發(fā)小組。一個(gè)小組可能有一個(gè)或多個(gè)軟件設(shè)計(jì)師。(4)程序員:承擔(dān)軟件構(gòu)造及模塊的測(cè)試任務(wù)。程序員與軟件設(shè)計(jì)師通常是同一批人,也是根據(jù)其所分配到的任務(wù)開展工作。(5)人機(jī)交互設(shè)計(jì)師:承擔(dān)人機(jī)交互設(shè)計(jì)任務(wù)。人機(jī)交互設(shè)計(jì)師與軟件設(shè)計(jì)師可以是同一批人,也可以是不同人員。在有多個(gè)小組的軟件工程團(tuán)隊(duì)中,可以有一個(gè)單獨(dú)的人機(jī)交互設(shè)計(jì)師小組,也可以將人機(jī)交互設(shè)計(jì)師分配到各個(gè)小組。(6)軟件測(cè)試人員:承擔(dān)軟件測(cè)試任務(wù)。軟件測(cè)試人員通常需要獨(dú)立于其他的開發(fā)人員角色。一個(gè)團(tuán)隊(duì)可能有一個(gè)或多個(gè)測(cè)試小組。一個(gè)小組可能有一個(gè)或多個(gè)軟件測(cè)試人員。(7)項(xiàng)目管理人員:負(fù)責(zé)計(jì)劃、組織、協(xié)調(diào)和控制軟件開發(fā)的各項(xiàng)工作。相比于傳統(tǒng)意義上的管理者,他們不完全是監(jiān)督者和控制者,更多的是協(xié)調(diào)者。通常一個(gè)團(tuán)隊(duì)只有一個(gè)項(xiàng)目管理人員。(8)軟件配置管理人員:管理軟件開發(fā)中產(chǎn)生的各種制品,具體工作是對(duì)重要制品進(jìn)行標(biāo)識(shí)、變更控制、狀態(tài)報(bào)告等。通常一個(gè)團(tuán)隊(duì)只有一個(gè)軟件配置管理人員。(9)質(zhì)量保證人員:在生產(chǎn)過程中監(jiān)督和控制軟件產(chǎn)品質(zhì)量的人員。通常一個(gè)團(tuán)隊(duì)有一個(gè)質(zhì)量保證小組,其由一個(gè)或多個(gè)人員組成。(10)培訓(xùn)和支持人員:負(fù)責(zé)軟件交付與維護(hù)任務(wù)。他們可以是其他開發(fā)人員的一部分,也可以是獨(dú)立的人員。(11)文檔編寫人員:專門負(fù)責(zé)寫作軟件開發(fā)過程中各種文檔的人員。他們的存在是為了充分利用部分寶貴的人力資源,讓這些人從繁雜的文檔化工作中解放出來?!白詈玫摹眻F(tuán)隊(duì)結(jié)構(gòu)取決于組織的管理風(fēng)格、團(tuán)隊(duì)里的人員數(shù)目與技能水平,以及問題的總體難易程度。Mantei提出了規(guī)劃軟件工程團(tuán)隊(duì)結(jié)構(gòu)時(shí)應(yīng)考慮的7個(gè)項(xiàng)目因素:(1)待解決問題的難度;(2)開發(fā)程序的規(guī)模,以代碼行或者功能點(diǎn)來度量;(3)團(tuán)隊(duì)成員需要共同工作的時(shí)間(團(tuán)隊(duì)生存期);(4)能夠?qū)栴}做模塊化劃分的程度;(5)待開發(fā)系統(tǒng)的質(zhì)量要求和可靠性要求;(6)交付日期的嚴(yán)格程度;(7)項(xiàng)目所需要的友好交流的程度。軟件開發(fā)步驟與開發(fā)團(tuán)隊(duì)中的角色的對(duì)應(yīng)關(guān)系如圖1.4所示。1.3軟件工程發(fā)展中的軟件開發(fā)方法與技術(shù)從20世紀(jì)50年代開始至今,軟件的開發(fā)方法與技術(shù)都有了迅猛的發(fā)展,具體如下。1.?20世紀(jì)50年代20世紀(jì)50年代,人們的主要精力集中在硬件上,所以沒有出現(xiàn)專門針對(duì)軟件開發(fā)方法與技術(shù)的需求,也就沒有出現(xiàn)被普遍使用的軟件開發(fā)方法與技術(shù)。20世紀(jì)50年代的軟件工程的特點(diǎn)是:科學(xué)計(jì)算;以機(jī)器為中心進(jìn)行編程;像生產(chǎn)硬件一樣生產(chǎn)軟件。2.?20世紀(jì)60年代由于缺乏正確科學(xué)知識(shí)的指導(dǎo),也沒有多少經(jīng)驗(yàn)原則可以遵循,因此,20世紀(jì)60年代的軟件開發(fā)在總體上依靠程序員的個(gè)人能力,是“工藝式”的開發(fā)。20世紀(jì)60年代的軟件工程的特點(diǎn)是:業(yè)務(wù)應(yīng)用;軟件不同于硬件;用軟件工藝的方式生產(chǎn)軟件。3.?20世紀(jì)70年代基于結(jié)構(gòu)化程序設(shè)計(jì)理論,20世紀(jì)70年代早期開始廣泛使用結(jié)構(gòu)化編程方法,它要求使用函數(shù)(過程)構(gòu)建程序,使用塊結(jié)構(gòu)和三種基本控制結(jié)構(gòu)(消除goto語(yǔ)句)仔細(xì)組織函數(shù)(過程)的代碼,使用程序流程圖描述程序邏輯進(jìn)行程序設(shè)計(jì),使用逐步精化(StepwiseRefinement)、自頂向下的軟件開發(fā)方法進(jìn)行軟件開發(fā)。到了20世紀(jì)70年代中后期,結(jié)構(gòu)化方法從編程活動(dòng)擴(kuò)展到分析和設(shè)計(jì)活動(dòng),圍繞功能分解思想和層次模塊結(jié)構(gòu),使用數(shù)據(jù)流圖(DFD)、實(shí)體關(guān)系圖(ERD)和結(jié)構(gòu)圖(StructureChart),建立了結(jié)構(gòu)化設(shè)計(jì)、結(jié)構(gòu)化分析、Jackson結(jié)構(gòu)程序設(shè)計(jì)(JSP)等結(jié)構(gòu)分析與設(shè)計(jì)方法??刂茝?fù)雜系統(tǒng)的復(fù)雜性是20世紀(jì)70年代追求的目標(biāo),這需要超越函數(shù)(程序)的層次,因?yàn)樗牧6忍?。因此?0世紀(jì)70年代人們開始在更高抽象的模塊層次上探索控制復(fù)雜性的方法,產(chǎn)生了“低耦合高內(nèi)聚”的模塊化、信息隱藏、抽象數(shù)據(jù)類型等重要思想,它們逐漸被吸收進(jìn)結(jié)構(gòu)化方法并推動(dòng)了20世紀(jì)80年代面向?qū)ο缶幊痰某霈F(xiàn)。20世紀(jì)70年代的軟件工程的特點(diǎn)是:結(jié)構(gòu)化方法;瀑布模型;強(qiáng)調(diào)規(guī)則和紀(jì)律。它們奠定了軟件工程的基礎(chǔ),是后續(xù)軟件工程發(fā)展的支撐。4.?20世紀(jì)80年代在20世紀(jì)80年代重要的技術(shù)中,除了少數(shù)是延續(xù)70年代的工作之外,大多數(shù)都是為了滿足提高生產(chǎn)力的要求而產(chǎn)生的。1)結(jié)構(gòu)化方法20世紀(jì)70年代中后期基于結(jié)構(gòu)化編程建立了早期的結(jié)構(gòu)化方法,包括結(jié)構(gòu)化分析與結(jié)構(gòu)化設(shè)計(jì)。但是這時(shí)的結(jié)構(gòu)化方法因?yàn)閯倓偯撾x編程,所以更多地還在關(guān)注軟件程序的構(gòu)建。也就是說,20世紀(jì)70年代中后期的結(jié)構(gòu)化分析和設(shè)計(jì)更強(qiáng)調(diào)為了最后編程而進(jìn)行分析與設(shè)計(jì),而不是為了解決現(xiàn)實(shí)問題而進(jìn)行分析與設(shè)計(jì)。到了20世紀(jì)80年代,隨著結(jié)構(gòu)化分析與設(shè)計(jì)向結(jié)構(gòu)化編程的過渡,人們逐步開始將結(jié)構(gòu)化分析與設(shè)計(jì)的關(guān)注點(diǎn)轉(zhuǎn)向問題解決和系統(tǒng)構(gòu)建,產(chǎn)生了現(xiàn)代結(jié)構(gòu)化方法,代表性的有信息工程(InformationEngineering)、Jackson系統(tǒng)開發(fā)(JSD)、結(jié)構(gòu)化系統(tǒng)分析與設(shè)計(jì)方法(SSADM)、結(jié)構(gòu)化分析和設(shè)計(jì)技術(shù)(SADT)及現(xiàn)代結(jié)構(gòu)化分析(MSA)。相對(duì)于早期的結(jié)構(gòu)化方法,20世紀(jì)80年代的現(xiàn)代結(jié)構(gòu)化方法更注重系統(tǒng)構(gòu)建而不是程序構(gòu)建,所以更重視問題分析、需求規(guī)格和系統(tǒng)總體結(jié)構(gòu)組織而不是讓分析與設(shè)計(jì)結(jié)果符合結(jié)構(gòu)化程序設(shè)計(jì)理論,更重視階段遞進(jìn)的系統(tǒng)化開發(fā)過程,而不是一切圍繞最后的編程進(jìn)行。2)面向?qū)ο缶幊套钤绲拿嫦驅(qū)ο缶幊趟枷肟勺匪莸?0世紀(jì)60年代的Simular-67語(yǔ)言,它是為了仿真而設(shè)計(jì)的程序設(shè)計(jì)語(yǔ)言,使用了類、對(duì)象、協(xié)作、繼承、多態(tài)(子類型)等最基礎(chǔ)的面向?qū)ο蟾拍睢?0世紀(jì)70年代的Smalltalk就是完全基于面向?qū)ο笏枷氲某绦蛟O(shè)計(jì)語(yǔ)言,它強(qiáng)化了一切皆是對(duì)象和對(duì)象封裝的思想,發(fā)展了繼承和多態(tài)。到了20世紀(jì)80年代中后期,隨著C++?的出現(xiàn)和廣泛應(yīng)用,面向?qū)ο缶幊坛蔀槌绦蛟O(shè)計(jì)的主流。C++?只是在C語(yǔ)言中加入面向?qū)ο蟮奶卣鳎⒉皇羌兇獾拿嫦驅(qū)ο笳Z(yǔ)言。C++?保留了C的各種特性,這種謹(jǐn)慎的設(shè)計(jì)使得程序員可以順利地接受它,另一方面是因?yàn)槊嫦驅(qū)ο笳Z(yǔ)言支持復(fù)用和更適于復(fù)雜軟件開發(fā)的特點(diǎn)符合了20世紀(jì)80年代的生產(chǎn)要求。需要特別指出的是,雖然面向?qū)ο蟮母拍钇鹪春茉?,并且很多思想與結(jié)構(gòu)化思想是完全不同的,但是面向?qū)ο蟊旧聿幌窠Y(jié)構(gòu)化一樣有基于數(shù)學(xué)的程序設(shè)計(jì)理論的支撐,所以它是在吸收了很多結(jié)構(gòu)化方法中發(fā)展出來的方法與技術(shù)之后才得到了程序正確性、清晰性和高質(zhì)量的保障。Booch認(rèn)為模塊化、信息隱藏等設(shè)計(jì)思想和數(shù)據(jù)庫(kù)模型的進(jìn)步都是促使面向?qū)ο蟾拍钛葸M(jìn)的重要因素。與結(jié)構(gòu)化方法相比,面向?qū)ο蠓椒ㄖ械慕Y(jié)構(gòu)和關(guān)系能夠?yàn)轭I(lǐng)域應(yīng)用提供更加自然的支持,使得軟件的可復(fù)用性和可修改性更加強(qiáng)大。可復(fù)用性滿足了20世紀(jì)80年代追求生產(chǎn)力的要求,尤其是提高了圖形用戶接口(GUI)編程的生產(chǎn)力,這也是推動(dòng)面向?qū)ο缶幊贪l(fā)展的重要?jiǎng)恿?。可修改性提高了軟件維護(hù)時(shí)的生產(chǎn)力。面向?qū)ο蠓椒ㄒ矠槟K內(nèi)高內(nèi)聚和模塊間低耦合提供了更好的抽象數(shù)據(jù)類型的模塊化,更加適合于復(fù)雜軟件系統(tǒng)的開發(fā)。3)軟件復(fù)用提高生產(chǎn)力的一種方式是避免重復(fù)生產(chǎn),所以在20世紀(jì)80年代人們?yōu)榱俗非笊a(chǎn)力,開始重視軟件復(fù)用。實(shí)踐經(jīng)驗(yàn)表明,軟件復(fù)用是提高生產(chǎn)力最有效的方法,可以將生產(chǎn)力提高10%~35%。除了面向?qū)ο蠓椒ㄖ?,?代語(yǔ)言、購(gòu)買商用組件、程序生產(chǎn)器等都是20世紀(jì)80年代提出的能夠促進(jìn)軟件復(fù)用的技術(shù)。20世紀(jì)80年代的軟件工程的特點(diǎn)是:追求生產(chǎn)力最大化;現(xiàn)代結(jié)構(gòu)化方法/面向?qū)ο缶幊虖V泛應(yīng)用;重視過程的作用。5.?20世紀(jì)90年代1)面向?qū)ο蠓椒ㄅc結(jié)構(gòu)化編程的成功促進(jìn)了結(jié)構(gòu)化分析與設(shè)計(jì)方法的產(chǎn)生一樣,面向?qū)ο缶幊痰某晒σ泊龠M(jìn)了面向?qū)ο蠓治雠c設(shè)計(jì)方法在20世紀(jì)90年代的產(chǎn)生,并促使面向?qū)ο蠓治雠c設(shè)計(jì)方法迅速被廣泛使用。20世紀(jì)90年代的面向?qū)ο蠓椒ǖ木唧w進(jìn)展有:(1)出現(xiàn)了對(duì)象建模技術(shù)(OMT)、Booch方法、面向?qū)ο蟮能浖こ?OOSE)、類-責(zé)任-合作者(CRC)卡等一系列面向?qū)ο蟮姆治雠c設(shè)計(jì)方法。(2)統(tǒng)一的面向?qū)ο蠼UZ(yǔ)言UML的建立和傳播。(3)設(shè)計(jì)模式、面向?qū)ο笤O(shè)計(jì)原則等有效的面向?qū)ο髮?shí)踐經(jīng)驗(yàn)被廣泛傳播和應(yīng)用。2)軟件體系結(jié)構(gòu)20世紀(jì)70年代開發(fā)復(fù)雜軟件系統(tǒng)的初步嘗試使得人們明確和發(fā)展了獨(dú)立的軟件設(shè)計(jì)體系,提出了模塊化、信息隱藏等最為基礎(chǔ)的設(shè)計(jì)思想。到了20世紀(jì)80年代中期,這些思想逐漸成熟,并且成功融入了軟件開發(fā)過程。這時(shí),一些新的探索就出現(xiàn)了,其中包括面向?qū)ο笤O(shè)計(jì),也包括針對(duì)大規(guī)模軟件系統(tǒng)設(shè)計(jì)的一些總結(jié)與思考。在對(duì)大規(guī)模系統(tǒng)的設(shè)計(jì)經(jīng)驗(yàn)進(jìn)行總結(jié)時(shí),人們發(fā)現(xiàn)越來越需要有一種更高抽象層次的設(shè)計(jì)體系來進(jìn)行思想的匯總與提升。于是,研究者們?cè)?0世紀(jì)90年代初期正式提出了“軟件體系結(jié)構(gòu)”這一主題,并結(jié)合90年代之后出現(xiàn)的軟件系統(tǒng)規(guī)模日益擴(kuò)大的趨勢(shì),在其后的10年中對(duì)其進(jìn)行了深入的探索與研究。人們?cè)隗w系結(jié)構(gòu)的基本內(nèi)涵、風(fēng)格、描述、設(shè)計(jì)、評(píng)價(jià)等方面開展了卓有成效的工作,在21世紀(jì)初建立了一個(gè)比較系統(tǒng)的軟件體系結(jié)構(gòu)方法體系。軟件體系結(jié)構(gòu)使用部件、連接件和配置三個(gè)高抽象層次的邏輯單位,關(guān)注如何將大批獨(dú)立模塊組織形成一個(gè)“系統(tǒng)”而不是各個(gè)模塊本身,也就是說更重視系統(tǒng)的總體組織。軟件體系結(jié)構(gòu)成為大規(guī)模軟件系統(tǒng)開發(fā)中處理質(zhì)量屬性和控制復(fù)雜性的主要手段,改變了大規(guī)模軟件系統(tǒng)的開發(fā)方式,提高了大規(guī)模軟件系統(tǒng)開發(fā)的成功率和產(chǎn)品質(zhì)量。3)人機(jī)交互為了吸引更多的用戶,贏得市場(chǎng)競(jìng)爭(zhēng),人們?cè)?0世紀(jì)90年代開始重視人機(jī)交互,提出“以用戶為中心”(User-CenteredDesign)的設(shè)計(jì)方法。人機(jī)交互的基本目標(biāo)是開發(fā)更加友好的軟件產(chǎn)品,最低標(biāo)準(zhǔn)是讓普通人在使用軟件產(chǎn)品時(shí)比較順暢,較高標(biāo)準(zhǔn)是讓用戶在使用產(chǎn)品時(shí)感到滿足和愉悅。從20世紀(jì)50年代開始人機(jī)交互技術(shù)就一直在發(fā)展,但是直到90年代人們才開始重視如何將人機(jī)交互技術(shù)融入軟件工程,并建立了一些人機(jī)交互的軟件工程方法,包括快速原型、參與式設(shè)計(jì)、各種人機(jī)交互指導(dǎo)原則等。4)需求工程自“瀑布模型”起,人們就已經(jīng)認(rèn)識(shí)到并強(qiáng)調(diào)了需求分析的作用。但是,到了20世紀(jì)90年代,隨著“以企業(yè)為中心”軟件系統(tǒng)規(guī)模的增長(zhǎng),人們認(rèn)識(shí)到需求處理除了核心的需求分析活動(dòng)之外,還有其他的活動(dòng)也需要慎重對(duì)待,要進(jìn)行“需求工程”,即利用工程化的手段進(jìn)行需求處理,以保證需求處理的正確進(jìn)行。相比于傳統(tǒng)的需求分析,需求工程將用戶價(jià)值分析視為基本要求,重視產(chǎn)品分析、問題與目標(biāo)分析、業(yè)務(wù)分析、與用戶的交流和溝通等。需求工程本質(zhì)上反映了應(yīng)用軟件與現(xiàn)實(shí)之間的聯(lián)系日益增強(qiáng)的事實(shí)。5)基于軟件復(fù)用的大規(guī)模軟件系統(tǒng)開發(fā)技術(shù)在大規(guī)模軟件系統(tǒng)開發(fā)中,為了解決復(fù)雜度與開發(fā)周期的兩難局面,人們充分利用了軟件復(fù)用思想,建立了多種基于軟件復(fù)用的大規(guī)模軟件系統(tǒng)開發(fā)技術(shù),其中最為流行的是框架(Framework)和構(gòu)件(Component)??蚣苁穷I(lǐng)域特定的復(fù)用技術(shù)。它的基本思想是根據(jù)應(yīng)用領(lǐng)域的共性和差異性特點(diǎn),建立一個(gè)靈活的體系結(jié)構(gòu),并實(shí)現(xiàn)其中比較固定的部分,留下變化的部分等待開發(fā)者補(bǔ)充。簡(jiǎn)單地說,框架開發(fā)者完成了框架的總體設(shè)計(jì)和部分開發(fā)工作,然后將未開發(fā)的部分留作空白,等待框架的使用者填充。20世紀(jì)90年代,很多應(yīng)用領(lǐng)域都建立了自己的開發(fā)框架。構(gòu)件是在代碼實(shí)現(xiàn)層次上進(jìn)行復(fù)用的技術(shù)。它的基本思想是給所有的構(gòu)件定義一個(gè)接口標(biāo)準(zhǔn),就像機(jī)械工程定義螺絲和螺母的標(biāo)準(zhǔn)規(guī)格一樣,這樣就可以忽略每個(gè)構(gòu)件內(nèi)部的因素,實(shí)現(xiàn)不同構(gòu)件之間的通信和交互。構(gòu)件通常是黑盒的二進(jìn)制代碼,帶有專門的說明書,可以像機(jī)器零件那樣被獨(dú)立生產(chǎn)、銷售和使用。組件對(duì)象模型(COM)和JavaBean就是20世紀(jì)90年代產(chǎn)生并流行起來的構(gòu)件標(biāo)準(zhǔn)。6)?Web開發(fā)技術(shù)Web應(yīng)用的開發(fā)技術(shù)不同于傳統(tǒng)軟件形式。在20世紀(jì)90年代早期,人們主要使用HTML開發(fā)靜態(tài)的Web站點(diǎn)。到了90年代中后期,動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)、JSP、超文本預(yù)處理器、JavaScript等動(dòng)態(tài)Web開發(fā)技術(shù)開始流行。人們建立了Web程序的數(shù)據(jù)描述標(biāo)準(zhǔn)XML。20世紀(jì)90年代軟件工程的特點(diǎn)是:以企業(yè)為中心的大規(guī)模軟件系統(tǒng)開發(fā);追求快速開發(fā)、可變更性和用戶價(jià)值;Web應(yīng)用出現(xiàn)。6.?21世紀(jì)00年代1)延續(xù)20世紀(jì)90年代的技術(shù)進(jìn)展20世紀(jì)90年代產(chǎn)生的一些重要技術(shù),在21世紀(jì)00年代繼續(xù)得到發(fā)展和完善:(1)軟件體系結(jié)構(gòu):到了2000年,軟件體系結(jié)構(gòu)設(shè)計(jì)方法基本成熟,2000年之后開始廣泛使用。軟件體系結(jié)構(gòu)的研究和探索工作繼續(xù)深入,轉(zhuǎn)向軟件體系結(jié)構(gòu)設(shè)計(jì)決策的描述和產(chǎn)生過程。(2)需求工程:2000年之后的軟件需求工程逐漸與系統(tǒng)工程相融合,典型表現(xiàn)是越來越重視系統(tǒng)需求而不是軟件需求的分析,包括目標(biāo)分析、背景環(huán)境分析、系統(tǒng)屬性分析等。(3)人機(jī)交互:隨著Web應(yīng)用和小型設(shè)備應(yīng)用越來越突出,21世紀(jì)前10年人機(jī)交互將Web的人機(jī)交互和小型設(shè)備的人機(jī)交互作為工作重點(diǎn)。(4)基于復(fù)用的大型軟件系統(tǒng)開發(fā)技術(shù):Struts、Spring等針對(duì)Web的開發(fā)框架成為軟件開發(fā)的主流工具;更適應(yīng)Web的WebService構(gòu)件類型被應(yīng)用得越來越廣泛。2)?Web技術(shù)發(fā)展隨著Web的發(fā)展,21世紀(jì)前10年的很多技術(shù)進(jìn)展都與Web有關(guān):(1)?20世紀(jì)90年代產(chǎn)生的各種動(dòng)態(tài)Web開發(fā)技術(shù)成為軟件開發(fā)必不可少的部分。(2)適用于Web開發(fā)的構(gòu)件中間件平臺(tái)?.NET和J2EE成為軟件開發(fā)的主流平臺(tái)。(3)瀏覽器/服務(wù)器模式(B/S)、N-Tier、面向服務(wù)的架構(gòu)(SOA)、消息總線等適合于Web應(yīng)用的體系結(jié)構(gòu)風(fēng)格被廣泛傳播。(4)針對(duì)Web的開發(fā)框架成為主流的軟件開發(fā)工具。(5)博客、即時(shí)通信等Web2.0技術(shù)出現(xiàn)并得到廣泛應(yīng)用。3)領(lǐng)域特定的軟件工程方法 該方法從20世紀(jì)90年代開始出現(xiàn),在21世紀(jì)前10年,軟件工程方法分領(lǐng)域深入成為主流。在技術(shù)領(lǐng)域方面,下列技術(shù)領(lǐng)域都出現(xiàn)了明顯的進(jìn)展:(1)以網(wǎng)絡(luò)為中心的系統(tǒng);(2)信息系統(tǒng);(3)金融和電子商務(wù)系統(tǒng);(4)高可信系統(tǒng);(5)嵌入式和實(shí)時(shí)系統(tǒng);(6)多媒體、游戲和娛樂系統(tǒng);(7)小型移動(dòng)平臺(tái)系統(tǒng)。在應(yīng)用領(lǐng)域方面,越來越多的領(lǐng)域開始根據(jù)自身特點(diǎn)定義參照體系結(jié)構(gòu)、開發(fā)框架、可復(fù)用構(gòu)件和領(lǐng)域特定的編程語(yǔ)言。面向應(yīng)用領(lǐng)域進(jìn)行軟件開發(fā)的產(chǎn)品線(ProductLine)方法得到了越來越多的關(guān)注和使用。21世紀(jì)前10年軟件工程的特點(diǎn)是:大規(guī)模Web應(yīng)用;大量面向大眾的Web產(chǎn)品;追求快速開發(fā)、可變更性、用戶價(jià)值和創(chuàng)新。1.4計(jì)算機(jī)輔助軟件工程計(jì)算機(jī)輔助軟件工程(CASE)是一組工具和方法的集合,用于輔助軟件開發(fā)、維護(hù)、管理過程中的各項(xiàng)活動(dòng),促進(jìn)軟件過程的工程化和自動(dòng)化,實(shí)現(xiàn)高效率和高質(zhì)量的軟件開發(fā)。如今,CASE工具已經(jīng)由支持單一任務(wù)的單個(gè)工具向支持整個(gè)開發(fā)過程的集成化軟件工程環(huán)境的方向發(fā)展,同時(shí)重視用戶界面的設(shè)計(jì),不斷采用新理論和新技術(shù),成為軟件工程領(lǐng)域的一個(gè)重要分支。CASE環(huán)境的組成構(gòu)件如圖1.5所示。CASE環(huán)境應(yīng)用應(yīng)具有以下功能:(1)提供一種機(jī)制,使環(huán)境中的所有工具可以共享軟件工程信息。(2)每一個(gè)信息項(xiàng)的改變,可以追蹤到其他相關(guān)信息項(xiàng)。(3)對(duì)所有軟件工程信息提供版本控制和配置管理。(4)對(duì)環(huán)境中的任何工具可進(jìn)行直接的、非順序的訪問。(5)在標(biāo)準(zhǔn)的分解結(jié)構(gòu)中提供工具和數(shù)據(jù)的自動(dòng)支持。(6)使每個(gè)工具的用戶共享人機(jī)界面的所有功能。(7)收集能夠改善過程和產(chǎn)品的各項(xiàng)度量指標(biāo)。(8)支持軟件工程師之間的通信。目前,市場(chǎng)上有許多商業(yè)化的CASE工具,它們?cè)谝欢ǔ潭壬洗龠M(jìn)了軟件過程的工程化。1.5軟件工程與其他相關(guān)學(xué)科的關(guān)系軟件工程是一門交叉性的工程學(xué)科,如圖1.6所示。軟件工程以計(jì)算機(jī)科學(xué)和數(shù)學(xué)為基礎(chǔ),將這些學(xué)科的基本原理應(yīng)用于構(gòu)造軟件的模型與算法,力求提出更系統(tǒng)化和更形式化的軟件開發(fā)方法,并采用適當(dāng)?shù)姆椒?yàn)證即將開發(fā)的軟件。正確的軟件開發(fā)實(shí)踐更重要的是將工程化的原則和方法應(yīng)用于軟件的分析與評(píng)價(jià)、規(guī)格說明、設(shè)計(jì)、實(shí)現(xiàn)、演化等過程。軟件工程運(yùn)用工程科學(xué)的基本原理,結(jié)合特定領(lǐng)域的基礎(chǔ)知識(shí)和相關(guān)的專業(yè)知識(shí),通過評(píng)估成本與確定權(quá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è)過程與項(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ā)過程的質(zhì)量控制活動(dòng),而且持續(xù)的演變(即“維護(hù)”)也尤為重要。1.6軟件工程職業(yè)道德規(guī)范職業(yè)道德是所有從業(yè)人員應(yīng)當(dāng)具備的最基本的道德素養(yǎng),也是這些人員在其職業(yè)活動(dòng)中應(yīng)當(dāng)遵循的最基本的行為準(zhǔn)則。IEEE-CS和ACM聯(lián)合制定了《軟件工程職業(yè)道德和職業(yè)行為準(zhǔn)則》,包括有關(guān)專業(yè)軟件工程師行為和決斷的8項(xiàng)原則,要求軟件工程人員應(yīng)履行其實(shí)踐承諾,使軟件的需求分析、規(guī)格說明、設(shè)計(jì)、開發(fā)、測(cè)試和維護(hù)成為一項(xiàng)對(duì)社會(huì)有益和受人尊敬的職業(yè)。軟件工程師應(yīng)當(dāng)遵循的8項(xiàng)原則如下:(1)公眾:軟件工程人員應(yīng)始終與公眾利益保持一致。(2)客戶和雇主:在與公眾利益保持一致的原則下,軟件工程人員應(yīng)滿足客戶和雇主的最大利益。(3)產(chǎn)品:軟件工程人員應(yīng)當(dāng)確保他們的產(chǎn)品及其改進(jìn)符合盡可能高的專業(yè)標(biāo)準(zhǔn)。(4)判斷:軟件工程人員應(yīng)當(dāng)具備公正和獨(dú)立的職業(yè)判斷力。(5)管理:軟件工程管理者和領(lǐng)導(dǎo)者應(yīng)擁護(hù)和倡導(dǎo)合乎道德的有關(guān)軟件開發(fā)和維護(hù)的管理方法。(6)職業(yè):在與公眾利益一致的原則下,軟件工程人員應(yīng)當(dāng)提高職業(yè)的信譽(yù)。(7)同行:軟件工程人員對(duì)其同行應(yīng)持平等和支持的態(tài)度。(8)自我:軟件工程人員應(yīng)當(dāng)終身學(xué)習(xí)專業(yè)知識(shí),促進(jìn)合乎道德的職業(yè)實(shí)踐方法。1.7軟件項(xiàng)目成敗情況統(tǒng)計(jì)在20世紀(jì)90年代出現(xiàn)的大量軟件生產(chǎn)狀況調(diào)查中,以StandishGroup的CHAOS系列最引人注目。StandishGroup是美國(guó)的一家咨詢公司,它于1993年開始展開軟件狀況的調(diào)查,并隨后發(fā)布了一系列的調(diào)查報(bào)告,稱為CHAOS系列。在StandishGroup的調(diào)查中,將軟件項(xiàng)目分為以下3種類別:(1)在預(yù)計(jì)的時(shí)間之內(nèi),在預(yù)算的成本之下,完成預(yù)期的所有功能,則項(xiàng)目為成功項(xiàng)目(Success)。(2)已經(jīng)完成,軟件產(chǎn)品能夠正常工作,但在生產(chǎn)中或者超支,或者超期,或者實(shí)現(xiàn)的功能不全,則項(xiàng)目為問題項(xiàng)目(ChallengedorFaulty)。(3)因無法進(jìn)行而被中途撤銷,或者最終產(chǎn)品無法提交使用,則項(xiàng)目為失敗項(xiàng)目(FailedorImpaired)。1.8全球軟件產(chǎn)業(yè)的現(xiàn)狀、趨勢(shì)與挑戰(zhàn)目前,美國(guó)掌握全球軟件產(chǎn)業(yè)核心技術(shù)。從產(chǎn)業(yè)鏈角度的競(jìng)爭(zhēng)格局來看,當(dāng)前世界軟件市場(chǎng)形成了以美國(guó)、歐洲、印度、日本、中國(guó)等國(guó)為主的國(guó)際軟件產(chǎn)業(yè)分工體系,世界軟件產(chǎn)業(yè)鏈的上游、中游和下游鏈條分布逐漸明晰。全球軟件市場(chǎng)競(jìng)爭(zhēng)格局如表1.4所示。從全球軟件行業(yè)的區(qū)域競(jìng)爭(zhēng)狀況來看,主要存在國(guó)際化競(jìng)爭(zhēng)日趨激烈、軟硬件結(jié)合更加緊密、定制和通用產(chǎn)品兩極化、資本重要性漸強(qiáng)等發(fā)展趨勢(shì)。中國(guó)的微信、抖音、支付寶、鴻蒙系統(tǒng)等軟件的開發(fā)和應(yīng)用,說明我國(guó)的軟件產(chǎn)品已取得世界領(lǐng)先地位,但在芯片核心技術(shù)等“卡脖子”領(lǐng)域,我們還要奮起直追。只有依靠科技自立自強(qiáng)才能贏得未來。2.1軟件生命周期

2.2軟件過程的概念

2.3幾種典型的軟件過程模型

2.4微軟公司的軟件開發(fā)過程2.1軟件生命周期我國(guó)國(guó)家標(biāo)準(zhǔn)《計(jì)算機(jī)軟件文檔編制規(guī)范》(GB/T8567—2006)把軟件生命周期劃分為可行性與計(jì)劃研究階段、需求分析階段、設(shè)計(jì)階段、實(shí)現(xiàn)階段、測(cè)試階段、運(yùn)行與維護(hù)階段六個(gè)階段。通常,人們把可行性與計(jì)劃研究階段、需求分析階段這兩個(gè)階段稱為軟件定義時(shí)期,把設(shè)計(jì)階段、實(shí)現(xiàn)階段、測(cè)試階段這三個(gè)階段稱為軟件開發(fā)時(shí)期,而把運(yùn)行與維護(hù)階段稱為軟件運(yùn)行與維護(hù)時(shí)期。軟件生命周期各個(gè)時(shí)期及階段的關(guān)系如圖2.1所示。2.1.1軟件生命周期中時(shí)期與階段的劃分以及各階段的任務(wù)1.軟件定義時(shí)期在軟件生命周期中,軟件定義時(shí)期又可分為可行性與計(jì)劃研究和需求分析兩個(gè)階段。1)可行性與計(jì)劃研究階段在可行性與計(jì)劃研究階段主要完成以下工作:(1)要確定該軟件的開發(fā)目標(biāo)和總的要求。(2)要進(jìn)行可行性分析。(3)投資-收益分析。(4)制訂開發(fā)計(jì)劃。(5)完成可行性分析報(bào)告。(6)完成開發(fā)計(jì)劃等文檔。2)需求分析階段在需求分析階段內(nèi),由系統(tǒng)分析人員對(duì)被設(shè)計(jì)的系統(tǒng)進(jìn)行系統(tǒng)分析,確定該軟件的各項(xiàng)功能、性能需求和設(shè)計(jì)約束,確定文檔編制的要求。作為本階段工作的結(jié)果,一般地說軟件需求規(guī)格說明(也稱為軟件需求說明、軟件規(guī)格說明)、數(shù)據(jù)要求說明和初步的用戶手冊(cè)應(yīng)該編寫出來,主要包括:(1)需求調(diào)查:對(duì)軟件的需求及其使用環(huán)境進(jìn)行詳細(xì)調(diào)查,掌握用戶的要求和環(huán)境所能提供的條件。(2)功能、性能與環(huán)境約束分析:根據(jù)掌握的情況,對(duì)軟件系統(tǒng)的功能(即回答系統(tǒng)必須做什么)、性能(包括軟件的安全性、可靠性、可維護(hù)性、精度、錯(cuò)誤處理、適應(yīng)性、用戶培訓(xùn)等)和環(huán)境約束(指待開發(fā)的軟件系統(tǒng)必須滿足運(yùn)行環(huán)境方面的要求)進(jìn)行分析研究,與用戶取得一致的認(rèn)識(shí)。(3)編制軟件需求規(guī)格說明:把軟件系統(tǒng)的功能需求、性能需求、接口需求、設(shè)計(jì)需求、基本結(jié)構(gòu)、開發(fā)標(biāo)準(zhǔn)、驗(yàn)收原則等寫成軟件需求規(guī)格說明,并得到用戶的確認(rèn)。(4)制定軟件系統(tǒng)的確認(rèn)測(cè)試準(zhǔn)則和用戶手冊(cè)概要:根據(jù)確認(rèn)的軟件開發(fā)標(biāo)準(zhǔn)及驗(yàn)收原則制定具體的軟件確認(rèn)測(cè)試準(zhǔn)則和用戶手冊(cè)概要或提綱。2.軟件開發(fā)時(shí)期軟件開發(fā)時(shí)期主要包括設(shè)計(jì)階段、實(shí)現(xiàn)階段以及測(cè)試階段。1)設(shè)計(jì)階段在設(shè)計(jì)階段內(nèi),系統(tǒng)設(shè)計(jì)人員和程序設(shè)計(jì)人員應(yīng)該在反復(fù)理解軟件需求的基礎(chǔ)上,提出多個(gè)設(shè)計(jì),分析每個(gè)設(shè)計(jì)能履行的功能并進(jìn)行相互比較,最后確定一個(gè)設(shè)計(jì),包括該軟件的結(jié)構(gòu)、模塊(或CSCI)的劃分、功能的分配以及處理流程。在被設(shè)計(jì)系統(tǒng)比較復(fù)雜的情況下,設(shè)計(jì)階段應(yīng)分解成概要設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段兩個(gè)步驟。在一般情況下,應(yīng)完成的文檔包括:軟件(結(jié)構(gòu))設(shè)計(jì)說明、詳細(xì)設(shè)計(jì)說明和測(cè)試計(jì)劃初稿。(1)概要設(shè)計(jì)階段包括以下工作:①建立軟件系統(tǒng)的總體結(jié)構(gòu)。②定義功能模塊的接口。③設(shè)計(jì)全局?jǐn)?shù)據(jù)庫(kù)和數(shù)據(jù)結(jié)構(gòu)。④規(guī)定設(shè)計(jì)約束。⑤編制概要設(shè)計(jì)文檔。(2)詳細(xì)設(shè)計(jì)階段包括以下工作:①模塊詳細(xì)設(shè)計(jì)。②編制模塊的詳細(xì)規(guī)格說明。2)實(shí)現(xiàn)階段在實(shí)現(xiàn)階段內(nèi),要完成源程序的編碼、編譯(或匯編)和排錯(cuò)調(diào)試,得到無語(yǔ)法錯(cuò)的程序清單,要開始編寫進(jìn)度日?qǐng)?bào)、周報(bào)和月報(bào),并且要完成用戶手冊(cè)、操作手冊(cè)等面向用戶的文檔的編寫工作,還要完成測(cè)試計(jì)劃的編制。(1)編碼:根據(jù)模塊詳細(xì)規(guī)格說明書,將詳細(xì)設(shè)計(jì)轉(zhuǎn)化為程序代碼。(2)單元測(cè)試:對(duì)模塊程序進(jìn)行測(cè)試,驗(yàn)證模塊功能及接口與詳細(xì)設(shè)計(jì)文檔的一致性,并形成單元測(cè)試報(bào)告。3)測(cè)試階段在測(cè)試階段:該程序?qū)⒈蝗娴販y(cè)試,已編制的文檔將被檢查審閱。一般要完成測(cè)試分析報(bào)告。作為開發(fā)工作的結(jié)束,所生產(chǎn)的程序、文檔以及開發(fā)工作本身將逐項(xiàng)被評(píng)價(jià),最后寫出項(xiàng)目開發(fā)總結(jié)報(bào)告。測(cè)試階段包括組裝測(cè)試階段和確認(rèn)測(cè)試階段。在整個(gè)開發(fā)過程中(即前五個(gè)階段中),開發(fā)集體要按月編寫開發(fā)進(jìn)度月報(bào)。(1)組裝測(cè)試階段包括以下工作:①模塊程序組裝與測(cè)試。②編制組裝測(cè)試報(bào)告。(2)確認(rèn)測(cè)試階段包括以下工作:①軟件系統(tǒng)測(cè)試。②編制確認(rèn)測(cè)試文檔。③軟件評(píng)審。3.軟件運(yùn)行與維護(hù)時(shí)期在運(yùn)行和維護(hù)階段,軟件將在運(yùn)行使用中不斷地被維護(hù),根據(jù)新提出的需求進(jìn)行必要而且可能的擴(kuò)充、刪改、更新和升級(jí)。(1)軟件的使用階段:將軟件安裝在用戶確定的運(yùn)行環(huán)境中使用。(2)軟件的維護(hù)階段:對(duì)軟件產(chǎn)品進(jìn)行修改或根據(jù)軟件需求變化做出響應(yīng),并對(duì)所有的維護(hù)寫出維護(hù)報(bào)告。(3)軟件的退役階段:軟件一旦完成了其使命,或者由于一個(gè)新的軟件生命周期的開始,就要終止對(duì)軟件產(chǎn)品的支持,這使得軟件停止使用。2.1.2軟件生命周期中各階段所占的百分比軟件生命周期中各階段所占的百分比和各階段的參與人員如表2.1所示。2.1.3軟件生命周期中各階段的文檔在軟件生存周期中,一般應(yīng)產(chǎn)生以下基本文檔:(1)可行性分析(研究)報(bào)告;(2)軟件(或項(xiàng)目)開發(fā)計(jì)劃;(3)軟件需求規(guī)格說明;(4)接口需求規(guī)格說明;(5)系統(tǒng)/子系統(tǒng)設(shè)計(jì)(結(jié)構(gòu)設(shè)計(jì))說明;(6)軟件(結(jié)構(gòu))設(shè)計(jì)說明;(7)接口設(shè)計(jì)說明;(8)數(shù)據(jù)庫(kù)(頂層)設(shè)計(jì)說明;(9)?(軟件)用戶手冊(cè);(10)操作手冊(cè);(11)測(cè)試計(jì)劃;(12)測(cè)試報(bào)告;(13)軟件配置管理計(jì)劃;(14)軟件質(zhì)量保證計(jì)劃;(15)開發(fā)進(jìn)度月報(bào);(16)項(xiàng)目開發(fā)總結(jié)報(bào)告;(17)軟件產(chǎn)品規(guī)格說明;(18)軟件版本說明等。2.1.4各類人員使用的文檔說明各類人員所使用的文檔如表2.2所示。2.2軟件過程的概念2.2.1軟件過程的定義軟件過程是用以開發(fā)和維護(hù)軟件及其相關(guān)產(chǎn)品的一系列方法、實(shí)踐、活動(dòng)和轉(zhuǎn)換,包括軟件工程活動(dòng)和軟件管理活動(dòng)。2.2.2軟件過程的基本活動(dòng)一般的軟件過程包括問題提出、軟件需求說明、軟件設(shè)計(jì)、軟件實(shí)現(xiàn)、軟件確認(rèn)、軟件演化等基本活動(dòng)。(1)問題提出:開展技術(shù)探索、市場(chǎng)調(diào)查等活動(dòng),研究系統(tǒng)的可行性和可能的解決方案,確定待開發(fā)系統(tǒng)的總體目標(biāo)和范圍。(2)軟件需求說明:分析、整理和提煉所收集到的用戶需求,建立完整的分析模型,編寫軟件需求規(guī)格說明和初步的用戶手冊(cè)。通過評(píng)審需求規(guī)格說明,確保對(duì)用戶需求達(dá)到共同的理解與認(rèn)識(shí)。(3)軟件設(shè)計(jì):根據(jù)軟件需求規(guī)格說明文檔,確定軟件的體系結(jié)構(gòu),再進(jìn)一步設(shè)計(jì)每個(gè)系統(tǒng)部件的實(shí)現(xiàn)算法、數(shù)據(jù)結(jié)構(gòu)、接口等,編寫軟件設(shè)計(jì)說明書,并組織進(jìn)行設(shè)計(jì)評(píng)審。(4)軟件實(shí)現(xiàn):將所設(shè)計(jì)的各個(gè)子系統(tǒng)編寫成計(jì)算機(jī)可接受的程序代碼。(5)軟件確認(rèn):在設(shè)計(jì)測(cè)試用例的基礎(chǔ)上,測(cè)試軟件的各個(gè)組成模塊,并將各個(gè)模塊集成起來,測(cè)試整個(gè)產(chǎn)品的功能和性能是否滿足已有的規(guī)格說明。(6)軟件演化:整個(gè)軟件過程是一個(gè)不斷演化的過程,軟件開發(fā)覆蓋從概念的提出到形成一個(gè)可運(yùn)行系統(tǒng)的整個(gè)過程,軟件維護(hù)則是系統(tǒng)投入使用后所產(chǎn)生的修改。2.2.3軟件過程的制品在軟件過程的不同階段,會(huì)產(chǎn)生不同的軟件制品,如需求規(guī)格說明書、設(shè)計(jì)說明書、源程序代碼與構(gòu)件、測(cè)試用例、用戶手冊(cè)以及各種開發(fā)管理文檔等,表2.3列出了軟件過程的一些基本活動(dòng)以及所產(chǎn)生的主要過程制品。2.2.4軟件項(xiàng)目從立項(xiàng)到結(jié)題的過程通常情況下,一個(gè)軟件項(xiàng)目從立項(xiàng)到結(jié)題要經(jīng)過不同的階段,每個(gè)階段要完成相應(yīng)的文檔。雖然每個(gè)企業(yè)最終形成的文檔不盡相同,但都是根據(jù)企業(yè)的實(shí)際情況,在國(guó)家標(biāo)準(zhǔn)的基礎(chǔ)之上進(jìn)行適當(dāng)刪減的結(jié)果,其基本內(nèi)容如下。1.撰寫立項(xiàng)申請(qǐng)書一個(gè)項(xiàng)目要通過填報(bào)項(xiàng)目申報(bào)書,經(jīng)相關(guān)部門的專家評(píng)審?fù)ㄟ^后才予以立項(xiàng)。2.簽署立項(xiàng)合同一個(gè)項(xiàng)目通過專家評(píng)審予以立項(xiàng)后,就要與立項(xiàng)相關(guān)部門簽署合同,該合同具有法律效力。3.撰寫開題報(bào)告雙方簽訂好合同后,在一個(gè)月內(nèi)要完成項(xiàng)目開題及開題報(bào)告的撰寫并在相關(guān)專家的參與下完成開題工作。4.撰寫中期檢查報(bào)告項(xiàng)目進(jìn)展到中期時(shí),要接受相關(guān)部門的檢查,考核是否按任務(wù)書中的進(jìn)度完成了該時(shí)間點(diǎn)應(yīng)該完成的工作。5.撰寫項(xiàng)目結(jié)題報(bào)告書及項(xiàng)目開發(fā)總結(jié)報(bào)告項(xiàng)目完成時(shí),需要撰寫項(xiàng)目結(jié)題報(bào)告及項(xiàng)目開發(fā)總結(jié)報(bào)告。項(xiàng)目開發(fā)總結(jié)報(bào)告的編制是為了總結(jié)本項(xiàng)目開發(fā)工作的經(jīng)驗(yàn),說明實(shí)際取得的開發(fā)結(jié)果以及對(duì)整個(gè)開發(fā)工作的各個(gè)方面的評(píng)價(jià)。6.項(xiàng)目驗(yàn)收提交項(xiàng)目驗(yàn)收相關(guān)文檔后,在規(guī)定的時(shí)間內(nèi),相關(guān)部門對(duì)項(xiàng)目進(jìn)行驗(yàn)收。7.發(fā)結(jié)題證書項(xiàng)目驗(yàn)收合格后,由相關(guān)部門在規(guī)定的時(shí)間內(nèi)頒發(fā)結(jié)題證書。至此,該項(xiàng)目最終結(jié)題。2.3幾種典型的軟件過程模型2.3.1瀑布模型瀑布模型規(guī)定了各項(xiàng)軟件工程活動(dòng),包括制訂開發(fā)計(jì)劃、進(jìn)行需求分析和說明、軟件設(shè)計(jì)、程序編碼、測(cè)試及運(yùn)行維護(hù)。瀑布模型還規(guī)定了它們自上而下、相互銜接的固定次序,如同瀑布流水一樣逐級(jí)下落,如圖2.2所示。瀑布模型的基本思想:根據(jù)軟件生命周期中各階段的任務(wù),從可行性研究與計(jì)劃開始,逐步進(jìn)行階段性變換,直至通過確認(rèn)測(cè)試并得到用戶確認(rèn)的軟件為止。瀑布模型的特點(diǎn)如下:(1)階段間的順序性和依賴性:上一階段的變換結(jié)果是下一階段變換的輸入,相鄰兩個(gè)階段具有因果關(guān)系,每個(gè)階段完成任務(wù)后,都必須進(jìn)行階段性評(píng)審,確認(rèn)之后再轉(zhuǎn)入下一個(gè)階段。(2)文檔驅(qū)動(dòng)性:要求每個(gè)階段必須完成規(guī)定的文檔并通過評(píng)審,以便盡早發(fā)現(xiàn)問題,改正錯(cuò)誤。瀑布模型的優(yōu)點(diǎn):可強(qiáng)迫開發(fā)人員采用規(guī)范的方法,嚴(yán)格提交文檔,做好階段評(píng)審,從而使軟件過程易于管理和控制,有利于軟件的質(zhì)量保障。瀑布模型的缺點(diǎn):要求軟件開發(fā)初期就要給出軟件系統(tǒng)的全部需求,開發(fā)周期比較長(zhǎng),承擔(dān)的風(fēng)險(xiǎn)也比較大。軟件開發(fā)的實(shí)踐表明,上述各項(xiàng)活動(dòng)之間并非完全是自上而下,呈線性圖式。實(shí)際情況是,每項(xiàng)開發(fā)活動(dòng)均處于一個(gè)質(zhì)量環(huán)(輸入—處理—輸出—評(píng)審)中。只有當(dāng)其工作得到確認(rèn),才能繼續(xù)進(jìn)行下一項(xiàng)活動(dòng),在圖2.2中用向下的箭頭表示;否則返工,在圖2.2中由向上的箭頭表示。2.3.2快速原型模型快速原型模型的第一步是建造一個(gè)快速原型,實(shí)現(xiàn)客戶或未來的用戶與系統(tǒng)的交互,用戶或客戶對(duì)原型進(jìn)行評(píng)價(jià),進(jìn)一步細(xì)化待開發(fā)軟件的需求。通過逐步調(diào)整原型使其滿足客戶的要求,開發(fā)人員可以確定客戶的真正需求是什么。第二步則在第一步的基礎(chǔ)上開發(fā)客戶滿意的軟件產(chǎn)品。顯然,快速原型方法可以克服瀑布模型的缺點(diǎn),減少由于軟件需求不明確帶來的開發(fā)風(fēng)險(xiǎn),具有顯著的效果,如圖2.3所示??焖僭偷年P(guān)鍵在于盡可能快速地建造出軟件原型,一旦確定了客戶的真正需求,所建造的原型將被丟棄。因此,原型系統(tǒng)的內(nèi)部結(jié)構(gòu)并不重要,重要的是必須迅速建立原型,隨之迅速修改原型,以反映客戶的需求??焖僭湍P偷幕舅枷耄很浖_發(fā)人員根據(jù)用戶提出的軟件初步定義,快速開發(fā)一個(gè)原型,向用戶展示原型的功能和性能,在反復(fù)征求用戶對(duì)原型意見的過程中,進(jìn)一步確認(rèn)用戶的需求并對(duì)原型進(jìn)行修改和完善,直到得到用戶確認(rèn)的軟件定義,在確認(rèn)的原型基礎(chǔ)上完成軟件系統(tǒng)的設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試和使用與維護(hù)??焖僭湍P偷奶攸c(diǎn)如下:(1)原型驅(qū)動(dòng):整個(gè)軟件過程圍繞著原型的快速開發(fā)和對(duì)原型的評(píng)價(jià),通過原型確認(rèn)用戶需求,以及通過原型的反復(fù)修改最終得到用戶確認(rèn)的軟件定義。(2)過程的交互性和迭代性:軟件過程是由開發(fā)人員與用戶之間通過原型的評(píng)價(jià)和確認(rèn)而進(jìn)行的一個(gè)交互過程。而且這個(gè)過程不是簡(jiǎn)單的重復(fù),而是不斷改進(jìn)和完善的迭代過程??焖僭湍P偷膬?yōu)點(diǎn):允許用戶在軟件開發(fā)過程中完善對(duì)軟件系統(tǒng)的需求,開發(fā)周期相對(duì)有所縮短,成本比較低,有效地發(fā)揮用戶和開發(fā)人員之間的密切配合作用,使軟件過程更能體現(xiàn)逐步發(fā)展、逐步完善的原則。快速原型模型的缺點(diǎn):頻繁的需求變化會(huì)使開發(fā)進(jìn)程難于管理和控制,原型的快速開發(fā)和修改對(duì)技術(shù)要求比較高,需要有較好的工作基礎(chǔ)。2.3.3螺旋模型對(duì)于復(fù)雜的大型軟件,開發(fā)一個(gè)原型往往達(dá)不到要求。螺旋模型將瀑布模型與快速原型模型結(jié)合起來,并且加入兩種模型均忽略了的風(fēng)險(xiǎn)分析。螺旋模型沿著螺線旋轉(zhuǎn),如圖2.4所示,在笛卡爾坐標(biāo)的4個(gè)象限上分別表達(dá)了以下4個(gè)方面的活動(dòng):(1)制訂計(jì)劃——確定軟件目標(biāo),選定實(shí)施方案,弄清項(xiàng)目開發(fā)的限制條件;(2)風(fēng)險(xiǎn)分析——分析所選方案,考慮如何識(shí)別和消除風(fēng)險(xiǎn);(3)實(shí)施工程——實(shí)施軟件開發(fā);(4)客戶評(píng)估——評(píng)價(jià)開發(fā)工作,提出修正建議。沿螺線自內(nèi)向外每旋轉(zhuǎn)一圈便開發(fā)出更為完善的一個(gè)新的軟件版本。螺旋模型的基本思想:螺旋模型是瀑布模型和快速原型模型的結(jié)合,其基本思想是借助構(gòu)建原型來降低風(fēng)險(xiǎn),把軟件開發(fā)的每一個(gè)階段都看作是增加了風(fēng)險(xiǎn)分析的快速原型模型。螺旋模型的每一個(gè)周期都包括需求定義、風(fēng)險(xiǎn)分析、工程實(shí)現(xiàn)和評(píng)審4個(gè)部分,軟件開發(fā)的整個(gè)過程就是這4個(gè)部分的迭代,每迭代一次,過程就完成一個(gè)周期,軟件開發(fā)就前進(jìn)一個(gè)層次,系統(tǒng)就生成一個(gè)新的版本。螺旋模型的特點(diǎn)如下:(1)模型結(jié)合性:螺旋模型的每一個(gè)周期都應(yīng)用了原型模型排除風(fēng)險(xiǎn),在確認(rèn)了原型之后,又啟動(dòng)瀑布模型繼續(xù)過程的演化。因此,螺旋模型是瀑布模型和快速原型模型的結(jié)合,體現(xiàn)了兩個(gè)模型的優(yōu)點(diǎn)。(2)過程迭代性:軟件開發(fā)過程的每個(gè)階段都是一次迭代,這種迭代不是過程的簡(jiǎn)單重復(fù),而是每旋轉(zhuǎn)一個(gè)圈就前進(jìn)一個(gè)層次,得到一個(gè)新的版本。螺旋模型的優(yōu)點(diǎn):強(qiáng)調(diào)可選方案和約束條件有利于已有軟件的重用,有助于把軟件質(zhì)量作為軟件開發(fā)的一個(gè)重要目標(biāo),減少過多或測(cè)試不足帶來的風(fēng)險(xiǎn)。維護(hù)被看成是模型的另一個(gè)周期,維護(hù)和開發(fā)之間沒有本質(zhì)的區(qū)別。螺旋模型的缺點(diǎn):要求軟件開發(fā)人員具有豐富的風(fēng)險(xiǎn)評(píng)估經(jīng)驗(yàn)和有關(guān)的專門知識(shí),開發(fā)過程比較復(fù)雜,給過程管理和控制帶來一定的難度。2.3.4增量模型在增量模型中,軟件被作為一系列的增量構(gòu)件來設(shè)計(jì)、實(shí)現(xiàn)、集成和測(cè)試,每一個(gè)構(gòu)件是由多種相互作用的模塊所形成的提供特定功能的代碼片段構(gòu)成的。增量模型在各個(gè)階段并不交付一個(gè)可運(yùn)行的完整產(chǎn)品,而是交付滿足客戶需求的一個(gè)子集的可運(yùn)行產(chǎn)品。整個(gè)產(chǎn)品被分解成若干個(gè)構(gòu)件,開發(fā)人員逐個(gè)構(gòu)件地交付產(chǎn)品,這樣做的好處是軟件開發(fā)可以較好地適應(yīng)變化,客戶可以不斷地看到所開發(fā)的軟件,從而降低開發(fā)風(fēng)險(xiǎn),如圖2.5所示。增量模型也存在以下缺陷:(1)由于各個(gè)構(gòu)件是逐漸并入已有的軟件體系結(jié)構(gòu)中的,因此加入構(gòu)件必須不能破壞已構(gòu)造好的系統(tǒng)部分,這需要軟件具備開放式的體系結(jié)構(gòu)。(2)在開發(fā)過程中,需求的變化是不可避免的。增量模型的靈活性可以使其適應(yīng)這種變化的能力大大優(yōu)于瀑布模型和快速原型模型,但也很容易退化為邊做邊改模型,從而使軟件過程的控制失去整體性。在使用增量模型時(shí),第一個(gè)增量往往是實(shí)現(xiàn)基本需求的核心產(chǎn)品。核心產(chǎn)品交付用戶使用后,經(jīng)過評(píng)價(jià)形成下一個(gè)增量的開發(fā)計(jì)劃,它包括對(duì)核心產(chǎn)品的修改和一些新功能的發(fā)布。這個(gè)過程在每個(gè)增量發(fā)布后不斷重復(fù),直到產(chǎn)生最終的完善產(chǎn)品。增量模型的基本思想:把軟件產(chǎn)品作為一系列的增量構(gòu)件來設(shè)計(jì)、實(shí)現(xiàn)、集成和測(cè)試。開發(fā)時(shí)分批逐步向用戶提交產(chǎn)品,每次提交一個(gè)滿足用戶需求子集的增量構(gòu)件,直到最后一次得到滿足用戶全部需求的完整產(chǎn)品為止。增量模型的特點(diǎn):過程漸進(jìn)性,即軟件過程分批次完成,每次提交一個(gè)滿足用戶需求子集的增量構(gòu)件,產(chǎn)品規(guī)模逐漸增大,直到得到滿足用戶全部需求的完整產(chǎn)品為止。增量模型的優(yōu)點(diǎn):能在較短的時(shí)間內(nèi)向用戶提交部分功能的構(gòu)件,并且在逐步增加產(chǎn)品功能的過程中有充裕的時(shí)間學(xué)習(xí)和適應(yīng)新的功能,減少一個(gè)全新軟件可能給用戶帶來的沖擊。增量模型的缺點(diǎn):增量構(gòu)件的劃分依賴于系統(tǒng)功能的構(gòu)成和軟件開發(fā)人員的經(jīng)驗(yàn),每次集成新的增量構(gòu)件必須不能破壞原有軟件系統(tǒng)的結(jié)構(gòu),因此要求軟件系統(tǒng)的體系結(jié)構(gòu)必須具有高度的開放性和可擴(kuò)充性。2.3.5噴泉模型噴泉模型對(duì)軟件復(fù)用和生存周期中多項(xiàng)開發(fā)活動(dòng)的集成提供了支持,主要支持面向?qū)ο蟮拈_發(fā)方法?!皣娙币辉~本身體現(xiàn)了迭代和無間隙特性。系統(tǒng)某個(gè)部分常常重復(fù)工作多次,相關(guān)功能在每次迭代中隨之加入演進(jìn)的系統(tǒng)。所謂無間隙是指在開發(fā)活動(dòng),即分析、設(shè)計(jì)和編碼之間不存在明顯的邊界,如圖2.6所示。噴泉模型的基本思想:噴泉模型是典型的面向?qū)ο笊芷谀P??!皣娙边@個(gè)詞描述了面向?qū)ο筌浖_發(fā)過程的迭代和無縫特性。在噴泉模型中,代表開發(fā)過程不同階段的圓圈之間互相交疊,而且各項(xiàng)開發(fā)活動(dòng)之間是無縫過渡的。每個(gè)階段內(nèi)的向下箭頭代表著階段自身的迭代或求精,整個(gè)軟件過程呈現(xiàn)一種開發(fā)階段沿中軸向上,又在每一個(gè)階段向下回流的噴泉形態(tài),所以稱為噴泉模型。噴泉模型的特點(diǎn):(1)過程迭代性:在面向?qū)ο蟮姆椒ㄖ?,軟件開發(fā)各個(gè)階段之間或一個(gè)階段內(nèi)的各個(gè)步驟之間都存在迭代的過程,這一點(diǎn)要比面向數(shù)據(jù)流或面向數(shù)據(jù)的方法更為常見。(2)階段間的無間隙過渡性:用面向?qū)ο蠓椒ㄩ_發(fā)軟件時(shí),在分析、設(shè)計(jì)、編碼等項(xiàng)開發(fā)活動(dòng)之間并不存在明顯的邊界,不同階段互相交疊,各項(xiàng)開發(fā)活動(dòng)之間無縫過渡。噴泉模型的優(yōu)點(diǎn):支持面向?qū)ο蠓椒ǖ能浖_發(fā)過程,提供軟件復(fù)用與生命周期中多項(xiàng)開發(fā)活動(dòng)集成的機(jī)制。噴泉模型的缺點(diǎn):噴泉模型本身就不是以面向過程為背景的,過程在噴泉模型中已被弱化,取而代之的是無間隙的階段過渡與重復(fù)迭代。2.3.6V形模型V形模型是瀑布模型的一個(gè)變種,如圖2.7所示。它同樣需要一步一步進(jìn)行,前一個(gè)階段的任務(wù)完成之后才可以進(jìn)行下一階段的任務(wù)。這個(gè)模型強(qiáng)調(diào)測(cè)試的重要性,它將開發(fā)活動(dòng)與測(cè)試活動(dòng)緊密地聯(lián)系在一起。每一步都將比前一階段進(jìn)行更加完善的測(cè)試。V形模型的特點(diǎn)如下:(1)簡(jiǎn)單易用,只要按照規(guī)定的步驟一步一步執(zhí)行即可。(2)?V形模型強(qiáng)調(diào)測(cè)試過程與開發(fā)過程的對(duì)應(yīng)性和并行性。(3)?V形模型沒有反映實(shí)際的開發(fā)過程,實(shí)際的開發(fā)過程會(huì)有很多的迭代過程,比如,實(shí)施過程中會(huì)發(fā)現(xiàn)設(shè)計(jì)中的問題,然后去修正,測(cè)試過程中也會(huì)返回前一段,重新做一些事情。V形模型使用指南:使用V形模型,要求開發(fā)過程嚴(yán)格按照順序進(jìn)行,一個(gè)階段的輸出是下一個(gè)階段的輸入。同時(shí),要并行考慮圖2.7中虛線所對(duì)應(yīng)的過程。V形模型適合的場(chǎng)合:項(xiàng)目的需求在項(xiàng)目開始前很明確,解決方案在項(xiàng)目開始前也很明確,項(xiàng)目對(duì)系統(tǒng)的性能安全要求很嚴(yán)格。2.3.7形式化方法模型形式化方法模型特別適合于那些對(duì)安全性、可靠性和保密性要求極高的軟件系統(tǒng)開發(fā),它采用形式化的數(shù)學(xué)方法將系統(tǒng)描述轉(zhuǎn)換成可執(zhí)行的程序。形式化方法的過程模型如圖2.8所示,它首先將軟件需求描述提煉成采用數(shù)學(xué)符號(hào)表達(dá)的形式化描述,然后經(jīng)過一系列的形式化轉(zhuǎn)換將形式化描述自動(dòng)轉(zhuǎn)換成可執(zhí)行程序,最后將整個(gè)系統(tǒng)集成起來進(jìn)行測(cè)試。由于數(shù)學(xué)方法具有嚴(yán)密性和準(zhǔn)確性,因此形式化方法開發(fā)過程所交付的軟件

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論