2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩617頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  軟件工程——實(shí)踐者的研究方法</p><p><b>  前言</b></p><p><b>  第一部分產(chǎn)品和過(guò)程</b></p><p><b>  第1章產(chǎn)品</b></p><p><b>  第2章過(guò)程</b></p

2、><p>  第二部分軟件項(xiàng)目的管理</p><p>  第3章項(xiàng)目管理的概念</p><p>  第4章軟件過(guò)程和項(xiàng)目的度量</p><p><b>  第5章軟件項(xiàng)目計(jì)劃</b></p><p><b>  第6章風(fēng)險(xiǎn)管理</b></p><p>  

3、第7章項(xiàng)目進(jìn)度安排及跟蹤</p><p><b>  第8章軟件質(zhì)量保證</b></p><p><b>  第9章軟件配置管理</b></p><p>  第三部分傳統(tǒng)軟件工程方法</p><p><b>  第10章系統(tǒng)工程</b></p><p>

4、  第11章分析概念和原則</p><p><b>  第12章分析建模</b></p><p>  第13章設(shè)計(jì)概念和原則</p><p><b>  第14章設(shè)計(jì)方法</b></p><p>  第15章實(shí)時(shí)系統(tǒng)的設(shè)計(jì)</p><p>  第16章軟件測(cè)試技術(shù)</p

5、><p>  第17章軟件測(cè)試策略</p><p>  第18章軟件的技術(shù)度量</p><p>  第四部分面向?qū)ο蟮能浖こ?lt;/p><p>  第19章面向?qū)ο蟮母拍詈驮瓌t</p><p>  第20章面向?qū)ο蠓治?lt;/p><p>  第21章面向?qū)ο笤O(shè)計(jì)</p><p>

6、;  第22章面向?qū)ο鬁y(cè)試</p><p>  第23章面向?qū)ο笙到y(tǒng)的技術(shù)度量</p><p>  第五部分軟件工程高級(jí)課題</p><p><b>  第24章形式化方法</b></p><p>  第25章凈室軟件工程</p><p><b>  第26章軟件復(fù)用</b>

7、</p><p><b>  第27章再工程</b></p><p>  第28章客戶/服務(wù)器軟件工程</p><p>  第29章計(jì)算機(jī)輔助軟件工程</p><p><b>  第30章未來(lái)之路</b></p><p>  第一部分  產(chǎn)品和過(guò)程</p>

8、;<p>  在本書的這一部分中我們主要討論什么是工程產(chǎn)品和如何為工程技術(shù)提出一個(gè)框架的過(guò)程。在下面的章節(jié)中,我們主要解決下列問(wèn)題:</p><p>  ·到底什么是計(jì)算機(jī)軟件?</p><p>  ·為什么我們不斷努力要建造高質(zhì)量的基于計(jì)算機(jī)的系統(tǒng)?</p><p>  ·我們?nèi)绾螌?duì)計(jì)算機(jī)軟件的應(yīng)用領(lǐng)域分類?</p

9、><p>  ·關(guān)于軟件仍存在什么樣的神話?</p><p><b>  ·什么是軟件過(guò)程?</b></p><p>  ·是否存在一般性的方法評(píng)價(jià)一個(gè)過(guò)程的質(zhì)量?</p><p>  ·軟件開(kāi)發(fā)中可以應(yīng)用什么過(guò)程模型?</p><p>  ·線性過(guò)程

10、和迭代過(guò)程有何區(qū)別?</p><p>  ·它們的優(yōu)點(diǎn)和缺點(diǎn)是什么?</p><p>  ·在軟件工程中可以建議什么更高級(jí)的過(guò)程模型?</p><p>  一旦回答了這些問(wèn)題,讀者就能夠更好地理解本書其余部分給出的工程原則的管理和技術(shù)方面的知識(shí)。</p><p><b>  第1章   產(chǎn)品&

11、lt;/b></p><p>  本書的第1版在80年代初出版后不久,Business Weekly(《商業(yè)周刊》)雜志在頭版給出如下的大標(biāo)題:“軟件:新的驅(qū)動(dòng)力”。編輯們當(dāng)時(shí)并沒(méi)有意識(shí)到他們的預(yù)見(jiàn)是多么的正確。那時(shí),大多數(shù)人對(duì)軟件還是一無(wú)所知。大軟件公司,如微軟公司,還不存在;擁有15000平方英尺專門出售包裝好的軟件的計(jì)算機(jī)超市聞所未聞;在電視上為計(jì)算機(jī)操作系統(tǒng)做60秒鐘商業(yè)廣告的想法是可笑的;而互聯(lián)網(wǎng)

12、僅為個(gè)別研究者和高等學(xué)校學(xué)生所知。但是,在不到20年的時(shí)間里,所有這些(甚至更多)已經(jīng)成為現(xiàn)實(shí)。</p><p>  計(jì)算機(jī)軟件已經(jīng)成為一種驅(qū)動(dòng)力。它是進(jìn)行商業(yè)決策的引擎;它是現(xiàn)代科學(xué)研究和工程問(wèn)題解決的基礎(chǔ);它也是區(qū)分現(xiàn)代產(chǎn)品和服務(wù)的關(guān)鍵因素。它在各種類型的系統(tǒng)中應(yīng)用,如交通、醫(yī)藥、通訊、軍事、產(chǎn)業(yè)化過(guò)程、娛樂(lè)、辦公……難以窮舉。軟件在現(xiàn)代社會(huì)中的確是必不可少的。而且當(dāng)我們進(jìn)入21世紀(jì),軟件將成為從基礎(chǔ)教育到基

13、因工程的所有各領(lǐng)域新進(jìn)展的驅(qū)動(dòng)器。</p><p>  所有這一切已經(jīng)改變了軟件的常見(jiàn)概念。計(jì)算機(jī)軟件是無(wú)所不在的,人們把軟件看作是生活中現(xiàn)實(shí)的技術(shù)。在很多情況下,人們把他們的工作、他們的舒適、他們的安全、他們的娛樂(lè)、他們的決策、甚至他們的整個(gè)生活都依賴于計(jì)算機(jī)軟件。軟件千萬(wàn)可不能出錯(cuò)。</p><p>  本書介紹的若干技術(shù)是那些想要建造正確的計(jì)算機(jī)軟件的人們需要用到的。這些技術(shù)包括一個(gè)

14、過(guò)程,一組方法和一系列工具,我們稱之為軟件工程。</p><p><b>  1.1軟件的發(fā)展 </b></p><p>  今天,軟件擔(dān)任著雙重角色。它是一種產(chǎn)品,同時(shí)又是開(kāi)發(fā)和運(yùn)行產(chǎn)品的載體。作為一種產(chǎn)品,它表達(dá)了由計(jì)算機(jī)硬件體現(xiàn)的計(jì)算潛能。不管它是駐留在蜂窩電話中,還是操作在主機(jī)上,軟件就是一個(gè)信息轉(zhuǎn)換器——產(chǎn)生、管理、獲取、修改、顯示或轉(zhuǎn)換信息,這些

15、信息可以很簡(jiǎn)單,如一個(gè)單個(gè)的位(bit),或很復(fù)雜,如多媒體仿真信息。作為開(kāi)發(fā)運(yùn)行產(chǎn)品的載體,軟件是計(jì)算機(jī)控制(操作系統(tǒng))的基礎(chǔ)、信息通信(網(wǎng)絡(luò))的基礎(chǔ),也是創(chuàng)建和控制其他程序(軟件工具和環(huán)境)的基礎(chǔ)。</p><p>  許多人相信21世紀(jì)最重要的產(chǎn)品是——信息,軟件充分體現(xiàn)了這一觀點(diǎn)。它處理個(gè)人數(shù)據(jù)(如個(gè)人的金融事務(wù)),使得這些數(shù)據(jù)在局部范圍中更為有用;它管理商業(yè)信息增強(qiáng)了商業(yè)競(jìng)爭(zhēng)力;它提供了通往全球信息網(wǎng)絡(luò)

16、(如Internet)的途徑;它也提供了以各種形式獲取信息的手段。</p><p>  計(jì)算機(jī)軟件的角色在20世紀(jì)后半葉發(fā)生了很大的變化。硬件性能的極大提高,計(jì)算機(jī)體系結(jié)構(gòu)的不斷變化,內(nèi)存和硬盤容量的快速增加,以及大量輸入輸出設(shè)備的多種選擇,均促進(jìn)了更為成熟和更為復(fù)雜的基于計(jì)算機(jī)的軟件系統(tǒng)的出現(xiàn)。如果一個(gè)系統(tǒng)是成功的,那么這種成熟性和復(fù)雜性能夠產(chǎn)生出奇跡般的結(jié)果,但是它們也給建造這些復(fù)雜系統(tǒng)的人員帶來(lái)很多的問(wèn)題。

17、</p><p>  在70年代和80年代出版的受歡迎的書對(duì)于計(jì)算機(jī)、軟件和它們對(duì)我們文化的影響等方面提供了有用的歷史的視角。Osborne[OSB79]稱之為一次“新的工業(yè)革命”。Toffler[TOF80]稱微電子的發(fā)展是人類歷史上的“第三次浪潮”,Naisbitt[NAI82]則預(yù)言了從工業(yè)社會(huì)向“信息社會(huì)”的轉(zhuǎn)變。Feigenbaum和McCorduck[FEI83]認(rèn)為由計(jì)算機(jī)控制的信息和知識(shí)將是20世

18、紀(jì)中表現(xiàn)能力的焦點(diǎn),Stoll[STO89]則提出由網(wǎng)絡(luò)和軟件產(chǎn)生的“電子社會(huì)”將是全球知識(shí)交換的關(guān)鍵。</p><p>  進(jìn)入90年代,Toffler[TOF90]描述了“權(quán)利的轉(zhuǎn)移”,因?yàn)橛?jì)算機(jī)和軟件導(dǎo)致了“知識(shí)的民主化”,因而舊的權(quán)利結(jié)構(gòu)(政府,教育,工業(yè),經(jīng)濟(jì),及軍事)將要瓦解。Yourdon[YOU92]擔(dān)心美國(guó)公司在軟件相關(guān)的業(yè)務(wù)中會(huì)失去競(jìng)爭(zhēng)力,并預(yù)言“美國(guó)程序員的衰落和下降”。Hammer和Cha

