軟件技術(shù)第5、6、7章:算法程序語言軟件工程.ppt_第1頁
軟件技術(shù)第5、6、7章:算法程序語言軟件工程.ppt_第2頁
軟件技術(shù)第5、6、7章:算法程序語言軟件工程.ppt_第3頁
軟件技術(shù)第5、6、7章:算法程序語言軟件工程.ppt_第4頁
軟件技術(shù)第5、6、7章:算法程序語言軟件工程.ppt_第5頁
已閱讀5頁,還剩100頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、軟件技術(shù)基礎(chǔ)( 算法 Algorithm程序設(shè)計語言 Programming language軟件工程 Software Engineering ),教學(xué)團隊:陽小華 劉志明 楚燕婷等 University of South China School of Computer Science&Software (,學(xué)習(xí)內(nèi)容,1 概述 2 算法 3 程序設(shè)計 4 軟件工程,1 概 述,什么是計算機軟件?,操作系統(tǒng)、QQ、360,計算機系統(tǒng)=硬件+軟件,程序以及相關(guān)的文檔的集合。,什么是文檔?,文檔:記錄軟件開發(fā)活動和階段性成果,理解軟件所必需的闡述性資料。 需求分析文檔 軟件設(shè)計文擋等 編寫文檔目

2、的 促進對軟件的開發(fā)、管理和維護; 便于各種人員(用戶、開發(fā)人員)的交流,什么是程序?,程序一詞源于生活。做任何一件事情,都是有程序的。 例如,下面是某一個學(xué)校頒獎大會的程序: 宣布大會開始 校長講話 宣布獲獎名單 頒獎 獲獎代表發(fā)言 宣布大會結(jié)束 按順序?qū)嵤┻@些步驟就完成了該事情。,用計算機完成某事情,就把事先設(shè)計好的計算機處理信息的步驟,用計算機能夠識別的指令編寫出來,送入計算機。計算機按照指令執(zhí)行,就能完成指定的工作。,算法,程序設(shè)計語言,可以說程序就是用計算機語言表述的算法。,為解決一個問題而采取的方法和步驟,就稱為算法。,什么是算法?,一個農(nóng)夫帶著一只狼、一只羊和一棵白菜,身處河南岸

3、,要把東西全部運到北岸。約束條件是只有一條能容下他和一件物品的小船,只有農(nóng)夫能撐船。不能單獨留下羊和白菜,也不能單獨留下羊和狼。,例如:,農(nóng)夫過河算法,帶羊到對岸 空手回本岸 帶菜到對岸 帶羊回本岸 帶狼到對岸 空手回本岸 帶羊到對岸,帶羊到對岸 空手回本岸 帶狼到對岸 帶羊回本岸 帶菜到對岸 空手回本岸 帶羊到對岸,或,在使用計算機解題前,需要將解題方法轉(zhuǎn)換成一系列具體的在計算機上可執(zhí)行的步驟,這些步驟能夠清楚的反映解題方法一步步“怎么做”的過程,這個過程就是通常所說的算法。 算法:解題過程的準確、完整的描述稱作解該問題的算法。,什么是計算機語言?,人們想和計算機交流,用符號來表達。計算機通

4、過事先約定好的符號與意義的對應(yīng)關(guān)系,把人用符號表達的內(nèi)容讀懂,再按照這些符號的意思去執(zhí)行。,怎樣維護交通秩序? 音樂是怎樣表示的?,用來表達這種關(guān)系的符號系統(tǒng)就是計算機語言,也叫“程序設(shè)計語言”。人與計算機交流使用的是“程序設(shè)計語言”。同人類語言一樣,程序設(shè)計語言也是由字、詞和語法規(guī)則構(gòu)成的一個系統(tǒng)。,軟件的分類,系統(tǒng)軟件 操作系統(tǒng) 語言編譯和解釋系統(tǒng) 網(wǎng)絡(luò)軟件 數(shù)據(jù)庫管理系統(tǒng)(DBMS) 各種服務(wù)程序,應(yīng)用軟件 業(yè)務(wù)軟件 科技計算軟件 個人計算機軟件 人工智能軟件 ,軟件開發(fā)過程?,有一個工程:建一座橋梁。我們會怎么做? 了解橋梁的要求、用途設(shè)計維護 開發(fā)大型軟件: 定義開發(fā)維護,2 算 法

