軟件工程學概述課件_第1頁
軟件工程學概述課件_第2頁
軟件工程學概述課件_第3頁
軟件工程學概述課件_第4頁
軟件工程學概述課件_第5頁
已閱讀5頁,還剩139頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

軟件工程計算機與信息科學學院黃敏hmin@軟件工程計算機與信息科學學院1

軟件工程是以工程化的思想和方法來指導計算機軟件開發(fā)與維護整個過程的一門學科,既有很強的理論性,又有鮮明的實踐性。本課程通過介紹軟件工程學產(chǎn)生的歷史背景以及它的基本原理、概念、技術和方法,使學生掌握軟件項目開發(fā)和維護的一般過程,掌握軟件開發(fā)的傳統(tǒng)方法和最新方法,能用軟件工程的方法參與軟件項目的分析、設計、實現(xiàn)和維護,為更深入地學習和今后從事軟件工程的實踐打下良好的基礎。

軟件工程是以工程化的思想和方法來指導計算機軟件開2第1章軟件工程學概述第2章可行性研究第3章需求分析第4章形式化說明技術第5章總體設計第6章詳細設計第7章實現(xiàn)第8章維護第9章面向?qū)ο蠓椒▽W引論第10章面向?qū)ο蠓治龅?1章面向?qū)ο笤O計第12章面向?qū)ο髮崿F(xiàn)第13章軟件項目管理第1章軟件工程學概述3

教學內(nèi)容

1.1軟件與軟件危機

1.2

軟件工程

1.3軟件生命周期

1.4

軟件過程第1章軟件工程學概述

教學內(nèi)容第1章軟件工程學概述4教學目標一般了解:軟件開發(fā)技術的發(fā)展歷史及其特點;什么是軟件危機?軟件危機產(chǎn)生的原因?解決軟件危機的辦法;軟件的特點、傳統(tǒng)的生命周期模型?;菊莆眨簩浖こ痰幕驹砗头椒ㄓ懈爬ㄐ缘恼J識。重點掌握:軟件工程的概念和基本原理;生命周期方法學的內(nèi)容;生命周期方法學各階段的劃分和基本任務。教學目標一般了解:5軟件的定義軟件工程的發(fā)展軟件危機的介紹產(chǎn)生軟件危機的原因消除軟件危機的途徑1.1軟件與軟件危機軟件的定義1.1軟件與軟件危機61.軟件的定義

軟件是計算機系統(tǒng)中與硬件相互依存的另一部分,它是包括程序、數(shù)據(jù)及其相關文檔組成的完整集合??梢詫懽鳛椋很浖?程序+數(shù)據(jù)+文檔。程序:程序是按事先設計好的功能和性能要求執(zhí)行的指令序列。數(shù)據(jù):數(shù)據(jù)是使程序能適當?shù)靥幚硇畔⒌臄?shù)據(jù)結(jié)構。文檔:文檔是與程序運行和維護有關的圖文資料(面向開發(fā)者的文檔和面向用戶的文檔)。1.軟件的定義軟件是計算機系統(tǒng)中與硬件相互依存的另7第一階段:個體化生產(chǎn)20世紀60年代中期以前第二階段:作坊式生產(chǎn)

20世紀60年代中期到70年代中期第三階段:產(chǎn)業(yè)化生產(chǎn)20世紀70年代中期至今2.從軟件到軟件工程第一階段:個體化生產(chǎn)2.從軟件到軟件工程8第一階段:個體化生產(chǎn)

20世紀60年代中期以前,當時的軟件沒有系統(tǒng)化的開發(fā)方法,所謂的軟件開發(fā)就是根據(jù)應用的需要寫出能夠運行的程序,軟件的開發(fā)者、使用者、維護者大多為同一個人或一組人,軟件開發(fā)處于個體化生產(chǎn)狀態(tài)。第一階段:個體化生產(chǎn)9第二階段:作坊式生產(chǎn)

20世紀60年代中期到70年代中期,產(chǎn)品軟件萌生,軟件開發(fā)進入作坊式生產(chǎn)階段,軟件數(shù)量膨脹。但是,“軟件作坊”基本上仍然沿用早期形成的個體化軟件開發(fā)方法,這使得軟件在開發(fā)和維護過程中遇到了一系列嚴重問題,軟件危機由此產(chǎn)生。1968年北大西洋公約組織的計算機科學家在聯(lián)邦德國召開會議,討論“軟件危機”問題,正式提出“軟件工程”這一術語,從而使軟件的開發(fā)和維護進入了一個新的歷史階段。第二階段:作坊式生產(chǎn)10第三階段:產(chǎn)業(yè)化生產(chǎn)

20世紀70年代中期以后,軟件開發(fā)進入產(chǎn)業(yè)化生產(chǎn)階段,出現(xiàn)了眾多大型的軟件公司,在工程化的思想和方法指導下進行軟件的開發(fā)和維護,軟件的數(shù)量和質(zhì)量都有很大提高。第三階段:產(chǎn)業(yè)化生產(chǎn)11軟件工程的發(fā)展第一代軟件工程生產(chǎn)作坊式第二代軟件工程20世紀80年代中期,Smalltalk等面向?qū)ο蟪绦蛟O計語言推出20世紀90年代起,研究重點從程序設計語言逐漸轉(zhuǎn)移到面向?qū)ο蟮姆治龊驮O計,演化為一種完整的軟件開發(fā)方法和系統(tǒng)的技術體系(對象工程)第三代軟件工程軟件工程管理難度增大,形成新的認識:對軟件過程的控制非常重要(軟件過程工程)第四代軟件工程構件工程軟件工程的發(fā)展第一代軟件工程121.1.3軟件危機的介紹IBM公司在1963年至1966年開發(fā)的IBM360機的操作系統(tǒng)。這一項目花了5000人一年的工作量,最多時有1000人投入開發(fā)工作,寫出了近100萬行源代碼。據(jù)統(tǒng)計,這個操作系統(tǒng)每次發(fā)型的新版本都是從前一版本中找出1000個程序錯誤而修正的結(jié)果。這個項目的負責人F.P.Brooks事后總結(jié)了他在組織開發(fā)過程中的沉痛教訓時說:“……正像一只逃亡的野獸落到泥沼中做垂死的掙扎,越是掙扎,陷得越深。最后無法逃脫滅頂?shù)臑碾y?!绦蛟O計工作正像這樣一個泥潭,……一批批程序員被迫在泥沼中拼命掙扎,……誰也沒有料到問題竟會陷入這樣的困境……”IBM360操作系統(tǒng)的歷史教訓成為軟件開發(fā)項目的典型事例為人們所記取。而Brooks隨后也寫出了軟件工程領域的經(jīng)典著作《人月神話》,至今暢銷不衰。1.1.3軟件危機的介紹IBM公司在1963年至1966年13某公園有一游船碼頭,負責人希望開發(fā)一游船管理系統(tǒng)要求如下:當游客租船時,管理員輸入S表示租船周期開始;當游客還船時,管理員輸入E表示租船周期結(jié)束。一天結(jié)束時,要求系統(tǒng)打印出租船次數(shù)和平均租船時間。Algorithm:Number=Total_time=0;GetMessage;While(!End_of_stream){if(Code==S){Number++;Total_time=Start_time;}elseTotal_time+=End_time;GetMessage;}PrintNumber;If(Number)PrintTotal_time/Number;新要求:輸出一天中的最長租用時間。新要求:將報告分上午和下午輸出。新要求:當通信線路出問題時,能從計算中刪除一切不完整的租船信息。Myth:Oncewewritetheprogramandgetittowork,ourjobisdone.Reality:Someoneoncesaidthat“thesooneryoubegin‘writingcode’,thelongerit’lltakeyoutogetdone.”Industrydataindicatethatbetween60and80percentofalleffortexpendedonaprogramwillbeexpendedafteritisdeliveredtothecustomerforthefirsttime.某公園有一游船碼頭,負責人希望開發(fā)一游船管理系統(tǒng)Algori14直到今天,我們?nèi)匀恍枰卮疬@樣幾個問題:

Whydoesittakessolongtogetsoftwarefinished?

Whyaredevelopmentcostssohigh?

Whycan’twefindalltheerrorsbeforewegivethesoftwaretocustomers?

