《軟件工程》課件第1章 軟件工程概述_第1頁(yè)
《軟件工程》課件第1章 軟件工程概述_第2頁(yè)
《軟件工程》課件第1章 軟件工程概述_第3頁(yè)
《軟件工程》課件第1章 軟件工程概述_第4頁(yè)
《軟件工程》課件第1章 軟件工程概述_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

【本章引言】

自從1946年第一臺(tái)電子計(jì)算機(jī)誕生以來(lái),計(jì)算機(jī)的研究生產(chǎn)和應(yīng)用得到迅猛的發(fā)展,計(jì)算機(jī)系統(tǒng)已經(jīng)經(jīng)歷了四個(gè)不同的發(fā)展階段,計(jì)算機(jī)科學(xué)成為當(dāng)今世界上發(fā)展最快和應(yīng)用最廣的學(xué)科之一。然而,我們?nèi)匀粵](méi)有徹底擺脫“軟件危機(jī)”困擾,軟件已經(jīng)成為限制計(jì)算機(jī)系統(tǒng)發(fā)展的關(guān)鍵因素。為了克服這種困擾,軟件工作者在不斷的研究消除軟件危機(jī)的方法,從而逐步形成了計(jì)算機(jī)科學(xué)技術(shù)領(lǐng)域中的一門(mén)新興的工程學(xué)科—軟件工程。

本章將對(duì)軟件概念、軟件分類、軟件發(fā)展、軟件危機(jī)、軟件工程概念、軟件生命周期及軟件開(kāi)發(fā)模型等方面做簡(jiǎn)要的介紹,通過(guò)本章學(xué)習(xí),可為后幾章軟件工程的深入學(xué)習(xí)打下基礎(chǔ)?!颈菊轮攸c(diǎn)】軟件工程概念軟件生命周期軟件開(kāi)發(fā)模型【學(xué)習(xí)目標(biāo)】理解軟件工程的基本概念和軟件生命周期了解軟件開(kāi)發(fā)的幾種模型1.1軟件概述1.2軟件工程的概述1.3軟件生命周期1.4軟件開(kāi)發(fā)模型1.5小結(jié)1.6習(xí)題第一章軟件工程概述1.1.1軟件的概念1.1.2軟件的分類1.1.3軟件的發(fā)展1.1.4軟件危機(jī)1.1軟件概述1.1.1軟件的概念

隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,硬件性能有了極大的提高,計(jì)算機(jī)體系結(jié)構(gòu)發(fā)生了深刻的變化,內(nèi)存和存儲(chǔ)容量的快速增加,以及各種各樣的輸入和輸出選擇等,所有這些都促進(jìn)了更高級(jí)和更為復(fù)雜的基于計(jì)算機(jī)系統(tǒng)的開(kāi)發(fā)。

軟件是計(jì)算機(jī)系統(tǒng)中與硬件相互依存的另一部分,它是包括程序、數(shù)據(jù)及其相關(guān)文檔的完整集合。其中,程序是按事先設(shè)計(jì)的功能和性能要求執(zhí)行的指令序列;數(shù)據(jù)是使程序能正常操縱信息的數(shù)據(jù)結(jié)構(gòu);文檔是與程序開(kāi)發(fā)、維護(hù)和使用有關(guān)的圖文材料。1.1.2軟件的分類

軟件多種多樣,隨著軟件復(fù)雜程度的增加,軟件的界限越來(lái)越不明顯。按軟件的作用,一般可以分為以下幾類。1.系統(tǒng)軟件

系統(tǒng)軟件(systemsoftware)是指能與計(jì)算機(jī)硬件緊密配合在一起,使計(jì)算機(jī)系統(tǒng)各個(gè)部件、相關(guān)的軟件、和數(shù)據(jù)協(xié)調(diào)高效地工作的軟件。系統(tǒng)軟件是計(jì)算機(jī)系統(tǒng)的重要組成部分,它支持應(yīng)用軟件的開(kāi)發(fā)和運(yùn)行。系統(tǒng)軟件包括:操作系統(tǒng)、網(wǎng)絡(luò)軟件、編譯程序、數(shù)據(jù)庫(kù)管理程序、文件編輯系統(tǒng)、系統(tǒng)檢查與診斷軟件等。2.應(yīng)用軟件

應(yīng)用軟件(applicationsoftware)則是在系統(tǒng)軟件基礎(chǔ)上,為解決特定的領(lǐng)域應(yīng)用而開(kāi)發(fā)的軟件。按其性質(zhì)不同可以分為以下幾類:事務(wù)軟件

事務(wù)信息處理是一個(gè)最大的軟件應(yīng)用領(lǐng)域。如工資單、收/支計(jì)算、存貨盤(pán)點(diǎn)報(bào)表等。這些獨(dú)立的系統(tǒng)可以組成管理信息系統(tǒng)(MIS)軟件,它從一個(gè)或多個(gè)裝有事務(wù)信息的數(shù)據(jù)庫(kù)中存取數(shù)據(jù)。在這個(gè)領(lǐng)域中的應(yīng)用是重新建立已有的數(shù)據(jù),便于事務(wù)操作或做出管理決策。另外,除了傳統(tǒng)的數(shù)據(jù)處理應(yīng)用,事務(wù)軟件還可以實(shí)現(xiàn)交互計(jì)算(如營(yíng)業(yè)點(diǎn)的交易處理)。1.1.2軟件的分類實(shí)時(shí)軟件

監(jiān)視、分析和控制現(xiàn)實(shí)世界中發(fā)生的事件,能以足夠快的速度對(duì)輸入信息進(jìn)行處理并在規(guī)定的時(shí)間內(nèi)作出反應(yīng)的軟件,稱之為實(shí)時(shí)軟件。實(shí)時(shí)軟件包括四個(gè)組成部分:數(shù)據(jù)采集器(負(fù)責(zé)從外部環(huán)境中獲取和格式化信息)、分析器(負(fù)責(zé)將信息轉(zhuǎn)換成應(yīng)用所需要的形式)、輸出/控件器(負(fù)責(zé)響應(yīng)外部環(huán)境)、管理器(負(fù)責(zé)協(xié)調(diào)系統(tǒng)各個(gè)部件工作,使系統(tǒng)能保持在一個(gè)可接受的響應(yīng)時(shí)間內(nèi)給實(shí)時(shí)響應(yīng))。實(shí)時(shí)系統(tǒng)必須在嚴(yán)格的時(shí)間范圍內(nèi)響應(yīng),因此實(shí)時(shí)軟件和計(jì)算機(jī)系統(tǒng)必須有很高的可靠性和安全性。1.1.2軟件的分類工程和科學(xué)軟件

工程和科學(xué)軟件具有數(shù)值算法的特點(diǎn)。其應(yīng)用范圍從天文學(xué)到火山學(xué);從自動(dòng)應(yīng)力分析到空間航天飛機(jī)軌道動(dòng)力學(xué);從分子生物學(xué)到自動(dòng)化制造。但是,在工程和科學(xué)領(lǐng)域中的新的應(yīng)用已經(jīng)遠(yuǎn)離傳統(tǒng)的數(shù)值算法。計(jì)算機(jī)輔助設(shè)計(jì)(CAD)、系統(tǒng)模擬和其他交互應(yīng)用系統(tǒng)已經(jīng)做到具有實(shí)時(shí)和系統(tǒng)軟件的特點(diǎn)。1.1.2軟件的分類嵌入式軟件