5、,算法的表示 算法的要素 算法的特點 算法的復(fù)雜度 常用算法,主要內(nèi)容,算法的表示,算法一般可以使用下面幾種類型的工具描述算法: 1.自然語言 自然語言描述算法通俗易懂,但它有著難以克服的缺陷: (1)易產(chǎn)生歧義性 武松打死老虎 (2)語句繁瑣冗長,很難清楚地表達算法的邏輯流程 (3)不便于直接轉(zhuǎn)換成程序,例:求12345。 最原始方法: 步驟1:先求12,得到結(jié)果2。 步驟2:將步驟1得到的乘積2乘以3,得到結(jié)果6。 步驟3:將6再乘以4,得24。 步驟4:將24再乘以5,得120。 這樣的算法雖然正確,但太繁。,改進的算法: S1: 使t=1 S2: 使i=2 S3: 使ti, 乘積仍然放

6、在在變量t中,可表示為tit S4: 使i的值+1,即i+1i S5: 如果i5, 返回重新執(zhí)行步驟S3以及其后的S4和S5;否則,算法結(jié)束。 如果計算100!只需將S5:若i5改成i100即可。,2.專用圖形工具 常用的有流程圖、PAD圖和N-S圖等,流程圖描述,3.偽代碼 為了便于轉(zhuǎn)換成某種編程語言,一般采用 準程序設(shè)計語言作算法描述語言。,偽代碼描述:,BEGIN(算法開始) 1=t 2=i while i t i+1=i print t END(算法結(jié)束),算法兩要素,算法的兩要素 算法由操作與控制結(jié)構(gòu)兩要素組成。 1.操作 (1)邏輯運算:“與”、“或”、“非”; (2)算術(shù)運算:加

7、、減、乘、除; (3)數(shù)據(jù)比較:大于、小于、等于、不等于; (4)數(shù)據(jù)傳送:輸入、輸出、賦值。,2.控制結(jié)構(gòu),1)算法的控制結(jié)構(gòu),決定了各操作的執(zhí)行次序。用流程圖可以形象地表示出算法的控制結(jié)構(gòu)。 2)任何復(fù)雜的算法都可以用順序、選擇、循環(huán)三種控制結(jié)構(gòu)組合而成。,我們在構(gòu)造一個算法的時候,也僅以這三種基本結(jié)構(gòu)作為“建筑單元”,遵守三種基本結(jié)構(gòu)的規(guī)范。基本結(jié)構(gòu)之間可以并列、可以相互包含,但不允許交叉。 正因為整個算法都由這三種基本結(jié)構(gòu)構(gòu)成,所以結(jié)構(gòu)清晰,易于驗證,易于糾錯。這種方法就是結(jié)構(gòu)化方法。,算法的特征,有窮性 一個算法必須總是在執(zhí)行有窮步后結(jié)束,且每一步都可在有窮時間內(nèi)完成; 確定性 算法

8、中的每一個指令必須有明確的含義,不能有二義性; 例:武松打死老虎 歧義 手舉過頭頂 單手?雙手?舉多高? 可行性(有效性) 算法中描述的操作都是可通過已經(jīng)實現(xiàn)的基本運算、執(zhí)行有限次實現(xiàn)的; 例:a/b 若b=0則無效,輸入 一個算法應(yīng)有0個或多個輸入; 輸出 一個算法應(yīng)有1個或多個輸出。,算法的復(fù)雜度,求解一個問題可能有多種不同的算法,評價算法的標準主要有: 執(zhí)行算法所耗費的時間,即時間復(fù)雜度; 執(zhí)行算法所耗費的存貯空間,主要是輔助空間,即空間復(fù)雜度。,思考:給出一組數(shù)12、13、26、27、38、49、55、60、67、86,查找某一個數(shù)x是否在這組數(shù)中的算法?,的時間復(fù)雜度?,常 用 算