Whydowecontinuetohavedifficultyinmeasuringprogressassoftwareisbeingdeveloped?直到今天,我們?nèi)匀恍枰卮疬@樣幾個問題:Whydoes151.1.3軟件危機的介紹軟件危機是指在計算機軟件的開發(fā)和維護過程中遇到的一系列嚴重問題。概括地說,軟件危機包含兩方面問題:如何開發(fā)軟件,以滿足對軟件日益增長的需求;如何維護數(shù)量不斷膨脹的已有軟件。軟件危機主要有以下一些典型表現(xiàn):對軟件開發(fā)成本和進度的估計常常很不準確。用戶對“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。軟件產(chǎn)品的質(zhì)量往往靠不住。軟件常常是不可維護的。軟件通常沒有適當?shù)奈臋n資料。軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升。軟件開發(fā)生產(chǎn)率提高的速度遠遠跟不上計算機應用迅速普及深入的趨勢。1.1.3軟件危機的介紹軟件危機是指在計算機軟件的開發(fā)和維16原因一:軟件本身的特點軟件是邏輯產(chǎn)品;軟件規(guī)模龐大;1.1.4產(chǎn)生軟件危機的原因InfantmortalityWearoutFailurecurveforhardwareidealizedcurvechangeactualcurveFailurerateTime原因一:軟件本身的特點1.1.4產(chǎn)生軟件危機的原因Infa171.1.4產(chǎn)生軟件危機的原因原因二:軟件專業(yè)人員本身的素質(zhì)所決定的:軟件專業(yè)人員對軟件開發(fā)和維護存在糊涂的觀念,在實踐過程中采用了錯誤的方法和技術忽視用戶需求分析或分析不足;對軟件生存周期這一過程認識不明確;對完整的軟件配置認識不準確;忽略了軟件維護的重要性;1.1.4產(chǎn)生軟件危機的原因原因二:軟件專業(yè)人員本身的素質(zhì)18對計算機軟件應當有一個正確的認識;應當有組織、有計劃、通過嚴格的管理手段進行軟件的開發(fā);及時總結(jié)軟件開發(fā)的成功技術和方法并加以推廣;開發(fā)和使用更好的軟件工具;總之,為了解決軟件危機,既要有技術措施,又要有必要的組織管理措施。軟件工程正是從管理和技術兩方面研究如何更好的開發(fā)和維護計算機軟件的學科。1.1.5消除軟件危機的途徑對計算機軟件應當有一個正確的認識;1.1.5消除軟件危機的191.2軟件工程1.2.1軟件工程的介紹1.2.2軟件工程的基本原理1.2.3軟件工程方法學1.2軟件工程1.2.1軟件工程的介紹20軟件工程是研究軟件生產(chǎn)的一門學科。它采用工程的概念、原理、技術和方法來開發(fā)和維護軟件,把經(jīng)過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結(jié)合起來,以達到經(jīng)濟地開發(fā)出高質(zhì)量的軟件并有效的維護它的目的。1968年,北大西洋公約組織在原西德召開計算機科學會議,由FritzBauer首次提出了“軟件工程”的概念:“軟件工程是為了經(jīng)濟地獲得能夠在實際機器上有效運行的可靠軟件而建立和使用的一系列完善的工程化原則?!薄禝EEE軟件工程標準術語》對軟件工程給出的定義是:開發(fā)、運行和維護軟件以及使之退役的系統(tǒng)方法。1.2.1軟件工程的介紹軟件工程是研究軟件生產(chǎn)的一門學科。它采用工程的概念、原理、技21軟件工程具有下述本質(zhì)特性:軟件工程關注于大型程序的構造軟件工程的中心課題是控制復雜性軟件經(jīng)常變化開發(fā)軟件的效率非常重要和諧的合作是開發(fā)軟件的關鍵軟件必須有效的支持它的用戶在軟件工程領域中是由具有一種文化背景的人替具有另一種文化背景的人創(chuàng)造產(chǎn)品1.2.1軟件工程的介紹軟件工程具有下述本質(zhì)特性:1.2.1軟件工程的介紹22著名的軟件工程專家B.W.Boehm于1983年綜合了軟件工程專家學者們的意見并總結(jié)了開發(fā)軟件的經(jīng)驗,提出了軟件工程的7條基本原理。這7條原理被認為是確保軟件產(chǎn)品質(zhì)量和開發(fā)效率的原理的最小集合,又是相互獨立、缺一不可、相當完備的最小集合。用分階段的生命周期計劃嚴格管理堅持進行階段評審實行嚴格的產(chǎn)品控制采用現(xiàn)代程序設計技術結(jié)果應能清楚地審查開發(fā)小組的人員應該少而精承認不斷改進軟件工程實踐的必要性1.2.2軟件工程的基本原理著名的軟件工程專家B.W.Boehm于1983年綜合了軟231.用分階段的生命周期計劃嚴格管理

這條基本原理是應該把軟件生存周期劃分成若干個階段,并相應地制定出切實可行的計劃,然后嚴格按照計劃對軟件開發(fā)與維護工作進行管理。應該制定的計劃有項目概要計劃、里程碑計劃、項目控制計劃、產(chǎn)品控制計劃、驗證計劃和運行維護計劃等。各級管理人員都必須嚴格按照計劃對軟件開發(fā)和維護工作進行管理。據(jù)統(tǒng)計,不成功的軟件項目中,有一半左右是由于計劃不周造成的。1.用分階段的生命周期計劃嚴格管理242.堅持進行階段評審據(jù)統(tǒng)計,在軟件生存周期各階段中,編碼階段之前的錯誤約占63%,而編碼錯誤僅占37%。另外,錯誤發(fā)現(xiàn)并改正得越晚,所花費的代價越高。堅持在每個階段結(jié)束前進行嚴格的評審,就可以盡早發(fā)現(xiàn)錯誤,從而可以最小的代價改正錯誤。因此,這是一條必須堅持的重要原理。2.堅持進行階段評審253.實行嚴格的產(chǎn)品控制

決不能隨意改變需求,只能依靠科學的產(chǎn)品控制技術來順應用戶提出的改變需求的要求。為了保持軟件各個配置成分的一致性,必須實行嚴格的產(chǎn)品控制。其中主要是實行基準配置管理(又稱為變動控制),即凡是修改軟件的建議,尤其是涉及基本配置的修改建議,都必須按規(guī)程進行嚴格的評審,評審通過后才能實施。這里的“基準配置”是指經(jīng)過階段評審后的軟件配置成分,即各階段產(chǎn)生的文檔或程序代碼等。3.實行嚴格的產(chǎn)品控制264.采用現(xiàn)代程序設計技術

實踐表明,采用先進的程序設計技術既可以提高軟件開發(fā)與維護的效率,又可以提高軟件的質(zhì)量。多年來,人們一直致力于研究新的“程序設計技術”。比如,20世紀60年代末提出的結(jié)構程序設計技術;后來又發(fā)展出各種結(jié)構分析(SA)和結(jié)構設計(SD)技術;之后又出現(xiàn)了面向?qū)ο蠓治觯∣OA)和面向?qū)ο笤O計(OOD)技術等等。4.采用現(xiàn)代程序設計技術275.結(jié)果應該能清楚地審查

軟件產(chǎn)品是一種看不見、摸不著的邏輯產(chǎn)品。因此,軟件開發(fā)小組的工作進展情況可見性差,難于評價和管理。為了更好地進行評價與管理,應根據(jù)軟件開發(fā)的總目標和完成期限,盡量明確地規(guī)定軟件開發(fā)小組的責任和產(chǎn)品標準,從而使所得到的結(jié)果能清楚地審查。5.結(jié)果應該能清楚地審查286.開發(fā)小組的人員應該少而精

軟件開發(fā)小組人員素質(zhì)和數(shù)量是影響軟件質(zhì)量和開發(fā)效率的重要因素。實踐表明,素質(zhì)高的人員與素質(zhì)低的人員相比,開發(fā)效率可能高幾倍至幾十倍、而且所開發(fā)的軟件中的錯誤也要少得多。另外,開發(fā)小組的人數(shù)不宜過多,因為隨著人數(shù)的增加,人員之間交流情況、討論問題的通信開銷將急劇增加,這不但不能提高生產(chǎn)率,反而由于誤解等原因可能增加出錯的概率。向進度落后的項目中增加人手,只能讓項目進度更落后!6.開發(fā)小組的人員應該少而精向進度落后的項目中增加人手,只297.承認不斷改進軟件工程實踐的必要性

遵循上述六條基本原理,就能夠較好地實現(xiàn)軟件的工程化生產(chǎn)。但是,軟件工程不能停留在已有的技術水平上,應積極主動地采納或創(chuàng)造新的軟件技術,要注意不斷總結(jié)經(jīng)驗,收集工作量、進度、成本等數(shù)據(jù),并進行出錯類型和問題報告的統(tǒng)計。這些數(shù)據(jù)既可用來評估新的軟件技術的效果,又可用來指明應優(yōu)先進行研究的軟件工具和技術。7.承認不斷改進軟件工程實踐的必要性30通常把在軟件生命周期全過程中使用的一整套技術方法的集合稱為方法學(methodology),也稱為范型(paradigm)。軟件工程方法學包含3個要素:方法、工具和過程。方法是完成軟件開發(fā)的各項任務的技術方法;工具是為運用方法而提供的自動的或半自動的軟件工程支撐環(huán)境;過程是為了獲得高質(zhì)量的軟件所需要完成的一系列任務的框架,它規(guī)定了完成各項任務的工作步驟。目前使用最廣泛的軟件工程方法學,分別是傳統(tǒng)方法學和面向?qū)ο蠓椒▽W。1.2.3軟件工程方法學通常把在軟件生命周期全過程中使用的一整套技術方法的集合稱為方31傳統(tǒng)方法學