嵌入式計(jì)算機(jī)系統(tǒng)將計(jì)算機(jī)嵌入在某一系統(tǒng)之中,使之成為該系統(tǒng)的重要組成部分、控制該系統(tǒng)的運(yùn)行,進(jìn)而實(shí)現(xiàn)一個(gè)特定的物理過(guò)程。用于嵌入式計(jì)算機(jī)系統(tǒng)的軟件稱為嵌入式軟件(embeddedsoftware)。大型的嵌入式計(jì)算機(jī)系統(tǒng)軟件可用于航空航天系統(tǒng)、指揮控制系統(tǒng)、武器系統(tǒng)等;小型的嵌入式計(jì)算機(jī)系統(tǒng)軟件可用于工業(yè)的智能化產(chǎn)品之中,這時(shí)嵌入式軟件駐留在只讀存儲(chǔ)內(nèi),為該產(chǎn)品提供各種控制功能和儀表的數(shù)字或圖形顯示功能等。如汽車的剎車控制,空調(diào)機(jī)、洗衣機(jī)的自動(dòng)控制等。1.1.2軟件的分類個(gè)人計(jì)算機(jī)軟件

個(gè)人計(jì)算機(jī)軟件市場(chǎng)在過(guò)去的十幾年就已經(jīng)興起。發(fā)展字處理、電子報(bào)表、計(jì)算機(jī)圖形、家庭游戲、數(shù)據(jù)庫(kù)管理、個(gè)人和事務(wù)財(cái)務(wù)應(yīng)用、外部網(wǎng)絡(luò)或數(shù)據(jù)庫(kù)存取等數(shù)百種應(yīng)用。事實(shí)上,個(gè)人計(jì)算機(jī)軟件體現(xiàn)了一些最具有創(chuàng)新的軟件人—機(jī)界面設(shè)計(jì)?;赪eb的軟件

瀏覽器檢索的Web界面是軟件,它結(jié)合了可執(zhí)行的指令(CGI、HTML、Perl或Java)和數(shù)據(jù)(超文本和視頻及音頻的多種數(shù)據(jù))。本質(zhì)上,網(wǎng)絡(luò)變成了一個(gè)巨大的計(jì)算機(jī),提供了一個(gè)幾乎無(wú)限的可通過(guò)任何調(diào)制解調(diào)器被訪問(wèn)的軟件資源。1.1.2軟件的分類人工智能軟件

人工智能(AI)軟件采用非數(shù)值算法來(lái)解決不適于直接計(jì)算和分析的復(fù)雜問(wèn)題。一般說(shuō)來(lái),這些問(wèn)題都不能通過(guò)計(jì)算或直接分析而得到答案。迄今為止,在專家系統(tǒng)、模式識(shí)別、自然語(yǔ)言理解、人工神經(jīng)網(wǎng)絡(luò)、程序驗(yàn)證、自動(dòng)程序設(shè)計(jì)、機(jī)器人學(xué)等領(lǐng)域開(kāi)發(fā)了許多人工智能應(yīng)用軟件,用于診斷疾病、產(chǎn)品檢測(cè)、自動(dòng)定理證明、圖像和語(yǔ)言自動(dòng)識(shí)別、語(yǔ)言翻譯等。1.1.2軟件的分類3.工具軟件

這是20世紀(jì)80年代發(fā)展起來(lái),是系統(tǒng)軟件和應(yīng)用軟件之間的支持軟件。一般用來(lái)輔助和支持開(kāi)發(fā)人員開(kāi)發(fā)和維護(hù)應(yīng)用軟件,以提高軟件的開(kāi)發(fā)質(zhì)量和生產(chǎn)率。它包括需求分析工具、設(shè)計(jì)工具、編碼工具、測(cè)試工具、維護(hù)工具和管理工具等。工具軟件又可分為垂直工具軟件和水平工具軟件。垂直工具軟件是指生命周期的某一階段特定活動(dòng)所使用的工具軟件,如分析、設(shè)計(jì)、測(cè)試等活動(dòng);水平工具軟件是指整個(gè)生命周期活動(dòng)所使用的工具軟件,如項(xiàng)目管理、配置管理等活動(dòng)。1.1.2軟件的分類4.可重用軟件

可重用技術(shù)是最近幾年提出來(lái)的。實(shí)際上過(guò)去就有這種技術(shù),如各種標(biāo)準(zhǔn)程序庫(kù),通常它是計(jì)算機(jī)廠家提供的系統(tǒng)軟件中的一部分,對(duì)這些標(biāo)準(zhǔn)程序庫(kù)里的標(biāo)準(zhǔn)子程序稍加改造,甚至不經(jīng)改造就可以把它們編入新開(kāi)發(fā)的程序。但過(guò)去的這種標(biāo)準(zhǔn)程序應(yīng)用面比較窄,大多只限于一些數(shù)學(xué)子程序。今天,世界已把可重用范圍擴(kuò)展到算法以外,數(shù)據(jù)結(jié)構(gòu)也可以重用。20世紀(jì)90年代的可重用構(gòu)件則是把數(shù)據(jù)和相應(yīng)的操作兩者封裝在一起(通常叫做類或?qū)ο螅?,使軟件工程師能夠用可重用?gòu)件來(lái)建立新的應(yīng)用程序。例如,現(xiàn)在的交互式界面一般就是用這種可重用構(gòu)件組成的。這些可重用構(gòu)件能夠建立圖形窗口、下拉菜單、以及各種交互機(jī)制。建立這樣的界面所需要的數(shù)據(jù)結(jié)構(gòu)和處理細(xì)節(jié)都包含在一個(gè)由界面構(gòu)件所組成的可重用庫(kù)里。1.1.2軟件的分類1.1.3軟件的發(fā)展

自20世紀(jì)40年代世界上第一臺(tái)計(jì)算機(jī)問(wèn)世以來(lái),軟件經(jīng)歷了程序設(shè)計(jì)、程序系統(tǒng)及軟件工程三個(gè)階段的發(fā)展。程序設(shè)計(jì)階段(20世紀(jì)50年代至60年代)的軟件指的是程序,程序的開(kāi)發(fā)采用個(gè)體工作的方式,開(kāi)發(fā)工作主要依賴于開(kāi)發(fā)人員的個(gè)人技能和程序設(shè)計(jì)的技巧,軟件的質(zhì)量得不到保證,缺乏與程序有關(guān)的文檔。程序系統(tǒng)階段(20世紀(jì)60年代至70年代)的軟件是指程序和說(shuō)明書(shū),軟件開(kāi)發(fā)采用開(kāi)發(fā)小組工作的方式,開(kāi)發(fā)工作主要依賴于開(kāi)發(fā)小組的水平,文檔資料的不齊全給軟件維護(hù)帶來(lái)了很大的難度,軟件技術(shù)的發(fā)展不能滿足需要。軟件工程階段(20世紀(jì)70年代以后)的軟件則是指程序、文檔、數(shù)據(jù),由開(kāi)發(fā)小組及大中型軟件開(kāi)發(fā)機(jī)構(gòu)承擔(dān)開(kāi)發(fā)軟件的任務(wù),開(kāi)發(fā)工作主要依賴于整個(gè)機(jī)構(gòu)的管理水平,采用多種開(kāi)發(fā)技術(shù)。