9、法,枚舉法是一種比較笨但卻很有效的算法,他針對問題所有的可能一一查看是不是符合條件, 一種情況他都不想落下,有寧可錯殺一千,不可放過一個的作風(fēng)。,先依據(jù)題目的部分條件確定答案的大致范圍,在此范圍內(nèi)對所有可能的情況逐一驗證,直到全部情況驗證完。 若某個情況使驗證符合題目的條件,則為本題的一個答案;若全部情況驗證完后均不符合題目的條件,則問題無解。,1.枚舉法,例:公雞每只五元,母雞每只三元,小雞三只一元,問百元買百雞有幾種買法?,假設(shè)公雞數(shù)為x,母雞數(shù)為y,則小雞數(shù)是100-x-y,也就有了下面的方程式: 3*x+5*y+(100-x-y)/3=100 從方程式中看出:公雞最多有33只,最少是沒

10、有,即x的范圍是0-33;母雞,即y的范圍是0-20;有了公雞母雞,小雞數(shù)自然就是100-x-y只。,可能的方案一共有34*21種,這些方案中,可能有一種或幾種正好符合相等的條件。我們就將上述34*21種方案全部過濾一遍,找出符合百錢買百雞條件的(也即上式),只要符合,這就是我們要的輸出結(jié)果。,2.遞推法,遞推法,就是找出和時間先后相聯(lián)系或和數(shù)的大小相聯(lián)系的步驟,上一步和下一步和數(shù)字的增大或減小有一定的聯(lián)系。我們要么從前向后(或從小到大)推導(dǎo),也可從后向前(或從大到小)推導(dǎo)。由此得出兩種推導(dǎo)方法:順推法和倒推法。,例:猴子分食桃子 一天,一只猴子采得一堆桃子,當(dāng)天它吃掉一半多一個,第二天又吃了

11、一半多一個一直到第七天,它就剩一個桃子了。那么那天它共采了多少個桃子呢?,找一下天數(shù)和桃子數(shù)的關(guān)系。如果從第1天開始往第7天找,不好找,但如果從第7天到第1天去找,可得出下面的推導(dǎo)式: 第N天 桃子數(shù)目 7 s7=1 6 s6=(s7+1)*2 5 s5=(s6+1)*2 1 s1=(s2+1)*2,算法: S1: 使s=1 S2: 使t=7 S3: 使(s+1)2, 結(jié)果仍然放在變量s中,可表示為(s+1)2 s S4: 使t的值-1,即t-1t S5: 如果t=1, 返回重新執(zhí)行步驟S3以及其后的S4和S5;否則,算法結(jié)束。,3.遞歸法,如果一個過程直接或間接地調(diào)用它自身,則 稱該過程是遞

12、歸的。,遞歸就象我們講的那個故事:山上有座廟,廟里有個老和尚,老和尚在講故事,它講的故事是:山上有座廟,廟里有個老和尚,老和尚在講故事也就是直接或間接地調(diào)用了其自身。 例:求階乘。,算法:,S1: 如果n=1,返回結(jié)果1,結(jié)束。 s2: 保存當(dāng)前階數(shù)n。 S2: n-1 n ,遞歸調(diào)用自己, S3: 取出當(dāng)前階數(shù),計算n*(n-1)! S4: 返回計算結(jié)果,結(jié)束,例:有一個nm的棋盤(2=n=50,2=m=50),在棋盤上有一個馬,馬走的規(guī)則為:馬走日字且只能向右走。當(dāng)n,m給出之后,同時給出馬起始的位置和終點的位置,找出從起點到終點的所有路徑的數(shù)目。 分析:為了解決這個問題,我們將棋盤的橫坐