19、mpy[HAM93]提出信息技術(shù)將在“公司的再工程”中起到很關(guān)鍵的作用。在90年代中期,計(jì)算機(jī)和軟件的流行產(chǎn)生了大量“新勞工運(yùn)動(dòng)”的書籍(例如:由James Brook和Iain Boal編輯的“抵制虛擬的生活”,以及Stephen Talbot寫的“未來(lái)不是計(jì)算”)。這些作者把計(jì)算機(jī)看成是魔鬼,強(qiáng)調(diào)了其合法性,而忽略了已被人們意識(shí)到的巨大的利益[LEV95]問(wèn)題。</p><p>  在計(jì)算機(jī)發(fā)展的早期階段,大

20、多數(shù)人把軟件看成是不需預(yù)先計(jì)劃的事情。計(jì)算機(jī)編程很簡(jiǎn)單,沒(méi)有什么系統(tǒng)化的方法。軟件的開(kāi)發(fā)沒(méi)有任何管理,一旦計(jì)劃延遲了或成本提高了,程序員才開(kāi)始手忙腳亂地彌補(bǔ),而他們的努力一般情況下也會(huì)取得成功。</p><p>  在通用的硬件已經(jīng)非常普遍的時(shí)候,軟件卻相反,對(duì)每一類應(yīng)用均需自行再設(shè)計(jì),應(yīng)用范圍很有限。軟件產(chǎn)品還在嬰兒階段,大多數(shù)軟件均是由使用它們的人員或組織自己開(kāi)發(fā)的,如你寫軟件,使其運(yùn)行,如果它有問(wèn)題,你負(fù)責(zé)

21、改好。工作的可變性很低,管理者必須得到保證:一旦發(fā)生了錯(cuò)誤你必須在那里。因?yàn)檫@種個(gè)人化的軟件環(huán)境,設(shè)計(jì)往往僅是人們頭腦中的一種模糊想法,而文檔就根本不存在。</p><p>  在早期,我們了解了很多關(guān)于計(jì)算機(jī)系統(tǒng)的實(shí)現(xiàn),但對(duì)于計(jì)算機(jī)系統(tǒng)工程幾乎一無(wú)所知。但是公平地講,我們應(yīng)該感謝這個(gè)時(shí)期開(kāi)發(fā)的許多卓越的計(jì)算機(jī)系統(tǒng),其中不少一直到今天還在使用,并繼續(xù)發(fā)揮著巨大的作用。</p><p>  

22、計(jì)算機(jī)系統(tǒng)發(fā)展的第二階段跨越了從60年代中期到70年代末期的十余年(如圖1-1)。多道程序設(shè)計(jì)、多用戶系統(tǒng)引入了人機(jī)交互的新概念。交互技術(shù)打開(kāi)了計(jì)算機(jī)應(yīng)用的新世界,以及硬件和軟件配合的新層次。實(shí)時(shí)系統(tǒng)能夠從多個(gè)源收集、分析和轉(zhuǎn)換數(shù)據(jù),從而使得進(jìn)程的控制和輸出的產(chǎn)生以毫秒而不是分鐘來(lái)進(jìn)行。在線存儲(chǔ)的發(fā)展導(dǎo)致了第一代數(shù)據(jù)庫(kù)管理系統(tǒng)的出現(xiàn)。</p><p>  第二階段還有一個(gè)特點(diǎn)就是軟件產(chǎn)品的使用和“軟件作坊”的出現(xiàn)

23、。軟件被開(kāi)發(fā),使得它們可以在很寬的范圍中應(yīng)用。主機(jī)和微機(jī)上的程序能夠有數(shù)百甚至上千的用戶。來(lái)自工業(yè)界、政府和學(xué)術(shù)界的企業(yè)家們紛紛開(kāi)始開(kāi)發(fā)各類軟件包,并賺了大筆錢財(cái)。</p><p>  早期               第二階段     

24、0;  第三階段           第四階段</p><p>  ·面向批處理         ·多用戶       ·分布式系統(tǒng) &

25、#160;     ·強(qiáng)大的桌面系統(tǒng)</p><p>  ·有限的分布         ·實(shí)時(shí)         ·嵌入“智能”    

26、·面向?qū)ο蠹夹g(shù)</p><p>  ·自定義軟件         ·數(shù)據(jù)庫(kù)       ·低成本硬件       ·專家系統(tǒng)</p><p>

27、  ·軟件產(chǎn)品     ·消費(fèi)者的影響     ·人工神經(jīng)網(wǎng)絡(luò)</p><p><b>  ·并行計(jì)算</b></p><p><b>  ·網(wǎng)絡(luò)計(jì)算機(jī)</b></p><p>  隨著計(jì)算機(jī)系

28、統(tǒng)的增多,計(jì)算機(jī)軟件庫(kù)開(kāi)始擴(kuò)展。內(nèi)部開(kāi)發(fā)的項(xiàng)目產(chǎn)生了上萬(wàn)行的源程序,從外面購(gòu)買的軟件產(chǎn)品加上幾千行新代碼就可以了。這時(shí),一團(tuán)黑云出現(xiàn)在地平線上,當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí)需要糾正所有這些程序(所有這些源代碼);當(dāng)用戶需求發(fā)生變化時(shí)需要修改;當(dāng)硬件環(huán)境更新時(shí)需要適應(yīng)。這些活動(dòng)統(tǒng)稱為軟件維護(hù)。在軟件維護(hù)上所花費(fèi)的精力開(kāi)始以驚人的速度消耗資源。</p><p>  更糟糕的是,許多程序的個(gè)人化特性使得它們根本不能維護(hù)?!败浖C(jī)”出

29、現(xiàn)了。</p><p>  計(jì)算機(jī)系統(tǒng)發(fā)展的第三階段始于70年代中期并跨越了整整十年。分布式系統(tǒng)——多臺(tái)計(jì)算機(jī),每一臺(tái)都在同時(shí)執(zhí)行某些功能,并與其他計(jì)算機(jī)通訊——極大地提高了計(jì)算機(jī)系統(tǒng)的復(fù)雜性。廣域網(wǎng)和局域網(wǎng)、高帶寬數(shù)字通訊以及對(duì)“即時(shí)”數(shù)據(jù)訪問(wèn)需求的增加都對(duì)軟件開(kāi)發(fā)者提出了更高的要求。然而,軟件仍然繼續(xù)應(yīng)用于工業(yè)界和學(xué)術(shù)界,個(gè)人應(yīng)用很少。</p><p>  第三階段的主要特點(diǎn)是微處理器

30、的出現(xiàn)和廣泛應(yīng)用。微處理器孕育了一系列的智能產(chǎn)品——從汽車到微波爐,從工業(yè)機(jī)器人到血液診斷設(shè)備——但那一個(gè)也沒(méi)有個(gè)人計(jì)算機(jī)那么重要,在不到十年時(shí)間里,計(jì)算機(jī)真正成為大眾化的東西。①</p><p>  計(jì)算機(jī)系統(tǒng)發(fā)展的第四個(gè)階段已經(jīng)不再是著重于單臺(tái)計(jì)算機(jī)和計(jì)算機(jī)程序,而是面向計(jì)算機(jī)和軟件的綜合影響。由復(fù)雜的操作系統(tǒng)控制的強(qiáng)大的桌面機(jī),廣域和局域網(wǎng)絡(luò),配合以先進(jìn)的軟件應(yīng)用已成為標(biāo)準(zhǔn)。計(jì)算機(jī)體系結(jié)構(gòu)迅速地從集中的主機(jī)

31、環(huán)境轉(zhuǎn)變?yōu)榉植嫉目蛻魴C(jī)/服務(wù)器環(huán)境。世界范圍的信息網(wǎng)提供了一個(gè)基本結(jié)構(gòu),使得學(xué)者和政治家可以同樣考慮“信息高速公路”和“網(wǎng)際空間連通”的問(wèn)題。事實(shí)上,Internet可以看作是能夠被單個(gè)用戶訪問(wèn)的“軟件”。</p><p>  軟件產(chǎn)業(yè)在世界經(jīng)濟(jì)中不再是無(wú)足輕重的。由產(chǎn)業(yè)巨子如微軟做的一個(gè)決定可能會(huì)帶來(lái)成百上千億美元的風(fēng)險(xiǎn)。隨著第四階段的進(jìn)展,一些新技術(shù)開(kāi)始涌現(xiàn)。面向?qū)ο蠹夹g(shù)(本書第四部分)在許多領(lǐng)域中迅速取代了

32、傳統(tǒng)軟件開(kāi)發(fā)方法。雖然關(guān)于“第五代”計(jì)算機(jī)的預(yù)言仍是一個(gè)未知數(shù),但是軟件開(kāi)發(fā)的“第四代技術(shù)”確實(shí)改變了軟件界開(kāi)發(fā)計(jì)算機(jī)程序的方式。專家系統(tǒng)和人工智能軟件終于從實(shí)驗(yàn)室里走了出來(lái),進(jìn)入了實(shí)際應(yīng)用,解決了現(xiàn)實(shí)世界中的大量問(wèn)題。結(jié)合模糊邏輯應(yīng)用的人工神經(jīng)網(wǎng)絡(luò)軟件揭示了模式識(shí)別和類似人的信息處理能力的可能性。虛擬現(xiàn)實(shí)和多媒體系統(tǒng)使得與最終用戶的通訊可以采用完全不同的方法。“遺傳算法”[BEG95]則提供了可以駐留于大型并行生物計(jì)算機(jī)上的軟件的潛在