目前在很多應(yīng)用領(lǐng)域,人們開(kāi)始采用面向?qū)ο蟮能浖_(kāi)發(fā)技術(shù)。專家系統(tǒng)、人工智能軟件開(kāi)始走向?qū)嶋H應(yīng)用。軟件技術(shù)呈現(xiàn)國(guó)際化、網(wǎng)絡(luò)化、服務(wù)化等多種發(fā)展趨勢(shì)。互聯(lián)網(wǎng)作為二十世紀(jì)最重要的科技成果之一,給人類生活和經(jīng)濟(jì)發(fā)展都帶來(lái)了深遠(yuǎn)的影響,它所展現(xiàn)出的勃勃商機(jī),吸引了眾多廠商圍繞互聯(lián)網(wǎng)開(kāi)發(fā)軟件,與分布計(jì)算、網(wǎng)絡(luò)和互聯(lián)網(wǎng)相關(guān)的軟件技術(shù)成為軟件領(lǐng)域的主要技術(shù)熱點(diǎn)。此外,自由軟件潮流、智能化、簡(jiǎn)易化、多樣化等趨勢(shì)正極大地拓展軟件產(chǎn)業(yè)的發(fā)展空間,派生出許多具有成長(zhǎng)潛力的新興領(lǐng)域。1.1.3軟件的發(fā)展1.1.4軟件危機(jī)1.軟件危機(jī)的含義

軟件危機(jī)是指在計(jì)算機(jī)軟件的開(kāi)發(fā)和維護(hù)過(guò)程中所遇到的一系列嚴(yán)重問(wèn)題。這些問(wèn)題絕不僅僅是不能正常運(yùn)行的軟件才具有的。實(shí)際上,幾乎所有軟件都不同程度地存在這些問(wèn)題。

概括地說(shuō),軟件危機(jī)包含下述兩方面的問(wèn)題:如何開(kāi)發(fā)軟件,以滿足對(duì)軟件日益增長(zhǎng)的需求;如何維護(hù)數(shù)量不斷膨脹的已有軟件。鑒于軟件危機(jī)的長(zhǎng)期性和癥狀不明顯的特征,近年來(lái)有人建議把軟件危機(jī)更名為“軟件蕭條(depression)”或“軟件困擾(afflication)”。不過(guò)“軟件危機(jī)”這個(gè)詞強(qiáng)調(diào)了問(wèn)題的嚴(yán)重性,而且也已為絕大多數(shù)軟件工作者所熟悉,所以本書(shū)仍將沿用它。1.1.4軟件危機(jī)2.產(chǎn)生軟件危機(jī)的原因

產(chǎn)生軟件危機(jī)的原因很多,總結(jié)起來(lái)有以下幾點(diǎn):由于缺乏軟件開(kāi)發(fā)經(jīng)驗(yàn)和有關(guān)軟件開(kāi)發(fā)數(shù)據(jù)的積累,使得

開(kāi)發(fā)工作的計(jì)劃很難制定,以致經(jīng)常出現(xiàn)超出經(jīng)費(fèi)預(yù)算,無(wú)法遵循進(jìn)度計(jì)劃,完成開(kāi)發(fā)的期限一再拖延等情況。軟件需求在開(kāi)發(fā)的初期階段不夠明確,或是未能得到確切的表達(dá)。開(kāi)發(fā)工作開(kāi)始后,軟件人員和用戶又未能及時(shí)交換意見(jiàn),造成矛盾在開(kāi)發(fā)后期集中暴露。開(kāi)發(fā)過(guò)程沒(méi)有統(tǒng)一、公認(rèn)的方法論和規(guī)范進(jìn)行指導(dǎo),參加開(kāi)發(fā)的人員各行其事。另外,設(shè)計(jì)和實(shí)現(xiàn)過(guò)程的資料很難維護(hù)。未能在測(cè)試階段做好充分的檢測(cè)工作,提交至用戶的軟件質(zhì)量差,在運(yùn)行過(guò)程中暴露出大量的問(wèn)題。1.1.4軟件危機(jī)3.軟件危機(jī)的解決方法

為了消除軟件危機(jī),首先應(yīng)該對(duì)計(jì)算機(jī)軟件有一個(gè)正確的認(rèn)識(shí)。應(yīng)該徹底清除在計(jì)算機(jī)系統(tǒng)早期發(fā)展階段形成的“軟件就是程序”的錯(cuò)誤概念。一個(gè)軟件必須由一個(gè)完整的配置組成。事實(shí)上,軟件是程序、數(shù)據(jù)及相關(guān)文檔的完整集合。其中,程序是能夠完成預(yù)定功能和性能的可執(zhí)行的指令序列;數(shù)據(jù)是使程序能夠適當(dāng)?shù)靥幚硇畔⒌臄?shù)據(jù)結(jié)構(gòu);文檔是開(kāi)發(fā)、使用和維護(hù)程序所需要的圖文資料。1983年IEEE為軟件下的定義是:計(jì)算機(jī)程序、方法、規(guī)則、相關(guān)的文檔資料以及在計(jì)算機(jī)上運(yùn)行程序時(shí)所必須的數(shù)據(jù)。雖然表面上看來(lái)在這個(gè)定義中列出了軟件的5個(gè)配置成分,但是方法和規(guī)則通常是在文檔中說(shuō)明并在程序中實(shí)現(xiàn)的。1.1.4軟件危機(jī)

更重要的是,必須充分認(rèn)識(shí)到軟件開(kāi)發(fā)不是某種個(gè)體勞動(dòng)的神秘技巧,而應(yīng)該是一種組織良好、管理嚴(yán)密、各類人員協(xié)同配合、共同完成的工程項(xiàng)目。必須充分吸取和借鑒人類長(zhǎng)期以來(lái)從事各種工程項(xiàng)目所積累的行之有效的原理、概念、技術(shù)和方法,特別要吸取幾十年來(lái)人類從事計(jì)算機(jī)硬件研究和開(kāi)發(fā)的經(jīng)驗(yàn)教訓(xùn)。

應(yīng)該推廣使用在實(shí)踐中總結(jié)出來(lái)的開(kāi)發(fā)軟件的成功的技術(shù)和方法,并且研究探索更好更有效的技術(shù)和方法,盡快消除在計(jì)算機(jī)系統(tǒng)早期發(fā)展階段形成的一些錯(cuò)誤的概念和做法。1.1.4軟件危機(jī)

應(yīng)該開(kāi)發(fā)和使用更好的軟件工具。正如機(jī)械工具可以“放大”人類的體力一樣,軟件工具可以“放大”人類的智力。在軟件開(kāi)發(fā)的每個(gè)階段都有許多繁瑣重復(fù)的工作需要做,在適當(dāng)軟件工具輔助下,開(kāi)發(fā)人員可以把這類工作做得既快又好。如果把各個(gè)階段使用的軟件工具有機(jī)地集合成一個(gè)整體,支持軟件開(kāi)發(fā)的主過(guò)程,則稱為軟件工程支撐環(huán)境。

總之,為了消除軟件危機(jī),既要有技術(shù)措施(方法和工具),又要有必要的組織管理措施。軟件工程正是從管理和技術(shù)兩方面研究如何更好地開(kāi)發(fā)和維護(hù)計(jì)算機(jī)軟件的一門(mén)新興學(xué)科。1.2軟件工程的概念1.2.1軟件工程的定義和原理1.2.2軟件工程的目標(biāo)1.2.3軟件工程的原則1.2.1軟件工程的定義和原理1.軟件工程的定義