13、標規(guī)定為x,縱坐標規(guī)定為y,x的值從1到m,y的值從1到n。棋盤上的每一個點,可以表示為:(x坐標值,y坐標值),比如(3,5)表示第3列和第5行相交的點。,4.回溯法,回溯算法:從一條路往前走,能進則進,不能進則退回來,換一條路再試。,以一個44的棋盤為例: 首先將起點(1,1)作為當(dāng)前位 置,按照象棋馬的移動規(guī)則,可以 移動到(2,3)和(3,2)。 假如移動到(2,3),以(2,3)作 為新的當(dāng)前位置,又可以移動到(4,4)、(4,2)和(3,1)。繼 續(xù)移動,假如移動到(4,4)。 從當(dāng)前位置(4,4)回溯到(2,3),(2,3)再次成為當(dāng)前位 置。從(2,3)開始,換另外一個相鄰位置

14、移動,移動到(4,2) 然后是(3,1)。 (2,3)的所有相鄰位置都已經(jīng)搜索過。從(2,3)回溯到 (1,1),(1,1)再次成為當(dāng)前位置。從(1,1)開始,還可以移 動到(3,2),從(3,2)繼續(xù)移動,可以移動到(4,4),這時, 所有可能的路徑都已經(jīng)試探完畢,搜索過程結(jié)束。,Separating the Chain Using Only Three Cuts,一位拿著由7個金環(huán)組成的鏈子的旅行者必須在一個酒店里住7也,每一夜的 租金是金鏈中的一環(huán),應(yīng)該怎樣對鏈子進行最少次數(shù)的切割,旅行者才能每天早 上支付飯店的一環(huán)而不用提前支付住宿費?,Solving the Problem with

15、 Only One Cut,說明什么問題?,3 程序設(shè)計基礎(chǔ),計算機程序是用計算機程序設(shè)計語言按照一定的規(guī)范書寫出來的一系列動作,表達了程序設(shè)計者要求計算機執(zhí)行的操作。 對于計算機來說,一組機器指令就是程序。,一個程序應(yīng)包括: 對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(data structure)。 對操作的描述。即操作步驟,也就是算法(algorithm)。 Nikiklaus Wirth提出的公式: 數(shù)據(jù)結(jié)構(gòu)+算法 = 程序,例:開會的程序:發(fā)言+步驟 做菜的程序:原料+步驟,改進: 程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法 +語言工具和環(huán)境 這4個方面是一個程序涉及

16、人員所應(yīng)具備的知識。,程序設(shè)計語言,1.發(fā)展的過程 程序設(shè)計語言分類:機器語言、匯編語言、高級語言,Evolution of Programming Paradigms(程序設(shè)計范型或軟件開發(fā)范型),計算機能理解的就是0和1。在計算機誕生后的很長一段時間以來,程序員寫程序,不過是拿著一卷長長的紙條,然后再拿支筆在紙條上畫圈圈畫完以后,程序員有專門的“秘書”,負責(zé)在紙上有圈圈的地方打個孔,然后將長長的紙卷塞入當(dāng)時的計算機,計算機就開始“讀”程序了。它是如何理解的?無非就是用光束照射紙卷,有孔的地方透光,是,沒孔的不透光,是,或者是相反。,機器語言 機器語言是一種CPU指令系統(tǒng),是該CPU可以識別

17、的一組組由0和1序列組成的指令碼。 最初的語言是機器語言,二進制編碼,機器可直接執(zhí)行。 例:,00000001000000001000 數(shù)據(jù)裝入寄存器0 00000001000100001010 數(shù)據(jù)裝入寄存器1 00000101000000000001 寄存器0與1的數(shù)據(jù)乘 00000001000100001001 數(shù)據(jù)裝入寄存器1 00000100000000000001 寄存器0與1的數(shù)據(jù)加 00000010000000001110 保存寄存器0里的數(shù) 難寫難讀,使用不便,程序開發(fā)效率極低。,匯編語言 用一些簡潔的英文字母、符號串來替代一個特定的指令的二進制串,比如,用“ADD”代表加法