傳統(tǒng)方法學也稱為生命周期方法學或結(jié)構化范型。它采用結(jié)構化技術來完成軟件開發(fā)的各項任務,并使用適當?shù)能浖ぞ呋蜍浖h(huán)境來支持結(jié)構化技術的運用。這種方法學把軟件生命周期的全過程依次劃分為若干個階段,然后順序的完成每個階段的任務。前一個階段任務的完成是開始進行后一個階段工作的前提和基礎,每一階段的開始和結(jié)束都有嚴格標準。在每一階段結(jié)束之前都必須進行正式嚴格的技術審查和管理復審。傳統(tǒng)方法學322.面向?qū)ο蠓椒▽W

面向?qū)ο蠓椒▽W是一種以數(shù)據(jù)為主線,把數(shù)據(jù)和對數(shù)據(jù)的操作緊密地結(jié)合起來的方法,它具有下述4個要點:把對象作為融合了數(shù)據(jù)及在數(shù)據(jù)上的操作行為的統(tǒng)一的軟件構件。把所有對象都劃分成類。按照父類與子類的關系,把若干個相關類組成一個層次結(jié)構的系統(tǒng)。對象彼此間僅能通過發(fā)送消息互相聯(lián)系。

2.面向?qū)ο蠓椒▽W331.3軟件生命周期請問:你將如何來組織開發(fā)一個基于B/S結(jié)構的工資管理系統(tǒng)?1.3軟件生命周期請問:你將如何來組織開發(fā)一個基于B/S結(jié)341.3軟件生命周期軟件生命周期由軟件定義、軟件開發(fā)和運行維護3個時期組成,每個時期又進一步劃分為若干個階段。軟件定義時期的任務是:確定軟件開發(fā)工程必須完成的總目標;確定工程的可行性;到處實現(xiàn)工程目標應該采用的策略及系統(tǒng)必須完成的功能;估計完成該項工程需要的資源和成本,并制定工程進度表。這一時期可劃分為三個階段:問題定義、可行性研究、需求分析。軟件開發(fā)時期的任務是:具體設計和實現(xiàn)在前一個時期定義的軟件。這一時期由四階段組成:總體設計、詳細設計、編碼和單元測試、綜合測試。軟件維護時期的任務是:當軟件在使用過程中發(fā)現(xiàn)錯誤時加以改正;當環(huán)境改變時修改軟件以適應新的環(huán)境;當用戶有新要求時及時改進軟件以滿足用戶的新需要。1.3軟件生命周期軟件生命周期由軟件定義、軟件開發(fā)和運行維35維護綜合測試編碼和單元測試詳細設計總體設計需求分析可行性研究問題定義定義時期開發(fā)時期維護時期維護綜合測試編碼和詳細設計總體設計需求分析可行性研究問題定義36問題定義

問題定義階段要回答的關鍵問題是“要解決的問題是什么?”通過對客戶的訪問調(diào)查,系統(tǒng)分析員扼要的寫出關于問題性質(zhì)、工程目標和工程規(guī)模的書面報告,經(jīng)過討論和必要的修改之后,這份報告還應該得到客戶的確認。問題定義372.可行性研究本階段的任務是根據(jù)用戶提出的工程項目的性質(zhì)、目標和規(guī)模,進一步了解用戶的要求及現(xiàn)有的環(huán)境及條件,從技術、經(jīng)濟和社會等多方面研究并論證該項目的可行性。即該項目是否值得去解決,是否存在可行的解決辦法。此時,系統(tǒng)分析人員應在用戶的配合下對用戶的要求和現(xiàn)有的環(huán)境進行深入調(diào)查并寫出調(diào)研報告。進而進行可行性論證??尚行哉撟C包括經(jīng)濟可行性、技術可行性、操作可行性、法律可行性等。在此基礎上還要制定初步的項目計劃,包括需要的軟硬件資源、定義任務、風險分析、成本/效益分析以及進度安排等。可行性研究的結(jié)果將是使用部門負責人做出是否繼續(xù)進行該項目決定的重要依據(jù)。2.可行性研究383.需求分析需求分析的任務是確定待開發(fā)的軟件系統(tǒng)“做什么”。軟件系統(tǒng)需求一般由用戶提出。系統(tǒng)分析員和開發(fā)人員在需求分析階段必須與用戶反復討論、協(xié)商,充分交流信息,并用某種方法和工具構建軟件系統(tǒng)的邏輯模型。需求分析階段的主要成果有軟件需求規(guī)格說明書、軟件驗收測試計劃和準則、初步的用戶手冊等。其中,軟件需求規(guī)格說明書(SoftwareRequirementsSpecification,即SRS)是一個關鍵性的文檔。3.需求分析394.總體設計這個階段必須回答的關鍵問題是:“概括地說,應該怎樣實現(xiàn)目標系統(tǒng)?”這一階段對需求規(guī)格說明中提供的軟件系統(tǒng)邏輯模型進行進一步的分解,從而建立軟件系統(tǒng)的總體結(jié)構和各子系統(tǒng)之間、各模塊之間的關系,定義各子系統(tǒng)接口界面和各功能模塊的接口,設計全局數(shù)據(jù)庫或數(shù)據(jù)結(jié)構,規(guī)定設計約束,制定組裝測試計劃,進而給出每個功能模塊的功能描述、全局數(shù)據(jù)定義和外部文件定義等??傮w設計階段的主要成果有概要設計說明書、數(shù)據(jù)庫或數(shù)據(jù)結(jié)構說明書、組裝測試計劃等文檔4.總體設計405.詳細設計詳細設計是將概要設計產(chǎn)生的功能模塊進一步細化,形成可編程的程序模塊,然后設計程序模塊的內(nèi)部細節(jié),包括算法、數(shù)據(jù)結(jié)構以及各程序模塊間的接口信息,并設計模塊的單元測試計劃??梢圆捎媒Y(jié)構化的設計方法,采用結(jié)構化的程序流程圖、N-S圖、過程設計語言(PDL,ProcedureDesignLanguage)等工具進行描述,也可以采用面向?qū)ο蟮脑O計方法等等。詳細設計階段的主要成果是“詳細設計規(guī)格說明”(或稱“模塊開發(fā)卷宗”)和單元測試計劃等詳細設計文檔。5.詳細設計416.編碼和單元測試編碼的主要任務是根據(jù)詳細設計規(guī)格說明,用某種選定的程序設計語言把詳細設計的結(jié)果轉(zhuǎn)化為機器可運行的源程序模塊,這是一個編程和調(diào)試程序的過程。編碼階段應注意遵循編程標準、養(yǎng)成良好的編程風格,以便編寫出正確的便于理解、調(diào)試和維護的程序模塊。單元測試:每編寫出一個程序模塊的源程序,調(diào)試通過后,即對該模塊進行測試,這稱為單元測試。這一階段結(jié)束時應提供按一定規(guī)則存在盤上的通過單元測試的各功能模塊的集合、詳細的單元測試報告等文檔。6.編碼和單元測試427.綜合測試這個階段的關鍵任務是通過各種類型的測試和調(diào)試使軟件達到預定的要求。最基本的測試是集成測試和驗收測試。集成測試是根據(jù)概要設計提供的軟件結(jié)構、各功能模塊的說明和集成測試計劃,把經(jīng)過單元測試檢驗的模塊按照某種選定的策略逐步進行裝配和測試。驗收測試是按照驗收測試計劃和準則對軟件系統(tǒng)進行測試,看其是否達到了需求規(guī)格說明中定義的全部功能和性能等方面的需求。這一階段應將測試計劃、詳細測試方案和實際測試結(jié)果保存為相應的文檔,作為軟件配置的一個組成部分。7.綜合測試438.軟件維護軟件維護的任務是通過各種維護活動使軟件系統(tǒng)持久地滿足用戶的需求。每項維護活動實質(zhì)上都是一次壓縮和簡化了的軟件定義和軟件開發(fā)過程。都要經(jīng)歷提出維護要求、分析維護要求、提出維護方案、審批維護方案、確定維護計劃、修改軟件設計、修改程序、測試程序、評審、驗收等步驟。通常有四類維護活動:改正性維護、適應性維護、完善性維護和預防性維護。每一項維護活動都應該準確記錄下來,作為正式的文檔資料加以保管。8.軟件維護441.4軟件過程軟件過程是為了獲得高質(zhì)量軟件所需要完成的一系列任務的框架,它規(guī)定了完成各項任務的工作步驟。過程定義了運用方法的順序、應該交付的文檔資料、為保證軟件質(zhì)量和協(xié)調(diào)變化所需要采取的管理措施,以及標志軟件開發(fā)各個階段任務完成的里程碑??茖W、有效的軟件過程應該定義一組適合于所承擔的項目特點的任務集合。通常使用生命周期模型間接的描述軟件過程;生命周期模型也稱為過程模型。1.4.1瀑布模型1.4.2快速原型模型1.4.3增量模型1.4.4螺旋模型1.4軟件過程軟件過程是為了獲得高質(zhì)量軟件所需要完成的一系45