軟件工程(softwareengineering)這個(gè)名詞是北大西洋公約組織(NATO)科學(xué)技術(shù)委員會(huì)1968年秋在當(dāng)時(shí)的聯(lián)邦德國(guó)召集了近50名第一流的編程人員、計(jì)算機(jī)科學(xué)家和工業(yè)界巨頭,制定擺脫軟件危機(jī)的辦法時(shí)提出來(lái)的。盡管當(dāng)時(shí)專家們無(wú)法設(shè)計(jì)出一張指導(dǎo)軟件業(yè)走向更牢固陣地的詳細(xì)路線圖,但他們借鑒硬件工程的辦法,確實(shí)為解決軟件這一難題,不僅創(chuàng)造了一個(gè)新名詞—軟件工程,還使軟件工程有了方向。從1968年到現(xiàn)在已經(jīng)40多年,應(yīng)該說(shuō),在今天,軟件工程已發(fā)展成為一門(mén)獨(dú)立的學(xué)科。1.2.1軟件工程的定義和原理

關(guān)于什么是軟件工程的定義,每一位軟件工程的作者都給出了自己的不同理解。我們把它定義為:運(yùn)用工程學(xué)的原理和方法來(lái)組織和管理軟件的生產(chǎn)和維護(hù),以保證軟件產(chǎn)品開(kāi)發(fā),運(yùn)行和維護(hù)的高質(zhì)量和高生產(chǎn)率。1993年,IEEE在《IEEEStandardCollecation:SoftwareEngineering》給出了以下全面的定義:應(yīng)用系統(tǒng)的、規(guī)范的和可量化的方法去開(kāi)發(fā)、運(yùn)行和維護(hù)軟件,即軟件的工程化應(yīng)用。對(duì)(1)中所述方法的研究。1.2.1軟件工程的定義和原理2.軟件工程的基本原理

自從1968在聯(lián)邦德國(guó)召開(kāi)的國(guó)際會(huì)議上正式提出并使用了“軟件工程”這個(gè)術(shù)語(yǔ)以來(lái),研究軟件工程的專家學(xué)者們陸續(xù)提出了100多條關(guān)于軟件工程的準(zhǔn)則或“信條”。著名的軟件工程專家B.W.Boehm綜合這些學(xué)者們的意見(jiàn)并總結(jié)了TRW公司多年開(kāi)發(fā)軟件的經(jīng)驗(yàn),于1983年在一片論文中提出了軟件工程的7條基本原理。他認(rèn)為這7條原理是確保軟件產(chǎn)品質(zhì)量和開(kāi)發(fā)效率原理的最小集合。這7條原理是互相獨(dú)立的,其中任意6條原理的組合都不能代替另一條原理。因此,它們是缺一不可的最小集合。然而這7條原理又是相當(dāng)完備的,人們雖然不能用數(shù)學(xué)方法嚴(yán)格證明它們是一個(gè)完備的集合,但是可以證明在此之前已經(jīng)提出的100多條軟件工程原理都可以由這7條原理的任意組合蘊(yùn)含或派生。1.2.1軟件工程的定義和原理下面簡(jiǎn)要介紹軟件工程的7條基本原理。用分階段的生命周期計(jì)劃嚴(yán)格管理

有人經(jīng)統(tǒng)計(jì)發(fā)現(xiàn),在不成功的軟件項(xiàng)目中有一半左右是由于計(jì)劃不周造成的,可見(jiàn)把建立完善的計(jì)劃作為第1條基本原理是吸取了前人的教訓(xùn)而提出來(lái)的。

在軟件開(kāi)發(fā)與維護(hù)的漫長(zhǎng)生命周期中,需要完成許多性質(zhì)各異的工作。這條基本原理意味著,應(yīng)該把軟件生命周期劃分成若干個(gè)階段,并相應(yīng)地制定出切實(shí)可行的計(jì)劃,然后嚴(yán)格按照計(jì)劃對(duì)軟件的開(kāi)發(fā)與維護(hù)工作進(jìn)行管理。Boehm認(rèn)為,在軟件的整個(gè)生命周期中應(yīng)該制定并嚴(yán)格執(zhí)行六類計(jì)劃,它們是項(xiàng)目概要計(jì)劃、里程碑計(jì)劃、項(xiàng)目控制計(jì)劃、產(chǎn)品控制計(jì)劃、驗(yàn)證計(jì)劃和運(yùn)行維護(hù)計(jì)劃。

不同層次的管理人員都必須嚴(yán)格按照計(jì)劃各盡其職地管理軟件開(kāi)發(fā)與維護(hù)工作,絕不能受客戶或上級(jí)人員的影響而擅自背離預(yù)定計(jì)劃。1.2.1軟件工程的定義和原理堅(jiān)持進(jìn)行階段評(píng)審

當(dāng)時(shí)已經(jīng)認(rèn)識(shí)到,軟件的質(zhì)量保證工作不能等到編碼階段結(jié)束之后再進(jìn)行。這樣說(shuō)至少有兩個(gè)理由:第一,大部分錯(cuò)誤是在編碼之前造成的。例如,根據(jù)Boehm等人的統(tǒng)計(jì),設(shè)計(jì)錯(cuò)誤占軟件錯(cuò)誤的63%,編碼錯(cuò)誤僅占37%;第二,錯(cuò)誤發(fā)現(xiàn)與改正得越晚,所需付出的代價(jià)也越高。因此,在每個(gè)階段都進(jìn)行嚴(yán)格評(píng)審,以便盡早發(fā)現(xiàn)在軟件開(kāi)發(fā)過(guò)程中所犯的錯(cuò)誤,是一條必須遵循的重要原則。1.2.1軟件工程的定義和原理實(shí)行嚴(yán)格的產(chǎn)品控制

在軟件開(kāi)發(fā)過(guò)程中不應(yīng)隨意改變需求,以為改變一項(xiàng)需求往往需要付出較高的代價(jià)。但是,在軟件開(kāi)發(fā)過(guò)程中改變需求又是難免的。由于外部環(huán)境的變化,相應(yīng)地改變用戶需求是一種客觀需要,顯然不能硬性禁止客戶提出改變需求的要求,而只能依靠科學(xué)的產(chǎn)品控制技術(shù)來(lái)順應(yīng)這種要求。也就是說(shuō),當(dāng)改變需求時(shí),為了保持軟件各個(gè)配置成份的一致性,必須實(shí)行嚴(yán)格的產(chǎn)品控制,其中主要是實(shí)行基準(zhǔn)配置管理。所謂基準(zhǔn)配置又稱為基線配置,它們是經(jīng)過(guò)階段評(píng)審后的軟件配置成份(各個(gè)階段產(chǎn)生的文檔或程序代碼)。基準(zhǔn)配置管理也稱為變動(dòng)控制:一切有關(guān)修改軟件的建議,特別是涉及到對(duì)基準(zhǔn)配置的修改建議,都必須按照嚴(yán)格的規(guī)程進(jìn)行評(píng)審,獲得批準(zhǔn)后才能實(shí)施修改。絕不能誰(shuí)想修改軟件(包括尚在開(kāi)發(fā)過(guò)程中的軟件),就隨意進(jìn)行修改。1.2.1軟件工程的定義和原理采用現(xiàn)代程序設(shè)計(jì)技術(shù)