33、可能性。</p><p>  但是,一系列軟件相關(guān)的問(wèn)題在計(jì)算機(jī)系統(tǒng)的整個(gè)發(fā)展過(guò)程中一直存在著,而且這些問(wèn)題還會(huì)繼續(xù)惡化:</p><p>  1.硬件的發(fā)展一直超過(guò)軟件,使得我們建造的軟件難以發(fā)揮硬件的所有潛能。</p><p>  2.我們建造新程序的能力遠(yuǎn)遠(yuǎn)不能滿足人們對(duì)新程序的需求,同時(shí)我們開(kāi)發(fā)新程序的速度也不能滿足商業(yè)和市場(chǎng)的要求。</p>

34、<p>  3.計(jì)算機(jī)的普遍使用已使得社會(huì)越來(lái)越依賴于可靠的軟件。如果軟件失敗,會(huì)造成巨大的經(jīng)濟(jì)損失,甚至有可能給人類帶來(lái)災(zāi)難。</p><p>  4.我們一直在不斷努力建造具有高可靠性和高質(zhì)量的計(jì)算機(jī)軟件。</p><p>  5.拙劣的設(shè)計(jì)和資源的缺乏使得我們難以支持和增強(qiáng)已有軟件。</p><p>  為了解決這些問(wèn)題,整個(gè)產(chǎn)業(yè)界開(kāi)始采用了軟件工程

35、實(shí)踐。</p><p>  1.1.1產(chǎn)業(yè)的觀點(diǎn)</p><p>  在計(jì)算機(jī)發(fā)展的早期,計(jì)算機(jī)系統(tǒng)是采用面向硬件的管理方法來(lái)開(kāi)發(fā)的。項(xiàng)目管理者著重于硬件,因?yàn)樗窍到y(tǒng)開(kāi)發(fā)中最大的預(yù)算項(xiàng)。為了控制硬件成本,管理者建立了規(guī)范的控制和技術(shù)的標(biāo)準(zhǔn)。他們要求在真正開(kāi)始建造系統(tǒng)之前,進(jìn)行詳盡的分析和設(shè)計(jì),他們度量過(guò)程,以發(fā)現(xiàn)哪里還可以進(jìn)一步改進(jìn),他們堅(jiān)持質(zhì)量控制和質(zhì)量保證,他們?cè)O(shè)立規(guī)程,以管理變化。

36、簡(jiǎn)言之,他們應(yīng)用了控制、方法和工具,我們可以稱之為硬件工程。但遺憾的是軟件只不過(guò)是事后才考慮的事情。</p><p>  在早期,程序設(shè)計(jì)被看作是一門“藝術(shù)”。幾乎沒(méi)有規(guī)范化的方法,也沒(méi)有人使用它們。程序員往往從試驗(yàn)和錯(cuò)誤中積累經(jīng)驗(yàn)。建造計(jì)算機(jī)軟件的專業(yè)性和挑戰(zhàn)性,使其披上了一種神密的面紗,管理者們很難了解它。軟件世界真是完全無(wú)序——這是一個(gè)開(kāi)發(fā)者的為所欲為的時(shí)代。</p><p>  今

37、天,計(jì)算機(jī)系統(tǒng)開(kāi)發(fā)成本的分配發(fā)生了戲劇性的變化。軟件,而不是硬件,是最大的成本項(xiàng)。在近二十年里,管理者和很多開(kāi)發(fā)人員在不斷地問(wèn)以下的問(wèn)題:</p><p>  ·為什么需要那么長(zhǎng)時(shí)間才能結(jié)束開(kāi)發(fā)?</p><p>  ·為什么成本如此之高?</p><p>  ·為什么我們不能在把軟件交給客戶之前就發(fā)現(xiàn)所有的錯(cuò)誤?</p>

38、<p>  ·為什么在軟件開(kāi)發(fā)過(guò)程中我們難以度量其進(jìn)展?</p><p>  這些問(wèn)題以及其他許多問(wèn)題都表明了對(duì)軟件及其開(kāi)發(fā)的方式是必須關(guān)注了——這種關(guān)注最終導(dǎo)致了軟件工程實(shí)踐的出現(xiàn)。</p><p>  1.1.2老化的軟件工廠</p><p>  在50和60年代,許多評(píng)論家批評(píng)美國(guó)的鋼鐵產(chǎn)業(yè)缺少對(duì)其工廠的投入。工廠開(kāi)始惡化,現(xiàn)代化的方法很

39、少被采納,最終產(chǎn)品的質(zhì)量和成本難以容忍,外來(lái)的競(jìng)爭(zhēng)開(kāi)始贏得市場(chǎng)份額。這些企業(yè)在管理中確定把主要的投資投入到其主營(yíng)業(yè)務(wù)中,以保持競(jìng)爭(zhēng)力。隨著時(shí)間的推移,美國(guó)的鋼鐵產(chǎn)業(yè)蒙受了巨大損失,大量市場(chǎng)份額被外來(lái)競(jìng)爭(zhēng)者占領(lǐng)——這些企業(yè)擁有新工廠,采用更為現(xiàn)代化的技術(shù),并且得到政府的資助,使得他們極具價(jià)格優(yōu)勢(shì)。</p><p>  在那個(gè)時(shí)期,羽翼未豐的計(jì)算機(jī)產(chǎn)業(yè)中的很多人都以蔑視的態(tài)度評(píng)價(jià)鋼鐵產(chǎn)業(yè),“如果它們不愿在自己的業(yè)務(wù)上

40、投入,那當(dāng)然會(huì)失去市場(chǎng)份額”。這些話現(xiàn)在輪到說(shuō)我們自己了。</p><p>  聽(tīng)上去很戲劇化,今天的軟件產(chǎn)業(yè)就像五、六十年代的鋼鐵產(chǎn)業(yè),無(wú)論大公司還是小公司,都有一個(gè)老化的“軟件工廠”——有成千上萬(wàn)的重要的基于軟件的應(yīng)用程序急待更新:</p><p>  · 20年前開(kāi)發(fā)的信息系統(tǒng)應(yīng)用程序經(jīng)過(guò)了幾十次的修改,已經(jīng)真正不可維護(hù)了。即使是最小的修改也會(huì)引起整個(gè)系統(tǒng)失敗。</p

41、><p>  ·一些用于生成關(guān)鍵設(shè)計(jì)數(shù)據(jù)的工程應(yīng)用程序,由于不斷的修改和老化,已經(jīng)沒(méi)有人真正了解其內(nèi)部結(jié)構(gòu)。</p><p>  ·嵌入式系統(tǒng)(有成千上萬(wàn)的這類應(yīng)用程序,其中包括核電站控制、航空調(diào)度和工廠管理)表現(xiàn)出奇怪的有時(shí)甚至是無(wú)法解釋的行為,但又不能不用它們,因?yàn)槟壳斑€沒(méi)有其他方法可以替代它們。</p><p>  有問(wèn)題就“打補(bǔ)丁”,并給這些

42、應(yīng)用程序一個(gè)時(shí)髦的界面,僅僅如此是不夠的。軟件工廠的許多構(gòu)件需要再生產(chǎn),否則它們就不再具有競(jìng)爭(zhēng)力了。但不幸的是,許多企業(yè)的管理者并不愿投入資源去進(jìn)行再生產(chǎn),他們辯解:“這些應(yīng)用程序仍能工作,投入資源去使得它們更好是不經(jīng)濟(jì)的”。</p><p>  1.1.3軟件的競(jìng)爭(zhēng) </p><p>  許多年來(lái),大、小公司雇傭的軟件開(kāi)發(fā)人員僅僅在公司內(nèi)部服務(wù),而且他們也愿意這樣。因?yàn)槊恳粋€(gè)計(jì)

43、算機(jī)程序都是自行開(kāi)發(fā)的,這些“自家”的軟件人員控制著成本、進(jìn)度和質(zhì)量。今天,所有這一切都改變了。</p><p>  軟件目前是一個(gè)競(jìng)爭(zhēng)很強(qiáng)的行業(yè)。曾經(jīng)要自行開(kāi)發(fā)的軟件現(xiàn)在可以在貨架上買到,許多公司過(guò)去雇傭了大量的程序員開(kāi)發(fā)特定的軟件,現(xiàn)在它們大部分的軟件工作已交給第三方廠商去完成[MIN95]。</p><p>  成本、進(jìn)度和質(zhì)量將是未來(lái)若干年中導(dǎo)致軟件激烈競(jìng)爭(zhēng)的主要因素。美國(guó)和西歐有

44、很成熟的軟件產(chǎn)業(yè),而遠(yuǎn)東(如韓國(guó),新加坡)、亞洲(如印度、中國(guó))和東歐的一些國(guó)家擁有大量的有天份、受過(guò)良好教育且相對(duì)較低廉的專門人才[ECO94]。這種壓力導(dǎo)致了必須迅速采用現(xiàn)代化的軟件工程實(shí)踐的需要,同時(shí)軟件開(kāi)發(fā)也是一個(gè)必須認(rèn)真考慮的因素,因?yàn)槭澜绶秶能浖臉I(yè)人員都在追求盡量少的開(kāi)發(fā)費(fèi)用。</p><p>  在關(guān)于信息服務(wù)對(duì)美國(guó)及世界的影響的論著中,F(xiàn)eigenbaum和McCorduck[FEI83]作了

45、如下陳述:</p><p>  知識(shí)就是力量,而計(jì)算機(jī)是這種力量的倍增器……美國(guó)的計(jì)算機(jī)產(chǎn)業(yè)是創(chuàng)新的、充滿活力的和成功的。在某種程度上,它是一個(gè)理想的產(chǎn)業(yè)。它通過(guò)轉(zhuǎn)化知識(shí)分子的腦力勞動(dòng)來(lái)產(chǎn)生價(jià)值,而幾乎不需要什么能源和原材料。今天,我們?cè)谶@個(gè)最重要的現(xiàn)代技術(shù)上領(lǐng)導(dǎo)著世界的想法和市場(chǎng),但明天會(huì)怎樣哪?</p><p>  是的,明天會(huì)怎樣哪?計(jì)算機(jī)硬件已經(jīng)成為一種商品,可從很多渠道得到。但軟