18、,“MOV”代表數(shù)據(jù)傳遞等等。 例:load 0,a 將單元a的數(shù)據(jù)裝入寄存器0 load 1,b 將單元b的數(shù)據(jù)裝入寄存器1 mult 0,1 寄存器0與1的數(shù)據(jù)乘 load 1,c 將單元c的數(shù)據(jù)裝入寄存器1 add 0,1 寄存器0與1的數(shù)據(jù)加 save 0,d 將寄存器0里的數(shù)存入單元d,計算機無法直接執(zhí)行匯編語言程序,執(zhí)行前需要翻譯為機器指令。 最早是人自己翻譯,后來人們開發(fā)出“匯編系統(tǒng)”,讓計算機去完成這項工作。 匯編語言細節(jié)太多,程序無結(jié)構(gòu),缺乏組織手段,寫程序仍然很困難。,高級語言 具有類似文字的表現(xiàn)形式; 用類似數(shù)學(xué)的表達式形式描述基本計算; 用變量等概念取代低級的存儲概念,

19、人們擺脫了繁瑣的存儲安排工作; 提供高級流程控制手段和程序組織手段。 例:d=a*b+c 高級語言程序必須經(jīng)過翻譯變成機器語言程序。翻譯有兩種做法:編譯和解釋,相應(yīng)的翻譯工具分別叫做編譯器和解釋器。,匯編語言VS高級語言,DATA SEGMENT XX DB X YY DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS: DATA START:MOV AX,DATA MOV DS,AX MOV AL,XX CMP AL,0 JGE BLGR MOV AL 0FFHAL, MOV YY,AL HLT BLGR:JE EQUT MOV AL 01HAL, M

20、OV YY,AL HLT EQUT:MOVE YY,AL HLT CODE ENDS ENDSTART,If x0 then y=1 elseif x=0 then y=0 else y=-1 endif Print x,y,幾種高級程序語言,FORTRAN(Formula Translator)1954 BASIC(Beginner All purpose Symbolic In struction Code) Pascal PROLO G(Programming in Logic) C語言,70年代初期 C+語言,80年代 Java語言,1995年5月,Eclipse C#,C#3.0,云

21、計算時代最具潛力的12種編程語言,DART、Ceylon、GO、F#、OPA、Fantom、Zimbu、X10、Haxe、Chapel,2.常見的結(jié)構(gòu)化程序控制,程序設(shè)計方法,面向過程(Process-oriented)的程序設(shè)計,面向過程的程序設(shè)計強調(diào)模塊化和結(jié)構(gòu)化。采用自頂向下、逐步求精的程序設(shè)計方法;使用三種基本控制結(jié)構(gòu)構(gòu)造程序。遵循這種方法的程序設(shè)計就是面向過程的程序設(shè)計。,面向過程的程序設(shè)計,在數(shù)據(jù)處理過程中,采用自頂向下、分而治之的方法,將整個程序按功能劃分為幾個可獨立編程的子過程模塊,每一子模塊完成指定的子任務(wù),并且提供一個清晰、嚴格的調(diào)用界面,主過程通過調(diào)用各子過程完來成全部處

22、理工作。 常用軟件:C,F(xiàn)ORTRAN,PASCAL等。,程序分解實例:,面向?qū)ο?Object-oriented)的程序設(shè)計,什么是對象?,現(xiàn)實世界中,比如書、人、車都是對象。我們怎么區(qū)分它們呢?從組成以及他們的動作行為。 比如:人 組成:一個腦袋,兩條腿,兩個胳臂 動作行為:說話,吃飯,跑步,流淚,對象,對象是存在的具體實體,具有明確定義的狀態(tài)和行為。,類(Class),“類是具有相同屬性和行為的一組對象的集合”,在面向?qū)ο缶幊讨校绦虮豢醋魇窍嗷f(xié)作的對象集合,通過消息來實現(xiàn)對象間的通訊。,每個對象都是某個類的實例,所有的類構(gòu)成一個通過繼承關(guān)系相聯(lián)系的層次結(jié)構(gòu)。,常用語言:Java、c+

23、、VB.Net等。,在結(jié)構(gòu)化程序設(shè)計中可以用下面的式子表示程序: 程序=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計語言+語言環(huán)境 在面向?qū)ο蟪绦蛟O(shè)計中可以用下面的式子表示程序: 程序=對象+對象+對象 對象=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計語言+語言環(huán)境,面向過程:分析出解決問題所需要的步驟,用函數(shù)把這些步驟一步一步實現(xiàn),使用的時候一個一個依次調(diào)用。 面向?qū)ο螅喊褬?gòu)成問題事務(wù)分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在解決問題中的行為。,例1:有一臺如下流程的演出:主持人開場演員1表演演員2表演主持人總結(jié)。 用面向過程的思想來分析,就是先完成主持人開場,再完成演員1的表演,再完成演員2的表