從提出軟件工程的概念開(kāi)始,人們一直把主要精力用于研究各種新的程序設(shè)計(jì)技術(shù)。20世紀(jì)60年代末提出的結(jié)構(gòu)程序設(shè)計(jì)技術(shù),已經(jīng)成為絕大多數(shù)人公認(rèn)的程序設(shè)計(jì)技術(shù)。以后又進(jìn)一步發(fā)展出各種結(jié)構(gòu)分析(SA)與結(jié)構(gòu)設(shè)計(jì)(SD)技術(shù)。近年來(lái),面向?qū)ο蠹夹g(shù)已經(jīng)在許多領(lǐng)域中迅速地取代了傳統(tǒng)的結(jié)構(gòu)開(kāi)發(fā)方法。實(shí)踐證明,采用先進(jìn)的技術(shù)不僅可以提高軟件開(kāi)發(fā)和維護(hù)的效率,而且可以提高軟件產(chǎn)品的質(zhì)量。1.2.1軟件工程的定義和原理結(jié)果應(yīng)能清楚地審查

軟件產(chǎn)品不同于一般的物理產(chǎn)品,它是看不見(jiàn)摸不著的邏輯產(chǎn)品。軟件開(kāi)發(fā)人員(或開(kāi)發(fā)小組)的工作進(jìn)展情況可見(jiàn)性差,難以準(zhǔn)確度量,從而使得軟件產(chǎn)品的開(kāi)發(fā)過(guò)程比一般產(chǎn)品的開(kāi)發(fā)過(guò)程更難于評(píng)價(jià)和管理。為了提高軟件開(kāi)發(fā)過(guò)程的可見(jiàn)性,更好地進(jìn)行管理,應(yīng)該根據(jù)軟件開(kāi)發(fā)項(xiàng)目的總目標(biāo)及完成期限,規(guī)定開(kāi)發(fā)組織的責(zé)任和產(chǎn)品標(biāo)準(zhǔn),從而使得所得到的結(jié)果能夠清楚地審查。1.2.1軟件工程的定義和原理開(kāi)發(fā)小組的人員應(yīng)該少而精

這條基本原理的含義是,軟件開(kāi)發(fā)小組的組成人員的素質(zhì)應(yīng)該好,而人數(shù)則不宜過(guò)多。開(kāi)發(fā)小組人員的素質(zhì)和數(shù)量,是影響軟件產(chǎn)品質(zhì)量和開(kāi)發(fā)效率的重要因素。素質(zhì)高的人員的開(kāi)發(fā)效率比素質(zhì)低的人員的開(kāi)發(fā)效率可能高幾倍至幾十倍,而且素質(zhì)高的人員所開(kāi)發(fā)的軟件中的錯(cuò)誤明顯少于素質(zhì)低的人員所開(kāi)發(fā)的軟件中的錯(cuò)誤。此外,隨著開(kāi)發(fā)小組人員數(shù)目的增加,因?yàn)榻涣髑闆r討論問(wèn)題而造成通信開(kāi)銷也急劇增加。當(dāng)開(kāi)發(fā)小組人員數(shù)為N時(shí),可能的通信路徑有N(N-1)/2條,可見(jiàn)隨著人數(shù)N的增大,通信開(kāi)銷將急劇增加。因此,組成少而精的開(kāi)發(fā)小組是軟件工程的一條基本原理。1.2.1軟件工程的定義和原理承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性

遵循上述六條基本原理,就能夠按照當(dāng)代軟件工程基本原理實(shí)現(xiàn)軟件的工程化生產(chǎn)。但是,僅有上述六條原理并不能保證軟件開(kāi)發(fā)與維護(hù)的過(guò)程能趕上時(shí)代前進(jìn)的步伐,能跟上技術(shù)的不斷進(jìn)步。因此,Boehm提出應(yīng)把承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性作為軟件工程的第七條基本原理。按照這條原理,不僅要積極主動(dòng)地采納新的軟件技術(shù),而且要注意不斷總結(jié)經(jīng)驗(yàn)。例如,收集進(jìn)度和資源耗費(fèi)數(shù)據(jù),收集出錯(cuò)類型和問(wèn)題報(bào)告數(shù)據(jù)等。這些數(shù)據(jù)不僅可以用來(lái)評(píng)價(jià)新的軟件技術(shù)的效果,而且可以用來(lái)指明必須著重開(kāi)發(fā)的軟件工具和應(yīng)該優(yōu)先研究的技術(shù)。1.2.2軟件工程的目標(biāo)

組織實(shí)施軟件工程項(xiàng)目,從技術(shù)上和管理上采取了多項(xiàng)措施以后,最終希望得到項(xiàng)目的成功。成功指的是達(dá)到以下幾個(gè)主要的目標(biāo):付出較低的開(kāi)發(fā)成本;達(dá)到要求的軟件功能;取得較好的軟件性能;開(kāi)發(fā)的軟件易于移植;需要較低的維護(hù)費(fèi)用;能按時(shí)完成開(kāi)發(fā)工作,及時(shí)交付使用。

在實(shí)際開(kāi)發(fā)的具體項(xiàng)目中,企圖讓以上幾個(gè)目標(biāo)都達(dá)到理想的程度往往是非常困難的。而且上述目標(biāo)很可能是互相沖突的。若只顧降低開(kāi)發(fā)成本,很可能同時(shí)也降低了軟件的可靠性。另一方面,如果過(guò)于追求提高軟件的性能,可能造成開(kāi)發(fā)出的軟件對(duì)硬件有較大的依靠,從而直接影響到軟件的可移植性。1.2.2軟件工程的目標(biāo)

圖1-1表明了軟件工程目標(biāo)之間存在的相互聯(lián)系。其中有些目標(biāo)之間是互補(bǔ)關(guān)系,例如,易于維護(hù)和高可靠性之間,低于開(kāi)發(fā)成本與按時(shí)交付之間,還有一些目標(biāo)是彼此互斥的,例如,上述指出的互相沖突的情況。圖1-1軟件工程目標(biāo)之間的關(guān)系

這里提到的幾個(gè)目標(biāo)很自然地成為判斷軟件開(kāi)發(fā)方法或管理方法優(yōu)劣的衡量尺度。如果提出一種新的開(kāi)發(fā)方法,人們關(guān)心的是它對(duì)滿足哪些目標(biāo)比現(xiàn)有的方法更為有利。實(shí)際上,實(shí)施軟件開(kāi)發(fā)項(xiàng)目就是力圖在以上目標(biāo)的沖突取得一定程度的平衡。1.2.3軟件工程的原則

軟件工程的目的是提高軟件生產(chǎn)率,提高軟件質(zhì)量,降低軟件成本。為了達(dá)到這個(gè)目的,在軟件的開(kāi)發(fā)過(guò)程中必須遵循以下軟件工程原則。抽象

抽象事物最基本的特征和行為,忽略非基本細(xì)節(jié)。采用分層次抽象,自頂向下、逐層細(xì)化的辦法控制軟件開(kāi)發(fā)過(guò)程的復(fù)雜性。信息隱藏

將模塊設(shè)計(jì)成“黑箱”,實(shí)現(xiàn)細(xì)節(jié)隱藏在模塊內(nèi)部,不讓模塊的使用者直接訪問(wèn),這就是所謂信息封裝(使用與實(shí)現(xiàn)分離)的原則。使用者只能通過(guò)模塊接口訪問(wèn)模塊中封裝的數(shù)據(jù)。1.2.3軟件工程的原則模塊化

模塊是程序中在邏輯上相對(duì)自主的成分,是獨(dú)立的編程單位,應(yīng)有良好的接口定義。如C語(yǔ)言程序中的函數(shù)過(guò)程,C++語(yǔ)言程序中的類。模塊化有助于信息隱蔽和抽象,有助于表示復(fù)雜的系統(tǒng)。局部化