46、件仍然是美國(guó)保持著“創(chuàng)新的、充滿活力的和成功的”一個(gè)產(chǎn)業(yè)。但我們還會(huì)繼續(xù)保持領(lǐng)先嗎?至少答案的一部分就在這里:我們將采用什么樣的方法去建造下一代計(jì)算機(jī)系統(tǒng)的軟件。</p><p><b>  1.2軟件</b></p><p>  在1970年,只有不到1%的人能夠比較準(zhǔn)確地描述出什么是“計(jì)算機(jī)軟件”。而現(xiàn)在,大多數(shù)專業(yè)人士和許多業(yè)外公眾都認(rèn)為他們了解了什么是軟件。但

47、他們真的了解嗎?</p><p>  關(guān)于軟件,教科書上一般是如下定義的:軟件是(1)能夠完成預(yù)定功能和性能的可執(zhí)行的指令(計(jì)算機(jī)程序);(2)使得程序能夠適當(dāng)?shù)夭僮餍畔⒌臄?shù)據(jù)結(jié)構(gòu);(3)描述程序的操作和使用的文檔。毫無(wú)疑問(wèn),也可以給出其他更詳細(xì)的定義。但我們不只是需要一個(gè)形式上的定義。</p><p>  1.2.1軟件特征 </p><p>  要理解

48、軟件的含義(以及對(duì)軟件工程有一個(gè)全面的理解),首先要了解軟件的特征是很重要的,據(jù)此能夠明白軟件與人類建造的其他事物之間的區(qū)別。當(dāng)建造硬件時(shí),人的創(chuàng)造性的過(guò)程(分析、設(shè)計(jì)、建造、測(cè)試)能夠完全轉(zhuǎn)換成物理的形式。如果我們建造一個(gè)新的計(jì)算機(jī),初始的草圖、正式的設(shè)計(jì)圖紙和面板的原型一步步演化成為一個(gè)物理的產(chǎn)品(VLSI芯片、線路板、電源等等)。</p><p>  而軟件是邏輯的而不是物理的產(chǎn)品。因此,軟件具有與硬件完全

49、不同的特征:</p><p>  1.軟件是由開(kāi)發(fā)或工程化而形成的,而不是傳統(tǒng)意義上的制造產(chǎn)生的。</p><p>  雖然在軟件開(kāi)發(fā)和硬件制造之間有一些相似之處,但兩者本質(zhì)上是不同的。這兩者,都可以通過(guò)良好的設(shè)計(jì)獲得高質(zhì)量,但硬件在制造過(guò)程中可能會(huì)引入質(zhì)量問(wèn)題,這種情況對(duì)于軟件而言幾乎不存在(或是很容易改正)。軟件成為產(chǎn)品之后,其制造只是簡(jiǎn)單的拷貝而已;兩者都依賴于人,但參與的人和完成的

50、工作之間的關(guān)系不同;兩者都是建造一個(gè)產(chǎn)品,但方法不同(見(jiàn)第3章)。</p><p>  軟件成本集中于開(kāi)發(fā)上,這意味著軟件項(xiàng)目不能象硬件制造項(xiàng)目那樣來(lái)管理。</p><p>  在80年代中期,“軟件工廠”的概念被正式引入[MAN84]、[YAJ84]。應(yīng)該注意到這個(gè)術(shù)語(yǔ)并沒(méi)有把硬件制造和軟件開(kāi)發(fā)認(rèn)為是等價(jià)的。而是通過(guò)軟件工廠這個(gè)概念提出了軟件開(kāi)發(fā)中應(yīng)該使用自動(dòng)化工具(見(jiàn)第5部分)。<

51、;/p><p>  2.軟件不會(huì)“磨損”。</p><p>  圖1-2刻劃了隨著時(shí)間的改變硬件故障率的變化曲線圖。其關(guān)系,常常被稱作“浴缸曲線”,表明了硬件在其生命初期有較高的故障率(這些故障主要是由于設(shè)計(jì)或制造的缺陷);這些缺陷修正之后,故障率在一段時(shí)間中會(huì)降到一個(gè)穩(wěn)定的曲線上(很低)。隨著時(shí)間的改變,故障率又提升了,這是因?yàn)橛布?gòu)件由于種種原因會(huì)不斷受到損害,例如灰塵、振動(dòng)、濫用、溫度的

52、急劇變化以及其他許多環(huán)境問(wèn)題。簡(jiǎn)單講,硬件已經(jīng)開(kāi)始磨損了。</p><p>  軟件并不受到這些引起硬件磨損的環(huán)境因素的影響。因此,理論上講,軟件的故障率曲線呈現(xiàn)出如圖1-3所示的形式。隱藏的錯(cuò)誤會(huì)引起程序在其生命初期具有較高的故障率。但這些錯(cuò)誤改正之后(我們假設(shè)理想情況下改正過(guò)程中并不引入其他錯(cuò)誤),曲線就趨于平穩(wěn),如圖所示。圖1-3給出了實(shí)際軟件故障模型的一個(gè)總的簡(jiǎn)化圖(第8章將給出更多信息)。其意義很清楚—

53、—軟件不會(huì)磨損,不過(guò)它會(huì)退化。</p><p>  這個(gè)說(shuō)法表面上似乎是矛盾的,我們可以通過(guò)圖1-4來(lái)解釋清楚。在其生命期中,軟件會(huì)經(jīng)歷修改(維護(hù)),隨著這些修改,有可能會(huì)引入新的錯(cuò)誤,使得故障率曲線呈現(xiàn)為圖1-4所示的鋸齒形。在該曲線能夠恢復(fù)到原來(lái)的穩(wěn)定狀態(tài)的故障率之前,又需要新的修改,又引起一個(gè)新的鋸齒。慢慢地,最小故障率就開(kāi)始提高了——軟件的退化由于修改而發(fā)生了。</p><p> 

54、 關(guān)于磨損的另一個(gè)側(cè)面也表明了硬件和軟件之間的不同。當(dāng)一個(gè)硬件構(gòu)件磨損時(shí),可以用另外一個(gè)備用零件替換它,但對(duì)于軟件就沒(méi)有備用零件可以替換了。每一個(gè)軟件故障都表明了設(shè)計(jì)或是將設(shè)計(jì)轉(zhuǎn)換成機(jī)器可執(zhí)行代碼的過(guò)程中存在錯(cuò)誤。因此,軟件維護(hù)要比硬件維護(hù)復(fù)雜得多。</p><p>  3.大多數(shù)軟件是自定的,而不是通過(guò)已有的構(gòu)件組裝而來(lái)的。</p><p>  我們先看一看一個(gè)基于微處理器的控制硬件是如

55、何設(shè)計(jì)和建造出來(lái)的。設(shè)計(jì)工程師畫一個(gè)簡(jiǎn)單的數(shù)字電路圖,做一些基本的分析以保證可以實(shí)現(xiàn)預(yù)定的功能,然后查閱所需的數(shù)字零件的目錄。每一個(gè)集成電路(通常稱為“IC”或“芯片”)都有一個(gè)零件編號(hào)、固定的功能、定義好的接口和一組標(biāo)準(zhǔn)的集成指南。每一個(gè)選定的零件,都可以在貨架上買到。</p><p>  而軟件設(shè)計(jì)者就沒(méi)有上述這種榮幸了。幾乎沒(méi)有軟件構(gòu)件。有可能在貨架上買到的軟件,它本身就是一個(gè)完整的軟件,而不能作為構(gòu)件再組

56、裝成新的程序①。雖然關(guān)于“軟件復(fù)用”已有大量論著,但這種概念的成功實(shí)現(xiàn)還只是剛剛開(kāi)始。</p><p>  1.2.2軟件構(gòu)件 </p><p>  隨著工程化的發(fā)展,大量標(biāo)準(zhǔn)的設(shè)計(jì)構(gòu)件產(chǎn)生了。標(biāo)準(zhǔn)螺絲和貨架上的集成電路芯片僅僅是成千上萬(wàn)的標(biāo)準(zhǔn)構(gòu)件中的兩種,機(jī)械和電子工程師在設(shè)計(jì)新系統(tǒng)時(shí)會(huì)用到它們。這些可復(fù)用構(gòu)件的使用使得工程師們能夠集中精力于設(shè)計(jì)中真正有創(chuàng)造性的部分(如設(shè)計(jì)中那

57、些新的成分)。在硬件中,構(gòu)件復(fù)用是工程化的必然結(jié)果。而在軟件中,它還僅僅是在小范圍內(nèi)取得一定應(yīng)用。</p><p>  可復(fù)用性(Reusability)是高質(zhì)量軟件構(gòu)件的一個(gè)重要特征(第26章將給出更詳細(xì)的討論),一個(gè)軟件構(gòu)件應(yīng)該被設(shè)計(jì)和實(shí)現(xiàn)為能夠在多個(gè)不同程序中復(fù)用。在60年代,我們建造了科學(xué)計(jì)算子程序庫(kù),它們能夠在很多工程和科學(xué)應(yīng)用中復(fù)用,這些子程序庫(kù)可以以一種高效的方式復(fù)用,定義明確的算法,但其應(yīng)用范圍有

58、限。今天,我們已經(jīng)擴(kuò)展了復(fù)用的概念,不僅是算法,還可以是數(shù)據(jù)結(jié)構(gòu)?,F(xiàn)代的可復(fù)用構(gòu)件包含了數(shù)據(jù)以及應(yīng)用這些數(shù)據(jù)的處理過(guò)程,使得軟件工程師能夠從已有可復(fù)用構(gòu)件中創(chuàng)建新的應(yīng)用②。例如,現(xiàn)在交互界面都是通過(guò)可復(fù)用構(gòu)件建造的,你可以使用它們創(chuàng)建圖形窗口、下拉式菜單和各種交互機(jī)制。建造用戶界面所需的數(shù)據(jù)結(jié)構(gòu)和處理細(xì)節(jié)均包含在一個(gè)可復(fù)用的界面建造構(gòu)件庫(kù)中。</p><p>  軟件構(gòu)件使用某種程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn),該語(yǔ)言具有一個(gè)有