24、演,最后完成主持人的總結(jié)。 如果用面向?qū)ο蟮乃枷雭矸治?,就是:這個演出由兩大部分組成:主持人、演員。與主持人相關(guān)的:開場、總結(jié)。與演員相關(guān)的:演員編號、所演的節(jié)目。然后這臺演出就可以這樣策劃:需要一個主持人a,需要兩個演員b、c。演出的事情可以表示為:a的開場 b、c的編號和節(jié)目 a的總結(jié)。,例2:下五子棋 面向過程的設(shè)計思路就是首先分析問題的步驟: 1、開始游戲,2、黑子先走, 3、繪制畫面,4、判斷輸贏, 5、輪到白子,6、繪制畫面, 7、判斷輸贏,8、返回步驟2, 9、輸出最后結(jié)果。 把上面每個步驟用分別的函數(shù)來實現(xiàn),問題就解決了。,面向?qū)ο蟮脑O(shè)計思路是,整個五子棋可以分為: 1、黑白雙

25、方,這兩方的行為是一模一樣的, 2、棋盤系統(tǒng),負責(zé)繪制畫面, 3、規(guī)則系統(tǒng),負責(zé)判定諸如犯規(guī)、輸贏等。 第一類對象(玩家對象)負責(zé)接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責(zé)在屏幕上面顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進行判定。 可以明顯地看出,面向?qū)ο笫且怨δ軄韯澐謫栴},而不是步驟。,功能上的統(tǒng)一保證了面向?qū)ο笤O(shè)計的可擴展性。 比如我要加入悔棋的功能,如果要改動面向過程的設(shè)計,那么從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的順序都要進行大規(guī)模調(diào)整。如果是面向?qū)ο蟮脑?,只用改動棋盤對象就行了,棋盤系統(tǒng)保存了黑白雙方

26、的棋譜,簡單回溯就可以了,而顯示和規(guī)則判斷則不用顧及,同時整個對對象功能的調(diào)用順序都沒有變化,改動只是局部的。,再比如:把五子棋游戲改為圍棋游戲,如果是面向?qū)ο蟮?,只需要改寫?guī)則對象就可以刻;如果是面向過程的,五子棋的規(guī)則分布在程序的每個角落,要改動還不如重寫。,面向過程方法的特點,優(yōu)點: 這種程序設(shè)計方法算法描述準確。 對每一子過程模塊容易進行程序正確性證明。 缺點: 程序代碼可重用性差。程序中除少數(shù)標準庫函數(shù)外,每設(shè)計一個程序時,程序員幾乎從零做起。即使重用代碼,通常也是通過拷貝或編輯重新生成一份。 維護程序的一致性困難。前一步修改了導(dǎo)致以后步驟的修改。,OOP方法的特點,OOP以“對象”

27、或“數(shù)據(jù)”為中心。由于對象自然地反映了應(yīng)用領(lǐng)域的模塊性,因此具有相對穩(wěn)定性,可以被用作一個組件去構(gòu)成更復(fù)雜的應(yīng)用,又由于對象一般封裝的是某一實際需求的各種成分,因此,某一對象的改變對整個系統(tǒng)幾乎沒有影響。 引入了“類”的概念。類與類以層次結(jié)構(gòu)組織,屬于某個類的對象除具有該類所描述的特性外,還具有層次結(jié)構(gòu)中該類上層所有類描述的全部性質(zhì),OOP中稱這種機制為繼承。 OOP方法的模塊性與繼承性,保證了新的應(yīng)用程序設(shè)計可在原有對象的數(shù)據(jù)類型和功能的基礎(chǔ)上通過重用、擴展和細化來進行,而不必從頭做起或復(fù)制原有代碼,這樣,大大減少了重新編寫新代碼的工作量。,面向?qū)ο蟮某绦蛟O(shè)計方法與面向過程的程序設(shè)計方法的比