在一個(gè)物理模塊內(nèi)集中邏輯上相互關(guān)聯(lián)的計(jì)算機(jī)資源,保證模塊之間有松散的耦合,模塊內(nèi)部有較強(qiáng)的內(nèi)聚,這有助于控制軟件的復(fù)雜性。確定性

軟件開(kāi)發(fā)過(guò)程中所有概念的表達(dá)應(yīng)是確定的,無(wú)歧義的、規(guī)范的。這樣有助于人們?cè)诮涣鲿r(shí)不會(huì)產(chǎn)生誤解、遺漏,保證整個(gè)開(kāi)發(fā)工作的協(xié)調(diào)一致。1.2.3軟件工程的原則一致性

整個(gè)軟件系統(tǒng)(包括程序、文檔和數(shù)據(jù))的各個(gè)模塊應(yīng)使用一致的概念、符號(hào)和術(shù)語(yǔ);程序內(nèi)、外部接口應(yīng)保持一致;軟件同硬件、操作系統(tǒng)得接口應(yīng)保持一致;用于形式化規(guī)格說(shuō)明的公理系統(tǒng)應(yīng)保持一致。完備性

軟件系統(tǒng)不會(huì)丟失任何重要成分,可以完全實(shí)現(xiàn)系統(tǒng)所要求的功能。為了保證系統(tǒng)的完備性,在軟件開(kāi)發(fā)和運(yùn)行過(guò)程中需要嚴(yán)格的技術(shù)評(píng)審??沈?yàn)證性

開(kāi)發(fā)大型的軟件時(shí)需要對(duì)系統(tǒng)自頂向下、逐層分解。系統(tǒng)分解應(yīng)遵循使系統(tǒng)易于檢查、測(cè)試、評(píng)審的原則,以確保系統(tǒng)的正確性。

使用一致性、完備性和可驗(yàn)證性可以幫助開(kāi)發(fā)者設(shè)計(jì)一個(gè)正確的系統(tǒng)。1.3軟件生命周期

正如同任何事物一樣,軟件也有一個(gè)孕育、誕生、成長(zhǎng)、成熟、衰亡的生存過(guò)程。一般稱其為計(jì)算機(jī)軟件的生命周期。根據(jù)這一思想,把上述基本的過(guò)程活動(dòng)進(jìn)一步展開(kāi),可以得到軟件生命周期的六個(gè)步驟,即制定計(jì)劃、需求分析、設(shè)計(jì)、程序編碼、測(cè)試及運(yùn)行維護(hù)。以下對(duì)這六個(gè)步驟的任務(wù)作一概括的描述。1.3軟件生命周期1.制定計(jì)劃

確定要開(kāi)發(fā)軟件系統(tǒng)的總目標(biāo),給出它的功能、性能、可靠性以及接口等方面的要求;由系統(tǒng)分析員和用戶合作,研究完成該項(xiàng)軟件任務(wù)的可行性,探討解決問(wèn)題的可能方案,并對(duì)可利用的資源(計(jì)算機(jī)硬件、軟件、人力等)、成本、可取得的效益、開(kāi)發(fā)的進(jìn)度做出估計(jì),制定出完成開(kāi)發(fā)任務(wù)的實(shí)施計(jì)劃,連同可行性研究報(bào)告,提交管理部門(mén)審查。2.需求分析和定義

對(duì)待開(kāi)發(fā)軟件提出的需求進(jìn)行分析并給出詳細(xì)的定義。軟件人員和用戶共同討論決定:哪些需求是可以滿足的,并對(duì)其加以確切的描述。然后編寫(xiě)出軟件需求說(shuō)明書(shū)或系統(tǒng)功能說(shuō)明書(shū),及初步的系統(tǒng)用戶手冊(cè),提交管理機(jī)構(gòu)評(píng)審。1.3軟件生命周期3.軟件設(shè)計(jì)

設(shè)計(jì)是軟件工程技術(shù)核心。在設(shè)計(jì)階段中,設(shè)計(jì)人員把已確定了的各項(xiàng)需求轉(zhuǎn)換成一個(gè)相應(yīng)的體系結(jié)構(gòu)。結(jié)構(gòu)中的每一組成部分都是意義明確的模塊,每個(gè)模塊都和某些需求相對(duì)應(yīng),即總體設(shè)計(jì)。進(jìn)而對(duì)每個(gè)模塊要完成的工作進(jìn)行具體的描述,為源程序編寫(xiě)打下基礎(chǔ),即詳細(xì)設(shè)計(jì)。所有設(shè)計(jì)中的考慮都應(yīng)以設(shè)計(jì)說(shuō)明書(shū)的形式加以描述,以供后繼工作使用并提交評(píng)審。4.程序編寫(xiě)

把軟件設(shè)計(jì)轉(zhuǎn)換成計(jì)算機(jī)可以接受的程序代碼,即寫(xiě)成以某一種特定程序設(shè)計(jì)語(yǔ)言表示的“源程序清單”。這一步工作也稱為編碼。自然,寫(xiě)出的程序應(yīng)當(dāng)是結(jié)構(gòu)良好、清晰易讀的,且與設(shè)計(jì)相一致的。1.3軟件生命周期5.軟件測(cè)試

測(cè)試是保證軟件質(zhì)量的重要手段,其主要方式是在設(shè)計(jì)測(cè)試用例的基礎(chǔ)上檢驗(yàn)軟件的各個(gè)組成部分。首先是進(jìn)行單元測(cè)試,查找各模塊在功能和結(jié)構(gòu)上存在的問(wèn)題并加以糾正;其次是進(jìn)行組裝測(cè)試,將已測(cè)試過(guò)的模塊按一定順序組裝起來(lái);最后按規(guī)定的各項(xiàng)需求,逐項(xiàng)進(jìn)行有效性測(cè)試,決定已開(kāi)發(fā)的軟件是否合格,能否交付用戶使用。6.運(yùn)行/維護(hù)

已交付的軟件投入正式使用,便進(jìn)入運(yùn)行階段。這一階段可能持續(xù)若干年甚至幾十年。軟件在運(yùn)行中可能由于多方面的原因,需要對(duì)它進(jìn)行修改。其原因可能有:運(yùn)行中發(fā)現(xiàn)了軟件中的錯(cuò)誤需要修正;為了適應(yīng)變化了的軟件工作環(huán)境,需做適當(dāng)?shù)淖兏?;為了增?qiáng)軟件的功能需做變更。1.4軟件開(kāi)發(fā)模型

為了指導(dǎo)軟件的開(kāi)發(fā),用不同的方式將軟件生存周期中的所有開(kāi)發(fā)活動(dòng)組織起來(lái),形成不同的軟件開(kāi)發(fā)模型,軟件開(kāi)發(fā)模型是從軟件項(xiàng)目需求定義直至軟件經(jīng)使用后廢棄為止,跨越整個(gè)生命周期的系統(tǒng)開(kāi)發(fā)、運(yùn)作和維護(hù)所實(shí)施的全部過(guò)程、活動(dòng)和任務(wù)的結(jié)構(gòu)框架。到現(xiàn)在為止,已經(jīng)提出了多種軟件開(kāi)發(fā)模型。例如,瀑布模型、快速原形模型、增量模型、螺旋模型、噴泉模型等。1.4軟件開(kāi)發(fā)模型1.4.1瀑布模型1.4.2快速原型模型1.4.3增量模型1.4.4螺旋模型1.4.5噴泉模型1.4.1瀑布模型