59、限的詞匯表、一個(gè)明確定義的文法及語(yǔ)法和語(yǔ)義規(guī)則。在最底層,該語(yǔ)言直接反映了硬件的指令集;在中層,程序設(shè)計(jì)語(yǔ)言,如Ada 95、C或Smalltalk可用于創(chuàng)建程序的過(guò)程化描述;在最高層,該語(yǔ)言可使用圖形化的圖標(biāo)或其他符號(hào)去表示關(guān)于需求的解決方案。由于可執(zhí)行代碼就自動(dòng)生成了。</p><p>  機(jī)器級(jí)語(yǔ)言是CPU指令集的一個(gè)符號(hào)表示。當(dāng)一個(gè)好的軟件開(kāi)發(fā)者在開(kāi)發(fā)一個(gè)可維護(hù)、文檔齊全的程序時(shí),使用機(jī)器語(yǔ)言能夠很高效地

60、利用內(nèi)存并優(yōu)化該程序的執(zhí)行速度。當(dāng)程序設(shè)計(jì)得很差且沒(méi)有文檔時(shí),機(jī)器語(yǔ)言就是一場(chǎng)惡夢(mèng)。</p><p>  中層語(yǔ)言使得軟件開(kāi)發(fā)者和程序可獨(dú)立于機(jī)器。如果使用了很好的翻譯器,一個(gè)中層語(yǔ)言的詞匯表、文法、語(yǔ)法和語(yǔ)義都能夠比機(jī)器語(yǔ)言高級(jí)得多。事實(shí)上,中層語(yǔ)言的編譯器和解釋器的輸出就是機(jī)器語(yǔ)言。</p><p>  雖然目前有成百上千種的程序設(shè)計(jì)語(yǔ)言,但只有不到10種中層的程序設(shè)計(jì)語(yǔ)言在工業(yè)界廣泛

61、使用。一些語(yǔ)言,如COBOL和FORTRAN從它們發(fā)明至今已經(jīng)流行了30余年,更多的現(xiàn)代程序設(shè)計(jì)語(yǔ)言,如Ada95、C、C++、Eiffel、Java和Smalltalk也各自有一大批熱心的追隨者。</p><p>  機(jī)器代碼,匯編語(yǔ)言(機(jī)器級(jí)語(yǔ)言)和中層程序設(shè)計(jì)語(yǔ)言通常被認(rèn)為是計(jì)算機(jī)語(yǔ)言的前三代。因?yàn)檫@些語(yǔ)言中的任何一種,都需程序員既要關(guān)心信息結(jié)構(gòu)的表示,又要考慮程序本身的控制。因此這前三代語(yǔ)言被稱為是過(guò)程語(yǔ)

62、言。</p><p>  第四代語(yǔ)言,也稱非過(guò)程語(yǔ)言,使得軟件開(kāi)發(fā)者更加獨(dú)立于計(jì)算機(jī)硬件。使用非過(guò)程語(yǔ)言開(kāi)發(fā)程序,不需要開(kāi)發(fā)者詳細(xì)說(shuō)明過(guò)程化的細(xì)節(jié),而僅僅“說(shuō)明期望的結(jié)果,而不是說(shuō)明要得到該結(jié)果所需要的行為”[COB85]。支撐軟件會(huì)把這種規(guī)約自動(dòng)轉(zhuǎn)換成機(jī)器可執(zhí)行的程序。</p><p><b>  1.2.3軟件應(yīng)用</b></p><p>

63、  軟件可以應(yīng)用于任何場(chǎng)合,只要定義了一組預(yù)說(shuō)明的程序步驟(如一個(gè)算法,但也有例外,如專家系統(tǒng)和人工神經(jīng)網(wǎng)絡(luò))。信息的內(nèi)容和確定性是決定一個(gè)軟件應(yīng)用的特性的重要因素。內(nèi)容指的是輸入和輸出信息的含義和形式,例如,許多商業(yè)應(yīng)用使用高結(jié)構(gòu)化的輸入數(shù)據(jù)(一個(gè)數(shù)據(jù)庫(kù)),且產(chǎn)生格式化的輸出“報(bào)告”。而控制一個(gè)自動(dòng)化機(jī)器的軟件(如一個(gè)數(shù)控系統(tǒng))則接受限定結(jié)構(gòu)的離散數(shù)據(jù)項(xiàng),并產(chǎn)生快速連續(xù)的單個(gè)機(jī)器命令。</p><p>  信息

64、的確定性指的是信息的處理順序及時(shí)間的可預(yù)定性。一個(gè)工程分析程序接受預(yù)定順序的數(shù)據(jù),不間斷的執(zhí)行分析算法,并以報(bào)告或圖形格式產(chǎn)生相關(guān)的數(shù)據(jù)。這類應(yīng)用是確定的。而一個(gè)多用戶操作系統(tǒng),則接受可變化內(nèi)容和任意時(shí)序的數(shù)據(jù),執(zhí)行可被異常條件中斷的算法,并產(chǎn)生隨環(huán)境功能及時(shí)序而變化的輸出。具有這些特點(diǎn)的應(yīng)用是非確定的。</p><p>  在某種程度上講我們難以對(duì)軟件應(yīng)用給出一個(gè)通用的分類。隨著軟件復(fù)雜性的增加,其間已沒(méi)有明顯

65、的差別。下面給出一些軟件應(yīng)用領(lǐng)域,它們可能是一種潛在的應(yīng)用分類:</p><p>  系統(tǒng)軟件:系統(tǒng)軟件是一組為其他程序服務(wù)的程序。一些系統(tǒng)軟件(如編譯器、編輯器和文件管理程序)處理復(fù)雜的但也是確定的信息結(jié)構(gòu)。其他的系統(tǒng)應(yīng)用(如操作系統(tǒng)、驅(qū)動(dòng)程序和通訊進(jìn)程等)則處理大量的非確定的數(shù)據(jù)。不管哪種情況,系統(tǒng)軟件均具有以下特點(diǎn):與計(jì)算機(jī)硬件頻繁交互;多用戶支持;需要精細(xì)調(diào)度、資源共享及靈活的進(jìn)程管理的并發(fā)操作;復(fù)雜的數(shù)

66、據(jù)結(jié)構(gòu);及多外部接口。</p><p>  實(shí)時(shí)軟件:管理、分析、控制現(xiàn)實(shí)世界中發(fā)生的事件的程序稱為實(shí)時(shí)軟件。實(shí)時(shí)軟件的組成包括:一個(gè)數(shù)據(jù)收集部件,負(fù)責(zé)從外部環(huán)境獲取和格式化信息;一個(gè)分析部件,負(fù)責(zé)將信息轉(zhuǎn)換成應(yīng)用時(shí)所需要的形式;一個(gè)控制/輸出部件,負(fù)責(zé)響應(yīng)外部環(huán)境;及一個(gè)管理部件,負(fù)責(zé)協(xié)調(diào)其他各部件,使得系統(tǒng)能夠保持一個(gè)可接受的實(shí)時(shí)響應(yīng)時(shí)間(一般從1毫秒到1分鐘),應(yīng)該注意到術(shù)語(yǔ)“實(shí)時(shí)”不同于“交互”或“分時(shí)”

67、。一個(gè)實(shí)時(shí)系統(tǒng)必須在嚴(yán)格的時(shí)間范圍內(nèi)響應(yīng)。而一個(gè)交互系統(tǒng)(或分時(shí)系統(tǒng))的響應(yīng)時(shí)間可以延遲,且不會(huì)帶來(lái)災(zāi)難性的后果。</p><p>  商業(yè)軟件:商業(yè)信息處理是最大的軟件應(yīng)用領(lǐng)域。具體的“系統(tǒng)”(如工資表、帳目支付和接收、存貨清單等)均可歸為管理信息系統(tǒng)(MIS)軟件,它們可以訪問(wèn)一個(gè)或多個(gè)包含商業(yè)信息的大型數(shù)據(jù)庫(kù)。該領(lǐng)域的應(yīng)用將已有的數(shù)據(jù)重新構(gòu)造,變換成一種能夠輔助商業(yè)操作和管理決策的形式。除了傳統(tǒng)的數(shù)據(jù)處理應(yīng)

68、用之外,商業(yè)軟件應(yīng)用還包括交互式的和客戶機(jī)/服務(wù)器式的計(jì)算(如POS事務(wù)處理)。</p><p>  工程和科學(xué)計(jì)算軟件:工程和科學(xué)計(jì)算軟件的特征是“數(shù)值分析”算法。此類應(yīng)用含蓋面很廣,從天文學(xué)到火山學(xué);從汽車壓力分析到航天飛機(jī)的軌道動(dòng)力學(xué);從分子生物學(xué)到自動(dòng)化制造。不過(guò),目前工程和科學(xué)計(jì)算軟件已不僅限于傳統(tǒng)的數(shù)值算法。計(jì)算機(jī)輔助設(shè)計(jì)、系統(tǒng)仿真和其他交互應(yīng)用已經(jīng)開(kāi)始具有實(shí)時(shí)軟件和系統(tǒng)軟件的特征。</p>

69、;<p>  嵌入式軟件:智能產(chǎn)品在幾乎每一個(gè)消費(fèi)或工業(yè)市場(chǎng)上都是必不可少的,嵌入式軟件駐留在只讀內(nèi)存中,用于控制這些智能產(chǎn)品。嵌入式軟件能夠執(zhí)行很有限但專職的功能(如微波爐的按鈕控制),或是提供比較強(qiáng)大的功能及控制能力(如汽車中的數(shù)字控制,包括燃料控制、儀表板顯示,剎車系統(tǒng)等)。</p><p>  個(gè)人計(jì)算機(jī)軟件:個(gè)人計(jì)算機(jī)軟件市場(chǎng)是在過(guò)去十年中萌芽和發(fā)展起來(lái)的。字處理、電子表格、計(jì)算機(jī)圖形、多

