軟件工程導(dǎo)論課件_第1頁
軟件工程導(dǎo)論課件_第2頁
軟件工程導(dǎo)論課件_第3頁
軟件工程導(dǎo)論課件_第4頁
軟件工程導(dǎo)論課件_第5頁
已閱讀5頁,還剩79頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章軟件工程引論1.1軟件產(chǎn)品的概念與特征1.2軟件危機(jī)1.3軟件工程的產(chǎn)生及其發(fā)展第1章軟件工程引論1.1軟件產(chǎn)品的概念與特征11.1軟件產(chǎn)品的概念與特征1.1.1軟件產(chǎn)品的概念與分類就本質(zhì)而言,軟件就是一個(gè)信息轉(zhuǎn)換器,它的功能不外是產(chǎn)生、管理、獲取、修改、顯示或轉(zhuǎn)換信息。它擔(dān)任著雙重角色,首先,它是一種產(chǎn)品,表達(dá)了由計(jì)算機(jī)硬件體現(xiàn)的計(jì)算潛能;其次,它又是開發(fā)和運(yùn)行產(chǎn)品的載體,是計(jì)算機(jī)控制(操作系統(tǒng))、信息通信(網(wǎng)絡(luò))的基礎(chǔ),也是創(chuàng)建和控制其他軟件(軟件工具和開發(fā)環(huán)境)的基礎(chǔ)。1.1軟件產(chǎn)品的概念與特征1.1.1軟件產(chǎn)品的概念2對于軟件的一種公認(rèn)的解釋是:軟件是計(jì)算機(jī)系統(tǒng)中與硬件相互依存的另一部分,它是包括程序、數(shù)據(jù)及其相關(guān)文檔的完整集合。其中,程序是為實(shí)現(xiàn)設(shè)計(jì)的功能和性能要求而編寫的指令序列;數(shù)據(jù)是使指令能夠正常操縱信息的數(shù)據(jù)結(jié)構(gòu);文檔是與程序開發(fā)、維護(hù)和使用有關(guān)的圖文資料。根據(jù)用途劃分,軟件可以大致劃分成如下類別:對于軟件的一種公認(rèn)的解釋是:軟件是計(jì)算機(jī)系統(tǒng)中與硬件3(1)系統(tǒng)軟件:就一般情況來說,系統(tǒng)軟件是為其他軟件服務(wù)的軟件。系統(tǒng)軟件與計(jì)算機(jī)硬件交互頻繁,處理大量的確定或不確定的復(fù)雜數(shù)據(jù),往往需要具有多用戶支持、資源精細(xì)調(diào)度、并發(fā)操作管理、多種外部設(shè)備接口支持等項(xiàng)功能。(2)實(shí)時(shí)軟件:管理、分析、控制現(xiàn)實(shí)世界中所發(fā)生的事件的軟件稱為實(shí)時(shí)軟件。它一般有數(shù)據(jù)采集、數(shù)據(jù)分析、輸出控制等三方面的功能。實(shí)時(shí)軟件需要保持一個(gè)現(xiàn)實(shí)任務(wù)可以接受的響應(yīng)時(shí)間,即必須保證能夠在嚴(yán)格限定的時(shí)間范圍內(nèi)對輸入做出響應(yīng)。(1)系統(tǒng)軟件:就一般情況來說,系統(tǒng)軟件是為其他軟4(3)商業(yè)管理軟件:商業(yè)信息處理是最大的軟件應(yīng)用領(lǐng)域,包括常規(guī)的數(shù)據(jù)處理軟件和一些交互式的計(jì)算處理(如POS軟件)軟件。它的基本功能是將已有的數(shù)據(jù)重新構(gòu)造,變換成一種可以輔助商業(yè)操作和管理決策的形式。在這個(gè)過程中,幾乎都要涉及到對于大型數(shù)據(jù)庫的訪問。各類管理信息系統(tǒng)(MIS)、企業(yè)資源計(jì)劃(ERP)、客戶關(guān)系管理(CRM)等都是典型的商業(yè)管理軟件。(3)商業(yè)管理軟件:商業(yè)信息處理是最大的軟件應(yīng)用領(lǐng)5(4)工程與科學(xué)計(jì)算軟件:此類軟件的特征是要實(shí)現(xiàn)特定的“數(shù)值分析”算法。例如離散傅立葉變換、有限元分析、演化計(jì)算等等。CAD/CAM軟件一般也可以歸屬到這一類型中來。(5)嵌入式軟件:駐留在專用智能產(chǎn)品的內(nèi)存中,用于控制這些產(chǎn)品進(jìn)行正常工作,完成很有限、很專業(yè)的功能的軟件。例如各類智能檢測儀表、數(shù)碼相機(jī)、移動電話、微波爐等智能產(chǎn)品都必須在嵌入式軟件的支持下才能正常工作。(4)工程與科學(xué)計(jì)算軟件:此類軟件的特征是要實(shí)現(xiàn)6(6)人工智能軟件:利用非數(shù)值算法去解決復(fù)雜問題的軟件。各類專家系統(tǒng)、模式識別軟件、人工神經(jīng)網(wǎng)絡(luò)軟件都屬于人工智能軟件。(7)個(gè)人計(jì)算機(jī)軟件:文字處理系統(tǒng)、電子表格、游戲娛樂軟件等等。此外,還可以根據(jù)軟件的規(guī)模(代碼行及開發(fā)工作量,如表1.1)、軟件的工作方式、使用頻度、失效后造成的影響等對軟件產(chǎn)品進(jìn)行分類。(6)人工智能軟件:利用非數(shù)值算法去解決復(fù)雜問題的7表1.1根據(jù)規(guī)模進(jìn)行軟件分類軟件規(guī)模類別參加人員數(shù)開發(fā)期限產(chǎn)品規(guī)模(源代碼行數(shù))微型11~4周0.5?k小型11~6月1~2?k中型2~51~2年5~50?k大型5~202~3年50~100?k甚大型100~10004~5年1?M極大型2000~50005~10年1~10?M表1.1根據(jù)規(guī)模進(jìn)行軟件分類軟件規(guī)模類別參加人員數(shù)開發(fā)期81.1.2軟件產(chǎn)品的特征在制造硬件時(shí),人的創(chuàng)造性的勞動過程(分析、設(shè)計(jì)、建造、測試)能夠完全轉(zhuǎn)換成物理的形式,但軟件是邏輯的而不是物理的產(chǎn)品,因此軟件具有和硬件完全不同的特征:(1)軟件是一種邏輯實(shí)體,具有抽象性。我們可以把軟件保存在媒體介質(zhì)上,但卻無法直接看到軟件的形態(tài),因而必須通過運(yùn)行、觀察、分析、思考、判斷才能夠了解軟件的功能、性能及其他特性。換句話說,軟件產(chǎn)品具有明顯的非可視特征。1.1.2軟件產(chǎn)品的特征9(2)軟件的生產(chǎn)與硬件不同。軟件是由開發(fā)或工程化而形成的,不是由傳統(tǒng)意義上的制造過程生產(chǎn)的。雖然軟件開發(fā)和硬件制造之間有一些相似之處,可是兩者在本質(zhì)上是不同的。這兩者都能夠通過良好的設(shè)計(jì)獲得高質(zhì)量的產(chǎn)品,但即使有了良好的設(shè)計(jì)和優(yōu)秀的樣品,硬件在批量制造過程中仍然可能引入質(zhì)量問題,這種情況對于軟件而言幾乎不存在。軟件在開發(fā)完畢,形成為產(chǎn)品之后,其批量制造過程只是簡單的拷貝/復(fù)制;軟件的開發(fā)和硬件的制造都依賴于人,但參與者和他們完成的工作之間的關(guān)系不同;兩者的終極目的都是建造產(chǎn)品,但方法不同;軟件的成本集中在開發(fā)過程上,而硬件生產(chǎn)的成本更多地表現(xiàn)在原材料消耗上。因此,軟件項(xiàng)目開發(fā)過程不能完全像硬件制造過程那樣來管理。(2)軟件的生產(chǎn)與硬件不同。軟件是由開發(fā)或工程化而10(3)軟件產(chǎn)品不會“磨損”。和硬件產(chǎn)品類似,軟件產(chǎn)品也會出現(xiàn)故障。所不同的是,硬件產(chǎn)品的故障多來自外在條件導(dǎo)致的“磨損”或“老化”,而軟件產(chǎn)品如果發(fā)生故障,無一例外的是在設(shè)計(jì)開發(fā)過程中留有隱患。因此,硬件的故障可以通過簡單的更換部件解決,而軟件的故障必須通過全面的軟件維護(hù)活動才有望克服。同時(shí),不完善的維護(hù)活動又可能在軟件中注入新的故障,導(dǎo)致軟件質(zhì)量的“退化”。也就是說,軟件故障的修復(fù)要比硬件故障的修復(fù)復(fù)雜得多。因此,衡量軟件產(chǎn)品質(zhì)量的一個(gè)重要指標(biāo)就是它的“可維護(hù)性”。圖1.1是軟、硬件產(chǎn)品的失效率曲線。(3)軟件產(chǎn)品不會“磨損”。和硬件產(chǎn)品類似,軟件產(chǎn)11圖1.1軟件/硬件產(chǎn)品失效率曲線圖1.1軟件/硬件產(chǎn)品失效率曲線121.1.3軟件發(fā)展的階段劃分自從20世紀(jì)40年代第一臺計(jì)算機(jī)問世以來,就有了“程序”的概念,可以認(rèn)為它是軟件的前身。經(jīng)過了幾十年的發(fā)展,人們對軟件有了更為深刻的認(rèn)識,在這幾十年中,軟件開發(fā)經(jīng)歷了三個(gè)發(fā)展階段:20世紀(jì)50~60年代屬于程序設(shè)計(jì)階段;20世紀(jì)60~70年代為程序系統(tǒng)階段;20世紀(jì)70年代之后進(jìn)入軟件工程階段。各階段的特點(diǎn)與區(qū)別見表1.2。1.1.3軟件發(fā)展的階段劃分13表1.2計(jì)算機(jī)軟件發(fā)展的三個(gè)階段及其特點(diǎn)階段特點(diǎn)程序設(shè)計(jì)程序系統(tǒng)軟件工程軟件所指程序程序及說明書程序、文檔、數(shù)據(jù)主要程序設(shè)計(jì)語言匯編及機(jī)器語言高級語言軟件語言*軟件工作范圍程序編寫設(shè)計(jì)和測試整個(gè)軟件生命周期需求者程序設(shè)計(jì)者本人少數(shù)用戶市場用戶開發(fā)軟件的組織個(gè)人開發(fā)小組開發(fā)小組及大、中型開發(fā)機(jī)構(gòu)軟件規(guī)模小型中、小型大、中、小型表1.2計(jì)算機(jī)軟件發(fā)展的三個(gè)階段及其特點(diǎn)14階段特點(diǎn)程序設(shè)計(jì)程序系統(tǒng)軟件工程決定質(zhì)量的因素個(gè)人技術(shù)小組技術(shù)水平技術(shù)與管理水平開發(fā)技術(shù)和手段子程序、程序庫結(jié)構(gòu)化程序設(shè)計(jì)數(shù)據(jù)庫、開發(fā)工具、集成開發(fā)環(huán)境、工程化開發(fā)方法、標(biāo)準(zhǔn)和規(guī)范、網(wǎng)絡(luò)及分布式開發(fā)、面向?qū)ο蠹夹g(shù)、計(jì)算機(jī)輔助軟件工程維護(hù)責(zé)任者程序設(shè)計(jì)者開發(fā)小組專職維護(hù)人員硬件的特征高價(jià)、存儲量小、可靠性差降價(jià),速度、容量和可靠性明顯提高向超高速、大容量、網(wǎng)絡(luò)化、微型化方向發(fā)展軟件的特征完全不受重視軟件的技術(shù)發(fā)展不能滿足需求,出現(xiàn)軟件危機(jī)開發(fā)技術(shù)有進(jìn)步,但仍未完全擺脫軟件危機(jī)表1.2計(jì)算機(jī)軟件發(fā)展的三個(gè)階段及其特點(diǎn)階段程序設(shè)計(jì)程序系統(tǒng)軟件工程決定質(zhì)量的151.2軟件危機(jī)1.2.1軟件危機(jī)及其表現(xiàn)現(xiàn)代計(jì)算機(jī)應(yīng)用系統(tǒng)中,軟件的地位日益重要和突出。如何滿足日益增長的軟件需求,如何維護(hù)應(yīng)用中的大量已有軟件,已經(jīng)成為了計(jì)算機(jī)應(yīng)用系統(tǒng)進(jìn)一步發(fā)展的瓶頸。1968年,北大西洋公約組織的計(jì)算機(jī)科學(xué)家們在聯(lián)邦德國召開的國際會議上討論了軟件危機(jī)問題,同時(shí)也是在這個(gè)會議上提出了“軟件工程”這個(gè)名詞,導(dǎo)致了一門新的工程學(xué)科的正式誕生。簡單地說,所謂軟件危機(jī),就是指在軟件開發(fā)和軟件維護(hù)過程中所存在的一系列嚴(yán)重問題。具體地說,軟件危機(jī)具有如下一些表現(xiàn):1.2軟件危機(jī)1.2.1軟件危機(jī)及其表現(xiàn)16(1)軟件開發(fā)沒有真正的計(jì)劃性,對軟件開發(fā)進(jìn)度和軟件開發(fā)成本的估計(jì)常常很不準(zhǔn)確,計(jì)劃的制定帶有很大的盲目因素,因此工期超出、成本失控的現(xiàn)象經(jīng)常困擾著軟件開發(fā)者。(2)對于軟件需求信息的獲取常常不充分,軟件產(chǎn)品往往不能真正地滿足用戶的實(shí)際需求。(3)缺乏良好的軟件質(zhì)量評測手段,從而導(dǎo)致軟件產(chǎn)品的質(zhì)量常常得不到保證。(1)軟件開發(fā)沒有真正的計(jì)劃性,對軟件開發(fā)進(jìn)度和軟17(4)對于軟件的可理解性、可維護(hù)性認(rèn)識不夠;軟件的可復(fù)用性、可維護(hù)性不如人意。有些軟件因?yàn)檫^于“個(gè)性化”,甚至是難以理解的,更談不上進(jìn)行維護(hù)。缺乏可復(fù)用性引起的大量重復(fù)性勞動極大地降低了軟件的開發(fā)效率。(5)軟件開發(fā)過程沒有實(shí)現(xiàn)“規(guī)范化”,缺乏必要的文檔資料或者文檔資料不合格、不準(zhǔn)確,難以進(jìn)行專業(yè)維護(hù)。(4)對于軟件的可理解性、可維護(hù)性認(rèn)識不夠;軟件的18(6)軟件開發(fā)的人力成本持續(xù)上升,如美國在1995年的軟件開發(fā)成本已經(jīng)占到了計(jì)算機(jī)系統(tǒng)成本的90%(如圖1.2所示)。(7)缺乏自動化的軟件開發(fā)技術(shù),軟件開發(fā)的生產(chǎn)率依然低下,遠(yuǎn)遠(yuǎn)滿足不了急劇增長的軟件需求(如圖1.3所示)。(6)軟件開發(fā)的人力成本持續(xù)上升,如美國在199519圖1.2計(jì)算機(jī)系統(tǒng)硬件、軟件成本比例變化圖1.2計(jì)算機(jī)系統(tǒng)硬件、軟件成本比例變化20圖1.3軟件技術(shù)的發(fā)展落后于需求