瀑布模型(waterfallmodel)是由W.Royce于1970年提出來的。又稱為軟件生存周期模型。瀑布模型嚴格按照軟件生存周期各個階段來進行開發(fā),上一階段的輸出即是下一階段的輸入,并強調(diào)每一階段的嚴格性。它規(guī)定了各階段的任務和應提交的成果及文檔,每一階段的任務完成后,都必須對其階段性產(chǎn)品(主要是文檔)進行評審,通過后才能開始下一階段的工作。因此,它是一種以文檔作為驅(qū)動的模型。瀑布模型具有以下幾個特征:1.階段間的順序性和依賴性2.推遲實現(xiàn)的觀點3.質(zhì)量保證的觀點

1.4.1瀑布模型瀑布模型(waterfallmodel)是由W.Ro46需求分析驗證編碼驗證規(guī)格說明驗證設計驗證綜合測試維護變化的需求驗證瀑布模型需求分析驗證編碼驗證規(guī)格說明驗證設計驗證綜合測試維護變化的需47瀑布模型的優(yōu)點可以強迫開發(fā)人員采用規(guī)范的方法;嚴格規(guī)定了每個階段必須提交的文檔;要求每個階段交出的所有產(chǎn)品都必須經(jīng)過質(zhì)量保證小組的仔細驗證。瀑布模型的缺點在軟件開發(fā)的初期階段就要求做出正確、全面、完整的需求分析對許多應用軟件來說是極其困難的。在需求分析階段,當需求確定后,無法及時驗證需求是否正確、完整。作為整體開發(fā)的瀑布模型,由于不支持產(chǎn)品的演化,缺乏靈活性,對開發(fā)過程中很難發(fā)現(xiàn)的錯誤,只有在最終產(chǎn)品運行時才能暴露出來,從而使軟件產(chǎn)品難以維護。瀑布模型的優(yōu)點48瀑布模型適用的場合

瀑布模型一般適用于功能、性能明確、完整、無重大變化的軟件系統(tǒng)的開發(fā)。例如操作系統(tǒng)、編譯系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)等系統(tǒng)軟件的開發(fā)。應用有一定的局限性。瀑布模型適用的場合49原型模型(prototypingmodel)的基本框架是軟件開發(fā)人員根據(jù)用戶提出的軟件基本需求快速開發(fā)一個原型,以便向用戶展示軟件系統(tǒng)應有的部分或全部功能和性能,在征求用戶對原型的評價意見后,進一步使需求精確化、完全化,并據(jù)此改進、完善原型,如此迭代,直到軟件開發(fā)人員和用戶都確認軟件系統(tǒng)的需求并達成一致的理解為止。軟件需求確定后,便可進行設計,編碼、測試等以后的各個開發(fā)步驟。1.4.2快速原型模型原型模型(prototyping50快速原型驗證編碼驗證規(guī)格說明驗證設計驗證綜合測試維護變化的需求驗證快速原型模型快速原型驗證編碼驗證規(guī)格說明驗證設計驗證綜合測試維護變化的需51快速原型模型適用的場合原型模型比瀑布模型更符合人們認識事物的過程和規(guī)律,是一種較實用的開發(fā)框架。它適合于那些不能預先確切定義需求的軟件系統(tǒng)的開發(fā),更適合于那些項目組成員(包括分析員、設計員、程序員和用戶)不能很好交流或通信有困難的情況??焖僭湍P瓦m用的場合52增量模型也稱為漸增模型,使用增量模型開發(fā)軟件時,把軟件產(chǎn)品作為一系列的增量構件來設計、編碼、集成和測試。每個構建由多個相互作用的模塊構成,并且能夠完成特定的功能。把軟件產(chǎn)品分解成增量構件時,應該使構件的規(guī)模適中。分解時唯一必須遵守的約束條件是,當把新構件集成到現(xiàn)有軟件中時,所形成的產(chǎn)品必須是可測試的。用增量模型開發(fā)軟件時,是分批地逐步向用戶提交產(chǎn)品。1.4.3增量模型增量模型也稱為漸增模型,使用增量模型開發(fā)軟件時,把軟件產(chǎn)品作53需求分析驗證規(guī)格說明驗證設計驗證維護針對每個構件,完成詳細設計、編碼和集成,經(jīng)測試后交付給用戶增量模型需求分析驗證規(guī)格說明驗證設計驗證維護針對每個構件,完成增量模54增量模型的優(yōu)點能在較短時間內(nèi)向用戶提交可完成部分工作的產(chǎn)品。逐步增加產(chǎn)品功能可以使用戶有較充裕的時間學習和適應新產(chǎn)品,從而減少一個全新的軟件可能給客戶組織帶來的沖擊。增量模型的缺點在把每個新的增量構件集成到現(xiàn)有軟件體系結(jié)構中時,必須不破壞原來已經(jīng)開發(fā)出的產(chǎn)品。此外,必須把軟件的體系結(jié)構設計的便于按照這種方式進行擴充,向現(xiàn)有產(chǎn)品中加入新構件的過程必須簡單、方便,這就意味著需要更精心的設計。增量模型的優(yōu)點55螺旋模型(spiralmodel)是B.Boehm于1988年提出的。螺旋模型將瀑布模型與快速原型模型結(jié)合起來,并且加入兩種模型均忽略了的風險分析,彌補了兩者的不足。螺旋模型的基本思想是,使用原型及其他方法來盡量降低風險。1.4.4螺旋模型螺旋模型(spiralmodel)是B.Boehm于1956第1章軟件工程學概述課件57螺旋模型的優(yōu)點對可選方案和約束條件的強調(diào)有利于已有軟件的重用,也有助于把軟件質(zhì)量作為軟件開發(fā)的一個重要目標。減少了過多測試或測試不足所帶來的風險。在螺旋模型中維護只是模型的另一個周期,在維護和開發(fā)之間并沒有本質(zhì)區(qū)別。螺旋模型的缺點如果每次迭代的效率不高,致使迭代次數(shù)過多,將會增加成本并推遲提交時間。使用該模型需要有相當豐富的風險評估經(jīng)驗和專門知識,要求開發(fā)隊伍水平較高。螺旋模型的優(yōu)點58螺旋模型適用的場合

支持需求不明確、特別是大型軟件系統(tǒng)的開發(fā),并支持面向規(guī)格說明、面向過程、面向?qū)ο蟮榷喾N軟件開發(fā)方法,是一種具有廣闊前景的模型。螺旋模型適用的場合59噴泉模型是一種以用戶需求為動力,以對象為驅(qū)動的模型,主要用于采用對象技術的軟件開發(fā)項目。該模型認為軟件開發(fā)過程自下而上周期的各階段是相互迭代和無間隙的特性。軟件的某個部分常常被重復工作多次,相關對象在每次迭代中隨之加入漸進的軟件成分。無間隙指在各項活動之間無明顯邊界,如分析和設計活動之間沒有明顯的界限,由于對象概念的引入,表達分析、設計、實現(xiàn)等活動只用對象類和關系,從而可以較為容易地實現(xiàn)活動的迭代和無間隙,使其開發(fā)自然地包括復用。

1.4.5噴泉模型噴泉模型是一種以用戶需求為動力,以對象為驅(qū)動的模型,主要用于601、噴泉模型的優(yōu)點

噴泉模型不像瀑布模型那樣,需要分析活動結(jié)束后才開始設計活動,設計活動結(jié)束后才開始編碼活動。該模型的各個階段沒有明顯的界限,開發(fā)人員可以同步進行開發(fā)。其優(yōu)點是可以提高軟件項目開發(fā)效率,節(jié)省開發(fā)時間,適應于面向?qū)ο蟮能浖_發(fā)過程。

2、噴泉模型的缺點

由于噴泉模型在各個開發(fā)階段是重疊的,因此在開發(fā)過程中需要大量的開發(fā)人員,因此不利于項目的管理。此外這種模型要求嚴格管理文檔,使得審核的難度加大,尤其是面對可能隨時加入各種信息、需求與資料的情況。

