




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