70、媒體、娛樂(lè)、數(shù)據(jù)庫(kù)管理、個(gè)人及商業(yè)金融應(yīng)用、外部網(wǎng)絡(luò)或數(shù)據(jù)庫(kù)訪問(wèn),這些僅僅是成百上千這類應(yīng)用中的幾種。</p><p>  人工智能軟件:人工智能(AI)軟件利用非數(shù)值算法去解決復(fù)雜的問(wèn)題,這些問(wèn)題不能通過(guò)計(jì)算或直接分析得到答案。一個(gè)活躍的AI領(lǐng)域是專家系統(tǒng),也稱為基于知識(shí)的系統(tǒng)。AI軟件的其他應(yīng)用領(lǐng)域還包括模式識(shí)別(圖象或聲音)、定理證明和游戲。最近,AI軟件的一個(gè)新分支,稱為人工神經(jīng)網(wǎng)絡(luò),得到了很大進(jìn)展。神經(jīng)

71、網(wǎng)絡(luò)仿真人腦的處理結(jié)構(gòu)(生物神經(jīng)系統(tǒng)的功能),這有可能導(dǎo)致一個(gè)全新類型的軟件登場(chǎng),它不僅能夠識(shí)別復(fù)雜的模式,而且還能從過(guò)去的經(jīng)驗(yàn)中自行學(xué)習(xí)進(jìn)步。</p><p>  1.3軟件:地平線上的危機(jī)</p><p>  許多產(chǎn)業(yè)界觀察者(包括本書早期版本的作者)都把與軟件開(kāi)發(fā)相關(guān)的問(wèn)題稱為“危機(jī)”。但實(shí)際上我們的問(wèn)題與這個(gè)術(shù)語(yǔ)真正的含義可能并不相同。</p><p>  

72、“危機(jī)”這個(gè)詞在韋氏字典中定義為“任何事情過(guò)程中的一個(gè)轉(zhuǎn)折點(diǎn);決定性的或危急的時(shí)刻、階段或事件”。而對(duì)于軟件而言,沒(méi)有“轉(zhuǎn)折點(diǎn)”,沒(méi)有“決定性時(shí)刻”,只有延遲或進(jìn)展上的變化。在軟件產(chǎn)業(yè)中,“危機(jī)”已經(jīng)伴隨我們走過(guò)了近30年,這在術(shù)語(yǔ)上是很矛盾的。</p><p>  在字典中查找“危機(jī)”這個(gè)詞,我們還可以發(fā)現(xiàn)另外一個(gè)定義:“疾病過(guò)程中的一個(gè)轉(zhuǎn)折點(diǎn),能夠確定病人是生是死”。這個(gè)定義多少可以反映出軟件開(kāi)發(fā)中面臨的問(wèn)題

73、的真正含義。</p><p>  我們已經(jīng)到了計(jì)算機(jī)軟件的危機(jī)階段,實(shí)際上我們真正的問(wèn)題應(yīng)該是一種“慢性的苦惱”①。“苦惱”這個(gè)詞定義為“引起痛苦或不幸的任何事情”。但形容詞“慢性的”這個(gè)詞的定義能夠更加貼切地反映問(wèn)題:“持續(xù)很長(zhǎng)時(shí)間或經(jīng)常重犯;不確定地延續(xù)”。這很準(zhǔn)確地描述了過(guò)去30年我們所經(jīng)歷的問(wèn)題是一種慢性的苦惱,而不是危機(jī)。并沒(méi)有一種靈丹妙藥可以完全治愈這種病疼,但在我們正努力去發(fā)現(xiàn)解決方案的同時(shí)會(huì)得到很

74、多緩解痛苦的方法。</p><p>  不管我們稱之為軟件危機(jī)還是軟件苦惱,該術(shù)語(yǔ)都是指在計(jì)算機(jī)軟件開(kāi)發(fā)中所遇到的一系列問(wèn)題。這些問(wèn)題不僅局限于那些“不能正確完成功能的”軟件,還包含那些與我們?nèi)绾伍_(kāi)發(fā)軟件、我們?nèi)绾尉S護(hù)大量已有軟件以及我們的開(kāi)發(fā)速度如何跟上目前對(duì)軟件越來(lái)越大的需求等相關(guān)的問(wèn)題。</p><p>  雖然關(guān)于危機(jī)甚至是苦惱的介紹可能看起來(lái)有些戲劇化,但這些段落對(duì)于表明在軟件開(kāi)

75、發(fā)的所有領(lǐng)域中所遇到的真正的問(wèn)題起到很大作用。</p><p><b>  1.4軟件神話</b></p><p>  引起軟件危機(jī)的諸多原因可以追溯到軟件開(kāi)發(fā)的早期階段產(chǎn)生的神話。它不象古代的神話那樣可以給人以經(jīng)驗(yàn)和教訓(xùn),軟件神話使人產(chǎn)生了誤解和混亂。軟件神話具有一些特征使得它們很有欺騙性:例如,它們表面上看很有道理(有時(shí)含有一定真實(shí)的成分);它們符合人的直覺(jué);它們

76、常常是有經(jīng)驗(yàn)的實(shí)踐者發(fā)布出來(lái)的。</p><p>  今天,大多數(shù)專業(yè)人員已經(jīng)認(rèn)識(shí)到這些神話誤導(dǎo)了人們,給管理者和技術(shù)人員都帶來(lái)了嚴(yán)重的問(wèn)題。但是,舊的觀念和習(xí)慣難以改變,軟件神話仍被不少人相信著。</p><p>  管理者的神話:負(fù)責(zé)軟件的管理者象大多數(shù)其他行業(yè)的管理者一樣,都有巨大的壓力,要維持預(yù)算、保持進(jìn)度及提高質(zhì)量。就像溺水者抓住一根救命稻草,軟件管理者常常抓住軟件神話不放,如果

77、這些神話能夠緩解其壓力的話(哪怕是暫時(shí)的)。</p><p>  神話:我們已經(jīng)有了關(guān)于建造軟件的標(biāo)準(zhǔn)和規(guī)程的書籍,難道它們不能給人們提供所有其需要知道的信息嗎?</p><p>  事實(shí):不錯(cuò)關(guān)于標(biāo)準(zhǔn)的書籍已經(jīng)存在,但真正用到了它們嗎?軟件實(shí)踐者知道它們的存在嗎?它們是否反映了現(xiàn)代軟件開(kāi)發(fā)的過(guò)程?它們完整嗎?很多情況下,對(duì)于這些問(wèn)題的答案均是“不”。</p><p&g

78、t;  神話:我們已經(jīng)有了很多很好的軟件開(kāi)發(fā)工具,而且,我們?yōu)樗鼈冑I了最新的計(jì)算機(jī)。</p><p>  事實(shí):為了使用最新型號(hào)的主機(jī)、工作站和PC機(jī)去開(kāi)發(fā)高質(zhì)量的軟件,我們已經(jīng)投入太多的費(fèi)用。實(shí)際上,計(jì)算機(jī)輔助軟件工程(CASE)工具相比起硬件而言對(duì)于獲得高質(zhì)量和高生產(chǎn)率更為重要,但大多數(shù)軟件開(kāi)發(fā)者并未使用它們。</p><p>  神話:如果我們已經(jīng)落后于計(jì)劃,可以增加更多的程序員來(lái)趕

79、上進(jìn)度(“有時(shí)稱為蒙古大夫概念”)。</p><p>  事實(shí):軟件開(kāi)發(fā)并非象制造一樣是一個(gè)機(jī)械過(guò)程。用Brooks[BRO75]的話來(lái)說(shuō),“給一個(gè)已經(jīng)延遲的軟件項(xiàng)目增加人手只會(huì)使其更加延遲”。看起來(lái),這句話與人的直覺(jué)正好相反。但實(shí)際上,增加新人,原來(lái)正在工作的開(kāi)發(fā)者必須花時(shí)間來(lái)培訓(xùn)新人,這樣就減少了他們花在項(xiàng)目開(kāi)發(fā)上的時(shí)間。人手可以增加,但只能是在計(jì)劃周密、協(xié)調(diào)良好的情況下。</p><p&

80、gt;  用戶的神話:需要計(jì)算機(jī)軟件的用戶可能就是鄰桌的人,或是另一個(gè)技術(shù)組,也可能是市場(chǎng)/銷售部門,或另外一個(gè)公司。在許多情況下,用戶相信關(guān)于軟件的神話,因?yàn)樨?fù)責(zé)軟件的管理者和開(kāi)發(fā)者很少去糾正用戶的錯(cuò)誤理解。神話導(dǎo)致了用戶過(guò)高的期望值,并引起對(duì)開(kāi)發(fā)者的極端不滿意。</p><p>  神話:有了對(duì)目標(biāo)的一般描述就足以開(kāi)始寫程序了——我們可以以后再補(bǔ)充細(xì)節(jié)。</p><p>  事實(shí):不完