圖1.3軟件技術(shù)的發(fā)展落后于需求21軟件危機(jī)曾經(jīng)是歷史上的陰影,目前軟件工程界也仍然在一定程度上受到它的影響。軟件工程概念的提出,正是為了克服軟件危機(jī)。自1968年以來,隨著軟件工程學(xué)的不斷發(fā)展,軟件危機(jī)得到了一定程度的遏制,但還遠(yuǎn)遠(yuǎn)沒有被徹底解決?!禩heStandishGroup.Chaos.1995.》一文報(bào)告了20世紀(jì)90年代中期美國商用軟件產(chǎn)業(yè)的情況:1995年美國公司取消了810億美元的軟件項(xiàng)目;在所考察的軟件項(xiàng)目中,在完成前就取消了其中的31%;53%的軟件項(xiàng)目進(jìn)度拖延,通常拖延的時(shí)間超過預(yù)定工期50%以上;只有9%的大型軟件項(xiàng)目能夠及時(shí)交付且費(fèi)用不超支(對中型和小型軟件公司來說這一數(shù)據(jù)為16%)。軟件危機(jī)曾經(jīng)是歷史上的陰影,目前軟件工程界也仍然在一221.2.2產(chǎn)生軟件危機(jī)的原因軟件危機(jī)的存在是不爭的事實(shí)。產(chǎn)生軟件危機(jī)的原因可以歸納為主、客觀兩個(gè)方面。從客觀上來看,軟件不同于硬件,它的生產(chǎn)過程和產(chǎn)品都具有明顯的“不可視”特征,這就導(dǎo)致在完成編碼并且上機(jī)運(yùn)行之前,對于軟件開發(fā)過程的進(jìn)展情況較難衡量,軟件產(chǎn)品的質(zhì)量也較難進(jìn)行先期評價(jià),因此,對于開發(fā)軟件的過程進(jìn)行管理和控制比較困難。在軟件工程的早期,制定詳細(xì)的開發(fā)計(jì)劃并且進(jìn)行全程跟蹤調(diào)控,對于所有的階段產(chǎn)品和階段工作進(jìn)展進(jìn)行技術(shù)審查和管理復(fù)審,可望在一定程度上克服“開發(fā)過程不可視”造成的消極影響。1.2.2產(chǎn)生軟件危機(jī)的原因23此外,軟件運(yùn)行過程中如果發(fā)現(xiàn)了錯(cuò)誤,那么必然是遇到了在開發(fā)時(shí)期(分析、設(shè)計(jì)、編碼過程)引入的,在檢測過程中沒有能夠檢查出來的故障。對于此類故障的維護(hù),通常意味著要修改早期的分析結(jié)果、設(shè)計(jì)結(jié)果并調(diào)整編碼。由于軟件產(chǎn)品的不可視特征,維護(hù)過程不像硬件產(chǎn)品維護(hù)時(shí)只要簡單的更換損壞部件那樣容易,這在客觀上造成了軟件難以維護(hù)的結(jié)果。利用足夠的文檔資料使不可視的產(chǎn)品可視化,有助于提升軟件產(chǎn)品的可理解性和可維護(hù)性。此外,軟件運(yùn)行過程中如果發(fā)現(xiàn)了錯(cuò)誤,那么必然是遇到了24從主觀上分析,導(dǎo)致軟件危機(jī)發(fā)生的另一大原因,可以歸于在計(jì)算機(jī)系統(tǒng)發(fā)展的早期,軟件開發(fā)的“個(gè)體化”特點(diǎn),主要表現(xiàn)為忽視軟件需求分析的重要性、忽視軟件的可理解性、文檔不完備、輕視軟件的可維護(hù)性、過分強(qiáng)調(diào)編碼技巧等等方面。只有軟件的用戶才真正了解他們自己的需求。而且應(yīng)當(dāng)承認(rèn),用戶一開始并不見得能夠清晰、準(zhǔn)確、無二意地表達(dá)自己的需求。軟件開發(fā)人員需要做大量的、深入細(xì)致的調(diào)研工作,引導(dǎo)用戶逐步準(zhǔn)確、具體地描述軟件的需求,才能夠得到對問題、目標(biāo)的正確認(rèn)識,從而獲得解決問題的恰當(dāng)出發(fā)點(diǎn),有望開發(fā)出真正能夠滿足用戶需求的軟件產(chǎn)品。在對用戶的需求沒有清楚的認(rèn)識時(shí)就倉促進(jìn)行程序編寫,最終必然會導(dǎo)致開發(fā)工作的失敗。從主觀上分析,導(dǎo)致軟件危機(jī)發(fā)生的另一大原因,可以歸于25一般來說,軟件產(chǎn)品從策劃、定義、開發(fā)、使用與維護(hù)直到最后廢棄,要經(jīng)過一個(gè)漫長的時(shí)期,通常把這個(gè)時(shí)期稱為軟件的“生命周期”??梢詫⑸芷诜肿鳌败浖x”、“軟件開發(fā)”和“運(yùn)行與維護(hù)”三個(gè)階段。在軟件定義階段中,主要進(jìn)行軟件目標(biāo)的策劃、可行性研究和軟件的需求分析工作,通過和用戶多次交流,在所要開發(fā)的軟件必須“作什么”方面和用戶達(dá)成一致(當(dāng)然在開發(fā)過程中也允許在嚴(yán)格的控制下進(jìn)行需求變更)。一般來說,軟件產(chǎn)品從策劃、定義、開發(fā)、使用與維護(hù)直到26軟件被定義之后,進(jìn)入開發(fā)階段,主要對軟件的體系架構(gòu)、數(shù)據(jù)結(jié)構(gòu)和主要算法進(jìn)行設(shè)計(jì)和編碼實(shí)現(xiàn)。對于編碼結(jié)果,還要按照規(guī)范進(jìn)行測試后,才能最終交付使用。如前所述,在開發(fā)階段也可能對于此前不夠準(zhǔn)確的軟件定義結(jié)果進(jìn)行調(diào)整。統(tǒng)計(jì)數(shù)據(jù)表明,在典型的軟件工程過程中,編碼工作量大約只占軟件開發(fā)全部工作量的15%~20%。軟件被定義之后,進(jìn)入開發(fā)階段,主要對軟件的體系架構(gòu)、27軟件的運(yùn)行與維護(hù)階段在軟件生命周期中占據(jù)的比例最大。在軟件運(yùn)行過程中,分析和設(shè)計(jì)階段的一些遺留缺陷可能會逐步暴露;運(yùn)行環(huán)境的演變也會對運(yùn)行中的軟件提出變更要求;用戶新需求的提出則常常要求擴(kuò)充現(xiàn)有軟件的功能或者改進(jìn)其性能,所有這些要求與問題都必須通過“軟件維護(hù)”工作去解決。在維護(hù)過程中,必須注意保持所有軟件工作產(chǎn)品之間的一致性。針對不同的需求,維護(hù)工作一般可以分為糾錯(cuò)性維護(hù)、適應(yīng)性維護(hù)、擴(kuò)充性維護(hù)和預(yù)防性維護(hù)等不同類型。軟件的運(yùn)行與維護(hù)階段在軟件生命周期中占據(jù)的比例最大。28作為軟件,應(yīng)當(dāng)有一個(gè)完整的配置。Boehm(美國著名的軟件工程專家,加州州立大學(xué)教授)指出,“軟件是程序以及開發(fā)、使用、維護(hù)程序所需要的所有文檔”。所以,軟件產(chǎn)品除包括程序之外,應(yīng)當(dāng)包括完整、準(zhǔn)確、翔實(shí)的文檔資料。主要的文檔應(yīng)當(dāng)包括“需求規(guī)格說明書”、“體系結(jié)構(gòu)設(shè)計(jì)說明書”、“詳細(xì)設(shè)計(jì)說明書”、“安裝手冊”、“操作手冊”、“系統(tǒng)管理員手冊”等。缺乏必要的配置文檔,將嚴(yán)重影響軟件的可理解性,從而給軟件的維護(hù)造成嚴(yán)重障礙。做好包括項(xiàng)目策劃、可行性研究、需求分析三項(xiàng)內(nèi)容的軟件定義工作,是提高軟件質(zhì)量、降低軟件成本、保證開發(fā)進(jìn)度的關(guān)鍵環(huán)節(jié)。作為軟件,應(yīng)當(dāng)有一個(gè)完整的配置。Boehm(美國著名29值得注意的嚴(yán)重問題是,在軟件開發(fā)的不同階段進(jìn)行修改所付出的代價(jià)是極其不同的。在早期引入變動,涉及的面比較小,因而代價(jià)也比較低;在開發(fā)的中期,因?yàn)樵S多配置項(xiàng)(被標(biāo)識的工作產(chǎn)品)已經(jīng)完成,所以引入一個(gè)變動,就要對它所涉及的所有已經(jīng)完成的配置項(xiàng)進(jìn)行變更,不僅工作量大,而且邏輯上也更復(fù)雜,因此付出的代價(jià)劇增;如果在軟件“已經(jīng)完成”時(shí)再引入變更,更是要付出高得多的代價(jià)。根據(jù)美國一些軟件公司的統(tǒng)計(jì)資料,軟件開發(fā)后期引入一個(gè)變動比在早期引入相同變動所需付出的代價(jià)高2~3個(gè)數(shù)量級。圖1.4定性地描繪了在不同時(shí)期引入一個(gè)變動需要付出的代價(jià)的變動趨勢。圖1.5是美國貝爾實(shí)驗(yàn)室統(tǒng)計(jì)得出的定量結(jié)果。值得注意的嚴(yán)重問題是,在軟件開發(fā)的不同階段進(jìn)行修改所30圖1.4變更代價(jià)隨時(shí)間變化的趨勢示意圖1.4變更代價(jià)隨時(shí)間變化的趨勢示意31圖1.5改正一個(gè)問題需要付出的代價(jià)圖1.5改正一個(gè)問題需要付出的代價(jià)321.2.3解決軟件危機(jī)的途徑可以借鑒其他工程領(lǐng)域的成功經(jīng)驗(yàn),基于軟件危機(jī)產(chǎn)生的主、客觀原因,從軟件工程技術(shù)和軟件工程管理兩方面來采取措施,防范軟件危機(jī)的發(fā)生。軟件開發(fā)不是某種個(gè)體勞動的神秘技巧,而應(yīng)當(dāng)是一種組織良好、管理嚴(yán)密,分析、設(shè)計(jì)、編碼、測試、品保等各類人員協(xié)同配合、共同完成的工程項(xiàng)目。在軟件開發(fā)過程中,必須充分吸收和借鑒人類長期以來從事各種工程項(xiàng)目所積累的行之有效的原理、概念、技術(shù)和方法,特別要注意吸收幾十年來在計(jì)算機(jī)硬件研究和開發(fā)中積累的經(jīng)驗(yàn)、教訓(xùn)。1.2.3解決軟件危機(jī)的途徑33從管理層面上考慮,應(yīng)當(dāng)注意推廣和使用在實(shí)踐中總結(jié)出來的開發(fā)軟件的成功的技術(shù)和方法,并且探索更好的、更有效的技術(shù)和方法,注意積累軟件開發(fā)過程中的經(jīng)驗(yàn)數(shù)據(jù)財(cái)富,逐步消除在計(jì)算機(jī)系統(tǒng)早期發(fā)展階段形成的一些錯(cuò)誤概念和做法。建立適合于本組織的軟件工程規(guī)范;制定軟件開發(fā)中各個(gè)工作環(huán)節(jié)的流程文件、工作指南和階段工作產(chǎn)品模板;實(shí)施針對軟件開發(fā)全過程的計(jì)劃跟蹤和品質(zhì)管理活動;為每一項(xiàng)工程開發(fā)活動建立配置管理庫;實(shí)施嚴(yán)格的產(chǎn)品基線管理并建立組織的軟件過程數(shù)據(jù)庫和軟件財(cái)富庫;為各類員工及時(shí)提供必要的培訓(xùn)等等都是加強(qiáng)軟件開發(fā)活動管理工作的有效手段。從管理層面上考慮,應(yīng)當(dāng)注意推廣和使用在實(shí)踐中總結(jié)出來34從技術(shù)角度考慮,應(yīng)當(dāng)開發(fā)和使用更好的軟件開發(fā)工具,提高軟件開發(fā)效率和開發(fā)工作過程的規(guī)范化程度。在計(jì)算機(jī)軟件開發(fā)的各個(gè)階段,都有大量的繁瑣重復(fù)的工作要做,在適當(dāng)?shù)能浖ぞ叩妮o助下,開發(fā)人員可以把這類工作做的既快又好。目前廣為使用的統(tǒng)一建模語言(UML)、各種配置管理工具、缺陷管理工具和自動測試工具都在軟件工程活動中發(fā)揮了很好的作用。計(jì)算機(jī)輔助軟件工程(CASE)更是目前備受重視的一個(gè)旨在實(shí)現(xiàn)軟件開發(fā)自動化的新的領(lǐng)域。從技術(shù)角度考慮,應(yīng)當(dāng)開發(fā)和使用更好的軟件開發(fā)工具,提351.3軟件工程的產(chǎn)生及其發(fā)展1968年,北大西洋公約組織的計(jì)算機(jī)科學(xué)家們在原聯(lián)邦德國召開的國際會議上,針對軟件危機(jī)的嚴(yán)峻形勢,提出了把在其他工程領(lǐng)域中行之有效的一些工程學(xué)知識運(yùn)用到軟件開發(fā)過程中來,從管理和技術(shù)兩個(gè)方面研究如何更好地開發(fā)和維護(hù)計(jì)算機(jī)軟件的設(shè)想。這也就是軟件工程的基本思路。在這次會議上首次提出并使用了“軟件工程”這一術(shù)語。簡單地說,軟件工程是指導(dǎo)軟件開發(fā)和維護(hù)的工程學(xué)科。它的核心思想是采用工程的概念、原理、技術(shù)和方法來開發(fā)和維護(hù)軟件,把經(jīng)過實(shí)踐考驗(yàn)而證明是正確的管理技術(shù)和當(dāng)前能夠得到的最好的技術(shù)方法結(jié)合起來,從而大大提高軟件開發(fā)的成功率和生產(chǎn)率。許多計(jì)算機(jī)專家都曾經(jīng)描述過“軟件工程”的定義。1.3軟件工程的產(chǎn)生及其發(fā)展1968年,北大西洋36Boehm曾為軟件工程下過定義:“運(yùn)用現(xiàn)代科學(xué)技術(shù)知識來設(shè)計(jì)并構(gòu)造計(jì)算機(jī)程序及為開發(fā)、運(yùn)行和維護(hù)這些程序所必需的相關(guān)文件資料”。1983年,IEEE(電氣和電子工程師協(xié)會)給出的軟件工程定義為:“軟件工程是開發(fā)、運(yùn)行、維護(hù)和修復(fù)軟件的系統(tǒng)方法”。FritzBauer(美國著名的軟件工程專家)則給出了另一個(gè)關(guān)于軟件工程學(xué)的定義:“建立并使用完善的工程化原則,以較經(jīng)濟(jì)的手段獲得能在實(shí)際機(jī)器上有效運(yùn)行的可靠軟件的一系列方法”。Boehm曾為軟件工程下過定義:“運(yùn)用現(xiàn)代科學(xué)技術(shù)37后來又有一些從事軟件工程方法學(xué)研究的人陸續(xù)提出了許多更為完善的軟件工程的定義,但主要思想都是強(qiáng)調(diào)軟件開發(fā)過程中需要應(yīng)用工程化原則的重要性。IEEE給出了關(guān)于軟件工程的一個(gè)更加綜合的定義:(1)將系統(tǒng)化的、規(guī)范的、可度量的方法應(yīng)用于軟件的開發(fā)、運(yùn)行和維護(hù)過程。即將工程化方法應(yīng)用于軟件開發(fā)與維護(hù)過程中。(2)對上述方法的研究。后來又有一些從事軟件工程方法學(xué)研究的人陸續(xù)提出了許多38就內(nèi)容來看,軟件工程應(yīng)當(dāng)包括三個(gè)要素:方法、工具和過程。軟件工程方法為軟件開發(fā)提供了“如何做某項(xiàng)工作”的技術(shù)指南。它包括了多方面的任務(wù)。例如項(xiàng)目策劃和估算方法、軟件需求分析方法、體系結(jié)構(gòu)的設(shè)計(jì)方法、詳細(xì)設(shè)計(jì)方法、軟件測試方法等等。使得整個(gè)開發(fā)過程的每一種階段任務(wù)都能夠“有章可循”。軟件工程工具為軟件工程方法提供了自動的或半自動的軟件支撐環(huán)境。目前這樣的工具已經(jīng)有許多種,而且已經(jīng)有人把諸多軟件工程工具集成起來,使得一種工具產(chǎn)生的信息可以為其他工具所使用,形成了一種稱之為計(jì)算機(jī)輔助軟件工程(CASE)的軟件開發(fā)支撐環(huán)境。CASE把各種軟件工具、開發(fā)機(jī)器和一個(gè)存放開發(fā)過程信息的工程數(shù)據(jù)庫組合起來,形成了一個(gè)完整的軟件工程環(huán)境。就內(nèi)容來看,軟件工程應(yīng)當(dāng)包括三個(gè)要素:方法、工具和過39軟件工程中的“過程”是將軟件工程的方法和工具綜合起來以達(dá)到合理、及時(shí)地進(jìn)行計(jì)算機(jī)軟件開發(fā)的目的??梢詫④浖こ踢^程理解為軟件工程的工藝路線。過程定義了各種方法使用的順序、各階段要求交付的文檔資料、為保證質(zhì)量和控制軟件變更所需要的管理環(huán)節(jié)和在軟件開發(fā)各個(gè)階段完成的里程碑。針對軟件工程的基本要件,有許多計(jì)算機(jī)科學(xué)家進(jìn)行了詮釋,先后提出了100多條有關(guān)軟件工程的相關(guān)原則。著名軟件工程專家B.W.Boehm集眾家所長,并總結(jié)了TRW公司多年開發(fā)軟件的經(jīng)驗(yàn),在1983年提出了軟件工程的七項(xiàng)基本原則,作為保證軟件產(chǎn)品質(zhì)量和開發(fā)效率的最小集合。具體包括:軟件工程中的“過程”是將軟件工程的方法和工具綜合起來40(1)用分階段的生命周期計(jì)劃嚴(yán)格管理軟件工程過程。(2)堅(jiān)持在軟件工程過程中進(jìn)行階段評審。(3)實(shí)行嚴(yán)格的產(chǎn)品控制。(4)采用現(xiàn)代的開發(fā)技術(shù)進(jìn)行軟件的設(shè)計(jì)與開發(fā)。(5)工作結(jié)果應(yīng)當(dāng)是能夠清楚地審查的。(6)開發(fā)小組的人員應(yīng)該“少而精”。(7)承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性。(1)用分階段的生命周期計(jì)劃嚴(yán)格管理軟件工程過程。41這七條原則是互相獨(dú)立的、缺一不可的最小集合,同時(shí)又是相當(dāng)完備的。可以證明,其他已經(jīng)提出的100多條軟件工程原理都可以由這七條原則的任意組合蘊(yùn)含或派生。從首次提出“軟件工程”的概念開始,迄今已經(jīng)經(jīng)過了近半個(gè)世紀(jì),在此期間,計(jì)算機(jī)硬件、軟件技術(shù)領(lǐng)域都有了長足的發(fā)展,各種新產(chǎn)品、新技術(shù)、新方法、新工具不斷問世。伴隨著計(jì)算機(jī)科學(xué)與技術(shù)的進(jìn)步,軟件工程作為一門新興學(xué)科也同樣有了很大的發(fā)展。從傳統(tǒng)的軟件工程到面向?qū)ο蟮能浖こ?,從一般的軟件工程到凈室軟件工程,從軟件工程到軟件再工程,從人工軟件工程到?jì)算機(jī)輔助軟件工程,整個(gè)軟件工程學(xué)正在日趨走向成熟,并在計(jì)算機(jī)應(yīng)用領(lǐng)域中發(fā)揮著越來越大的作用。這七條原則是互相獨(dú)立的、缺一不可的最小集合,同時(shí)又是42第1章軟件工程引論1.1軟件產(chǎn)品的概念與特征1.2軟件危機(jī)1.3軟件工程的產(chǎn)生及其發(fā)展第1章軟件工程引論1.1軟件產(chǎn)品的概念與特征431.1軟件產(chǎn)品的概念與特征1.1.1軟件產(chǎn)品的概念與分類就本質(zhì)而言,軟件就是一個(gè)信息轉(zhuǎn)換器,它的功能不外是產(chǎn)生、管理、獲取、修改、顯示或轉(zhuǎn)換信息。它擔(dān)任著雙重角色,首先,它是一種產(chǎn)品,表達(dá)了由計(jì)算機(jī)硬件體現(xiàn)的計(jì)算潛能;其次,它又是開發(fā)和運(yùn)行產(chǎn)品的載體,是計(jì)算機(jī)控制(操作系統(tǒng))、信息通信(網(wǎng)絡(luò))的基礎(chǔ),也是創(chuàng)建和控制其他軟件(軟件工具和開發(fā)環(huán)境)的基礎(chǔ)。1.1軟件產(chǎn)品的概念與特征1.1.1軟件產(chǎn)品的概念44對于軟件的一種公認(rèn)的解釋是:軟件是計(jì)算機(jī)系統(tǒng)中與硬件相互依存的另一部分,它是包括程序、數(shù)據(jù)及其相關(guān)文檔的完整集合。其中,程序是為實(shí)現(xiàn)設(shè)計(jì)的功能和性能要求而編寫的指令序列;數(shù)據(jù)是使指令能夠正常操縱信息的數(shù)據(jù)結(jié)構(gòu);文檔是與程序開發(fā)、維護(hù)和使用有關(guān)的圖文資料。根據(jù)用途劃分,軟件可以大致劃分成如下類別:對于軟件的一種公認(rèn)的解釋是:軟件是計(jì)算機(jī)系統(tǒng)中與硬件45(1)系統(tǒng)軟件:就一般情況來說,系統(tǒng)軟件是為其他軟件服務(wù)的軟件。系統(tǒng)軟件與計(jì)算機(jī)硬件交互頻繁,處理大量的確定或不確定的復(fù)雜數(shù)據(jù),往往需要具有多用戶支持、資源精細(xì)調(diào)度、并發(fā)操作管理、多種外部設(shè)備接口支持等項(xiàng)功能。(2)實(shí)時(shí)軟件:管理、分析、控制現(xiàn)實(shí)世界中所發(fā)生的事件的軟件稱為實(shí)時(shí)軟件。它一般有數(shù)據(jù)采集、數(shù)據(jù)分析、輸出控制等三方面的功能。實(shí)時(shí)軟件需要保持一個(gè)現(xiàn)實(shí)任務(wù)可以接受的響應(yīng)時(shí)間,即必須保證能夠在嚴(yán)格限定的時(shí)間范圍內(nèi)對輸入做出響應(yīng)。(1)系統(tǒng)軟件:就一般情況來說,系統(tǒng)軟件是為其他軟46(3)商業(yè)管理軟件:商業(yè)信息處理是最大的軟件應(yīng)用領(lǐng)域,包括常規(guī)的數(shù)據(jù)處理軟件和一些交互式的計(jì)算處理(如POS軟件)軟件。它的基本功能是將已有的數(shù)據(jù)重新構(gòu)造,變換成一種可以輔助商業(yè)操作和管理決策的形式。在這個(gè)過程中,幾乎都要涉及到對于大型數(shù)據(jù)庫的訪問。各類管理信息系統(tǒng)(MIS)、企業(yè)資源計(jì)劃(ERP)、客戶關(guān)系管理(CRM)等都是典型的商業(yè)管理軟件。(3)商業(yè)管理軟件:商業(yè)信息處理是最大的軟件應(yīng)用領(lǐng)47(4)工程與科學(xué)計(jì)算軟件:此類軟件的特征是要實(shí)現(xiàn)特定的“數(shù)值分析”算法。例如離散傅立葉變換、有限元分析、演化計(jì)算等等。CAD/CAM軟件一般也可以歸屬到這一類型中來。(5)嵌入式軟件:駐留在專用智能產(chǎn)品的內(nèi)存中,用于控制這些產(chǎn)品進(jìn)行正常工作,完成很有限、很專業(yè)的功能的軟件。例如各類智能檢測儀表、數(shù)碼相機(jī)、移動電話、微波爐等智能產(chǎn)品都必須在嵌入式軟件的支持下才能正常工作。(4)工程與科學(xué)計(jì)算軟件:此類軟件的特征是要實(shí)現(xiàn)48(6)人工智能軟件:利用非數(shù)值算法去解決復(fù)雜問題的軟件。各類專家系統(tǒng)、模式識別軟件、人工神經(jīng)網(wǎng)絡(luò)軟件都屬于人工智能軟件。(7)個(gè)人計(jì)算機(jī)軟件:文字處理系統(tǒng)、電子表格、游戲娛樂軟件等等。此外,還可以根據(jù)軟件的規(guī)模(代碼行及開發(fā)工作量,如表1.1)、軟件的工作方式、使用頻度、失效后造成的影響等對軟件產(chǎn)品進(jìn)行分類。(6)人工智能軟件:利用非數(shù)值算法去解決復(fù)雜問題的49表1.1根據(jù)規(guī)模進(jìn)行軟件分類軟件規(guī)模類別參加人員數(shù)開發(fā)期限產(chǎn)品規(guī)模(源代碼行數(shù))微型11~4周0.5?k小型11~6月1~2?k中型2~51~2年5~50?k大型5~202~3年50~100?k甚大型100~10004~5年1?M極大型2000~50005~10年1~10?M表1.1根據(jù)規(guī)模進(jìn)行軟件分類軟件規(guī)模類別參加人員數(shù)開發(fā)期501.1.2軟件產(chǎn)品的特征在制造硬件時(shí),人的創(chuàng)造性的勞動過程(分析、設(shè)計(jì)、建造、測試)能夠完全轉(zhuǎn)換成物理的形式,但軟件是邏輯的而不是物理的產(chǎn)品,因此軟件具有和硬件完全不同的特征:(1)軟件是一種邏輯實(shí)體,具有抽象性。我們可以把軟件保存在媒體介質(zhì)上,但卻無法直接看到軟件的形態(tài),因而必須通過運(yùn)行、觀察、分析、思考、判斷才能夠了解軟件的功能、性能及其他特性。換句話說,軟件產(chǎn)品具有明顯的非可視特征。1.1.2軟件產(chǎn)品的特征51(2)軟件的生產(chǎn)與硬件不同。軟件是由開發(fā)或工程化而形成的,不是由傳統(tǒng)意義上的制造過程生產(chǎn)的。雖然軟件開發(fā)和硬件制造之間有一些相似之處,可是兩者在本質(zhì)上是不同的。這兩者都能夠通過良好的設(shè)計(jì)獲得高質(zhì)量的產(chǎn)品,但即使有了良好的設(shè)計(jì)和優(yōu)秀的樣品,硬件在批量制造過程中仍然可能引入質(zhì)量問題,這種情況對于軟件而言幾乎不存在。軟件在開發(fā)完畢,形成為產(chǎn)品之后,其批量制造過程只是簡單的拷貝/復(fù)制;軟件的開發(fā)和硬件的制造都依賴于人,但參與者和他們完成的工作之間的關(guān)系不同;兩者的終極目的都是建造產(chǎn)品,但方法不同;軟件的成本集中在開發(fā)過程上,而硬件生產(chǎn)的成本更多地表現(xiàn)在原材料消耗上。因此,軟件項(xiàng)目開發(fā)過程不能完全像硬件制造過程那樣來管理。(2)軟件的生產(chǎn)與硬件不同。軟件是由開發(fā)或工程化而52(3)軟件產(chǎn)品不會“磨損”。和硬件產(chǎn)品類似,軟件產(chǎn)品也會出現(xiàn)故障。所不同的是,硬件產(chǎn)品的故障多來自外在條件導(dǎo)致的“磨損”或“老化”,而軟件產(chǎn)品如果發(fā)生故障,無一例外的是在設(shè)計(jì)開發(fā)過程中留有隱患。因此,硬件的故障可以通過簡單的更換部件解決,而軟件的故障必須通過全面的軟件維護(hù)活動才有望克服。同時(shí),不完善的維護(hù)活動又可能在軟件中注入新的故障,導(dǎo)致軟件質(zhì)量的“退化”。也就是說,軟件故障的修復(fù)要比硬件故障的修復(fù)復(fù)雜得多。因此,衡量軟件產(chǎn)品質(zhì)量的一個(gè)重要指標(biāo)就是它的“可維護(hù)性”。圖1.1是軟、硬件產(chǎn)品的失效率曲線。(3)軟件產(chǎn)品不會“磨損”。和硬件產(chǎn)品類似,軟件產(chǎn)53圖1.1軟件/硬件產(chǎn)品失效率曲線圖1.1軟件/硬件產(chǎn)品失效率曲線541.1.3軟件發(fā)展的階段劃分自從20世紀(jì)40年代第一臺計(jì)算機(jī)問世以來,就有了“程序”的概念,可以認(rèn)為它是軟件的前身。經(jīng)過了幾十年的發(fā)展,人們對軟件有了更為深刻的認(rèn)識,在這幾十年中,軟件開發(fā)經(jīng)歷了三個(gè)發(fā)展階段:20世紀(jì)50~60年代屬于程序設(shè)計(jì)階段;20世紀(jì)60~70年代為程序系統(tǒng)階段;20世紀(jì)70年代之后進(jìn)入軟件工程階段。各階段的特點(diǎn)與區(qū)別見表1.2。1.1.3軟件發(fā)展的階段劃分55表1.2計(jì)算機(jī)軟件發(fā)展的三個(gè)階段及其特點(diǎn)階段特點(diǎn)程序設(shè)計(jì)程序系統(tǒng)軟件工程軟件所指程序程序及說明書程序、文檔、數(shù)據(jù)主要程序設(shè)計(jì)語言匯編及機(jī)器語言高級語言軟件語言*軟件工作范圍程序編寫設(shè)計(jì)和測試整個(gè)軟件生命周期需求者程序設(shè)計(jì)者本人少數(shù)用戶市場用戶開發(fā)軟件的組織個(gè)人開發(fā)小組開發(fā)小組及大、中型開發(fā)機(jī)構(gòu)軟件規(guī)模小型中、小型大、中、小型表1.2計(jì)算機(jī)軟件發(fā)展的三個(gè)階段及其特點(diǎn)56階段特點(diǎn)程序設(shè)計(jì)程序系統(tǒng)軟件工程決定質(zhì)量的因素個(gè)人技術(shù)小組技術(shù)水平技術(shù)與管理水平開發(fā)技術(shù)和手段子程序、程序庫結(jié)構(gòu)化程序設(shè)計(jì)數(shù)據(jù)庫、開發(fā)工具、集成開發(fā)環(huán)境、工程化開發(fā)方法、標(biāo)準(zhǔn)和規(guī)范、網(wǎng)絡(luò)及分布式開發(fā)、面向?qū)ο蠹夹g(shù)、計(jì)算機(jī)輔助軟件工程維護(hù)責(zé)任者程序設(shè)計(jì)者開發(fā)小組專職維護(hù)人員硬件的特征高價(jià)、存儲量小、可靠性差降價(jià),速度、容量和可靠性明顯提高向超高速、大容量、網(wǎng)絡(luò)化、微型化方向發(fā)展軟件的特征完全不受重視軟件的技術(shù)發(fā)展不能滿足需求,出現(xiàn)軟件危機(jī)開發(fā)技術(shù)有進(jìn)步,但仍未完全擺脫軟件危機(jī)表1.2計(jì)算機(jī)軟件發(fā)展的三個(gè)階段及其特點(diǎn)階段程序設(shè)計(jì)程序系統(tǒng)軟件工程決定質(zhì)量的571.2軟件危機(jī)1.2.1軟件危機(jī)及其表現(xiàn)現(xiàn)代計(jì)算機(jī)應(yīng)用系統(tǒng)中,軟件的地位日益重要和突出。如何滿足日益增長的軟件需求,如何維護(hù)應(yīng)用中的大量已有軟件,已經(jīng)成為了計(jì)算機(jī)應(yīng)用系統(tǒng)進(jìn)一步發(fā)展的瓶頸。1968年,北大西洋公約組織的計(jì)算機(jī)科學(xué)家們在聯(lián)邦德國召開的國際會議上討論了軟件危機(jī)問題,同時(shí)也是在這個(gè)會議上提出了“軟件工程”這個(gè)名詞,導(dǎo)致了一門新的工程學(xué)科的正式誕生。簡單地說,所謂軟件危機(jī),就是指在軟件開發(fā)和軟件維護(hù)過程中所存在的一系列嚴(yán)重問題。具體地說,軟件危機(jī)具有如下一些表現(xiàn):1.2軟件危機(jī)1.2.1軟件危機(jī)及其表現(xiàn)58(1)軟件開發(fā)沒有真正的計(jì)劃性,對軟件開發(fā)進(jìn)度和軟件開發(fā)成本的估計(jì)常常很不準(zhǔn)確,計(jì)劃的制定帶有很大的盲目因素,因此工期超出、成本失控的現(xiàn)象經(jīng)常困擾著軟件開發(fā)者。(2)對于軟件需求信息的獲取常常不充分,軟件產(chǎn)品往往不能真正地滿足用戶的實(shí)際需求。(3)缺乏良好的軟件質(zhì)量評測手段,從而導(dǎo)致軟件產(chǎn)品的質(zhì)量常常得不到保證。(1)軟件開發(fā)沒有真正的計(jì)劃性,對軟件開發(fā)進(jìn)度和軟59(4)對于軟件的可理解性、可維護(hù)性認(rèn)識不夠;軟件的可復(fù)用性、可維護(hù)性不如人意。有些軟件因?yàn)檫^于“個(gè)性化”,甚至是難以理解的,更談不上進(jìn)行維護(hù)。缺乏可復(fù)用性引起的大量重復(fù)性勞動極大地降低了軟件的開發(fā)效率。(5)軟件開發(fā)過程沒有實(shí)現(xiàn)“規(guī)范化”,缺乏必要的文檔資料或者文檔資料不合格、不準(zhǔn)確,難以進(jìn)行專業(yè)維護(hù)。(4)對于軟件的可理解性、可維護(hù)性認(rèn)識不夠;軟件的60(6)軟件開發(fā)的人力成本持續(xù)上升,如美國在1995年的軟件開發(fā)成本已經(jīng)占到了計(jì)算機(jī)系統(tǒng)成本的90%(如圖1.2所示)。(7)缺乏自動化的軟件開發(fā)技術(shù),軟件開發(fā)的生產(chǎn)率依然低下,遠(yuǎn)遠(yuǎn)滿足不了急劇增長的軟件需求(如圖1.3所示)。(6)軟件開發(fā)的人力成本持續(xù)上升,如美國在199561圖1.2計(jì)算機(jī)系統(tǒng)硬件、軟件成本比例變化圖1.2計(jì)算機(jī)系統(tǒng)硬件、軟件成本比例變化62圖1.3軟件技術(shù)的發(fā)展落后于需求