瀑布模型(WaterfallModel),它是1970年由W.Royce提出的。瀑布模型規(guī)定了各項(xiàng)軟件工程活動(dòng),包括:制定開(kāi)發(fā)計(jì)劃,進(jìn)行需求分析和說(shuō)明,軟件設(shè)計(jì),程序編碼,測(cè)試及運(yùn)行維護(hù)。參看圖1-2。并且規(guī)定了它們自上而下、相互銜接的固定次序,如同瀑布流水,逐級(jí)下落。圖1-2軟件生命周期的瀑布模型1.4.1瀑布模型

然而軟件開(kāi)發(fā)的實(shí)踐表明,上述各項(xiàng)活動(dòng)之間并非完全是自上而下,呈線性圖式。實(shí)際情況是,每項(xiàng)開(kāi)發(fā)活動(dòng)均應(yīng)具有以下特征:從上一項(xiàng)活動(dòng)接受該項(xiàng)活動(dòng)的工作對(duì)象,作為輸入;利用這一輸入實(shí)施該項(xiàng)活動(dòng)應(yīng)完成的內(nèi)容;給出該項(xiàng)活動(dòng)的工作成果,作為輸出傳給下一項(xiàng)活動(dòng);對(duì)該項(xiàng)活動(dòng)實(shí)施的工作進(jìn)行評(píng)審。若其工作得到確認(rèn),則繼續(xù)進(jìn)行下一項(xiàng)活動(dòng);

在圖1-2中用向下指的箭頭表示;否則返回前項(xiàng),甚至更前項(xiàng)的活動(dòng)進(jìn)行返工,在圖1-2中由向上指的箭頭表示。1.4.1瀑布模型

需要注意:軟件維護(hù)在軟件生存期中有它的特點(diǎn)。一方面,維護(hù)的具體要求是在軟件投入運(yùn)行以后提出來(lái)的,經(jīng)過(guò)“評(píng)價(jià)”,確定變更的重要性,才進(jìn)入維護(hù)工作。另一方面,維護(hù)對(duì)軟件的變更仍然要經(jīng)歷上述軟件生命周期在開(kāi)發(fā)中已經(jīng)歷過(guò)的各項(xiàng)活動(dòng)。如果把這些活動(dòng)一并比表達(dá),就構(gòu)成了生命周期的循環(huán),如圖1-3所示。事實(shí)上,有人把維護(hù)稱為軟件的二次開(kāi)發(fā),正是出于這種考慮。由于軟件在投入使用以后可能經(jīng)歷多次變更,為把開(kāi)發(fā)活動(dòng)和維護(hù)活動(dòng)區(qū)別開(kāi)來(lái),便有了b型的軟件生命周期表示,如圖1-4所示。它與前述的軟件生命周期循環(huán)一樣,都是軟件生命周期瀑布模型的變種。1.4.1瀑布模型圖1-3軟件生存期循環(huán)1.4.1瀑布模型圖1-4具有維護(hù)循環(huán)的軟件生命周期1.4.1瀑布模型

瀑布模型為軟件開(kāi)發(fā)和軟件維護(hù)提供了一種有效的管理圖式。根據(jù)這一圖式制定開(kāi)發(fā)計(jì)劃、進(jìn)行成本預(yù)算、組織開(kāi)發(fā)力量,以項(xiàng)目的階段評(píng)審和文檔控制為手段有效地對(duì)整個(gè)開(kāi)發(fā)過(guò)程進(jìn)行指導(dǎo),從而保證了軟件產(chǎn)品及時(shí)交付,并達(dá)到預(yù)期的質(zhì)量要求。瀑布模型20多年來(lái)之所以廣為流行,是因?yàn)樗谙墙Y(jié)構(gòu)化軟件、降低軟件的復(fù)雜度、促進(jìn)軟件開(kāi)發(fā)工程工程化方面起著顯著作用。與此同時(shí),瀑布模型在大量的軟件開(kāi)發(fā)實(shí)踐中也逐漸暴露出它的嚴(yán)重缺點(diǎn)。其中最為突出的缺點(diǎn)是該模型缺乏靈活性,特別是無(wú)法解決軟件需求不明確或不準(zhǔn)確的問(wèn)題。這些問(wèn)題的存在對(duì)軟件開(kāi)發(fā)會(huì)帶來(lái)嚴(yán)重影響,最終可能導(dǎo)致開(kāi)發(fā)出的軟件并不是用戶真正需要的軟件,并且這一點(diǎn)在開(kāi)發(fā)過(guò)程完成后才有所察覺(jué)。面對(duì)這些情況,無(wú)疑需要進(jìn)行返工或是不得不在維護(hù)中糾正需求的偏差。但無(wú)論上述哪一種情況都必須付出高額的代價(jià),并將為軟件開(kāi)發(fā)帶來(lái)不必要的損失。另一方面,隨著軟件開(kāi)發(fā)項(xiàng)目規(guī)模的日益龐大,由于瀑布模型不夠靈活等缺點(diǎn)引發(fā)出的上述問(wèn)題顯得更為嚴(yán)重。為彌補(bǔ)瀑布模型的不足,近年來(lái)已經(jīng)提出了多種其他模型。1.4.2快速原型模型

快速原型是快速建立起來(lái)的可以在計(jì)算機(jī)上運(yùn)行的程序,它所能完成的功能往往是最終產(chǎn)品能完成的功能的一個(gè)子集。如圖1-5所示(圖中實(shí)線箭頭表示開(kāi)發(fā)過(guò)程,虛線箭頭表示維護(hù)過(guò)程),快速原型模型的第一步是快速建立一個(gè)能反映用戶主要需求的原型系統(tǒng),讓用戶在計(jì)算機(jī)上試用它,通過(guò)實(shí)踐實(shí)踐來(lái)了解目標(biāo)系統(tǒng)的概貌。通常,用戶試用原型系統(tǒng)之后會(huì)提出許多修該意見(jiàn),開(kāi)發(fā)人員按照用戶的意見(jiàn)快速地修改原型系統(tǒng),然后再次請(qǐng)用戶試用……。一旦用戶認(rèn)為這個(gè)原型系統(tǒng)確實(shí)能做他們所需要的工作,開(kāi)發(fā)人員便可據(jù)此書(shū)寫(xiě)規(guī)格說(shuō)明文檔,根據(jù)這份文檔開(kāi)發(fā)出的軟件可以滿足用戶的真實(shí)需求。1.4.2快速原型模型圖1-5快速原型模型1.4.2快速原型模型

從圖1.5可以看出,快速原型模型是不帶反饋環(huán)的,這正是這種過(guò)程模型的主要優(yōu)點(diǎn):軟件產(chǎn)品的開(kāi)發(fā)基本上是線性順序進(jìn)行的。能做到基本上線性順序開(kāi)發(fā)的主要原因如下。原型系統(tǒng)已經(jīng)通過(guò)與用戶交互而得到驗(yàn)證,據(jù)此產(chǎn)生的規(guī)格說(shuō)明文檔正確地描述了用戶需求。因此,在開(kāi)發(fā)過(guò)程的后續(xù)階段不會(huì)因?yàn)榘l(fā)現(xiàn)了規(guī)格說(shuō)明文檔的錯(cuò)誤而進(jìn)行較大的返工。開(kāi)發(fā)人員通過(guò)建立原型系統(tǒng)已經(jīng)學(xué)到了許多東西(至少知道了“系統(tǒng)不應(yīng)該做什么,以及怎樣不去做不該做的事情”),因此,在設(shè)計(jì)和編碼階段發(fā)生錯(cuò)誤的可能性也表較小,這自然減少了在后續(xù)階段需要改正前面階段所犯錯(cuò)誤的可能性。