81、善的系統(tǒng)定義是軟件項(xiàng)目失敗的主要原因。關(guān)于待開(kāi)發(fā)項(xiàng)目的應(yīng)用領(lǐng)域、功能、性能、接口、設(shè)計(jì)約束及確認(rèn)標(biāo)準(zhǔn)的形式化的、詳細(xì)的描述是必需要的。這些內(nèi)容只有通過(guò)用戶和開(kāi)發(fā)者之間的通信交流才能確定。</p><p>  神話:項(xiàng)目需求總是在不斷變化,但這些變化能夠很容易地滿足,因?yàn)檐浖庆`活的。</p><p>  事實(shí):軟件需求確實(shí)是經(jīng)常變化的,但這些變化產(chǎn)生的影響會(huì)隨著其引入的時(shí)間不同而不同。如果

82、我們很注重早期的系統(tǒng)定義,這時(shí)的需求變化就可被很容易地適應(yīng)。用戶能夠復(fù)審需求,并提出修改的建議,這時(shí)對(duì)成本的影響會(huì)相對(duì)較小。當(dāng)在軟件設(shè)計(jì)過(guò)程中才要求修改時(shí),對(duì)成本的影響就會(huì)提高得很快。資源已經(jīng)消耗了,設(shè)計(jì)框架已經(jīng)建立了,這時(shí)的變化可能會(huì)引起大的改動(dòng),需要額外的資源和大量的設(shè)計(jì)修改,例如,額外的花費(fèi)。實(shí)現(xiàn)階段(編碼和測(cè)試階段)功能、性能、接口及其他方面的改變對(duì)成本會(huì)產(chǎn)生更大的影響。當(dāng)軟件已經(jīng)投入使用后再要求修改,這時(shí)所花的代價(jià)比起較早階段

83、做同樣修改所花的代價(jià)可能是幾何級(jí)數(shù)級(jí)的增長(zhǎng)。</p><p>  開(kāi)發(fā)者的神話:那些至今仍被軟件開(kāi)發(fā)者相信的神話是由幾十年的程序設(shè)計(jì)文化培植起來(lái)的。正如我們?cè)诒菊乱婚_(kāi)始就提到的,在軟件的早期階段,程序設(shè)計(jì)被看作是一門藝術(shù)。這種舊的觀念和方式是很難改變的。</p><p>  神話:一旦我們寫出了程序并使其正常運(yùn)行,我們的工作就結(jié)束了。</p><p>  事實(shí):有人

84、說(shuō)過(guò):“越早開(kāi)始寫程序,就要花越長(zhǎng)時(shí)間才能完成它”,產(chǎn)業(yè)界的數(shù)據(jù)[LIE80]表明在一個(gè)程序上所投入的50%到70%的努力是花費(fèi)在第一次將程序交給用戶之后。</p><p>  神話:在程序真正運(yùn)行之前,沒(méi)有辦法評(píng)估其質(zhì)量。</p><p>  事實(shí):從項(xiàng)目一開(kāi)始就可以應(yīng)用的最有效的軟件質(zhì)量保證機(jī)制之一是正式的技術(shù)復(fù)審。軟件復(fù)審(見(jiàn)第8章)是“質(zhì)量的過(guò)濾器”,比起通過(guò)測(cè)試找到某類軟件錯(cuò)誤要

85、有效得多。</p><p>  神話:一個(gè)成功項(xiàng)目唯一應(yīng)該提交的就是運(yùn)行程序。</p><p>  事實(shí):運(yùn)行程序僅是軟件配置的一部分,軟件配置包括:程序、文檔和數(shù)據(jù)。文檔是成功開(kāi)發(fā)的基礎(chǔ),更重要的是,文檔為軟件維護(hù)提供了指導(dǎo)。</p><p>  許多軟件專業(yè)人士認(rèn)識(shí)到上述這些神話是錯(cuò)誤的。但令人遺憾的是舊的觀念和方法培植了拙劣的管理和技術(shù)習(xí)慣,雖然現(xiàn)實(shí)情況已經(jīng)需

86、求有更好的方法。對(duì)軟件現(xiàn)實(shí)的認(rèn)識(shí)是形成軟件開(kāi)發(fā)的實(shí)際解決方案的第一步。</p><p><b>  1.5小結(jié)</b></p><p>  軟件已經(jīng)成為基于計(jì)算機(jī)的系統(tǒng)及產(chǎn)品的關(guān)鍵組成成分。在過(guò)去40年中,軟件已經(jīng)從特定的問(wèn)題解決和信息分析工具演化為一門獨(dú)立的產(chǎn)業(yè)。但早期的“程序設(shè)計(jì)”文化和歷史產(chǎn)生了一系列至今還存在的問(wèn)題,軟件已經(jīng)成為計(jì)算機(jī)系統(tǒng)演化過(guò)程中的阻礙因素。

87、軟件是由程序、數(shù)據(jù)和文檔組成。這些條目構(gòu)成了軟件工程過(guò)程中的配置項(xiàng),軟件工程的目的就是為建造高質(zhì)量的軟件提供一個(gè)框架。</p><p><b>  思考題</b></p><p>  1.1軟件在許多基于計(jì)算機(jī)的系統(tǒng)或產(chǎn)品中具有不同的特點(diǎn),試舉2到3個(gè)產(chǎn)品以及至少1個(gè)系統(tǒng),說(shuō)明軟件而非硬件在其中的差別。</p><p>  1.2在五、六十年代

88、,計(jì)算機(jī)程序設(shè)計(jì)是一門藝術(shù),其學(xué)習(xí)環(huán)境就象在工廠當(dāng)學(xué)徒。早期階段對(duì)今天的軟件開(kāi)發(fā)有何影響?</p><p>  1.3很多作者已經(jīng)探討了“信息時(shí)代”的影響。試舉若干實(shí)例(正面的和反面的)說(shuō)明軟件對(duì)當(dāng)今社會(huì)的影響。參考1.1節(jié)中任—90年代以前的參考文獻(xiàn),指出其中作者的哪些預(yù)見(jiàn)是正確的,哪些是錯(cuò)誤的?</p><p>  1.4試舉一個(gè)特定應(yīng)用并說(shuō)明(a)它屬于哪一個(gè)軟件應(yīng)用類型(見(jiàn)1.2.

89、3節(jié));(b)與該應(yīng)用相關(guān)的數(shù)據(jù)內(nèi)容;(C)該應(yīng)用的信息確定性。</p><p>  1.5隨著軟件的普及,公眾所冒的危險(xiǎn)(由于軟件的錯(cuò)誤引起的)受到越來(lái)越多的關(guān)注。試舉一個(gè)因?yàn)橛?jì)算機(jī)程序的失敗而帶來(lái)巨大災(zāi)難的(對(duì)人類或經(jīng)濟(jì)均可)實(shí)際可能發(fā)生的場(chǎng)景。</p><p>  1.6精讀Internet上的新聞組comp.risks的內(nèi)容,并對(duì)最近正在討論的軟件帶來(lái)的危險(xiǎn)作一個(gè)總結(jié)。[另一個(gè)可選

90、的資料來(lái)源是:Software Engineering Notes(軟件工程注釋),由ACM(theAssociation of Computing Machinery(計(jì)算機(jī)協(xié)會(huì)))出版]。</p><p>  1.7寫一篇文章總結(jié)某個(gè)前沿軟件應(yīng)用領(lǐng)域的最新進(jìn)展。推薦可選的領(lǐng)域包括:人工智能,虛擬現(xiàn)實(shí)、人工神經(jīng)網(wǎng)絡(luò)、高級(jí)人機(jī)界面和智能代理。</p><p>  1.8  1.4

91、節(jié)陳述的神話隨著時(shí)間的推移已經(jīng)慢慢淡化了,但另外一些新神話替代了它們,試著為每一類神話增加一二個(gè)“新”神話。</p><p>  推薦閱讀文獻(xiàn)及其他信息源</p><p>  關(guān)于計(jì)算機(jī)軟件有成千上萬(wàn)的書籍,大多數(shù)是探討程序設(shè)計(jì)語(yǔ)言或軟件應(yīng)用的,但也有一部分是討論軟件本身的。關(guān)于該話題的一個(gè)非正式的探討可在[PRE91]中找到。Negroponte的暢銷書(Being Digital,數(shù)字

92、化,Alfred A.Knopf,Inc.,1995)闡述了計(jì)算的觀點(diǎn)及其對(duì)21世紀(jì)的影響。DeMarco(Why Does Software Cost So Much?為什么軟件的成本如此之高,Dorset House,1995)對(duì)于軟件及其開(kāi)發(fā)過(guò)程進(jìn)行了精辟的和有遠(yuǎn)見(jiàn)的論述。</p><p>  對(duì)計(jì)算機(jī)軟件和軟件工程深刻理解的基礎(chǔ)是計(jì)算機(jī)科學(xué),這個(gè)話題涉及面太寬,超出了本書討論的范圍?!坝?jì)算機(jī)科學(xué)文獻(xiàn)匯總”

93、(Computer Science Bibliography Collection)中收集了近600個(gè)計(jì)算機(jī)科學(xué)領(lǐng)域的文獻(xiàn)目錄。在其中的300 000個(gè)參考文獻(xiàn)中幾乎每一個(gè)都與軟件工程相關(guān):</p><p>  http://www.pilgrim.umass.edu/pub/misc/bibliographies/index.html</p><p>  “計(jì)算機(jī)科學(xué)指導(dǎo)”(the Wo

94、rld Guide to Computer Science)中包含了很多大學(xué)的研究機(jī)構(gòu)在計(jì)算機(jī)科學(xué)領(lǐng)域取得的進(jìn)展:</p><p>  http://www.worldwidenews.net/subjects/htm</p><p>  軟件方面的術(shù)語(yǔ)詞,包括縮略詞可在以下網(wǎng)站上找到:</p><p>  http://dxsting.cern.ch/sting/

95、glossary.html</p><p>  “工程的國(guó)際互聯(lián)”(Internet Connection for Engineering)給出了國(guó)際上工程程序正在研究的方向索引:</p><p>  http://www.englib.cornell.edu/ice/ice-index.html① 這種狀況目前正在迅速改變。面向?qū)ο蠹夹g(shù)的廣泛使用已導(dǎo)致了軟件構(gòu)件的生產(chǎn),本書第19至29

96、章將有詳細(xì)討論。 ② 本書第四部分介紹了面向?qū)ο蠹夹g(shù)的使用和它們對(duì)構(gòu)件復(fù)用形成的影響。 ① 該術(shù)語(yǔ)由Michigan大學(xué)的DanielTiechrow教授于1989年4月,在SwitzerlndGeneva提出。</p><p><b>  第2章  過(guò)程 </b></p><p>  軟件過(guò)程是過(guò)去十年中人們關(guān)注的焦點(diǎn)。但準(zhǔn)確講什么是軟件過(guò)程

97、呢?在本書中,我們定義軟件過(guò)程為建造高質(zhì)量軟件需要完成的任務(wù)的框架。“過(guò)程”與軟件工程同義嗎?答案是“是也不是”。一個(gè)軟件過(guò)程定義了軟件開(kāi)發(fā)中采用的方法,但軟件工程還包含該過(guò)程中應(yīng)用的技術(shù)——技術(shù)方法和自動(dòng)化工具。</p><p>  更重要的一點(diǎn),軟件工程是有創(chuàng)造力、有知識(shí)的人在定義好的、成熟的軟件過(guò)程框架中進(jìn)行的。本章的目的就是探討軟件過(guò)程的研究現(xiàn)狀,并為在本書以后的章節(jié)中更詳細(xì)地討論關(guān)于管理和技術(shù)方面的話題

98、提供指導(dǎo)。</p><p>  2.1軟件工程——一種層次化技術(shù)</p><p>  雖然有很多作者都給出了軟件工程的定義,但Fritz Bauer[NAU69]在NATO會(huì)議上給出的定義仍是進(jìn)一步展開(kāi)討論的基礎(chǔ):</p><p>  軟件工程  是為了經(jīng)濟(jì)地獲得可靠的和能在實(shí)際機(jī)器上高效運(yùn)行的軟件而建立和使用的好的工程原則。</p><

99、;p>  幾乎每一個(gè)讀者都忍不住想在這個(gè)定義上增加點(diǎn)什么。它沒(méi)有提到軟件質(zhì)量的技術(shù)層面,也沒(méi)有直接談到用戶滿意度或按時(shí)交付產(chǎn)品的要求,它忽略了測(cè)度和度量的重要性,甚至沒(méi)有闡明一個(gè)成熟的過(guò)程的重要性。但Bauer的定義給我們提供了一個(gè)基線。什么是可以應(yīng)用到計(jì)算機(jī)軟件開(kāi)發(fā)中的“好的工程原則”?我們?nèi)绾巍敖?jīng)濟(jì)地”建造軟件使得其可靠性高?如何才能創(chuàng)建出能夠在多個(gè)、而不是一個(gè)不同的實(shí)際機(jī)器上“高效運(yùn)行”的程序?這些都是進(jìn)一步挑戰(zhàn)軟件工程師的

100、問(wèn)題。</p><p>  IEEE[IEE93]給出了一個(gè)更加綜合的定義:</p><p>  軟件工程:(1)將系統(tǒng)化的、規(guī)范的、可度量的方法應(yīng)用于軟件的開(kāi)發(fā)、運(yùn)行和維護(hù)的過(guò)程,即將工程化應(yīng)用于軟件中。(2)(1)中所述方法的研究。</p><p>  2.1.1過(guò)程、方法和工具</p><p>  軟件工程是一種層次化的技術(shù)(如圖2-1

101、所示)。任何工程方法(包括軟件工程)必須以有組織的質(zhì)量保證為基礎(chǔ)。全面的質(zhì)量管理和類似的理念刺激了不斷的過(guò)程改進(jìn),正是這種改進(jìn)導(dǎo)致了更加成熟的軟件工程方法的不斷出現(xiàn)。支持軟件工程的根基就在于對(duì)質(zhì)量的關(guān)注。</p><p>  軟件工程的基層是過(guò)程層。軟件工程過(guò)程是將技術(shù)層結(jié)合在一起的凝聚力,使得計(jì)算機(jī)軟件能夠被合理地和及時(shí)地開(kāi)發(fā)出來(lái)。過(guò)程定義了一組關(guān)鍵過(guò)程區(qū)域的框架(KPAs)[PAY93],這對(duì)于軟件工程技術(shù)的

102、有效應(yīng)用是必須的。關(guān)鍵過(guò)程區(qū)域構(gòu)成了軟件項(xiàng)目的管理控制的基礎(chǔ),并且確立了上下各區(qū)域之間的關(guān)系,其中規(guī)定了技術(shù)方法的采用、工程產(chǎn)品(模型、文檔、數(shù)據(jù)、報(bào)告、表格等)的產(chǎn)生、里程碑的建立、質(zhì)量的保證及變化的適當(dāng)管理。</p><p>  軟件工程的方法層提供了建造軟件在技術(shù)上需要“如何做”。方法涵蓋了一系列的任務(wù):需求分析、設(shè)計(jì)、編程、測(cè)試和維護(hù)。軟件工程方法依賴于一組基本原則,這些原則控制了每一個(gè)技術(shù)區(qū)域,且包含建

103、模活動(dòng)和其他描述技術(shù)。</p><p>  軟件工程的工具層對(duì)過(guò)程和方法提供了自動(dòng)的或半自動(dòng)的支持。當(dāng)這些工具被集成起來(lái)使得一個(gè)工具產(chǎn)生的信息可被另外一個(gè)工具使用時(shí),一個(gè)支持軟件開(kāi)發(fā)的系統(tǒng)就建立了,稱為計(jì)算機(jī)輔助軟件工程(CASE)。CASE集成了軟件、硬件和一個(gè)軟件工程數(shù)據(jù)庫(kù)(一個(gè)倉(cāng)庫(kù),其中包含了關(guān)于分析、設(shè)計(jì)、編程和測(cè)試的重要信息),從而形成了一個(gè)軟件工程環(huán)境,它類似于硬件的CAD/CAE(計(jì)算機(jī)輔助設(shè)計(jì)/工

104、程)。</p><p>  2.1.2軟件工程的一般視圖 </p><p>  工程是對(duì)技術(shù)(或社會(huì))實(shí)體的分析、設(shè)計(jì)、建造、驗(yàn)證和管理。拋開(kāi)要工程化的實(shí)體,下列問(wèn)題是必須首先回答的:</p><p>  ·要解決的問(wèn)題是什么?</p><p>  ·要用于解決該問(wèn)題的實(shí)體具有什么特點(diǎn)?</p>&

105、lt;p>  ·如何實(shí)現(xiàn)該實(shí)體(解決方案)?</p><p><b>  ·如何建造該實(shí)體?</b></p><p>  ·采用什么方法去發(fā)現(xiàn)該實(shí)體設(shè)計(jì)和建造過(guò)程中產(chǎn)生的錯(cuò)誤?</p><p>  ·當(dāng)該實(shí)體的用戶要求修改、適應(yīng)和增強(qiáng)時(shí),如何支持這些活動(dòng)?</p><p> 

106、 本書全文只針對(duì)一個(gè)實(shí)體——計(jì)算機(jī)軟件。要適當(dāng)?shù)亟ㄔ煲粋€(gè)軟件,軟件開(kāi)發(fā)過(guò)程是必須定義的。本節(jié)給出了軟件過(guò)程的一般性特點(diǎn),本章的以后幾節(jié)進(jìn)一步闡述了特定的過(guò)程模型。</p><p>  如果不考慮應(yīng)用領(lǐng)域、項(xiàng)目規(guī)模和復(fù)雜性,與軟件工程相關(guān)的工作可分為三個(gè)一般的階段。每一個(gè)階段回答了上述的一個(gè)或幾個(gè)問(wèn)題。</p><p>  定義階段集中于“做什么”。即在定義過(guò)程中,軟件開(kāi)發(fā)人員試圖弄清楚要處

107、理什么信息,預(yù)期完成什么樣的功能和性能,希望有什么樣的系統(tǒng)行為,建立什么樣的界面,有什么設(shè)計(jì)約束,以及定義一個(gè)成功系統(tǒng)的確認(rèn)標(biāo)準(zhǔn)是什么。即定義系統(tǒng)和軟件的關(guān)鍵需求。雖然在定義階段采用的方法取決于使用的軟件工程范型(或范型的組合),但在某種程度上均有三個(gè)主要任務(wù):系統(tǒng)或信息工程(見(jiàn)第10章),軟件項(xiàng)目計(jì)劃(第3章到第7章),和需求分析(第11,12和20章)。</p><p>  開(kāi)發(fā)階段集中于“如何做”。即在開(kāi)發(fā)

108、過(guò)程中,軟件工程師試圖定義數(shù)據(jù)如何結(jié)構(gòu)化,功能如何轉(zhuǎn)換為軟件體系結(jié)構(gòu),過(guò)程細(xì)節(jié)如何實(shí)現(xiàn),界面如何表示,設(shè)計(jì)如何轉(zhuǎn)換成程序設(shè)計(jì)語(yǔ)言(或非過(guò)程語(yǔ)言),測(cè)試如何執(zhí)行。在開(kāi)發(fā)階段采用的方法可以不同,但都有三個(gè)特定的任務(wù):軟件設(shè)計(jì)(第14、15和21章),代碼生成,和軟件測(cè)試(第16、17和22章)。</p><p>  維護(hù)階段集中于“改變”,與以下幾種情況相關(guān):糾正錯(cuò)誤;隨著軟件環(huán)境的演化,而要求的適應(yīng)性修改;及由于用

109、戶需求的變化而帶來(lái)的增強(qiáng)性修改。維護(hù)階段重復(fù)定義和開(kāi)發(fā)階段的步驟,但卻是在已有軟件的基礎(chǔ)上發(fā)生的。在維護(hù)階段可能遇到四類修改要完成:</p><p>  糾錯(cuò):即使有最好的質(zhì)量保證機(jī)制,用戶還是有可能發(fā)現(xiàn)軟件中的錯(cuò)誤。糾錯(cuò)性維護(hù)是為了改正錯(cuò)誤而使軟件發(fā)生變化。</p><p>  適應(yīng):隨著時(shí)間的推移,原來(lái)的軟件被開(kāi)發(fā)的環(huán)境(如CPU、操作系統(tǒng)、商業(yè)規(guī)則、外部產(chǎn)品特征)可能發(fā)生了變化。適應(yīng)

110、性維護(hù)是為了適應(yīng)這些外部環(huán)境的變化而修改軟件。</p><p>  增強(qiáng):隨著軟件的使用,用戶可能認(rèn)識(shí)到某些新功能會(huì)產(chǎn)生更好的效益。完善性維護(hù)是由于擴(kuò)展了原來(lái)的功能需求而修改軟件。</p><p>  預(yù)防:計(jì)算機(jī)軟件由于修改而逐漸退化,因此,預(yù)防性維護(hù),常常稱為軟件再工程,就必須實(shí)行,以使軟件能夠滿足其最終用戶的要求。本質(zhì)上講,預(yù)防性維護(hù)對(duì)計(jì)算機(jī)程序的修改,可使得能夠更好地糾錯(cuò)軟件的錯(cuò)誤

溫馨提示

  • 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ù)僅提供信息存儲(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)論