

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 軟件工程——實踐者的研究方法</p><p><b> 前言</b></p><p><b> 第一部分產(chǎn)品和過程</b></p><p><b> 第1章產(chǎn)品</b></p><p><b> 第2章過程</b></p
2、><p> 第二部分軟件項目的管理</p><p> 第3章項目管理的概念</p><p> 第4章軟件過程和項目的度量</p><p><b> 第5章軟件項目計劃</b></p><p><b> 第6章風(fēng)險管理</b></p><p>
3、第7章項目進度安排及跟蹤</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è)計概念和原則</p><p><b> 第14章設(shè)計方法</b></p><p> 第15章實時系統(tǒng)的設(shè)計</p><p> 第16章軟件測試技術(shù)</p
5、><p> 第17章軟件測試策略</p><p> 第18章軟件的技術(shù)度量</p><p> 第四部分面向?qū)ο蟮能浖こ?lt;/p><p> 第19章面向?qū)ο蟮母拍詈驮瓌t</p><p> 第20章面向?qū)ο蠓治?lt;/p><p> 第21章面向?qū)ο笤O(shè)計</p><p>
6、; 第22章面向?qū)ο鬁y試</p><p> 第23章面向?qū)ο笙到y(tǒng)的技術(shù)度量</p><p> 第五部分軟件工程高級課題</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章計算機輔助軟件工程</p><p><b> 第30章未來之路</b></p><p> 第一部分 產(chǎn)品和過程</p>
8、;<p> 在本書的這一部分中我們主要討論什么是工程產(chǎn)品和如何為工程技術(shù)提出一個框架的過程。在下面的章節(jié)中,我們主要解決下列問題:</p><p> ·到底什么是計算機軟件?</p><p> ·為什么我們不斷努力要建造高質(zhì)量的基于計算機的系統(tǒng)?</p><p> ·我們?nèi)绾螌τ嬎銠C軟件的應(yīng)用領(lǐng)域分類?</p
9、><p> ·關(guān)于軟件仍存在什么樣的神話?</p><p><b> ·什么是軟件過程?</b></p><p> ·是否存在一般性的方法評價一個過程的質(zhì)量?</p><p> ·軟件開發(fā)中可以應(yīng)用什么過程模型?</p><p> ·線性過程
10、和迭代過程有何區(qū)別?</p><p> ·它們的優(yōu)點和缺點是什么?</p><p> ·在軟件工程中可以建議什么更高級的過程模型?</p><p> 一旦回答了這些問題,讀者就能夠更好地理解本書其余部分給出的工程原則的管理和技術(shù)方面的知識。</p><p><b> 第1章 產(chǎn)品&
11、lt;/b></p><p> 本書的第1版在80年代初出版后不久,Business Weekly(《商業(yè)周刊》)雜志在頭版給出如下的大標(biāo)題:“軟件:新的驅(qū)動力”。編輯們當(dāng)時并沒有意識到他們的預(yù)見是多么的正確。那時,大多數(shù)人對軟件還是一無所知。大軟件公司,如微軟公司,還不存在;擁有15000平方英尺專門出售包裝好的軟件的計算機超市聞所未聞;在電視上為計算機操作系統(tǒng)做60秒鐘商業(yè)廣告的想法是可笑的;而互聯(lián)網(wǎng)
12、僅為個別研究者和高等學(xué)校學(xué)生所知。但是,在不到20年的時間里,所有這些(甚至更多)已經(jīng)成為現(xiàn)實。</p><p> 計算機軟件已經(jīng)成為一種驅(qū)動力。它是進行商業(yè)決策的引擎;它是現(xiàn)代科學(xué)研究和工程問題解決的基礎(chǔ);它也是區(qū)分現(xiàn)代產(chǎn)品和服務(wù)的關(guān)鍵因素。它在各種類型的系統(tǒng)中應(yīng)用,如交通、醫(yī)藥、通訊、軍事、產(chǎn)業(yè)化過程、娛樂、辦公……難以窮舉。軟件在現(xiàn)代社會中的確是必不可少的。而且當(dāng)我們進入21世紀,軟件將成為從基礎(chǔ)教育到基
13、因工程的所有各領(lǐng)域新進展的驅(qū)動器。</p><p> 所有這一切已經(jīng)改變了軟件的常見概念。計算機軟件是無所不在的,人們把軟件看作是生活中現(xiàn)實的技術(shù)。在很多情況下,人們把他們的工作、他們的舒適、他們的安全、他們的娛樂、他們的決策、甚至他們的整個生活都依賴于計算機軟件。軟件千萬可不能出錯。</p><p> 本書介紹的若干技術(shù)是那些想要建造正確的計算機軟件的人們需要用到的。這些技術(shù)包括一個
14、過程,一組方法和一系列工具,我們稱之為軟件工程。</p><p><b> 1.1軟件的發(fā)展 </b></p><p> 今天,軟件擔(dān)任著雙重角色。它是一種產(chǎn)品,同時又是開發(fā)和運行產(chǎn)品的載體。作為一種產(chǎn)品,它表達了由計算機硬件體現(xiàn)的計算潛能。不管它是駐留在蜂窩電話中,還是操作在主機上,軟件就是一個信息轉(zhuǎn)換器——產(chǎn)生、管理、獲取、修改、顯示或轉(zhuǎn)換信息,這些
15、信息可以很簡單,如一個單個的位(bit),或很復(fù)雜,如多媒體仿真信息。作為開發(fā)運行產(chǎn)品的載體,軟件是計算機控制(操作系統(tǒng))的基礎(chǔ)、信息通信(網(wǎng)絡(luò))的基礎(chǔ),也是創(chuàng)建和控制其他程序(軟件工具和環(huán)境)的基礎(chǔ)。</p><p> 許多人相信21世紀最重要的產(chǎn)品是——信息,軟件充分體現(xiàn)了這一觀點。它處理個人數(shù)據(jù)(如個人的金融事務(wù)),使得這些數(shù)據(jù)在局部范圍中更為有用;它管理商業(yè)信息增強了商業(yè)競爭力;它提供了通往全球信息網(wǎng)絡(luò)
16、(如Internet)的途徑;它也提供了以各種形式獲取信息的手段。</p><p> 計算機軟件的角色在20世紀后半葉發(fā)生了很大的變化。硬件性能的極大提高,計算機體系結(jié)構(gòu)的不斷變化,內(nèi)存和硬盤容量的快速增加,以及大量輸入輸出設(shè)備的多種選擇,均促進了更為成熟和更為復(fù)雜的基于計算機的軟件系統(tǒng)的出現(xiàn)。如果一個系統(tǒng)是成功的,那么這種成熟性和復(fù)雜性能夠產(chǎn)生出奇跡般的結(jié)果,但是它們也給建造這些復(fù)雜系統(tǒng)的人員帶來很多的問題。
17、</p><p> 在70年代和80年代出版的受歡迎的書對于計算機、軟件和它們對我們文化的影響等方面提供了有用的歷史的視角。Osborne[OSB79]稱之為一次“新的工業(yè)革命”。Toffler[TOF80]稱微電子的發(fā)展是人類歷史上的“第三次浪潮”,Naisbitt[NAI82]則預(yù)言了從工業(yè)社會向“信息社會”的轉(zhuǎn)變。Feigenbaum和McCorduck[FEI83]認為由計算機控制的信息和知識將是20世
18、紀中表現(xiàn)能力的焦點,Stoll[STO89]則提出由網(wǎng)絡(luò)和軟件產(chǎn)生的“電子社會”將是全球知識交換的關(guān)鍵。</p><p> 進入90年代,Toffler[TOF90]描述了“權(quán)利的轉(zhuǎn)移”,因為計算機和軟件導(dǎo)致了“知識的民主化”,因而舊的權(quán)利結(jié)構(gòu)(政府,教育,工業(yè),經(jīng)濟,及軍事)將要瓦解。Yourdon[YOU92]擔(dān)心美國公司在軟件相關(guān)的業(yè)務(wù)中會失去競爭力,并預(yù)言“美國程序員的衰落和下降”。Hammer和Cha
19、mpy[HAM93]提出信息技術(shù)將在“公司的再工程”中起到很關(guān)鍵的作用。在90年代中期,計算機和軟件的流行產(chǎn)生了大量“新勞工運動”的書籍(例如:由James Brook和Iain Boal編輯的“抵制虛擬的生活”,以及Stephen Talbot寫的“未來不是計算”)。這些作者把計算機看成是魔鬼,強調(diào)了其合法性,而忽略了已被人們意識到的巨大的利益[LEV95]問題。</p><p> 在計算機發(fā)展的早期階段,大
20、多數(shù)人把軟件看成是不需預(yù)先計劃的事情。計算機編程很簡單,沒有什么系統(tǒng)化的方法。軟件的開發(fā)沒有任何管理,一旦計劃延遲了或成本提高了,程序員才開始手忙腳亂地彌補,而他們的努力一般情況下也會取得成功。</p><p> 在通用的硬件已經(jīng)非常普遍的時候,軟件卻相反,對每一類應(yīng)用均需自行再設(shè)計,應(yīng)用范圍很有限。軟件產(chǎn)品還在嬰兒階段,大多數(shù)軟件均是由使用它們的人員或組織自己開發(fā)的,如你寫軟件,使其運行,如果它有問題,你負責(zé)
21、改好。工作的可變性很低,管理者必須得到保證:一旦發(fā)生了錯誤你必須在那里。因為這種個人化的軟件環(huán)境,設(shè)計往往僅是人們頭腦中的一種模糊想法,而文檔就根本不存在。</p><p> 在早期,我們了解了很多關(guān)于計算機系統(tǒng)的實現(xiàn),但對于計算機系統(tǒng)工程幾乎一無所知。但是公平地講,我們應(yīng)該感謝這個時期開發(fā)的許多卓越的計算機系統(tǒng),其中不少一直到今天還在使用,并繼續(xù)發(fā)揮著巨大的作用。</p><p>
22、計算機系統(tǒng)發(fā)展的第二階段跨越了從60年代中期到70年代末期的十余年(如圖1-1)。多道程序設(shè)計、多用戶系統(tǒng)引入了人機交互的新概念。交互技術(shù)打開了計算機應(yīng)用的新世界,以及硬件和軟件配合的新層次。實時系統(tǒng)能夠從多個源收集、分析和轉(zhuǎn)換數(shù)據(jù),從而使得進程的控制和輸出的產(chǎn)生以毫秒而不是分鐘來進行。在線存儲的發(fā)展導(dǎo)致了第一代數(shù)據(jù)庫管理系統(tǒng)的出現(xiàn)。</p><p> 第二階段還有一個特點就是軟件產(chǎn)品的使用和“軟件作坊”的出現(xiàn)
23、。軟件被開發(fā),使得它們可以在很寬的范圍中應(yīng)用。主機和微機上的程序能夠有數(shù)百甚至上千的用戶。來自工業(yè)界、政府和學(xué)術(shù)界的企業(yè)家們紛紛開始開發(fā)各類軟件包,并賺了大筆錢財。</p><p> 早期 第二階段
24、0; 第三階段 第四階段</p><p> ·面向批處理 ·多用戶 ·分布式系統(tǒng) &
25、#160; ·強大的桌面系統(tǒng)</p><p> ·有限的分布 ·實時 ·嵌入“智能”
26、·面向?qū)ο蠹夹g(shù)</p><p> ·自定義軟件 ·數(shù)據(jù)庫 ·低成本硬件 ·專家系統(tǒng)</p><p>
27、 ·軟件產(chǎn)品 ·消費者的影響 ·人工神經(jīng)網(wǎng)絡(luò)</p><p><b> ·并行計算</b></p><p><b> ·網(wǎng)絡(luò)計算機</b></p><p> 隨著計算機系
28、統(tǒng)的增多,計算機軟件庫開始擴展。內(nèi)部開發(fā)的項目產(chǎn)生了上萬行的源程序,從外面購買的軟件產(chǎn)品加上幾千行新代碼就可以了。這時,一團黑云出現(xiàn)在地平線上,當(dāng)發(fā)現(xiàn)錯誤時需要糾正所有這些程序(所有這些源代碼);當(dāng)用戶需求發(fā)生變化時需要修改;當(dāng)硬件環(huán)境更新時需要適應(yīng)。這些活動統(tǒng)稱為軟件維護。在軟件維護上所花費的精力開始以驚人的速度消耗資源。</p><p> 更糟糕的是,許多程序的個人化特性使得它們根本不能維護?!败浖C”出
29、現(xiàn)了。</p><p> 計算機系統(tǒng)發(fā)展的第三階段始于70年代中期并跨越了整整十年。分布式系統(tǒng)——多臺計算機,每一臺都在同時執(zhí)行某些功能,并與其他計算機通訊——極大地提高了計算機系統(tǒng)的復(fù)雜性。廣域網(wǎng)和局域網(wǎng)、高帶寬數(shù)字通訊以及對“即時”數(shù)據(jù)訪問需求的增加都對軟件開發(fā)者提出了更高的要求。然而,軟件仍然繼續(xù)應(yīng)用于工業(yè)界和學(xué)術(shù)界,個人應(yīng)用很少。</p><p> 第三階段的主要特點是微處理器
30、的出現(xiàn)和廣泛應(yīng)用。微處理器孕育了一系列的智能產(chǎn)品——從汽車到微波爐,從工業(yè)機器人到血液診斷設(shè)備——但那一個也沒有個人計算機那么重要,在不到十年時間里,計算機真正成為大眾化的東西。①</p><p> 計算機系統(tǒng)發(fā)展的第四個階段已經(jīng)不再是著重于單臺計算機和計算機程序,而是面向計算機和軟件的綜合影響。由復(fù)雜的操作系統(tǒng)控制的強大的桌面機,廣域和局域網(wǎng)絡(luò),配合以先進的軟件應(yīng)用已成為標(biāo)準(zhǔn)。計算機體系結(jié)構(gòu)迅速地從集中的主機
31、環(huán)境轉(zhuǎn)變?yōu)榉植嫉目蛻魴C/服務(wù)器環(huán)境。世界范圍的信息網(wǎng)提供了一個基本結(jié)構(gòu),使得學(xué)者和政治家可以同樣考慮“信息高速公路”和“網(wǎng)際空間連通”的問題。事實上,Internet可以看作是能夠被單個用戶訪問的“軟件”。</p><p> 軟件產(chǎn)業(yè)在世界經(jīng)濟中不再是無足輕重的。由產(chǎn)業(yè)巨子如微軟做的一個決定可能會帶來成百上千億美元的風(fēng)險。隨著第四階段的進展,一些新技術(shù)開始涌現(xiàn)。面向?qū)ο蠹夹g(shù)(本書第四部分)在許多領(lǐng)域中迅速取代了
32、傳統(tǒng)軟件開發(fā)方法。雖然關(guān)于“第五代”計算機的預(yù)言仍是一個未知數(shù),但是軟件開發(fā)的“第四代技術(shù)”確實改變了軟件界開發(fā)計算機程序的方式。專家系統(tǒng)和人工智能軟件終于從實驗室里走了出來,進入了實際應(yīng)用,解決了現(xiàn)實世界中的大量問題。結(jié)合模糊邏輯應(yīng)用的人工神經(jīng)網(wǎng)絡(luò)軟件揭示了模式識別和類似人的信息處理能力的可能性。虛擬現(xiàn)實和多媒體系統(tǒng)使得與最終用戶的通訊可以采用完全不同的方法?!斑z傳算法”[BEG95]則提供了可以駐留于大型并行生物計算機上的軟件的潛在
33、可能性。</p><p> 但是,一系列軟件相關(guān)的問題在計算機系統(tǒng)的整個發(fā)展過程中一直存在著,而且這些問題還會繼續(xù)惡化:</p><p> 1.硬件的發(fā)展一直超過軟件,使得我們建造的軟件難以發(fā)揮硬件的所有潛能。</p><p> 2.我們建造新程序的能力遠遠不能滿足人們對新程序的需求,同時我們開發(fā)新程序的速度也不能滿足商業(yè)和市場的要求。</p>
34、<p> 3.計算機的普遍使用已使得社會越來越依賴于可靠的軟件。如果軟件失敗,會造成巨大的經(jīng)濟損失,甚至有可能給人類帶來災(zāi)難。</p><p> 4.我們一直在不斷努力建造具有高可靠性和高質(zhì)量的計算機軟件。</p><p> 5.拙劣的設(shè)計和資源的缺乏使得我們難以支持和增強已有軟件。</p><p> 為了解決這些問題,整個產(chǎn)業(yè)界開始采用了軟件工程
35、實踐。</p><p> 1.1.1產(chǎn)業(yè)的觀點</p><p> 在計算機發(fā)展的早期,計算機系統(tǒng)是采用面向硬件的管理方法來開發(fā)的。項目管理者著重于硬件,因為它是系統(tǒng)開發(fā)中最大的預(yù)算項。為了控制硬件成本,管理者建立了規(guī)范的控制和技術(shù)的標(biāo)準(zhǔn)。他們要求在真正開始建造系統(tǒng)之前,進行詳盡的分析和設(shè)計,他們度量過程,以發(fā)現(xiàn)哪里還可以進一步改進,他們堅持質(zhì)量控制和質(zhì)量保證,他們設(shè)立規(guī)程,以管理變化。
36、簡言之,他們應(yīng)用了控制、方法和工具,我們可以稱之為硬件工程。但遺憾的是軟件只不過是事后才考慮的事情。</p><p> 在早期,程序設(shè)計被看作是一門“藝術(shù)”。幾乎沒有規(guī)范化的方法,也沒有人使用它們。程序員往往從試驗和錯誤中積累經(jīng)驗。建造計算機軟件的專業(yè)性和挑戰(zhàn)性,使其披上了一種神密的面紗,管理者們很難了解它。軟件世界真是完全無序——這是一個開發(fā)者的為所欲為的時代。</p><p> 今
37、天,計算機系統(tǒng)開發(fā)成本的分配發(fā)生了戲劇性的變化。軟件,而不是硬件,是最大的成本項。在近二十年里,管理者和很多開發(fā)人員在不斷地問以下的問題:</p><p> ·為什么需要那么長時間才能結(jié)束開發(fā)?</p><p> ·為什么成本如此之高?</p><p> ·為什么我們不能在把軟件交給客戶之前就發(fā)現(xiàn)所有的錯誤?</p>
38、<p> ·為什么在軟件開發(fā)過程中我們難以度量其進展?</p><p> 這些問題以及其他許多問題都表明了對軟件及其開發(fā)的方式是必須關(guān)注了——這種關(guān)注最終導(dǎo)致了軟件工程實踐的出現(xiàn)。</p><p> 1.1.2老化的軟件工廠</p><p> 在50和60年代,許多評論家批評美國的鋼鐵產(chǎn)業(yè)缺少對其工廠的投入。工廠開始惡化,現(xiàn)代化的方法很
39、少被采納,最終產(chǎn)品的質(zhì)量和成本難以容忍,外來的競爭開始贏得市場份額。這些企業(yè)在管理中確定把主要的投資投入到其主營業(yè)務(wù)中,以保持競爭力。隨著時間的推移,美國的鋼鐵產(chǎn)業(yè)蒙受了巨大損失,大量市場份額被外來競爭者占領(lǐng)——這些企業(yè)擁有新工廠,采用更為現(xiàn)代化的技術(shù),并且得到政府的資助,使得他們極具價格優(yōu)勢。</p><p> 在那個時期,羽翼未豐的計算機產(chǎn)業(yè)中的很多人都以蔑視的態(tài)度評價鋼鐵產(chǎn)業(yè),“如果它們不愿在自己的業(yè)務(wù)上
40、投入,那當(dāng)然會失去市場份額”。這些話現(xiàn)在輪到說我們自己了。</p><p> 聽上去很戲劇化,今天的軟件產(chǎn)業(yè)就像五、六十年代的鋼鐵產(chǎn)業(yè),無論大公司還是小公司,都有一個老化的“軟件工廠”——有成千上萬的重要的基于軟件的應(yīng)用程序急待更新:</p><p> · 20年前開發(fā)的信息系統(tǒng)應(yīng)用程序經(jīng)過了幾十次的修改,已經(jīng)真正不可維護了。即使是最小的修改也會引起整個系統(tǒng)失敗。</p
41、><p> ·一些用于生成關(guān)鍵設(shè)計數(shù)據(jù)的工程應(yīng)用程序,由于不斷的修改和老化,已經(jīng)沒有人真正了解其內(nèi)部結(jié)構(gòu)。</p><p> ·嵌入式系統(tǒng)(有成千上萬的這類應(yīng)用程序,其中包括核電站控制、航空調(diào)度和工廠管理)表現(xiàn)出奇怪的有時甚至是無法解釋的行為,但又不能不用它們,因為目前還沒有其他方法可以替代它們。</p><p> 有問題就“打補丁”,并給這些
42、應(yīng)用程序一個時髦的界面,僅僅如此是不夠的。軟件工廠的許多構(gòu)件需要再生產(chǎn),否則它們就不再具有競爭力了。但不幸的是,許多企業(yè)的管理者并不愿投入資源去進行再生產(chǎn),他們辯解:“這些應(yīng)用程序仍能工作,投入資源去使得它們更好是不經(jīng)濟的”。</p><p> 1.1.3軟件的競爭 </p><p> 許多年來,大、小公司雇傭的軟件開發(fā)人員僅僅在公司內(nèi)部服務(wù),而且他們也愿意這樣。因為每一個計
43、算機程序都是自行開發(fā)的,這些“自家”的軟件人員控制著成本、進度和質(zhì)量。今天,所有這一切都改變了。</p><p> 軟件目前是一個競爭很強的行業(yè)。曾經(jīng)要自行開發(fā)的軟件現(xiàn)在可以在貨架上買到,許多公司過去雇傭了大量的程序員開發(fā)特定的軟件,現(xiàn)在它們大部分的軟件工作已交給第三方廠商去完成[MIN95]。</p><p> 成本、進度和質(zhì)量將是未來若干年中導(dǎo)致軟件激烈競爭的主要因素。美國和西歐有
44、很成熟的軟件產(chǎn)業(yè),而遠東(如韓國,新加坡)、亞洲(如印度、中國)和東歐的一些國家擁有大量的有天份、受過良好教育且相對較低廉的專門人才[ECO94]。這種壓力導(dǎo)致了必須迅速采用現(xiàn)代化的軟件工程實踐的需要,同時軟件開發(fā)也是一個必須認真考慮的因素,因為世界范圍的軟件從業(yè)人員都在追求盡量少的開發(fā)費用。</p><p> 在關(guān)于信息服務(wù)對美國及世界的影響的論著中,F(xiàn)eigenbaum和McCorduck[FEI83]作了
45、如下陳述:</p><p> 知識就是力量,而計算機是這種力量的倍增器……美國的計算機產(chǎn)業(yè)是創(chuàng)新的、充滿活力的和成功的。在某種程度上,它是一個理想的產(chǎn)業(yè)。它通過轉(zhuǎn)化知識分子的腦力勞動來產(chǎn)生價值,而幾乎不需要什么能源和原材料。今天,我們在這個最重要的現(xiàn)代技術(shù)上領(lǐng)導(dǎo)著世界的想法和市場,但明天會怎樣哪?</p><p> 是的,明天會怎樣哪?計算機硬件已經(jīng)成為一種商品,可從很多渠道得到。但軟
46、件仍然是美國保持著“創(chuàng)新的、充滿活力的和成功的”一個產(chǎn)業(yè)。但我們還會繼續(xù)保持領(lǐng)先嗎?至少答案的一部分就在這里:我們將采用什么樣的方法去建造下一代計算機系統(tǒng)的軟件。</p><p><b> 1.2軟件</b></p><p> 在1970年,只有不到1%的人能夠比較準(zhǔn)確地描述出什么是“計算機軟件”。而現(xiàn)在,大多數(shù)專業(yè)人士和許多業(yè)外公眾都認為他們了解了什么是軟件。但
47、他們真的了解嗎?</p><p> 關(guān)于軟件,教科書上一般是如下定義的:軟件是(1)能夠完成預(yù)定功能和性能的可執(zhí)行的指令(計算機程序);(2)使得程序能夠適當(dāng)?shù)夭僮餍畔⒌臄?shù)據(jù)結(jié)構(gòu);(3)描述程序的操作和使用的文檔。毫無疑問,也可以給出其他更詳細的定義。但我們不只是需要一個形式上的定義。</p><p> 1.2.1軟件特征 </p><p> 要理解
48、軟件的含義(以及對軟件工程有一個全面的理解),首先要了解軟件的特征是很重要的,據(jù)此能夠明白軟件與人類建造的其他事物之間的區(qū)別。當(dāng)建造硬件時,人的創(chuàng)造性的過程(分析、設(shè)計、建造、測試)能夠完全轉(zhuǎn)換成物理的形式。如果我們建造一個新的計算機,初始的草圖、正式的設(shè)計圖紙和面板的原型一步步演化成為一個物理的產(chǎn)品(VLSI芯片、線路板、電源等等)。</p><p> 而軟件是邏輯的而不是物理的產(chǎn)品。因此,軟件具有與硬件完全
49、不同的特征:</p><p> 1.軟件是由開發(fā)或工程化而形成的,而不是傳統(tǒng)意義上的制造產(chǎn)生的。</p><p> 雖然在軟件開發(fā)和硬件制造之間有一些相似之處,但兩者本質(zhì)上是不同的。這兩者,都可以通過良好的設(shè)計獲得高質(zhì)量,但硬件在制造過程中可能會引入質(zhì)量問題,這種情況對于軟件而言幾乎不存在(或是很容易改正)。軟件成為產(chǎn)品之后,其制造只是簡單的拷貝而已;兩者都依賴于人,但參與的人和完成的
50、工作之間的關(guān)系不同;兩者都是建造一個產(chǎn)品,但方法不同(見第3章)。</p><p> 軟件成本集中于開發(fā)上,這意味著軟件項目不能象硬件制造項目那樣來管理。</p><p> 在80年代中期,“軟件工廠”的概念被正式引入[MAN84]、[YAJ84]。應(yīng)該注意到這個術(shù)語并沒有把硬件制造和軟件開發(fā)認為是等價的。而是通過軟件工廠這個概念提出了軟件開發(fā)中應(yīng)該使用自動化工具(見第5部分)。<
51、;/p><p> 2.軟件不會“磨損”。</p><p> 圖1-2刻劃了隨著時間的改變硬件故障率的變化曲線圖。其關(guān)系,常常被稱作“浴缸曲線”,表明了硬件在其生命初期有較高的故障率(這些故障主要是由于設(shè)計或制造的缺陷);這些缺陷修正之后,故障率在一段時間中會降到一個穩(wěn)定的曲線上(很低)。隨著時間的改變,故障率又提升了,這是因為硬件構(gòu)件由于種種原因會不斷受到損害,例如灰塵、振動、濫用、溫度的
52、急劇變化以及其他許多環(huán)境問題。簡單講,硬件已經(jīng)開始磨損了。</p><p> 軟件并不受到這些引起硬件磨損的環(huán)境因素的影響。因此,理論上講,軟件的故障率曲線呈現(xiàn)出如圖1-3所示的形式。隱藏的錯誤會引起程序在其生命初期具有較高的故障率。但這些錯誤改正之后(我們假設(shè)理想情況下改正過程中并不引入其他錯誤),曲線就趨于平穩(wěn),如圖所示。圖1-3給出了實際軟件故障模型的一個總的簡化圖(第8章將給出更多信息)。其意義很清楚—
53、—軟件不會磨損,不過它會退化。</p><p> 這個說法表面上似乎是矛盾的,我們可以通過圖1-4來解釋清楚。在其生命期中,軟件會經(jīng)歷修改(維護),隨著這些修改,有可能會引入新的錯誤,使得故障率曲線呈現(xiàn)為圖1-4所示的鋸齒形。在該曲線能夠恢復(fù)到原來的穩(wěn)定狀態(tài)的故障率之前,又需要新的修改,又引起一個新的鋸齒。慢慢地,最小故障率就開始提高了——軟件的退化由于修改而發(fā)生了。</p><p>
54、 關(guān)于磨損的另一個側(cè)面也表明了硬件和軟件之間的不同。當(dāng)一個硬件構(gòu)件磨損時,可以用另外一個備用零件替換它,但對于軟件就沒有備用零件可以替換了。每一個軟件故障都表明了設(shè)計或是將設(shè)計轉(zhuǎn)換成機器可執(zhí)行代碼的過程中存在錯誤。因此,軟件維護要比硬件維護復(fù)雜得多。</p><p> 3.大多數(shù)軟件是自定的,而不是通過已有的構(gòu)件組裝而來的。</p><p> 我們先看一看一個基于微處理器的控制硬件是如
55、何設(shè)計和建造出來的。設(shè)計工程師畫一個簡單的數(shù)字電路圖,做一些基本的分析以保證可以實現(xiàn)預(yù)定的功能,然后查閱所需的數(shù)字零件的目錄。每一個集成電路(通常稱為“IC”或“芯片”)都有一個零件編號、固定的功能、定義好的接口和一組標(biāo)準(zhǔn)的集成指南。每一個選定的零件,都可以在貨架上買到。</p><p> 而軟件設(shè)計者就沒有上述這種榮幸了。幾乎沒有軟件構(gòu)件。有可能在貨架上買到的軟件,它本身就是一個完整的軟件,而不能作為構(gòu)件再組
56、裝成新的程序①。雖然關(guān)于“軟件復(fù)用”已有大量論著,但這種概念的成功實現(xiàn)還只是剛剛開始。</p><p> 1.2.2軟件構(gòu)件 </p><p> 隨著工程化的發(fā)展,大量標(biāo)準(zhǔn)的設(shè)計構(gòu)件產(chǎn)生了。標(biāo)準(zhǔn)螺絲和貨架上的集成電路芯片僅僅是成千上萬的標(biāo)準(zhǔn)構(gòu)件中的兩種,機械和電子工程師在設(shè)計新系統(tǒng)時會用到它們。這些可復(fù)用構(gòu)件的使用使得工程師們能夠集中精力于設(shè)計中真正有創(chuàng)造性的部分(如設(shè)計中那
57、些新的成分)。在硬件中,構(gòu)件復(fù)用是工程化的必然結(jié)果。而在軟件中,它還僅僅是在小范圍內(nèi)取得一定應(yīng)用。</p><p> 可復(fù)用性(Reusability)是高質(zhì)量軟件構(gòu)件的一個重要特征(第26章將給出更詳細的討論),一個軟件構(gòu)件應(yīng)該被設(shè)計和實現(xiàn)為能夠在多個不同程序中復(fù)用。在60年代,我們建造了科學(xué)計算子程序庫,它們能夠在很多工程和科學(xué)應(yīng)用中復(fù)用,這些子程序庫可以以一種高效的方式復(fù)用,定義明確的算法,但其應(yīng)用范圍有
58、限。今天,我們已經(jīng)擴展了復(fù)用的概念,不僅是算法,還可以是數(shù)據(jù)結(jié)構(gòu)?,F(xiàn)代的可復(fù)用構(gòu)件包含了數(shù)據(jù)以及應(yīng)用這些數(shù)據(jù)的處理過程,使得軟件工程師能夠從已有可復(fù)用構(gòu)件中創(chuàng)建新的應(yīng)用②。例如,現(xiàn)在交互界面都是通過可復(fù)用構(gòu)件建造的,你可以使用它們創(chuàng)建圖形窗口、下拉式菜單和各種交互機制。建造用戶界面所需的數(shù)據(jù)結(jié)構(gòu)和處理細節(jié)均包含在一個可復(fù)用的界面建造構(gòu)件庫中。</p><p> 軟件構(gòu)件使用某種程序設(shè)計語言實現(xiàn),該語言具有一個有
59、限的詞匯表、一個明確定義的文法及語法和語義規(guī)則。在最底層,該語言直接反映了硬件的指令集;在中層,程序設(shè)計語言,如Ada 95、C或Smalltalk可用于創(chuàng)建程序的過程化描述;在最高層,該語言可使用圖形化的圖標(biāo)或其他符號去表示關(guān)于需求的解決方案。由于可執(zhí)行代碼就自動生成了。</p><p> 機器級語言是CPU指令集的一個符號表示。當(dāng)一個好的軟件開發(fā)者在開發(fā)一個可維護、文檔齊全的程序時,使用機器語言能夠很高效地
60、利用內(nèi)存并優(yōu)化該程序的執(zhí)行速度。當(dāng)程序設(shè)計得很差且沒有文檔時,機器語言就是一場惡夢。</p><p> 中層語言使得軟件開發(fā)者和程序可獨立于機器。如果使用了很好的翻譯器,一個中層語言的詞匯表、文法、語法和語義都能夠比機器語言高級得多。事實上,中層語言的編譯器和解釋器的輸出就是機器語言。</p><p> 雖然目前有成百上千種的程序設(shè)計語言,但只有不到10種中層的程序設(shè)計語言在工業(yè)界廣泛
61、使用。一些語言,如COBOL和FORTRAN從它們發(fā)明至今已經(jīng)流行了30余年,更多的現(xiàn)代程序設(shè)計語言,如Ada95、C、C++、Eiffel、Java和Smalltalk也各自有一大批熱心的追隨者。</p><p> 機器代碼,匯編語言(機器級語言)和中層程序設(shè)計語言通常被認為是計算機語言的前三代。因為這些語言中的任何一種,都需程序員既要關(guān)心信息結(jié)構(gòu)的表示,又要考慮程序本身的控制。因此這前三代語言被稱為是過程語
62、言。</p><p> 第四代語言,也稱非過程語言,使得軟件開發(fā)者更加獨立于計算機硬件。使用非過程語言開發(fā)程序,不需要開發(fā)者詳細說明過程化的細節(jié),而僅僅“說明期望的結(jié)果,而不是說明要得到該結(jié)果所需要的行為”[COB85]。支撐軟件會把這種規(guī)約自動轉(zhuǎn)換成機器可執(zhí)行的程序。</p><p><b> 1.2.3軟件應(yīng)用</b></p><p>
63、 軟件可以應(yīng)用于任何場合,只要定義了一組預(yù)說明的程序步驟(如一個算法,但也有例外,如專家系統(tǒng)和人工神經(jīng)網(wǎng)絡(luò))。信息的內(nèi)容和確定性是決定一個軟件應(yīng)用的特性的重要因素。內(nèi)容指的是輸入和輸出信息的含義和形式,例如,許多商業(yè)應(yīng)用使用高結(jié)構(gòu)化的輸入數(shù)據(jù)(一個數(shù)據(jù)庫),且產(chǎn)生格式化的輸出“報告”。而控制一個自動化機器的軟件(如一個數(shù)控系統(tǒng))則接受限定結(jié)構(gòu)的離散數(shù)據(jù)項,并產(chǎn)生快速連續(xù)的單個機器命令。</p><p> 信息
64、的確定性指的是信息的處理順序及時間的可預(yù)定性。一個工程分析程序接受預(yù)定順序的數(shù)據(jù),不間斷的執(zhí)行分析算法,并以報告或圖形格式產(chǎn)生相關(guān)的數(shù)據(jù)。這類應(yīng)用是確定的。而一個多用戶操作系統(tǒng),則接受可變化內(nèi)容和任意時序的數(shù)據(jù),執(zhí)行可被異常條件中斷的算法,并產(chǎn)生隨環(huán)境功能及時序而變化的輸出。具有這些特點的應(yīng)用是非確定的。</p><p> 在某種程度上講我們難以對軟件應(yīng)用給出一個通用的分類。隨著軟件復(fù)雜性的增加,其間已沒有明顯
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ū)動程序和通訊進程等)則處理大量的非確定的數(shù)據(jù)。不管哪種情況,系統(tǒng)軟件均具有以下特點:與計算機硬件頻繁交互;多用戶支持;需要精細調(diào)度、資源共享及靈活的進程管理的并發(fā)操作;復(fù)雜的數(shù)
66、據(jù)結(jié)構(gòu);及多外部接口。</p><p> 實時軟件:管理、分析、控制現(xiàn)實世界中發(fā)生的事件的程序稱為實時軟件。實時軟件的組成包括:一個數(shù)據(jù)收集部件,負責(zé)從外部環(huán)境獲取和格式化信息;一個分析部件,負責(zé)將信息轉(zhuǎn)換成應(yīng)用時所需要的形式;一個控制/輸出部件,負責(zé)響應(yīng)外部環(huán)境;及一個管理部件,負責(zé)協(xié)調(diào)其他各部件,使得系統(tǒng)能夠保持一個可接受的實時響應(yīng)時間(一般從1毫秒到1分鐘),應(yīng)該注意到術(shù)語“實時”不同于“交互”或“分時”
67、。一個實時系統(tǒng)必須在嚴格的時間范圍內(nèi)響應(yīng)。而一個交互系統(tǒng)(或分時系統(tǒng))的響應(yīng)時間可以延遲,且不會帶來災(zāi)難性的后果。</p><p> 商業(yè)軟件:商業(yè)信息處理是最大的軟件應(yīng)用領(lǐng)域。具體的“系統(tǒng)”(如工資表、帳目支付和接收、存貨清單等)均可歸為管理信息系統(tǒng)(MIS)軟件,它們可以訪問一個或多個包含商業(yè)信息的大型數(shù)據(jù)庫。該領(lǐng)域的應(yīng)用將已有的數(shù)據(jù)重新構(gòu)造,變換成一種能夠輔助商業(yè)操作和管理決策的形式。除了傳統(tǒng)的數(shù)據(jù)處理應(yīng)
68、用之外,商業(yè)軟件應(yīng)用還包括交互式的和客戶機/服務(wù)器式的計算(如POS事務(wù)處理)。</p><p> 工程和科學(xué)計算軟件:工程和科學(xué)計算軟件的特征是“數(shù)值分析”算法。此類應(yīng)用含蓋面很廣,從天文學(xué)到火山學(xué);從汽車壓力分析到航天飛機的軌道動力學(xué);從分子生物學(xué)到自動化制造。不過,目前工程和科學(xué)計算軟件已不僅限于傳統(tǒng)的數(shù)值算法。計算機輔助設(shè)計、系統(tǒng)仿真和其他交互應(yīng)用已經(jīng)開始具有實時軟件和系統(tǒng)軟件的特征。</p>
69、;<p> 嵌入式軟件:智能產(chǎn)品在幾乎每一個消費或工業(yè)市場上都是必不可少的,嵌入式軟件駐留在只讀內(nèi)存中,用于控制這些智能產(chǎn)品。嵌入式軟件能夠執(zhí)行很有限但專職的功能(如微波爐的按鈕控制),或是提供比較強大的功能及控制能力(如汽車中的數(shù)字控制,包括燃料控制、儀表板顯示,剎車系統(tǒng)等)。</p><p> 個人計算機軟件:個人計算機軟件市場是在過去十年中萌芽和發(fā)展起來的。字處理、電子表格、計算機圖形、多
70、媒體、娛樂、數(shù)據(jù)庫管理、個人及商業(yè)金融應(yīng)用、外部網(wǎng)絡(luò)或數(shù)據(jù)庫訪問,這些僅僅是成百上千這類應(yīng)用中的幾種。</p><p> 人工智能軟件:人工智能(AI)軟件利用非數(shù)值算法去解決復(fù)雜的問題,這些問題不能通過計算或直接分析得到答案。一個活躍的AI領(lǐng)域是專家系統(tǒng),也稱為基于知識的系統(tǒng)。AI軟件的其他應(yīng)用領(lǐng)域還包括模式識別(圖象或聲音)、定理證明和游戲。最近,AI軟件的一個新分支,稱為人工神經(jīng)網(wǎng)絡(luò),得到了很大進展。神經(jīng)
71、網(wǎng)絡(luò)仿真人腦的處理結(jié)構(gòu)(生物神經(jīng)系統(tǒng)的功能),這有可能導(dǎo)致一個全新類型的軟件登場,它不僅能夠識別復(fù)雜的模式,而且還能從過去的經(jīng)驗中自行學(xué)習(xí)進步。</p><p> 1.3軟件:地平線上的危機</p><p> 許多產(chǎn)業(yè)界觀察者(包括本書早期版本的作者)都把與軟件開發(fā)相關(guān)的問題稱為“危機”。但實際上我們的問題與這個術(shù)語真正的含義可能并不相同。</p><p>
72、“危機”這個詞在韋氏字典中定義為“任何事情過程中的一個轉(zhuǎn)折點;決定性的或危急的時刻、階段或事件”。而對于軟件而言,沒有“轉(zhuǎn)折點”,沒有“決定性時刻”,只有延遲或進展上的變化。在軟件產(chǎn)業(yè)中,“危機”已經(jīng)伴隨我們走過了近30年,這在術(shù)語上是很矛盾的。</p><p> 在字典中查找“危機”這個詞,我們還可以發(fā)現(xiàn)另外一個定義:“疾病過程中的一個轉(zhuǎn)折點,能夠確定病人是生是死”。這個定義多少可以反映出軟件開發(fā)中面臨的問題
73、的真正含義。</p><p> 我們已經(jīng)到了計算機軟件的危機階段,實際上我們真正的問題應(yīng)該是一種“慢性的苦惱”①?!翱鄲馈边@個詞定義為“引起痛苦或不幸的任何事情”。但形容詞“慢性的”這個詞的定義能夠更加貼切地反映問題:“持續(xù)很長時間或經(jīng)常重犯;不確定地延續(xù)”。這很準(zhǔn)確地描述了過去30年我們所經(jīng)歷的問題是一種慢性的苦惱,而不是危機。并沒有一種靈丹妙藥可以完全治愈這種病疼,但在我們正努力去發(fā)現(xiàn)解決方案的同時會得到很
74、多緩解痛苦的方法。</p><p> 不管我們稱之為軟件危機還是軟件苦惱,該術(shù)語都是指在計算機軟件開發(fā)中所遇到的一系列問題。這些問題不僅局限于那些“不能正確完成功能的”軟件,還包含那些與我們?nèi)绾伍_發(fā)軟件、我們?nèi)绾尉S護大量已有軟件以及我們的開發(fā)速度如何跟上目前對軟件越來越大的需求等相關(guān)的問題。</p><p> 雖然關(guān)于危機甚至是苦惱的介紹可能看起來有些戲劇化,但這些段落對于表明在軟件開
75、發(fā)的所有領(lǐng)域中所遇到的真正的問題起到很大作用。</p><p><b> 1.4軟件神話</b></p><p> 引起軟件危機的諸多原因可以追溯到軟件開發(fā)的早期階段產(chǎn)生的神話。它不象古代的神話那樣可以給人以經(jīng)驗和教訓(xùn),軟件神話使人產(chǎn)生了誤解和混亂。軟件神話具有一些特征使得它們很有欺騙性:例如,它們表面上看很有道理(有時含有一定真實的成分);它們符合人的直覺;它們
76、常常是有經(jīng)驗的實踐者發(fā)布出來的。</p><p> 今天,大多數(shù)專業(yè)人員已經(jīng)認識到這些神話誤導(dǎo)了人們,給管理者和技術(shù)人員都帶來了嚴重的問題。但是,舊的觀念和習(xí)慣難以改變,軟件神話仍被不少人相信著。</p><p> 管理者的神話:負責(zé)軟件的管理者象大多數(shù)其他行業(yè)的管理者一樣,都有巨大的壓力,要維持預(yù)算、保持進度及提高質(zhì)量。就像溺水者抓住一根救命稻草,軟件管理者常常抓住軟件神話不放,如果
77、這些神話能夠緩解其壓力的話(哪怕是暫時的)。</p><p> 神話:我們已經(jīng)有了關(guān)于建造軟件的標(biāo)準(zhǔn)和規(guī)程的書籍,難道它們不能給人們提供所有其需要知道的信息嗎?</p><p> 事實:不錯關(guān)于標(biāo)準(zhǔn)的書籍已經(jīng)存在,但真正用到了它們嗎?軟件實踐者知道它們的存在嗎?它們是否反映了現(xiàn)代軟件開發(fā)的過程?它們完整嗎?很多情況下,對于這些問題的答案均是“不”。</p><p&g
78、t; 神話:我們已經(jīng)有了很多很好的軟件開發(fā)工具,而且,我們?yōu)樗鼈冑I了最新的計算機。</p><p> 事實:為了使用最新型號的主機、工作站和PC機去開發(fā)高質(zhì)量的軟件,我們已經(jīng)投入太多的費用。實際上,計算機輔助軟件工程(CASE)工具相比起硬件而言對于獲得高質(zhì)量和高生產(chǎn)率更為重要,但大多數(shù)軟件開發(fā)者并未使用它們。</p><p> 神話:如果我們已經(jīng)落后于計劃,可以增加更多的程序員來趕
79、上進度(“有時稱為蒙古大夫概念”)。</p><p> 事實:軟件開發(fā)并非象制造一樣是一個機械過程。用Brooks[BRO75]的話來說,“給一個已經(jīng)延遲的軟件項目增加人手只會使其更加延遲”??雌饋?,這句話與人的直覺正好相反。但實際上,增加新人,原來正在工作的開發(fā)者必須花時間來培訓(xùn)新人,這樣就減少了他們花在項目開發(fā)上的時間。人手可以增加,但只能是在計劃周密、協(xié)調(diào)良好的情況下。</p><p&
80、gt; 用戶的神話:需要計算機軟件的用戶可能就是鄰桌的人,或是另一個技術(shù)組,也可能是市場/銷售部門,或另外一個公司。在許多情況下,用戶相信關(guān)于軟件的神話,因為負責(zé)軟件的管理者和開發(fā)者很少去糾正用戶的錯誤理解。神話導(dǎo)致了用戶過高的期望值,并引起對開發(fā)者的極端不滿意。</p><p> 神話:有了對目標(biāo)的一般描述就足以開始寫程序了——我們可以以后再補充細節(jié)。</p><p> 事實:不完
81、善的系統(tǒng)定義是軟件項目失敗的主要原因。關(guān)于待開發(fā)項目的應(yīng)用領(lǐng)域、功能、性能、接口、設(shè)計約束及確認標(biāo)準(zhǔn)的形式化的、詳細的描述是必需要的。這些內(nèi)容只有通過用戶和開發(fā)者之間的通信交流才能確定。</p><p> 神話:項目需求總是在不斷變化,但這些變化能夠很容易地滿足,因為軟件是靈活的。</p><p> 事實:軟件需求確實是經(jīng)常變化的,但這些變化產(chǎn)生的影響會隨著其引入的時間不同而不同。如果
82、我們很注重早期的系統(tǒng)定義,這時的需求變化就可被很容易地適應(yīng)。用戶能夠復(fù)審需求,并提出修改的建議,這時對成本的影響會相對較小。當(dāng)在軟件設(shè)計過程中才要求修改時,對成本的影響就會提高得很快。資源已經(jīng)消耗了,設(shè)計框架已經(jīng)建立了,這時的變化可能會引起大的改動,需要額外的資源和大量的設(shè)計修改,例如,額外的花費。實現(xiàn)階段(編碼和測試階段)功能、性能、接口及其他方面的改變對成本會產(chǎn)生更大的影響。當(dāng)軟件已經(jīng)投入使用后再要求修改,這時所花的代價比起較早階段
83、做同樣修改所花的代價可能是幾何級數(shù)級的增長。</p><p> 開發(fā)者的神話:那些至今仍被軟件開發(fā)者相信的神話是由幾十年的程序設(shè)計文化培植起來的。正如我們在本章一開始就提到的,在軟件的早期階段,程序設(shè)計被看作是一門藝術(shù)。這種舊的觀念和方式是很難改變的。</p><p> 神話:一旦我們寫出了程序并使其正常運行,我們的工作就結(jié)束了。</p><p> 事實:有人
84、說過:“越早開始寫程序,就要花越長時間才能完成它”,產(chǎn)業(yè)界的數(shù)據(jù)[LIE80]表明在一個程序上所投入的50%到70%的努力是花費在第一次將程序交給用戶之后。</p><p> 神話:在程序真正運行之前,沒有辦法評估其質(zhì)量。</p><p> 事實:從項目一開始就可以應(yīng)用的最有效的軟件質(zhì)量保證機制之一是正式的技術(shù)復(fù)審。軟件復(fù)審(見第8章)是“質(zhì)量的過濾器”,比起通過測試找到某類軟件錯誤要
85、有效得多。</p><p> 神話:一個成功項目唯一應(yīng)該提交的就是運行程序。</p><p> 事實:運行程序僅是軟件配置的一部分,軟件配置包括:程序、文檔和數(shù)據(jù)。文檔是成功開發(fā)的基礎(chǔ),更重要的是,文檔為軟件維護提供了指導(dǎo)。</p><p> 許多軟件專業(yè)人士認識到上述這些神話是錯誤的。但令人遺憾的是舊的觀念和方法培植了拙劣的管理和技術(shù)習(xí)慣,雖然現(xiàn)實情況已經(jīng)需
86、求有更好的方法。對軟件現(xiàn)實的認識是形成軟件開發(fā)的實際解決方案的第一步。</p><p><b> 1.5小結(jié)</b></p><p> 軟件已經(jīng)成為基于計算機的系統(tǒng)及產(chǎn)品的關(guān)鍵組成成分。在過去40年中,軟件已經(jīng)從特定的問題解決和信息分析工具演化為一門獨立的產(chǎn)業(yè)。但早期的“程序設(shè)計”文化和歷史產(chǎn)生了一系列至今還存在的問題,軟件已經(jīng)成為計算機系統(tǒng)演化過程中的阻礙因素。
87、軟件是由程序、數(shù)據(jù)和文檔組成。這些條目構(gòu)成了軟件工程過程中的配置項,軟件工程的目的就是為建造高質(zhì)量的軟件提供一個框架。</p><p><b> 思考題</b></p><p> 1.1軟件在許多基于計算機的系統(tǒng)或產(chǎn)品中具有不同的特點,試舉2到3個產(chǎn)品以及至少1個系統(tǒng),說明軟件而非硬件在其中的差別。</p><p> 1.2在五、六十年代
88、,計算機程序設(shè)計是一門藝術(shù),其學(xué)習(xí)環(huán)境就象在工廠當(dāng)學(xué)徒。早期階段對今天的軟件開發(fā)有何影響?</p><p> 1.3很多作者已經(jīng)探討了“信息時代”的影響。試舉若干實例(正面的和反面的)說明軟件對當(dāng)今社會的影響。參考1.1節(jié)中任—90年代以前的參考文獻,指出其中作者的哪些預(yù)見是正確的,哪些是錯誤的?</p><p> 1.4試舉一個特定應(yīng)用并說明(a)它屬于哪一個軟件應(yīng)用類型(見1.2.
89、3節(jié));(b)與該應(yīng)用相關(guān)的數(shù)據(jù)內(nèi)容;(C)該應(yīng)用的信息確定性。</p><p> 1.5隨著軟件的普及,公眾所冒的危險(由于軟件的錯誤引起的)受到越來越多的關(guān)注。試舉一個因為計算機程序的失敗而帶來巨大災(zāi)難的(對人類或經(jīng)濟均可)實際可能發(fā)生的場景。</p><p> 1.6精讀Internet上的新聞組comp.risks的內(nèi)容,并對最近正在討論的軟件帶來的危險作一個總結(jié)。[另一個可選
90、的資料來源是:Software Engineering Notes(軟件工程注釋),由ACM(theAssociation of Computing Machinery(計算機協(xié)會))出版]。</p><p> 1.7寫一篇文章總結(jié)某個前沿軟件應(yīng)用領(lǐng)域的最新進展。推薦可選的領(lǐng)域包括:人工智能,虛擬現(xiàn)實、人工神經(jīng)網(wǎng)絡(luò)、高級人機界面和智能代理。</p><p> 1.8 1.4
91、節(jié)陳述的神話隨著時間的推移已經(jīng)慢慢淡化了,但另外一些新神話替代了它們,試著為每一類神話增加一二個“新”神話。</p><p> 推薦閱讀文獻及其他信息源</p><p> 關(guān)于計算機軟件有成千上萬的書籍,大多數(shù)是探討程序設(shè)計語言或軟件應(yīng)用的,但也有一部分是討論軟件本身的。關(guān)于該話題的一個非正式的探討可在[PRE91]中找到。Negroponte的暢銷書(Being Digital,數(shù)字
92、化,Alfred A.Knopf,Inc.,1995)闡述了計算的觀點及其對21世紀的影響。DeMarco(Why Does Software Cost So Much?為什么軟件的成本如此之高,Dorset House,1995)對于軟件及其開發(fā)過程進行了精辟的和有遠見的論述。</p><p> 對計算機軟件和軟件工程深刻理解的基礎(chǔ)是計算機科學(xué),這個話題涉及面太寬,超出了本書討論的范圍?!坝嬎銠C科學(xué)文獻匯總”
93、(Computer Science Bibliography Collection)中收集了近600個計算機科學(xué)領(lǐng)域的文獻目錄。在其中的300 000個參考文獻中幾乎每一個都與軟件工程相關(guān):</p><p> http://www.pilgrim.umass.edu/pub/misc/bibliographies/index.html</p><p> “計算機科學(xué)指導(dǎo)”(the Wo
94、rld Guide to Computer Science)中包含了很多大學(xué)的研究機構(gòu)在計算機科學(xué)領(lǐng)域取得的進展:</p><p> http://www.worldwidenews.net/subjects/htm</p><p> 軟件方面的術(shù)語詞,包括縮略詞可在以下網(wǎng)站上找到:</p><p> http://dxsting.cern.ch/sting/
95、glossary.html</p><p> “工程的國際互聯(lián)”(Internet Connection for Engineering)給出了國際上工程程序正在研究的方向索引:</p><p> http://www.englib.cornell.edu/ice/ice-index.html① 這種狀況目前正在迅速改變。面向?qū)ο蠹夹g(shù)的廣泛使用已導(dǎo)致了軟件構(gòu)件的生產(chǎn),本書第19至29
96、章將有詳細討論。 ② 本書第四部分介紹了面向?qū)ο蠹夹g(shù)的使用和它們對構(gòu)件復(fù)用形成的影響。 ① 該術(shù)語由Michigan大學(xué)的DanielTiechrow教授于1989年4月,在SwitzerlndGeneva提出。</p><p><b> 第2章 過程 </b></p><p> 軟件過程是過去十年中人們關(guān)注的焦點。但準(zhǔn)確講什么是軟件過程
97、呢?在本書中,我們定義軟件過程為建造高質(zhì)量軟件需要完成的任務(wù)的框架。“過程”與軟件工程同義嗎?答案是“是也不是”。一個軟件過程定義了軟件開發(fā)中采用的方法,但軟件工程還包含該過程中應(yīng)用的技術(shù)——技術(shù)方法和自動化工具。</p><p> 更重要的一點,軟件工程是有創(chuàng)造力、有知識的人在定義好的、成熟的軟件過程框架中進行的。本章的目的就是探討軟件過程的研究現(xiàn)狀,并為在本書以后的章節(jié)中更詳細地討論關(guān)于管理和技術(shù)方面的話題
98、提供指導(dǎo)。</p><p> 2.1軟件工程——一種層次化技術(shù)</p><p> 雖然有很多作者都給出了軟件工程的定義,但Fritz Bauer[NAU69]在NATO會議上給出的定義仍是進一步展開討論的基礎(chǔ):</p><p> 軟件工程 是為了經(jīng)濟地獲得可靠的和能在實際機器上高效運行的軟件而建立和使用的好的工程原則。</p><
99、;p> 幾乎每一個讀者都忍不住想在這個定義上增加點什么。它沒有提到軟件質(zhì)量的技術(shù)層面,也沒有直接談到用戶滿意度或按時交付產(chǎn)品的要求,它忽略了測度和度量的重要性,甚至沒有闡明一個成熟的過程的重要性。但Bauer的定義給我們提供了一個基線。什么是可以應(yīng)用到計算機軟件開發(fā)中的“好的工程原則”?我們?nèi)绾巍敖?jīng)濟地”建造軟件使得其可靠性高?如何才能創(chuàng)建出能夠在多個、而不是一個不同的實際機器上“高效運行”的程序?這些都是進一步挑戰(zhàn)軟件工程師的
100、問題。</p><p> IEEE[IEE93]給出了一個更加綜合的定義:</p><p> 軟件工程:(1)將系統(tǒng)化的、規(guī)范的、可度量的方法應(yīng)用于軟件的開發(fā)、運行和維護的過程,即將工程化應(yīng)用于軟件中。(2)(1)中所述方法的研究。</p><p> 2.1.1過程、方法和工具</p><p> 軟件工程是一種層次化的技術(shù)(如圖2-1
101、所示)。任何工程方法(包括軟件工程)必須以有組織的質(zhì)量保證為基礎(chǔ)。全面的質(zhì)量管理和類似的理念刺激了不斷的過程改進,正是這種改進導(dǎo)致了更加成熟的軟件工程方法的不斷出現(xiàn)。支持軟件工程的根基就在于對質(zhì)量的關(guān)注。</p><p> 軟件工程的基層是過程層。軟件工程過程是將技術(shù)層結(jié)合在一起的凝聚力,使得計算機軟件能夠被合理地和及時地開發(fā)出來。過程定義了一組關(guān)鍵過程區(qū)域的框架(KPAs)[PAY93],這對于軟件工程技術(shù)的
102、有效應(yīng)用是必須的。關(guān)鍵過程區(qū)域構(gòu)成了軟件項目的管理控制的基礎(chǔ),并且確立了上下各區(qū)域之間的關(guān)系,其中規(guī)定了技術(shù)方法的采用、工程產(chǎn)品(模型、文檔、數(shù)據(jù)、報告、表格等)的產(chǎn)生、里程碑的建立、質(zhì)量的保證及變化的適當(dāng)管理。</p><p> 軟件工程的方法層提供了建造軟件在技術(shù)上需要“如何做”。方法涵蓋了一系列的任務(wù):需求分析、設(shè)計、編程、測試和維護。軟件工程方法依賴于一組基本原則,這些原則控制了每一個技術(shù)區(qū)域,且包含建
103、模活動和其他描述技術(shù)。</p><p> 軟件工程的工具層對過程和方法提供了自動的或半自動的支持。當(dāng)這些工具被集成起來使得一個工具產(chǎn)生的信息可被另外一個工具使用時,一個支持軟件開發(fā)的系統(tǒng)就建立了,稱為計算機輔助軟件工程(CASE)。CASE集成了軟件、硬件和一個軟件工程數(shù)據(jù)庫(一個倉庫,其中包含了關(guān)于分析、設(shè)計、編程和測試的重要信息),從而形成了一個軟件工程環(huán)境,它類似于硬件的CAD/CAE(計算機輔助設(shè)計/工
104、程)。</p><p> 2.1.2軟件工程的一般視圖 </p><p> 工程是對技術(shù)(或社會)實體的分析、設(shè)計、建造、驗證和管理。拋開要工程化的實體,下列問題是必須首先回答的:</p><p> ·要解決的問題是什么?</p><p> ·要用于解決該問題的實體具有什么特點?</p>&
105、lt;p> ·如何實現(xiàn)該實體(解決方案)?</p><p><b> ·如何建造該實體?</b></p><p> ·采用什么方法去發(fā)現(xiàn)該實體設(shè)計和建造過程中產(chǎn)生的錯誤?</p><p> ·當(dāng)該實體的用戶要求修改、適應(yīng)和增強時,如何支持這些活動?</p><p>
106、 本書全文只針對一個實體——計算機軟件。要適當(dāng)?shù)亟ㄔ煲粋€軟件,軟件開發(fā)過程是必須定義的。本節(jié)給出了軟件過程的一般性特點,本章的以后幾節(jié)進一步闡述了特定的過程模型。</p><p> 如果不考慮應(yīng)用領(lǐng)域、項目規(guī)模和復(fù)雜性,與軟件工程相關(guān)的工作可分為三個一般的階段。每一個階段回答了上述的一個或幾個問題。</p><p> 定義階段集中于“做什么”。即在定義過程中,軟件開發(fā)人員試圖弄清楚要處
107、理什么信息,預(yù)期完成什么樣的功能和性能,希望有什么樣的系統(tǒng)行為,建立什么樣的界面,有什么設(shè)計約束,以及定義一個成功系統(tǒng)的確認標(biāo)準(zhǔn)是什么。即定義系統(tǒng)和軟件的關(guān)鍵需求。雖然在定義階段采用的方法取決于使用的軟件工程范型(或范型的組合),但在某種程度上均有三個主要任務(wù):系統(tǒng)或信息工程(見第10章),軟件項目計劃(第3章到第7章),和需求分析(第11,12和20章)。</p><p> 開發(fā)階段集中于“如何做”。即在開發(fā)
108、過程中,軟件工程師試圖定義數(shù)據(jù)如何結(jié)構(gòu)化,功能如何轉(zhuǎn)換為軟件體系結(jié)構(gòu),過程細節(jié)如何實現(xiàn),界面如何表示,設(shè)計如何轉(zhuǎn)換成程序設(shè)計語言(或非過程語言),測試如何執(zhí)行。在開發(fā)階段采用的方法可以不同,但都有三個特定的任務(wù):軟件設(shè)計(第14、15和21章),代碼生成,和軟件測試(第16、17和22章)。</p><p> 維護階段集中于“改變”,與以下幾種情況相關(guān):糾正錯誤;隨著軟件環(huán)境的演化,而要求的適應(yīng)性修改;及由于用
109、戶需求的變化而帶來的增強性修改。維護階段重復(fù)定義和開發(fā)階段的步驟,但卻是在已有軟件的基礎(chǔ)上發(fā)生的。在維護階段可能遇到四類修改要完成:</p><p> 糾錯:即使有最好的質(zhì)量保證機制,用戶還是有可能發(fā)現(xiàn)軟件中的錯誤。糾錯性維護是為了改正錯誤而使軟件發(fā)生變化。</p><p> 適應(yīng):隨著時間的推移,原來的軟件被開發(fā)的環(huán)境(如CPU、操作系統(tǒng)、商業(yè)規(guī)則、外部產(chǎn)品特征)可能發(fā)生了變化。適應(yīng)
110、性維護是為了適應(yīng)這些外部環(huán)境的變化而修改軟件。</p><p> 增強:隨著軟件的使用,用戶可能認識到某些新功能會產(chǎn)生更好的效益。完善性維護是由于擴展了原來的功能需求而修改軟件。</p><p> 預(yù)防:計算機軟件由于修改而逐漸退化,因此,預(yù)防性維護,常常稱為軟件再工程,就必須實行,以使軟件能夠滿足其最終用戶的要求。本質(zhì)上講,預(yù)防性維護對計算機程序的修改,可使得能夠更好地糾錯軟件的錯誤
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件工程實踐者的研究方法
- 軟件工程——實踐者的研究方法
- 軟件工程——實踐者的研究方法
- 外文翻譯--《軟件工程-實踐者的研究方法》
- tp311.5 software engineering, a practitioner's approach 7th(漢譯:軟件工程,實踐者的研究方法)
- 率先“實踐者”
- 平民外交的實踐者
- 軟件工程實踐題
- 軟件工程方法
- 當(dāng)好宣傳者、推動者、實踐者
- 軟件工程的應(yīng)用與實踐
- 和諧美學(xué)建設(shè)的實踐者
- 軟件工程實踐導(dǎo)論-read
- 面向?qū)ο蟮臋C械CAD軟件工程方法研究與實踐.pdf
- 木子貍――向往自由的實踐者
- 做課程改革清醒的實踐者
- 2013軟件工程課程實踐要求
- 2013軟件工程課程實踐要求
- 2013軟件工程課程實踐要求
- 軟件工程概論實踐大作業(yè)
評論
0/150
提交評論