28、較,(1)以過程為中心構(gòu)造應(yīng)用程序,設(shè)計出的程序可重用代碼少,且當(dāng)代碼量增加時維護數(shù)據(jù)和代碼的一致性困難。 (2)面向?qū)ο蟪绦蛟O(shè)計方法中,對象所具有的封裝性和繼承性使得代碼重用成為可能,并大大減少了程序出錯的可能性。 (3)面向?qū)ο蠓椒ㄎ樟私Y(jié)構(gòu)化程序設(shè)計方法的優(yōu)點,同時引入了新概念、新機制并建立了比傳統(tǒng)方法更高層次的抽象。,4 軟件工程,軟件工程是分析、設(shè)計、實現(xiàn)、與維護軟件系統(tǒng)的一組規(guī)范,它指導(dǎo)著軟件開發(fā)人員以工程化的手段規(guī)范地開發(fā)高質(zhì)量的軟件。 軟件工程源于軟件危機。,軟件危機-軟件危機的表現(xiàn),成本高 美國空軍:1955年軟件占總費用(計算機系統(tǒng))的18%,70年60%,85年達到85。

29、 美國全球軍事指揮控制系統(tǒng),硬件1億美元,軟件高達7.2億美元。 軟件和硬件費用比不斷增加 我國某軍艦計算機CPU運行850小時,故障120多次,其中軟件占70%。,軟件質(zhì)量得不到保證 軟件越來越多的應(yīng)用于安全猶關(guān)(safety critical)的系統(tǒng),對軟件質(zhì)量提出更高的要求 80年代歐洲亞麗安娜火箭的發(fā)射失敗,原因是軟件錯誤 美國阿托拉斯火箭的發(fā)射失敗,原因是軟件故障 我國某型號導(dǎo)彈,由于軟件問題致使打靶失敗,進度難以控制 項目延期比比皆是 由于進度問題而取消的軟件項目較常見 只有一小部分的項目能夠按期完成 維護非常困難 軟件維護的多樣性 軟件維護的復(fù)雜性 軟件維護的副作用,產(chǎn)生軟件危機

30、的根源,復(fù)雜性高 邏輯產(chǎn)品,邏輯復(fù)雜性遠高于硬件復(fù)雜性 軟件的復(fù)雜性隨規(guī)模呈指數(shù)級上升 規(guī)模大 應(yīng)用擴大,代碼量,1000萬行,仍在不斷膨脹影響軟件生產(chǎn)率和質(zhì)量的因素比較復(fù)雜 人員的能力和水平 團隊合作 缺乏有效、系統(tǒng)原理、原則、方法和工具的指導(dǎo)和輔助,Software Engineering vs. Other Engineering Fields傳統(tǒng)工程,Building blocks(構(gòu)件,組件) Role of tolerances(誤差:傳統(tǒng)工程允許誤差范圍,軟件只有正確與不正確之分) Metrics(度量:傳統(tǒng)工程度量可通過故障的平均時間,而軟件不存在磨損),對軟件開發(fā)的深層次認識

31、,開發(fā)一個具有一定規(guī)模和復(fù)雜性的軟件系統(tǒng)與編寫一個簡單的程序不一樣。 正如建設(shè)狗窩和高樓大廈 大型、復(fù)雜軟件系統(tǒng)的開發(fā)是一項工程,必須按照工程化的方法組織軟件的生產(chǎn)和管理,必須經(jīng)過分析、設(shè)計、實現(xiàn)、測試、維護等一系列軟件過程和活動。,軟件工程的目標,軟件工程目標:生產(chǎn)具有正確性、可用性以及開銷合宜的產(chǎn)品。 正確性指軟件產(chǎn)品達到預(yù)期功能的程度。 可用性指軟件基本結(jié)構(gòu)、實現(xiàn)及文檔為用戶可用的程度。 開銷合宜是指軟件開發(fā)、運行的整個開銷滿足用戶要求的程度。,軟件工程強調(diào)使用生存周期方法學(xué)和各種結(jié)構(gòu)分析及結(jié)構(gòu)設(shè)計技術(shù)。,軟件工程方法,在完成生存周期每個階段的任務(wù)時,應(yīng)該采用適合該階段任務(wù)特點的系統(tǒng)化的