1、噴泉模型的優(yōu)點611.4.6Rational統(tǒng)一過程Rational統(tǒng)一過程(RUP)是Rational軟件公司(現(xiàn)在Rational公司被IBM并購)創(chuàng)造的軟件工程方法。RUP描述了如何有效地利用商業(yè)的可靠的方法開發(fā)和部署軟件,是一種重量級過程(也被稱作厚方法學),因此特別適用于大型軟件團隊開發(fā)大型項目。RUP強調(diào)采用迭代和檢查的方式來開發(fā)軟件,整個項目開發(fā)過程由多個迭代過程組成。在每次迭代中只考慮系統(tǒng)的一部分需求,針對這部分需求進行分析、設計、實現(xiàn)、測試和部署等工作,每次迭代都是在系統(tǒng)已完成部分的基礎上進行的,每次給系統(tǒng)能夠增加一些新的功能,如此循環(huán)往復地進行下去,直至完成最終項目。1.4.6Rational統(tǒng)一過程Rational統(tǒng)一過程62第1章軟件工程學概述課件63

初始階段:

進行問題定義,確定目標,評估其可行性,降低關鍵風險。

細化階段:

制定項目計劃、配置各類資源、建立系統(tǒng)架構(包括各類視圖)。

構造階段:

開發(fā)整個產(chǎn)品,并確保產(chǎn)品可移交給用戶。

移交階段:

產(chǎn)品發(fā)布、安裝、用戶培訓。

在每個階段的每次迭代的最后,用例模型、分析模型、設計模型、實現(xiàn)模型都會增量,每個階段結(jié)束的里程碑處,管理層做出是否繼續(xù)、進度、預算、是否給下一階段提供資助等決定。不同階段工作流的側(cè)重點不同,前兩階段大部分工作集中在需求、分析和架構設計上;在構造階段,重點轉(zhuǎn)移到詳細設計、實現(xiàn)和測試上。初始階段:641.4.7敏捷過程與極限編程1.4.7敏捷過程與極限編程651.4.7敏捷過程與極限編程極限編程是敏捷過程中最有名的一個,適于小型項目.極限編程(XP)對于傳統(tǒng)的軟件工程中看來是“極端的”實踐.圖1.11XP項目的整體開發(fā)過程1.4.7敏捷過程與極限編程極限編程是敏捷過程中最有名的一66圖:XP迭代開發(fā)過程圖:XP迭代開發(fā)過程671.4.8微軟過程圖:微軟軟件生命周期階段劃分和主要里程碑1.4.8微軟過程圖:微軟軟件生命周期階段劃分和主要里程68圖:微軟過程的生命周期模型圖:微軟過程的生命周期模型691.5小結(jié)1.1軟件與軟件危機軟件的定義軟件的發(fā)展軟件危機的介紹產(chǎn)生軟件危機的原因消除軟件危機的途徑1.2軟件工程軟件工程的介紹軟件工程的基本原理軟件工程方法學1.3軟件生命周期三時期八階段1.4軟件過程七種模型

1.5小結(jié)1.1軟件與軟件危機70習題1美國一家公司在1982年計劃用fortran語言開發(fā)一個在VAX750計算機上運行的應用程序,估計這個程序的長度為10000條指令。如果平均每人每天可以開發(fā)10條指令,請問:(1)開發(fā)這個應用程序?qū)⒂枚嗌偃巳???)假設程序員的月平均工資為4000美元,每月按20個工作日計算,這個軟件的成本是多少美元?(3)1982年VAX750計算機硬件價格約為125000美元,那么這個軟件的成本在總成本中占多大的比例?(4)20年后,一臺性能遠遠優(yōu)于VAX750的微型計算機的價格為2000美元,這時軟件開發(fā)生產(chǎn)率已提高到平均每人每天開發(fā)40條指令,而程序員的月平均工資也漲到8000美元。如果在2002年開發(fā)上述應用程序,該軟件成本在總成本中占多大的比例?習題1美國一家公司在1982年計劃用fortran語言開發(fā)一71習題2假設你被任命為一家軟件公司的項目負責人,你的工作是管理該公司已被廣泛應用的字處理軟件的新版本開發(fā),由于市場競爭激烈,公司規(guī)定了嚴格的完成期限并且已經(jīng)已對外公布。你打算采用哪種軟件過程模型?為什么?假設要求你開發(fā)一個軟件,該軟件的功能是把讀入的浮點數(shù)開平方,所得到的結(jié)果應該精確到小數(shù)點后4位,一旦實現(xiàn)并測試完成之后,該產(chǎn)品將被拋棄。你打算選用哪種軟件過程模型?為什么?習題272軟件工程計算機與信息科學學院黃敏hmin@軟件工程計算機與信息科學學院73

軟件工程是以工程化的思想和方法來指導計算機軟件開發(fā)與維護整個過程的一門學科,既有很強的理論性,又有鮮明的實踐性。本課程通過介紹軟件工程學產(chǎn)生的歷史背景以及它的基本原理、概念、技術和方法,使學生掌握軟件項目開發(fā)和維護的一般過程,掌握軟件開發(fā)的傳統(tǒng)方法和最新方法,能用軟件工程的方法參與軟件項目的分析、設計、實現(xiàn)和維護,為更深入地學習和今后從事軟件工程的實踐打下良好的基礎。

軟件工程是以工程化的思想和方法來指導計算機軟件開74第1章軟件工程學概述第2章可行性研究第3章需求分析第4章形式化說明技術第5章總體設計第6章詳細設計第7章實現(xiàn)第8章維護第9章面向?qū)ο蠓椒▽W引論第10章面向?qū)ο蠓治龅?1章面向?qū)ο笤O計第12章面向?qū)ο髮崿F(xiàn)第13章軟件項目管理第1章軟件工程學概述75

教學內(nèi)容

1.1軟件與軟件危機

1.2

軟件工程

1.3軟件生命周期

1.4

軟件過程第1章軟件工程學概述

教學內(nèi)容第1章軟件工程學概述76教學目標一般了解:軟件開發(fā)技術的發(fā)展歷史及其特點;什么是軟件危機?軟件危機產(chǎn)生的原因?解決軟件危機的辦法;軟件的特點、傳統(tǒng)的生命周期模型?;菊莆眨簩浖こ痰幕驹砗头椒ㄓ懈爬ㄐ缘恼J識。重點掌握:軟件工程的概念和基本原理;生命周期方法學的內(nèi)容;生命周期方法學各階段的劃分和基本任務。教學目標一般了解:77軟件的定義軟件工程的發(fā)展軟件危機的介紹產(chǎn)生軟件危機的原因消除軟件危機的途徑1.1軟件與軟件危機軟件的定義1.1軟件與軟件危機781.軟件的定義

軟件是計算機系統(tǒng)中與硬件相互依存的另一部分,它是包括程序、數(shù)據(jù)及其相關文檔組成的完整集合。可以寫作為:軟件=程序+數(shù)據(jù)+文檔。程序:程序是按事先設計好的功能和性能要求執(zhí)行的指令序列。數(shù)據(jù):數(shù)據(jù)是使程序能適當?shù)靥幚硇畔⒌臄?shù)據(jù)結(jié)構。文檔:文檔是與程序運行和維護有關的圖文資料(面向開發(fā)者的文檔和面向用戶的文檔)。1.軟件的定義軟件是計算機系統(tǒng)中與硬件相互依存的另79第一階段:個體化生產(chǎn)20世紀60年代中期以前第二階段:作坊式生產(chǎn)

20世紀60年代中期到70年代中期第三階段:產(chǎn)業(yè)化生產(chǎn)20世紀70年代中期至今2.從軟件到軟件工程第一階段:個體化生產(chǎn)2.從軟件到軟件工程80第一階段:個體化生產(chǎn)

20世紀60年代中期以前,當時的軟件沒有系統(tǒng)化的開發(fā)方法,所謂的軟件開發(fā)就是根據(jù)應用的需要寫出能夠運行的程序,軟件的開發(fā)者、使用者、維護者大多為同一個人或一組人,軟件開發(fā)處于個體化生產(chǎn)狀態(tài)。第一階段:個體化生產(chǎn)81第二階段:作坊式生產(chǎn)

20世紀60年代中期到70年代中期,產(chǎn)品軟件萌生,軟件開發(fā)進入作坊式生產(chǎn)階段,軟件數(shù)量膨脹。但是,“軟件作坊”基本上仍然沿用早期形成的個體化軟件開發(fā)方法,這使得軟件在開發(fā)和維護過程中遇到了一系列嚴重問題,軟件危機由此產(chǎn)生。1968年北大西洋公約組織的計算機科學家在聯(lián)邦德國召開會議,討論“軟件危機”問題,正式提出“軟件工程”這一術語,從而使軟件的開發(fā)和維護進入了一個新的歷史階段。第二階段:作坊式生產(chǎn)82第三階段:產(chǎn)業(yè)化生產(chǎn)