軟件產(chǎn)品一旦交付給用戶使用之后,維護(hù)便開(kāi)始了。根據(jù)所需完成的維護(hù)工作種類的不同,可能需要返回到需求分析、規(guī)格說(shuō)明、設(shè)計(jì)或編碼等不同階段,如圖1.5中虛線箭頭所示。1.4.2快速原型模型

快速原型的本質(zhì)是“快速”。開(kāi)發(fā)人員應(yīng)該盡可能快地建造出原型系統(tǒng),以加速軟件開(kāi)發(fā)過(guò)程,節(jié)約軟件開(kāi)發(fā)成本。原型的用途是獲知用戶的真正需求,一旦需求確定了,原型將被拋棄。因此,原型系統(tǒng)的內(nèi)部結(jié)構(gòu)并不重要,重要的是,必須迅速地構(gòu)建原型然后根據(jù)用戶意見(jiàn)迅速地修改原型。UNIXShell和超文本都是廣泛使用的快速原型語(yǔ)言。最近的趨勢(shì)是,廣泛地使用第四代語(yǔ)言(4GL)構(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)品中。1.4.3增量模型

增量模型也稱為漸增模型,如圖1-6所示。使用增量模型開(kāi)發(fā)軟件時(shí),把軟件產(chǎn)品作為一系列的增量構(gòu)件來(lái)設(shè)計(jì)、編碼、集成和測(cè)試。每個(gè)構(gòu)件由多個(gè)相互作用的模塊構(gòu)成,并且能夠完成特定的功能。使用增量模型時(shí),第一個(gè)增量構(gòu)件往往實(shí)現(xiàn)軟件的基本需求,提供最核心的功能。例如,使用增量模型開(kāi)發(fā)字處理軟件時(shí),第一個(gè)增量構(gòu)件可能提供基本的文件管理、編輯和文檔生成功能;第二個(gè)增量構(gòu)件提供更完善的編輯和文檔生成功能;第三個(gè)增量構(gòu)件實(shí)現(xiàn)拼寫(xiě)和語(yǔ)法檢查功能;第四個(gè)增量構(gòu)件完成高級(jí)的頁(yè)面排版功能。把軟件產(chǎn)品分解成增量構(gòu)件時(shí),應(yīng)該使構(gòu)件的規(guī)模適中,規(guī)模過(guò)大或過(guò)小都不好。最佳分解方法因軟件產(chǎn)品特點(diǎn)和開(kāi)發(fā)人員的習(xí)慣而異。分解時(shí)惟一必須遵守的約束條件是,當(dāng)把新構(gòu)件集成到現(xiàn)有軟件中時(shí),所形成的產(chǎn)品必須是可測(cè)試的。1.4.3增量模型圖1-6增量模型1.4.3增量模型

采用瀑布模型或快速原型模型開(kāi)發(fā)軟件時(shí),目標(biāo)都是一次就把一個(gè)滿足所有需求的產(chǎn)品提交給用戶。增量模型則與之相反,它分批地逐步向用戶提交產(chǎn)品,每次提交一個(gè)滿足用戶需求子集的可運(yùn)行的產(chǎn)品。整個(gè)軟件產(chǎn)品被分解成許多個(gè)增量構(gòu)件,開(kāi)發(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)的沖擊。1.4.3增量模型

使用增量模型的困難是,在把每個(gè)新的增量構(gòu)件集成到現(xiàn)有軟件體系結(jié)構(gòu)重視,必須不破壞原來(lái)已經(jīng)開(kāi)發(fā)出的產(chǎn)品。此外,必須把軟件的體系結(jié)構(gòu)設(shè)計(jì)便于按這種方式進(jìn)行擴(kuò)充,向現(xiàn)有產(chǎn)品中加入新構(gòu)件的過(guò)程必須簡(jiǎn)單、方便。也就是說(shuō),軟件體系結(jié)構(gòu)必須是開(kāi)放的。從長(zhǎng)遠(yuǎn)觀點(diǎn)看,具有開(kāi)放結(jié)構(gòu)的軟件擁有真正的優(yōu)勢(shì),這樣的軟件的可維護(hù)性明顯好于封閉結(jié)構(gòu)的軟件。因此,盡管采用增量模型比采用瀑布模型和快速原型模型需要更精心的設(shè)計(jì),但在設(shè)計(jì)階段多付出的勞動(dòng)將在維護(hù)階段獲得回報(bào)。如果一個(gè)設(shè)計(jì)非常靈活而且是夠開(kāi)放,足以支持增量模型,那么,這樣的設(shè)計(jì)將允許在不破壞產(chǎn)品的情況下進(jìn)行維護(hù)。事實(shí)上,使用增量模型時(shí)開(kāi)發(fā)軟件和擴(kuò)充軟件功能(完善性維護(hù))并沒(méi)有本質(zhì)區(qū)別,都是向現(xiàn)有產(chǎn)品中加入新構(gòu)件的過(guò)程。1.4.3增量模型

從某種意義上說(shuō),增量模型本身事自相矛盾的。它一方面要求開(kāi)發(fā)人員把軟件看作一個(gè)整體,另一方面又要求開(kāi)發(fā)人員把軟件看作構(gòu)件序列,每個(gè)構(gòu)件本質(zhì)上都獨(dú)立于另一個(gè)構(gòu)件。除非開(kāi)發(fā)人員有足夠的技術(shù)能力協(xié)調(diào)好這一明顯的矛盾,否則用增量模型開(kāi)發(fā)出的產(chǎn)品可能并不令人滿意。

圖1-6所示的增量模型表明,必須在開(kāi)始實(shí)現(xiàn)各個(gè)構(gòu)件之前就全部完成需求分析、規(guī)格說(shuō)明和總體設(shè)計(jì)的工作。由于在開(kāi)始構(gòu)建第一個(gè)構(gòu)件之前已經(jīng)有了總體設(shè)計(jì),因此風(fēng)險(xiǎn)較小。圖1-7描繪了一種風(fēng)險(xiǎn)更大的增量模型:一旦確定了用戶需求之后,就著手?jǐn)M定第一個(gè)構(gòu)件的規(guī)格說(shuō)明文檔。完成后,規(guī)格說(shuō)明組將轉(zhuǎn)向第二個(gè)構(gòu)件的規(guī)格說(shuō)明,與此同時(shí)設(shè)計(jì)組開(kāi)始設(shè)計(jì)第一個(gè)構(gòu)件……,用這種方式開(kāi)發(fā)軟件,不同的構(gòu)件將并行地構(gòu)建,因此有可能加快工程進(jìn)度。但是,使用這種方法將冒構(gòu)件無(wú)法集成到一起的風(fēng)險(xiǎn),除非密切地監(jiān)控整個(gè)開(kāi)發(fā)過(guò)程,否則整個(gè)工程可能毀于一旦。1.4.3增量模型圖1-7風(fēng)險(xiǎn)更大的增量模型1.4.4螺旋模型

螺旋模型(SpiralModel)如圖1-8所示。1988年B.W.Boehm將瀑布模型和原型模型相結(jié)合,提出了螺旋模型,這種模型綜合了瀑布模型和原型模型的優(yōu)點(diǎn),并增加了風(fēng)險(xiǎn)分析。螺旋模型包含了如下四個(gè)方面的活動(dòng):制定計(jì)劃:確定軟件的目標(biāo),選定實(shí)施方案,弄清項(xiàng)目開(kāi)發(fā)的限制條件

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論