32、技術(shù)方法結(jié)構(gòu)分析或結(jié)構(gòu)設(shè)計技術(shù)。,生存周期方法學(xué)就指從時間角度對軟件開發(fā)和維護的復(fù)雜問題進行分解,把軟件生存的漫長周期依次劃分為若干個階段,每個階段有相對獨立的任務(wù),然后逐步完成每個階段的任務(wù)。,在每個階段結(jié)束之前都從技術(shù)和管理兩個角度進行嚴格的審查,合格之后才開始下一階段的工作,這就使軟件開發(fā)工程的全過程以一種有條不紊的方式進行,保證了軟件的質(zhì)量,特別是提高了軟件的可維護性。 總之,采用軟件工程方法論可以大大提高軟件開發(fā)的成功率,軟件開發(fā)的生產(chǎn)率也能明顯提高。,軟件生命周期,某一軟件從被提出并著手開始實現(xiàn),直到軟件完成其使命為止的全過程被劃分為一些階段,并稱這一全過程為軟件生命周期。 通常,

33、軟件生命周期分三個階段:軟件定義、軟件開發(fā)、運行維護。,(1) 可行性研究與計劃制定:確定開發(fā)目標和總的要求,給出功能、可靠性等可能方案,制定實施計劃。 (2) 需求分析:對軟件需求進行分析并給出詳細定義,編寫軟件規(guī)格說明書及初步的用戶手冊,提交評審。,1 軟件定義-軟件要“做什么”,(3) 系統(tǒng)設(shè)計:概要設(shè)計和詳細設(shè)計,給出軟件的結(jié)構(gòu)、模塊和功能的劃分等。編寫概要設(shè)計、詳細設(shè)計說明書和測試計劃初稿。 (4) 詳細設(shè)計:源程序編碼,把軟件設(shè)計轉(zhuǎn)換成計算機可以接受的程序代碼。編寫用戶手冊、操作手冊和單元測試計劃。 (5)編碼: (6)測試:設(shè)計測試用例,檢驗軟件各個組成部分。編寫測試分析報告。,

34、2 軟件開發(fā)軟件要“怎么做”,3 軟件運行和維護 (7) 軟件投入運行,維護(進行擴充和刪改)。,Traditional Development Phase傳統(tǒng)開發(fā)階段,軟件生命周期的開發(fā)步驟,Analysis分析,A major goal of analysis is to identify what the proposed system should accomplish Requirements(需求) The needs of the potential users Stated in terms of the application rather than in the techn

35、ical terminology Specifications(說明書) Technical descriptions of the requirements,Design設(shè)計,Design concentrates on how the system will accomplish the goals set in analysis System structure is established in design The best structure is a modular one Modularity(模塊化) Division of a software into manageabl

36、e units, each performs only part of the overall task Modular decomposition Makes the implementation of large systems possible Allows changes to be made on a modular basis,Implementation and Testing實現(xiàn)和測試,Implementation involves the actual writing of programs, creation of data files, and development o

37、f database Each module is normally tested as it is implemented Stubs(樁模塊) Simplified versions of modules used to test a certain module Feature(功能) test and load test Reliability growth test and certification test,軟件Development Models開發(fā)模型Recent Trends 趨勢,Waterfall(瀑布模型) Performs analysis, design, imp

38、lementation, and testing in a strictly manner Incremental(迭代模型) Software system is constructed in increments Prototyping(原型法) Incomplete versions of the proposed system (prototypes) are built and evaluated Evolutionary prototyping(演化式原型) Early prototyping and throwaway prototyping(拋棄式原型),Testing Methodology Based on Pareto Principle(基于Pareto法則的測試方法),Pareto principle The results can often be increased more rapidly by applying efforts in a concentrated area Thus a small number of modules within a large

溫馨提示

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

最新文檔

評論

0/150

提交評論