圖1.3軟件技術(shù)的發(fā)展落后于需求63軟件危機(jī)曾經(jīng)是歷史上的陰影,目前軟件工程界也仍然在一定程度上受到它的影響。軟件工程概念的提出,正是為了克服軟件危機(jī)。自1968年以來,隨著軟件工程學(xué)的不斷發(fā)展,軟件危機(jī)得到了一定程度的遏制,但還遠(yuǎn)遠(yuǎn)沒有被徹底解決。《TheStandishGroup.Chaos.1995.》一文報(bào)告了20世紀(jì)90年代中期美國商用軟件產(chǎn)業(yè)的情況:1995年美國公司取消了810億美元的軟件項(xiàng)目;在所考察的軟件項(xiàng)目中,在完成前就取消了其中的31%;53%的軟件項(xiàng)目進(jìn)度拖延,通常拖延的時(shí)間超過預(yù)定工期50%以上;只有9%的大型軟件項(xiàng)目能夠及時(shí)交付且費(fèi)用不超支(對中型和小型軟件公司來說這一數(shù)據(jù)為16%)。軟件危機(jī)曾經(jīng)是歷史上的陰影,目前軟件工程界也仍然在一641.2.2產(chǎn)生軟件危機(jī)的原因軟件危機(jī)的存在是不爭的事實(shí)。產(chǎn)生軟件危機(jī)的原因可以歸納為主、客觀兩個(gè)方面。從客觀上來看,軟件不同于硬件,它的生產(chǎn)過程和產(chǎn)品都具有明顯的“不可視”特征,這就導(dǎo)致在完成編碼并且上機(jī)運(yùn)行之前,對于軟件開發(fā)過程的進(jìn)展情況較難衡量,軟件產(chǎn)品的質(zhì)量也較難進(jìn)行先期評價(jià),因此,對于開發(fā)軟件的過程進(jìn)行管理和控制比較困難。在軟件工程的早期,制定詳細(xì)的開發(fā)計(jì)劃并且進(jìn)行全程跟蹤調(diào)控,對于所有的階段產(chǎn)品和階段工作進(jìn)展進(jìn)行技術(shù)審查和管理復(fù)審,可望在一定程度上克服“開發(fā)過程不可視”造成的消極影響。1.2.2產(chǎn)生軟件危機(jī)的原因65此外,軟件運(yùn)行過程中如果發(fā)現(xiàn)了錯(cuò)誤,那么必然是遇到了在開發(fā)時(shí)期(分析、設(shè)計(jì)、編碼過程)引入的,在檢測過程中沒有能夠檢查出來的故障。對于此類故障的維護(hù),通常意味著要修改早期的分析結(jié)果、設(shè)計(jì)結(jié)果并調(diào)整編碼。由于軟件產(chǎn)品的不可視特征,維護(hù)過程不像硬件產(chǎn)品維護(hù)時(shí)只要簡單的更換損壞部件那樣容易,這在客觀上造成了軟件難以維護(hù)的結(jié)果。利用足夠的文檔資料使不可視的產(chǎn)品可視化,有助于提升軟件產(chǎn)品的可理解性和可維護(hù)性。此外,軟件運(yùn)行過程中如果發(fā)現(xiàn)了錯(cuò)誤,那么必然是遇到了66從主觀上分析,導(dǎo)致軟件危機(jī)發(fā)生的另一大原因,可以歸于在計(jì)算機(jī)系統(tǒng)發(fā)展的早期,軟件開發(fā)的“個(gè)體化”特點(diǎn),主要表現(xiàn)為忽視軟件需求分析的重要性、忽視軟件的可理解性、文檔不完備、輕視軟件的可維護(hù)性、過分強(qiáng)調(diào)編碼技巧等等方面。只有軟件的用戶才真正了解他們自己的需求。而且應(yīng)當(dāng)承認(rèn),用戶一開始并不見得能夠清晰、準(zhǔn)確、無二意地表達(dá)自己的需求。軟件開發(fā)人員需要做大量的、深入細(xì)致的調(diào)研工作,引導(dǎo)用戶逐步準(zhǔn)確、具體地描述軟件的需求,才能夠得到對問題、目標(biāo)的正確認(rèn)識,從而獲得解決問題的恰當(dāng)出發(fā)點(diǎn),有望開發(fā)出真正能夠滿足用戶需求的軟件產(chǎn)品。在對用戶的需求沒有清楚的認(rèn)識時(shí)就倉促進(jìn)行程序編寫,最終必然會導(dǎo)致開發(fā)工作的失敗。從主觀上分析,導(dǎo)致軟件危機(jī)發(fā)生的另一大原因,可以歸于67一般來說,軟件產(chǎn)品從策劃、定義、開發(fā)、使用與維護(hù)直到最后廢棄,要經(jīng)過一個(gè)漫長的時(shí)期,通常把這個(gè)時(shí)期稱為軟件的“生命周期”??梢詫⑸芷诜肿鳌败浖x”、“軟件開發(fā)”和“運(yùn)行與維護(hù)”三個(gè)階段。在軟件定義階段中,主要進(jìn)行軟件目標(biāo)的策劃、可行性研究和軟件的需求分析工作,通過和用戶多次交流,在所要開發(fā)的軟件必須“作什么”方面和用戶達(dá)成一致(當(dāng)然在開發(fā)過程中也允許在嚴(yán)格的控制下進(jìn)行需求變更)。一般來說,軟件產(chǎn)品從策劃、定義、開發(fā)、使用與維護(hù)直到68軟件被定義之后,進(jìn)入開發(fā)階段,主要對軟件的體系架構(gòu)、數(shù)據(jù)結(jié)構(gòu)和主要算法進(jìn)行設(shè)計(jì)和編碼實(shí)現(xiàn)。對于編碼結(jié)果,還要按照規(guī)范進(jìn)行測試后,才能最終交付使用。如前所述,在開發(fā)階段也可能對于此前不夠準(zhǔn)確的軟件定義結(jié)果進(jìn)行調(diào)整。統(tǒng)計(jì)數(shù)據(jù)表明,在典型的軟件工程過程中,編碼工作量大約只占軟件開發(fā)全部工作量的15%~20%。軟件被定義之后,進(jìn)入開發(fā)階段,主要對軟件的體系架構(gòu)、69軟件的運(yùn)行與維護(hù)階段在軟件生命周期中占據(jù)的比例最大。在軟件運(yùn)行過程中,分析和設(shè)計(jì)階段的一些遺留缺陷可能會逐步暴露;運(yùn)行環(huán)境的演變也會對運(yùn)行中的軟件提出變更要求;用戶新需求的提出則常常要求擴(kuò)充現(xiàn)有軟件的功能或者改進(jìn)其性能,所有這些要求與問題都必須通過“軟件維護(hù)”工作去解決。在維護(hù)過程中,必須注意保持所有軟件工作產(chǎn)品之間的一致性。針對不同的需求,維護(hù)工作一般可以分為糾錯(cuò)性維護(hù)、適應(yīng)性維護(hù)、擴(kuò)充性維護(hù)和預(yù)防性維護(hù)等不同類型。軟件的運(yùn)行與維護(hù)階段在軟件生命周期中占據(jù)的比例最大。70作為軟件,應(yīng)當(dāng)有一個(gè)完整的配置。Boehm(美國著名的軟件工程專家,加州州立大學(xué)教授)指出,“軟件是程序以及開發(fā)、使用、維護(hù)程序所需要的所有文檔”。所以,軟件產(chǎn)品除包括程序之外,應(yīng)當(dāng)包括完整、準(zhǔn)確、翔實(shí)的文檔資料。主要的文檔應(yīng)當(dāng)包括“需求規(guī)格說明書”、“體系結(jié)構(gòu)設(shè)計(jì)說明書”、“詳細(xì)設(shè)計(jì)說明書”、“安裝手冊”、“操作手冊”、“系統(tǒng)管理員手冊”等。缺乏必要的配置文檔,將嚴(yán)重影響軟件的可理解性,從而給軟件的維護(hù)造成嚴(yán)重障礙。做好包括項(xiàng)目策劃、可行性研究、需求分析三項(xiàng)內(nèi)容的軟件定義工作,是提高軟件質(zhì)量、降低軟件成本、保證開發(fā)進(jìn)度的關(guān)鍵環(huán)節(jié)。作為軟件,應(yīng)當(dāng)有一個(gè)完整的配置。Boehm(美國著名71值得注意的嚴(yán)重問題是,在軟件開發(fā)的不同階段進(jìn)行修改所付出的代價(jià)是極其不同的。在早期引入變動,涉及的面比較小,因而代價(jià)也比較低;在開發(fā)的中期,因?yàn)樵S多配置項(xiàng)(被標(biāo)識的工作產(chǎn)品)已經(jīng)完成,所以引入一個(gè)變動,就要對它所涉及的所有已經(jīng)完成的配置項(xiàng)進(jìn)行變更,不僅工作量大,而且邏輯上也更復(fù)雜,因此付出的代價(jià)劇增;如果在軟件“已經(jīng)完成”時(shí)再引入變更,更是要付出高得多的代價(jià)。根據(jù)美國一些軟件公司的統(tǒng)計(jì)資料,軟件開發(fā)后期引入一個(gè)變動比在早期引入相同變動所需付出的代價(jià)高2~3個(gè)數(shù)量級。圖1.4定性地描繪了在不同時(shí)期引入一個(gè)變動需要付出的代價(jià)的變動趨勢。圖1.5是美國貝爾實(shí)驗(yàn)室統(tǒng)計(jì)得出的定量結(jié)果。值得注意的嚴(yán)重問題是,在軟件開發(fā)的不同階段進(jìn)行修改所72圖1.4變更代價(jià)隨時(shí)間變化的趨勢示意圖1.4變更代價(jià)隨時(shí)間變化的趨勢示意73圖1.5改正一個(gè)問題需要付出的代價(jià)圖1.5改正一個(gè)問題需要付出的代價(jià)741.2.3解決軟件危機(jī)的途徑可以借鑒其他工程領(lǐng)域的成功經(jīng)驗(yàn),基于軟件危機(jī)產(chǎn)生的主、客觀原因,從軟件工程技術(shù)和軟件工程管理兩方面來采取措施,防范軟件危機(jī)的發(fā)生。軟件開發(fā)不是某種個(gè)體勞動的神秘技巧,而應(yīng)當(dāng)是一種組織良好、管理嚴(yán)密,分析、設(shè)計(jì)、編碼、測試、品保等各類人員協(xié)同配合、共同完成的工程項(xiàng)目。在軟件開發(fā)過程中,必須充分吸收和借鑒人類長期以來從事各種工程項(xiàng)目所積累的行之有效的原理、概念、技術(shù)和方法,特別要注意吸收幾十年來在計(jì)算機(jī)硬件研究和開發(fā)中積累的經(jīng)驗(yàn)、教訓(xùn)。1.2.3解決軟件危機(jī)的途徑75從管理層面上考慮,應(yīng)當(dāng)注意推廣和使用在實(shí)踐中總結(jié)出來的開發(fā)軟件的成功的技術(shù)和方法,并且探索更好的、更有效的技術(shù)和方法,注意積累軟件開發(fā)過程中的經(jīng)驗(yàn)數(shù)據(jù)財(cái)富,逐步消除在計(jì)算機(jī)系統(tǒng)早期發(fā)展階段形成的一些錯(cuò)誤概念和做法。建立適合于本組織的軟件工程規(guī)范;制定軟件開發(fā)中各個(gè)工作環(huán)節(jié)的流程文件、工作指南和階段工作產(chǎn)品模板;實(shí)施針對軟件開發(fā)全過程的計(jì)劃跟蹤和品質(zhì)管理活動;為每一項(xiàng)工程開發(fā)活動建立配置管理庫;實(shí)施嚴(yán)格的產(chǎn)品基線管理并建立組織的軟件過程數(shù)據(jù)庫和軟件財(cái)富庫;為各類員工及時(shí)提供必要的培訓(xùn)等等都是加強(qiáng)軟件開發(fā)活動管理工作的有效手段。從管理層面上考慮,應(yīng)當(dāng)注意推廣和使用在實(shí)踐中總結(jié)出來76從技術(shù)角度考慮,應(yīng)當(dāng)開發(fā)和使用更好的軟件開發(fā)工具,提高軟件開發(fā)效率和開發(fā)工作過程的規(guī)范化程度。在計(jì)算機(jī)軟件開發(fā)的各個(gè)階段,都有大量的繁瑣重復(fù)的工作要做,在適當(dāng)?shù)能浖ぞ叩妮o助下,開發(fā)人員可以把這類工作做的既快又好。目前廣為使用的統(tǒng)一建模語言(UML)、各種配置管理工具、缺陷管理工具和自動測試工具都在軟件工程活動中發(fā)揮了很好的作用。計(jì)算機(jī)輔助軟件工程(CASE)更是目前備受重視的一個(gè)旨在實(shí)現(xiàn)軟件開發(fā)自動化的新的領(lǐng)域。從技術(shù)角度考慮,應(yīng)當(dāng)開發(fā)和使用更好的軟件開發(fā)工具,提771.3軟件工程的產(chǎn)生及其發(fā)展1968年,北大西洋公約組織的計(jì)算機(jī)科學(xué)家們在原聯(lián)邦德國召開的國際會議上,針對軟件危機(jī)的嚴(yán)峻形勢,提出了把在其他

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論