20世紀70年代中期以后,軟件開發(fā)進入產(chǎn)業(yè)化生產(chǎn)階段,出現(xiàn)了眾多大型的軟件公司,在工程化的思想和方法指導下進行軟件的開發(fā)和維護,軟件的數(shù)量和質(zhì)量都有很大提高。第三階段:產(chǎn)業(yè)化生產(chǎn)83軟件工程的發(fā)展第一代軟件工程生產(chǎn)作坊式第二代軟件工程20世紀80年代中期,Smalltalk等面向?qū)ο蟪绦蛟O計語言推出20世紀90年代起,研究重點從程序設計語言逐漸轉(zhuǎn)移到面向?qū)ο蟮姆治龊驮O計,演化為一種完整的軟件開發(fā)方法和系統(tǒng)的技術體系(對象工程)第三代軟件工程軟件工程管理難度增大,形成新的認識:對軟件過程的控制非常重要(軟件過程工程)第四代軟件工程構件工程軟件工程的發(fā)展第一代軟件工程841.1.3軟件危機的介紹IBM公司在1963年至1966年開發(fā)的IBM360機的操作系統(tǒng)。這一項目花了5000人一年的工作量,最多時有1000人投入開發(fā)工作,寫出了近100萬行源代碼。據(jù)統(tǒng)計,這個操作系統(tǒng)每次發(fā)型的新版本都是從前一版本中找出1000個程序錯誤而修正的結(jié)果。這個項目的負責人F.P.Brooks事后總結(jié)了他在組織開發(fā)過程中的沉痛教訓時說:“……正像一只逃亡的野獸落到泥沼中做垂死的掙扎,越是掙扎,陷得越深。最后無法逃脫滅頂?shù)臑碾y?!绦蛟O計工作正像這樣一個泥潭,……一批批程序員被迫在泥沼中拼命掙扎,……誰也沒有料到問題竟會陷入這樣的困境……”IBM360操作系統(tǒng)的歷史教訓成為軟件開發(fā)項目的典型事例為人們所記取。而Brooks隨后也寫出了軟件工程領域的經(jīng)典著作《人月神話》,至今暢銷不衰。1.1.3軟件危機的介紹IBM公司在1963年至1966年85某公園有一游船碼頭,負責人希望開發(fā)一游船管理系統(tǒng)要求如下:當游客租船時,管理員輸入S表示租船周期開始;當游客還船時,管理員輸入E表示租船周期結(jié)束。一天結(jié)束時,要求系統(tǒng)打印出租船次數(shù)和平均租船時間。Algorithm:Number=Total_time=0;GetMessage;While(!End_of_stream){if(Code==S){Number++;Total_time=Start_time;}elseTotal_time+=End_time;GetMessage;}PrintNumber;If(Number)PrintTotal_time/Number;新要求:輸出一天中的最長租用時間。新要求:將報告分上午和下午輸出。新要求:當通信線路出問題時,能從計算中刪除一切不完整的租船信息。Myth:Oncewewritetheprogramandgetittowork,ourjobisdone.Reality:Someoneoncesaidthat“thesooneryoubegin‘writingcode’,thelongerit’lltakeyoutogetdone.”Industrydataindicatethatbetween60and80percentofalleffortexpendedonaprogramwillbeexpendedafteritisdeliveredtothecustomerforthefirsttime.某公園有一游船碼頭,負責人希望開發(fā)一游船管理系統(tǒng)Algori86直到今天,我們?nèi)匀恍枰卮疬@樣幾個問題:

Whydoesittakessolongtogetsoftwarefinished?

Whyaredevelopmentcostssohigh?

Whycan’twefindalltheerrorsbeforewegivethesoftwaretocustomers?

Whydowecontinuetohavedifficultyinmeasuringprogressassoftwareisbeingdeveloped?直到今天,我們?nèi)匀恍枰卮疬@樣幾個問題:Whydoes871.1.3軟件危機的介紹軟件危機是指在計算機軟件的開發(fā)和維護過程中遇到的一系列嚴重問題。概括地說,軟件危機包含兩方面問題:如何開發(fā)軟件,以滿足對軟件日益增長的需求;如何維護數(shù)量不斷膨脹的已有軟件。軟件危機主要有以下一些典型表現(xiàn):對軟件開發(fā)成本和進度的估計常常很不準確。用戶對“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。軟件產(chǎn)品的質(zhì)量往往靠不住。軟件常常是不可維護的。軟件通常沒有適當?shù)奈臋n資料。軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升。軟件開發(fā)生產(chǎn)率提高的速度遠遠跟不上計算機應用迅速普及深入的趨勢。1.1.3軟件危機的介紹軟件危機是指在計算機軟件的開發(fā)和維88原因一:軟件本身的特點軟件是邏輯產(chǎn)品;軟件規(guī)模龐大;1.1.4產(chǎn)生軟件危機的原因InfantmortalityWearoutFailurecurveforhardwareidealizedcurvechangeactualcurveFailurerateTime原因一:軟件本身的特點1.1.4產(chǎn)生軟件危機的原因Infa891.1.4產(chǎn)生軟件危機的原因原因二:軟件專業(yè)人員本身的素質(zhì)所決定的:軟件專業(yè)人員對軟件開發(fā)和維護存在糊涂的觀念,在實踐過程中采用了錯誤的方法和技術忽視用戶需求分析或分析不足;對軟件生存周期這一過程認識不明確;對完整的軟件配置認識不準確;忽略了軟件維護的重要性;1.1.4產(chǎn)生軟件危機的原因原因二:軟件專業(yè)人員本身的素質(zhì)90對計算機軟件應當有一個正確的認識;應當有組織、有計劃、通過嚴格的管理手段進行軟件的開發(fā);及時總結(jié)軟件開發(fā)的成功技術和方法并加以推廣;開發(fā)和使用更好的軟件工具;總之,為了解決軟件危機,既要有技術措施,又要有必要的組織管理措施。軟件工程正是從管理和技術兩方面研究如何更好的開發(fā)和維護計算機軟件的學科。1.1.5消除軟件危機的途徑對計算機軟件應當有一個正確的認識;1.1.5消除軟件危機的911.2軟件工程1.2.1軟件工程的介紹1.2.2軟件工程的基本原理1.2.3軟件工程方法學1.2軟件工程1.2.1軟件工程的介紹92軟件工程是研究軟件生產(chǎn)的一門學科。它采用工程的概念、原理、技術和方法來開發(fā)和維護軟件,把經(jīng)過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結(jié)合起來,以達到經(jīng)濟地開發(fā)出高質(zhì)量的軟件并有效的維護它的目的。1968年,北大西洋公約組織在原西德召開計算機科學會議,由FritzBauer首次提出了“軟件工程”的概念:“軟件工程是為了經(jīng)濟地獲得能夠在實際機器上有效運行的可靠軟件而建立和使用的一系列完善的工程化原則。”《IEEE軟件工程標準術語》對軟件工程給出的定義是:開發(fā)、運行和維護軟件以及使之退役的系統(tǒng)方法。1.2.1軟件工程的介紹軟件工程是研究軟件生產(chǎn)的一門學科。它采用工程的概念、原理、技93軟件工程具有下述本質(zhì)特性:軟件工程關注于大型程序的構造軟件工程的中心課題是控制復雜性軟件經(jīng)常變化開發(fā)軟件的效率非常重要和諧的合作是開發(fā)軟件的關鍵軟件必須有效的支持它的用戶在軟件工程領域中是由具有一種文化背景的人替具有另一種文化背景的人創(chuàng)造產(chǎn)品1.2.1軟件工程的介紹軟件工程具有下述本質(zhì)特性:1.2.1軟件工程的介紹94著名的軟件工程專家B.W.Boehm于1983年綜合了軟件工程專家學者們的意見并總結(jié)了開發(fā)軟件的經(jīng)驗,提出了軟件工程的7條基本原理。這7條原理被認為是確保軟件產(chǎn)品質(zhì)量和開發(fā)效率的原理的最小集合,又是相互獨立、缺一不可、相當完備的最小集合。用分階段的生命周期計劃嚴格管理堅持進行階段評審實行嚴格的產(chǎn)品控制采用現(xiàn)代程序設計技術結(jié)果應能清楚地審查開發(fā)小組的人員應該少而精承認不斷改進軟件工程實踐的必要性1.2.2軟件工程的基本原理著名的軟件工程專家B.W.Boehm于1983年綜合了軟951.用分階段的生命周期計劃嚴格管理

這條基本原理是應該把軟件生存周期劃分成若干個階段,并相應地制定出切實可行的計劃,然后嚴格按照計劃對軟件開發(fā)與維護工作進行管理。應該制定的計劃有項目概要計劃、里程碑計劃、項目控制計劃、產(chǎn)品控制計劃、驗證計劃和運行維護計劃等。各級管理人員都必須嚴格按照計劃對軟件開發(fā)和維護工作進行管理。據(jù)統(tǒng)計,不成功的軟件項目中,有一半左右是由于計劃不周造成的。1.用分階段的生命周期計劃嚴格管理962.堅持進行階段評審據(jù)統(tǒng)計,在軟件生存周期各階段中,編碼階段之前的錯誤約占63%,而編碼錯誤僅占37%。另外,錯誤發(fā)現(xiàn)并改正得越晚,所花費的代價越高。堅持在每個階段結(jié)束前進行嚴格的評審,就可以盡早發(fā)現(xiàn)錯誤,從而可以最小的代價改正錯誤。因此,這是一條必須堅持的重要原理。2.堅持進行階段評審973.實行嚴格的產(chǎn)品控制

決不能隨意改變需求,只能依靠科學的產(chǎn)品控制技術來順應用戶提出的改變需求的要求。為了保持軟件各個配置成分的一致性,必須實行嚴格的產(chǎn)品控制。其中主要是實行基準配置管理(又稱為變動控制),即凡是修改軟件的建議,尤其是涉及基本配置的修改建議,都必須按規(guī)程進行嚴格的評審,評審通過后才能實施。這里的“基準配置”是指經(jīng)過階段評審后的軟件配置成分,即各階段產(chǎn)生的文檔或程序代碼等。3.實行嚴格的產(chǎn)品控制984.采用現(xiàn)代程序設計技術

實踐表明,采用先進的程序設計技術既可以提高軟件開發(fā)與維護的效率,又可以提高軟件的質(zhì)量。多年來,人們一直致力于研究新的“程序設計技術”。比如,20世紀60年代末提出的結(jié)構程序設計技術;后來又發(fā)展出各種結(jié)構分析(SA)和結(jié)構設計(SD)技術;之后又出現(xiàn)了面向?qū)ο蠓治觯∣OA)和面向?qū)ο笤O計(OOD)技術等等。4.采用現(xiàn)代程序設計技術995.結(jié)果應該能清楚地審查

軟件產(chǎn)品是一種看不見、摸不著的邏輯產(chǎn)品。因此,軟件開發(fā)小組的工作進展情況可見性差,難于評價和管理。為了更好地進行評價與管理,應根據(jù)軟件開發(fā)的總目標和完成期限,盡量明確地規(guī)定軟件開發(fā)小組的責任和產(chǎn)品標準,從而使所得到的結(jié)果能清楚地審查。5.結(jié)果應該能清楚地審查1006.開發(fā)小組的人員應該少而精

軟件開發(fā)小組人員素質(zhì)和數(shù)量是影響軟件質(zhì)量和開發(fā)效率的重要因素。實踐表明,素質(zhì)高的人員與素質(zhì)低的人員相比,開發(fā)效率可能高幾倍至幾十倍、而且所開發(fā)的軟件中的錯誤也要少得多。另外,開發(fā)小組的人數(shù)不宜過多,因為隨著人數(shù)的增加,人員之間交流情況、討論問題的通信開銷將急劇增加,這不但不能提高生產(chǎn)率,反而由于誤解等原因可能增加出錯的概率。向進度落后的項目中增加人手,只能讓項目進度更落后!6.開發(fā)小組的人員應該少而精向進度落后的項目中增加人手,只1017.承認不斷改進軟件工程實踐的必要性

遵循上述六條基本原理,就能夠較好地實現(xiàn)軟件的工程化生產(chǎn)。但是,軟件工程不能停留在已有的技術水平上,應積極主動地采納或創(chuàng)造新的軟件技術,要注意不斷總結(jié)經(jīng)驗,收集工作量、進度、成本等數(shù)據(jù),并進行出錯類型和問題報告的統(tǒng)計。這些數(shù)據(jù)既可用來評估新的軟件技術的效果,又可用來指明應優(yōu)先進行研究的軟件工具和技術。7.承認不斷改進軟件工程實踐的必要性102通常把在軟件生命周期全過程中使用的一整套技術方法的集合稱為方法學(methodology),也稱為范型(paradigm)。軟件工程方法學包含3個要素:方法、工具和過程。方法是完成軟件開發(fā)的各項任務的技術方法;工具是為運用方法而提供的自動的或半自動的軟件工程支撐環(huán)境;過程是為了獲得高質(zhì)量的軟件所需要完成的一系列任務的框架,它規(guī)定了完成各項任務的工作步驟。目前使用最廣泛的軟件工程方法學,分別是傳統(tǒng)方法學和面向?qū)ο蠓椒▽W。1.2.3軟件工程方法學通常把在軟件生命周期全過程中使用的一整套技術方法的集合稱為方103傳統(tǒng)方法學

傳統(tǒng)方法學也稱為生命周期方法學或結(jié)構化范型。它采用結(jié)構化技術來完成軟件開發(fā)的各項任務,并使用適當?shù)能浖ぞ呋蜍浖h(huán)境來支持結(jié)構化技術的運用。這種方法學把軟件生命周期的全過程依次劃分為若干個階段,然后順序的完成每個階段的任務。前一個階段任務的完成是開始進行后一個階段工作的前提和基礎,每一階段的開始和結(jié)束都有嚴格標準。在每一階段結(jié)束之前都必須進行正式嚴格的技術審查和管理復審。傳統(tǒng)方法學1042.面向?qū)ο蠓椒▽W

面向?qū)ο蠓椒▽W是一種以數(shù)據(jù)為主線,把數(shù)據(jù)和對數(shù)據(jù)的操作緊密地結(jié)合起來的方法,它具有下述4個要點:把對象作為融合了數(shù)據(jù)及在數(shù)據(jù)上的操作行為的統(tǒng)一的軟件構件。把所有對象都劃分成類。按照父類與子類的關系,把若干個相關類組成一個層次結(jié)構的系統(tǒng)。對象彼此間僅能通過發(fā)送消息互相聯(lián)系。

2.面向?qū)ο蠓椒▽W1051.3軟件生命周期請問:你將如何來組織開發(fā)一個基于B/S結(jié)構的工資管理系統(tǒng)?1.3軟件生命周期請問:你將如何來組織開發(fā)一個基于B/S結(jié)1061.3軟件生命周期軟件生命周期由軟件定義、軟件開發(fā)和運行維護3個時期組成,每個時期又進一步劃分為若干個階段。軟件定義時期的任務是:確定軟件開發(fā)工程必須完成的總目標;確定工程的可行性;到處實現(xiàn)工程目標應該采用的策略及系統(tǒng)必須完成的功能;估計完成該項工程需要的資源和成本,并制定工程進度表。這一時期可劃分為三個階段:問題定義、可行性研究、需求分析。軟件開發(fā)時期的任務是:具體設計和實現(xiàn)在前一個時期定義的軟件。這一時期由四階段組成:總體設計、詳細設計、編碼和單元測試、綜合測試。軟件維護時期的任務是:當軟件在使用過程中發(fā)現(xiàn)錯誤時加以改正;當環(huán)境改變時修改軟件以適應新的環(huán)境;當用戶有新要求時及時改進軟件以滿足用戶的新需要。1.3軟件生命周期軟件生命周期由軟件定義、軟件開發(fā)和運行維107維護綜合測試編碼和單元測試詳細設計總體設計需求分析可行性研究問題定義定義時期開發(fā)時期維護時期維護綜合測試編碼和詳細設計總體設計需求分析可行性研究問題定義108問題定義

問題定義階段要回答的關鍵問題是“要解決的問題是什么?”通過對客戶的訪問調(diào)查,系統(tǒng)分析員扼要的寫出關于問題性質(zhì)、工程目標和工程規(guī)模的書面報告,經(jīng)過討論和必要的修改之后,這份報告還應該得到客戶的確認。問題定義1092.可行性研究本階段的任務是根據(jù)用戶提出的工程項目的性質(zhì)、目標和規(guī)模,進一步了解用戶的要求及現(xiàn)有的環(huán)境及條件,從技術、經(jīng)濟和社會等多方面研究并論證該項目的可行性。即該項目是否值得去解決,是否存在可行的解決辦法。此時,系統(tǒng)分析人員應在用戶的配合下對用戶的要求和現(xiàn)有的環(huán)境進行深入調(diào)查并寫出調(diào)研報告。進而進行可行性論證??尚行哉撟C包括經(jīng)濟可行性、技術可行性、操作可行性、法律可行性等。在此基礎上還要制定初步的項目計劃,包括需要的軟硬件資源、定義任務、風險分析、成本/效益分析以及進度安排等。可行性研究的結(jié)果將是使用部門負責人做出是否繼續(xù)進行該項目決定的重要依據(jù)。2.可行性研究1103.需求分析需求分析的任務是確定待開發(fā)的軟件系統(tǒng)“做什么”。軟件系統(tǒng)需求一般由用戶提出。系統(tǒng)分析員和開發(fā)人員在需求分析階段必須與用戶反復討論、協(xié)商,充分交流信息,并用某種方法和工具構建軟件系統(tǒng)的邏輯模型。需求分析階段的主要成果有軟件需求規(guī)格說明書、軟件驗收測試計劃和準則、初步的用戶手冊等。其中,軟件需求規(guī)格說明書(SoftwareRequirementsSpecification,即SRS)是一個關鍵性的文檔。3.需求分析1114.總體設計這個階段必須回答的關鍵問題是:“概括地說,應該怎樣實現(xiàn)目標系統(tǒng)?”這一階段對需求規(guī)格說明中提供的軟件系統(tǒng)邏輯模型進行進一步的分解,從而建立軟件系統(tǒng)的總體結(jié)構和各子系統(tǒng)之間、各模塊之間的關系,定義各子系統(tǒng)接口界面和各功能模塊的接口,設計全局數(shù)據(jù)庫或數(shù)據(jù)結(jié)構,規(guī)定設計約束,制定組裝測試計劃,進而給出每個功能模塊的功能描述、全局數(shù)據(jù)定義和外部文件定義等??傮w設計階段的主要成果有概要設計說明書、數(shù)據(jù)庫或數(shù)據(jù)結(jié)構說明書、組裝測試計劃等文檔4.總體設計1125.詳細設計詳細設計是將概要設計產(chǎn)生的功能模塊進一步細化,形成可編程的程序模塊,然后設計程序模塊的內(nèi)部細節(jié),包括算法、數(shù)據(jù)結(jié)構以及各程序模塊間的接口信息,并設計模塊的單元測試計劃。可以采用結(jié)構化的設計方法,采用結(jié)構化的程序流程圖、N-S圖、過程設計語言(PDL,ProcedureDesignLanguage)等工具進行描述,也可以采用面向?qū)ο蟮脑O計方法等等。詳細設計階段的主要成果是“詳細設計規(guī)格說明”(或稱“模塊開發(fā)卷宗”)和單元測試計劃等詳細設計文檔。5.詳細設計1136.編碼和單元測試編碼的主要任務是根據(jù)詳細設計規(guī)格說明,用某種選定的程序設計語言把詳細設計的結(jié)果轉(zhuǎn)化為機器可運行的源程序模塊,這是一個編程和調(diào)試程序的過程。編碼階段應注意遵循編程標準、養(yǎng)成良好的編程風格,以便編寫出正確的便于理解、調(diào)試和維護的程序模塊。單元測試:每編寫出一個程序模塊的源程序,調(diào)試通過后,即對該模塊進行測試,這稱為單元測試。這一階段結(jié)束時應提供按一定規(guī)則存在盤上的通過單元測試的各功能模塊的集合、詳細的單元測試報告等文檔。6.編碼和單元測試1147.綜合測試這個階段的關鍵任務是通過各種類型的測試和調(diào)試使軟件達到預定的要求。最基本的測試是集成測試和驗收測試。集成測試是根據(jù)概要設計提供的軟件結(jié)構、各功能模塊的說明和集成測試計劃,把經(jīng)過單元測試檢驗的模塊按照某種選定的策略逐步進行裝配和測試。驗收測試是按照驗收測試計劃和準則對軟件系統(tǒng)進行測試,看其是否達到了需求規(guī)格說明中定義的全部功能和性能等方面的需求。這一階段應將測試計劃、詳細測試方案和實際測試結(jié)果保存為相應的文檔,作為軟件配置的一個組成部分。7.綜合測試1158.軟件維護軟件維護的任務是通過各種維護活動使軟件系統(tǒng)持久地滿足用戶的需求。每項維護活動實質(zhì)上都是一次壓縮和簡化了的軟件定義和軟件開發(fā)過程。都要經(jīng)歷提出維護要求、分析維護要求、提出維護方案、審批維護方案、確定維護計劃、修改軟件設計、修改程序、測試程序、評審、驗收等步驟。通常有四類維護活動:改正性維護、適應性維護、完善性維護和預防性維護。每一項維護活動都應該準確記錄下來,作為正式的文檔資料加以保管。8.軟件維護1161.4軟件過程軟件過程是為了獲得高質(zhì)量軟件所需要完成的一系列任務的框架,它規(guī)定了完成各項任務的工作步驟。過程定義了運用方法的順序、應該交付的文檔資料、為保證軟件質(zhì)量和協(xié)調(diào)變化所需要采取的管理措施,以及標志軟件開發(fā)各個階段任務完成的里程碑??茖W、有效的軟件過程應該定義一組適合于所承擔的項目特點的任務集合。通常使用生命周期模型間接的描述軟件過程;生命周期模型也稱為過程模型。1.4.1瀑布模型1.4.2快速原型模型1.4.3增量模型1.4.4螺旋模型1.4軟件過程軟件過程是為了獲得高質(zhì)量軟件所需要完成的一系117

瀑布模型(waterfallmodel)是由W.Royce于1970年提出來的。又稱為軟件生存周期模型。瀑布模型嚴格按照軟件生存周期各個階段來進行開發(fā),上一階段的輸出即是下一階段的輸入,并強調(diào)每一階段的嚴格性。它規(guī)定了各階段的任務和應提交的成果及文檔,每一階段的任務完成后,都必須對其階段性產(chǎn)品(主要是文檔)進行評審,通過后才能開始下一階段的工作。因此,它是一種以文檔作為驅(qū)動的模型。瀑布模型具有以下幾個特征:1.階段間的順序性和依賴性2.推遲實現(xiàn)的觀點3.質(zhì)量保證的觀點

1.4.1瀑布模型瀑布模型(waterfallmodel)是由W.Ro118需求分析驗證編碼驗證規(guī)格說明驗證設計驗證綜合測試維護變化的需求驗證瀑布模型需求分析驗證編碼驗證規(guī)格說明驗證設計驗證綜合測試維護變化的需119瀑布模型的優(yōu)點可以強迫開發(fā)人員采用規(guī)范的方法;嚴格規(guī)定了每個階段必須提交的文檔;要求每個階段交出的所有產(chǎn)品都必須經(jīng)過質(zhì)量保證小組的仔細驗證。瀑布模型的缺點在軟件開發(fā)的初期階段就要求做出正確、全面、完整的需求分析對許多應用軟件來說是極其困難的。在需求分析階段,當需求確定后,無法及時驗證需求是否正確、完整。作為整體開發(fā)的瀑布模型,由于不支持產(chǎn)品的演化,缺乏靈活性,對開發(fā)過程中很難發(fā)現(xiàn)的錯誤,只有在最終產(chǎn)品運行時才能暴露出來,從而使軟件產(chǎn)品難以維護。瀑布模型的優(yōu)點120瀑布模型適用的場合

瀑布模型一般適用于功能、性能明確、完整、無重大變化的軟件系統(tǒng)的開發(fā)。例如操作系統(tǒng)、編譯系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)等系統(tǒng)軟件的開發(fā)。應用有一定的局限性。瀑布模型適用的場合121原型模型(prototypingmodel)的基本框架是軟件開發(fā)人員根據(jù)用戶提出的軟件基本需求快速開發(fā)一個原型,以便向用戶展示軟件系統(tǒng)應有的部分或全部功能和性能,在征求用戶對原型的評價意見后,進一步使需求精確化、完全化,并據(jù)此改進、完善原型,如此迭代,直到軟件開發(fā)人員和用戶都確認軟件系統(tǒng)的需求并達成一致的理解為止。軟件需求確定后,便可進行設計,編碼、測試等以后的各個開發(fā)步驟。1.4.2快速原型模型原型模型(prototyping122快速原型驗證編碼驗證規(guī)格說明驗證設計驗證綜合測試維護變化的需求驗證快速原型模型快速原型驗證編碼驗證規(guī)格說明驗證設計驗證綜合測試維護變化的需123快速原型模型適用的場合原型模型比瀑布模型更符合人們認識事物的過程和規(guī)律,是一種較實用的開發(fā)框架。它適合于那些不能預先確切定義需求的軟件系統(tǒng)的開發(fā),更適合于那些項目組成員(包括分析員、設計員、程序員和用戶)不能很好交流或通信有困難的情況。快速原型模型適用的場合124增量模型也稱為漸增模型,使用增量模型開發(fā)軟件時,把軟件產(chǎn)品作為一系列的增量構件來設計、編碼、集成和測試。每個構建由多個相互作用的模塊構成,并且能夠完成特定的功能。把軟件產(chǎn)品分解成增量構件時,應該使構件的規(guī)模適中。分解時唯一必須遵守的約束條件是,當把新構件集成到現(xiàn)有軟件中時,所形成的產(chǎn)品必須是可測試的。用增量模型開發(fā)軟件時,是分批地逐步向用戶提交產(chǎn)品。1.4.3增量模型增量模型也稱為漸增模型,使用增量模型開發(fā)軟件時,把軟件產(chǎn)品作125需求分析驗證規(guī)格說明驗證設計驗證維護針對每個構件,完成詳細設計、編碼和集成,經(jīng)測試后交付給用戶增量模型需求分析驗證規(guī)格說明驗證設計驗證維護針對每個構件,完成增量模126增量模型的優(yōu)點能在較短時間內(nèi)向用戶提交可完成部分工作的產(chǎn)品。逐步增加產(chǎn)品功能可以使用戶有較充裕的時間

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論