軟件技術(shù)第5、6、7章:算法程序語(yǔ)言軟件工程.ppt
《軟件技術(shù)第5、6、7章:算法程序語(yǔ)言軟件工程.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《軟件技術(shù)第5、6、7章:算法程序語(yǔ)言軟件工程.ppt(105頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
軟件技術(shù)基礎(chǔ)(算法Algorithm程序設(shè)計(jì)語(yǔ)言Programminglanguage軟件工程SoftwareEngineering),教學(xué)團(tuán)隊(duì):陽(yáng)小華劉志明楚燕婷等nhdxlzm@UniversityofSouthChinaSchoolofComputerScience&Software(,學(xué)習(xí)內(nèi)容,1概述2算法3程序設(shè)計(jì)4軟件工程,1概述,什么是計(jì)算機(jī)軟件?,操作系統(tǒng)、QQ、360……,計(jì)算機(jī)系統(tǒng)=硬件+軟件,程序以及相關(guān)的文檔的集合。,什么是文檔?,文檔:記錄軟件開(kāi)發(fā)活動(dòng)和階段性成果,理解軟件所必需的闡述性資料。–需求分析文檔–軟件設(shè)計(jì)文擋等編寫(xiě)文檔目的–促進(jìn)對(duì)軟件的開(kāi)發(fā)、管理和維護(hù);–便于各種人員(用戶、開(kāi)發(fā)人員)的交流,什么是程序?,程序一詞源于生活。做任何一件事情,都是有程序的。例如,下面是某一個(gè)學(xué)校頒獎(jiǎng)大會(huì)的程序:宣布大會(huì)開(kāi)始校長(zhǎng)講話宣布獲獎(jiǎng)名單頒獎(jiǎng)獲獎(jiǎng)代表發(fā)言宣布大會(huì)結(jié)束按順序?qū)嵤┻@些步驟就完成了該事情。,用計(jì)算機(jī)完成某事情,就把事先設(shè)計(jì)好的計(jì)算機(jī)處理信息的步驟,用計(jì)算機(jī)能夠識(shí)別的指令編寫(xiě)出來(lái),送入計(jì)算機(jī)。計(jì)算機(jī)按照指令執(zhí)行,就能完成指定的工作。,,算法,,,,,程序設(shè)計(jì)語(yǔ)言,,可以說(shuō)程序就是用計(jì)算機(jī)語(yǔ)言表述的算法。,,為解決一個(gè)問(wèn)題而采取的方法和步驟,就稱(chēng)為算法。,什么是算法?,一個(gè)農(nóng)夫帶著一只狼、一只羊和一棵白菜,身處河南岸,要把東西全部運(yùn)到北岸。約束條件是只有一條能容下他和一件物品的小船,只有農(nóng)夫能撐船。不能單獨(dú)留下羊和白菜,也不能單獨(dú)留下羊和狼。,例如:,農(nóng)夫過(guò)河算法,帶羊到對(duì)岸空手回本岸帶菜到對(duì)岸帶羊回本岸帶狼到對(duì)岸空手回本岸帶羊到對(duì)岸,帶羊到對(duì)岸空手回本岸帶狼到對(duì)岸帶羊回本岸帶菜到對(duì)岸空手回本岸帶羊到對(duì)岸,或,在使用計(jì)算機(jī)解題前,需要將解題方法轉(zhuǎn)換成一系列具體的在計(jì)算機(jī)上可執(zhí)行的步驟,這些步驟能夠清楚的反映解題方法一步步“怎么做”的過(guò)程,這個(gè)過(guò)程就是通常所說(shuō)的算法。算法:解題過(guò)程的準(zhǔn)確、完整的描述稱(chēng)作解該問(wèn)題的算法。,什么是計(jì)算機(jī)語(yǔ)言?,人們想和計(jì)算機(jī)交流,用符號(hào)來(lái)表達(dá)。計(jì)算機(jī)通過(guò)事先約定好的符號(hào)與意義的對(duì)應(yīng)關(guān)系,把人用符號(hào)表達(dá)的內(nèi)容讀懂,再按照這些符號(hào)的意思去執(zhí)行。,怎樣維護(hù)交通秩序?音樂(lè)是怎樣表示的?,用來(lái)表達(dá)這種關(guān)系的符號(hào)系統(tǒng)就是計(jì)算機(jī)語(yǔ)言,也叫“程序設(shè)計(jì)語(yǔ)言”。人與計(jì)算機(jī)交流使用的是“程序設(shè)計(jì)語(yǔ)言”。同人類(lèi)語(yǔ)言一樣,程序設(shè)計(jì)語(yǔ)言也是由字、詞和語(yǔ)法規(guī)則構(gòu)成的一個(gè)系統(tǒng)。,軟件的分類(lèi),系統(tǒng)軟件–操作系統(tǒng)–語(yǔ)言編譯和解釋系統(tǒng)–網(wǎng)絡(luò)軟件–數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)–各種服務(wù)程序,應(yīng)用軟件–業(yè)務(wù)軟件–科技計(jì)算軟件–個(gè)人計(jì)算機(jī)軟件–人工智能軟件…,軟件開(kāi)發(fā)過(guò)程?,有一個(gè)工程:建一座橋梁。我們會(huì)怎么做?了解橋梁的要求、用途—設(shè)計(jì)—維護(hù)開(kāi)發(fā)大型軟件:定義—開(kāi)發(fā)—維護(hù),,2算法,算法的表示算法的要素算法的特點(diǎn)算法的復(fù)雜度常用算法,主要內(nèi)容,算法的表示,算法一般可以使用下面幾種類(lèi)型的工具描述算法:1.自然語(yǔ)言自然語(yǔ)言描述算法通俗易懂,但它有著難以克服的缺陷:(1)易產(chǎn)生歧義性武松打死老虎(2)語(yǔ)句繁瑣冗長(zhǎng),很難清楚地表達(dá)算法的邏輯流程(3)不便于直接轉(zhuǎn)換成程序,例:求12345。最原始方法:步驟1:先求12,得到結(jié)果2。步驟2:將步驟1得到的乘積2乘以3,得到結(jié)果6。步驟3:將6再乘以4,得24。步驟4:將24再乘以5,得120。這樣的算法雖然正確,但太繁。,改進(jìn)的算法:S1:使t=1S2:使i=2S3:使ti,乘積仍然放在在變量t中,可表示為ti→tS4:使i的值+1,即i+1→iS5:如果i≤5,返回重新執(zhí)行步驟S3以及其后的S4和S5;否則,算法結(jié)束。如果計(jì)算100!只需將S5:若i≤5改成i≤100即可。,2.專(zhuān)用圖形工具常用的有流程圖、PAD圖和N-S圖等,流程圖描述,3.偽代碼為了便于轉(zhuǎn)換成某種編程語(yǔ)言,一般采用準(zhǔn)程序設(shè)計(jì)語(yǔ)言作算法描述語(yǔ)言。,偽代碼描述:,BEGIN(算法開(kāi)始)1=>t2=>iwhileiti+1=>i]printtEND(算法結(jié)束),算法兩要素,算法的兩要素算法由操作與控制結(jié)構(gòu)兩要素組成。1.操作(1)邏輯運(yùn)算:“與”、“或”、“非”;(2)算術(shù)運(yùn)算:加、減、乘、除;(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)組合而成。,我們?cè)跇?gòu)造一個(gè)算法的時(shí)候,也僅以這三種基本結(jié)構(gòu)作為“建筑單元”,遵守三種基本結(jié)構(gòu)的規(guī)范?;窘Y(jié)構(gòu)之間可以并列、可以相互包含,但不允許交叉。正因?yàn)檎麄€(gè)算法都由這三種基本結(jié)構(gòu)構(gòu)成,所以結(jié)構(gòu)清晰,易于驗(yàn)證,易于糾錯(cuò)。這種方法就是結(jié)構(gòu)化方法。,算法的特征,有窮性一個(gè)算法必須總是在執(zhí)行有窮步后結(jié)束,且每一步都可在有窮時(shí)間內(nèi)完成;確定性算法中的每一個(gè)指令必須有明確的含義,不能有二義性;例:武松打死老虎歧義手舉過(guò)頭頂單手?雙手?舉多高?可行性(有效性)算法中描述的操作都是可通過(guò)已經(jīng)實(shí)現(xiàn)的基本運(yùn)算、執(zhí)行有限次實(shí)現(xiàn)的;例:a/b若b=0則無(wú)效,輸入一個(gè)算法應(yīng)有0個(gè)或多個(gè)輸入;輸出一個(gè)算法應(yīng)有1個(gè)或多個(gè)輸出。,算法的復(fù)雜度,求解一個(gè)問(wèn)題可能有多種不同的算法,評(píng)價(jià)算法的標(biāo)準(zhǔn)主要有:–執(zhí)行算法所耗費(fèi)的時(shí)間,即時(shí)間復(fù)雜度;–執(zhí)行算法所耗費(fèi)的存貯空間,主要是輔助空間,即空間復(fù)雜度。,思考:給出一組數(shù)12、13、26、27、38、49、55、60、67、86,查找某一個(gè)數(shù)x是否在這組數(shù)中的算法?,的時(shí)間復(fù)雜度?,常用算法,枚舉法是一種比較笨但卻很有效的算法,他針對(duì)問(wèn)題所有的可能一一查看是不是符合條件,一種情況他都不想落下,有寧可錯(cuò)殺一千,不可放過(guò)一個(gè)的作風(fēng)。,先依據(jù)題目的部分條件確定答案的大致范圍,在此范圍內(nèi)對(duì)所有可能的情況逐一驗(yàn)證,直到全部情況驗(yàn)證完。若某個(gè)情況使驗(yàn)證符合題目的條件,則為本題的一個(gè)答案;若全部情況驗(yàn)證完后均不符合題目的條件,則問(wèn)題無(wú)解。,1.枚舉法,例:公雞每只五元,母雞每只三元,小雞三只一元,問(wèn)百元買(mǎi)百雞有幾種買(mǎi)法?,假設(shè)公雞數(shù)為x,母雞數(shù)為y,則小雞數(shù)是100-x-y,也就有了下面的方程式:3*x+5*y+(100-x-y)/3=100從方程式中看出:公雞最多有33只,最少是沒(méi)有,即x的范圍是0-33;母雞,即y的范圍是0-20;有了公雞母雞,小雞數(shù)自然就是100-x-y只。,可能的方案一共有34*21種,這些方案中,可能有一種或幾種正好符合相等的條件。我們就將上述34*21種方案全部過(guò)濾一遍,找出符合百錢(qián)買(mǎi)百雞條件的(也即上式),只要符合,這就是我們要的輸出結(jié)果。,2.遞推法,遞推法,就是找出和時(shí)間先后相聯(lián)系或和數(shù)的大小相聯(lián)系的步驟,上一步和下一步和數(shù)字的增大或減小有一定的聯(lián)系。我們要么從前向后(或從小到大)推導(dǎo),也可從后向前(或從大到?。┩茖?dǎo)。由此得出兩種推導(dǎo)方法:順推法和倒推法。,例:猴子分食桃子一天,一只猴子采得一堆桃子,當(dāng)天它吃掉一半多一個(gè),第二天又吃了一半多一個(gè)…一直到第七天,它就剩一個(gè)桃子了。那么那天它共采了多少個(gè)桃子呢?,找一下天數(shù)和桃子數(shù)的關(guān)系。如果從第1天開(kāi)始往第7天找,不好找,但如果從第7天到第1天去找,可得出下面的推導(dǎo)式:第N天桃子數(shù)目7s7=16s6=(s7+1)*25s5=(s6+1)*2…1s1=(s2+1)*2,算法:S1:使s=1S2:使t=7S3:使(s+1)2,結(jié)果仍然放在變量s中,可表示為(s+1)2→sS4:使t的值-1,即t-1→tS5:如果t>=1,返回重新執(zhí)行步驟S3以及其后的S4和S5;否則,算法結(jié)束。,3.遞歸法,如果一個(gè)過(guò)程直接或間接地調(diào)用它自身,則稱(chēng)該過(guò)程是遞歸的。,遞歸就象我們講的那個(gè)故事:山上有座廟,廟里有個(gè)老和尚,老和尚在講故事,它講的故事是:山上有座廟,廟里有個(gè)老和尚,老和尚在講故事……也就是直接或間接地調(diào)用了其自身。例:求階乘。,算法:,S1:如果n=1,返回結(jié)果1,結(jié)束。s2:保存當(dāng)前階數(shù)n。S2:n-1→n,遞歸調(diào)用自己,S3:取出當(dāng)前階數(shù),計(jì)算n*(n-1)!S4:返回計(jì)算結(jié)果,結(jié)束,例:有一個(gè)nm的棋盤(pán)(2<=n<=50,2<=m0theny=1elseifx=0theny=0elsey=-1endifPrintx,y,幾種高級(jí)程序語(yǔ)言,FORTRAN(FormulaTranslator)1954BASIC(BeginnerAllpurposeSymbolicInstructionCode)PascalPROLOG(ProgramminginLogic)C語(yǔ)言,70年代初期C++語(yǔ)言,80年代Java語(yǔ)言,1995年5月,EclipseC#,C#3.0,云計(jì)算時(shí)代最具潛力的12種編程語(yǔ)言,DART、Ceylon、GO、F#、OPA、Fantom、Zimbu、X10、Haxe、Chapel,2.常見(jiàn)的結(jié)構(gòu)化程序控制,程序設(shè)計(jì)方法,面向過(guò)程(Process-oriented)的程序設(shè)計(jì),面向過(guò)程的程序設(shè)計(jì)強(qiáng)調(diào)模塊化和結(jié)構(gòu)化。采用自頂向下、逐步求精的程序設(shè)計(jì)方法;使用三種基本控制結(jié)構(gòu)構(gòu)造程序。遵循這種方法的程序設(shè)計(jì)就是面向過(guò)程的程序設(shè)計(jì)。,面向過(guò)程的程序設(shè)計(jì),在數(shù)據(jù)處理過(guò)程中,采用自頂向下、分而治之的方法,將整個(gè)程序按功能劃分為幾個(gè)可獨(dú)立編程的子過(guò)程模塊,每一子模塊完成指定的子任務(wù),并且提供一個(gè)清晰、嚴(yán)格的調(diào)用界面,主過(guò)程通過(guò)調(diào)用各子過(guò)程完來(lái)成全部處理工作。常用軟件:C,F(xiàn)ORTRAN,PASCAL等。,程序分解實(shí)例:,面向?qū)ο?Object-oriented)的程序設(shè)計(jì),什么是對(duì)象?,,現(xiàn)實(shí)世界中,比如書(shū)、人、車(chē)都是對(duì)象。我們?cè)趺磪^(qū)分它們呢?從組成以及他們的動(dòng)作行為。比如:人組成:一個(gè)腦袋,兩條腿,兩個(gè)胳臂…動(dòng)作行為:說(shuō)話,吃飯,跑步,流淚…,對(duì)象,對(duì)象是存在的具體實(shí)體,具有明確定義的狀態(tài)和行為。,類(lèi)(Class),“類(lèi)是具有相同屬性和行為的一組對(duì)象的集合”,在面向?qū)ο缶幊讨?,程序被看作是相互協(xié)作的對(duì)象集合,通過(guò)消息來(lái)實(shí)現(xiàn)對(duì)象間的通訊。,每個(gè)對(duì)象都是某個(gè)類(lèi)的實(shí)例,所有的類(lèi)構(gòu)成一個(gè)通過(guò)繼承關(guān)系相聯(lián)系的層次結(jié)構(gòu)。,常用語(yǔ)言:Java、c++、VB.Net等。,在結(jié)構(gòu)化程序設(shè)計(jì)中可以用下面的式子表示程序:程序=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計(jì)語(yǔ)言+語(yǔ)言環(huán)境在面向?qū)ο蟪绦蛟O(shè)計(jì)中可以用下面的式子表示程序:程序=對(duì)象+對(duì)象+…+對(duì)象對(duì)象=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計(jì)語(yǔ)言+語(yǔ)言環(huán)境,面向過(guò)程:分析出解決問(wèn)題所需要的步驟,用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用。面向?qū)ο螅喊褬?gòu)成問(wèn)題事務(wù)分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在解決問(wèn)題中的行為。,例1:有一臺(tái)如下流程的演出:主持人開(kāi)場(chǎng)—演員1表演—演員2表演—主持人總結(jié)。用面向過(guò)程的思想來(lái)分析,就是先完成主持人開(kāi)場(chǎng),再完成演員1的表演,再完成演員2的表演,最后完成主持人的總結(jié)。如果用面向?qū)ο蟮乃枷雭?lái)分析,就是:這個(gè)演出由兩大部分組成:主持人、演員。與主持人相關(guān)的:開(kāi)場(chǎng)、總結(jié)。與演員相關(guān)的:演員編號(hào)、所演的節(jié)目。然后這臺(tái)演出就可以這樣策劃:需要一個(gè)主持人a,需要兩個(gè)演員b、c。演出的事情可以表示為:a的開(kāi)場(chǎng)——>b、c的編號(hào)和節(jié)目——>a的總結(jié)。,例2:下五子棋面向過(guò)程的設(shè)計(jì)思路就是首先分析問(wèn)題的步驟:1、開(kāi)始游戲,2、黑子先走,3、繪制畫(huà)面,4、判斷輸贏,5、輪到白子,6、繪制畫(huà)面,7、判斷輸贏,8、返回步驟2,9、輸出最后結(jié)果。把上面每個(gè)步驟用分別的函數(shù)來(lái)實(shí)現(xiàn),問(wèn)題就解決了。,面向?qū)ο蟮脑O(shè)計(jì)思路是,整個(gè)五子棋可以分為:1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤(pán)系統(tǒng),負(fù)責(zé)繪制畫(huà)面,3、規(guī)則系統(tǒng),負(fù)責(zé)判定諸如犯規(guī)、輸贏等。第一類(lèi)對(duì)象(玩家對(duì)象)負(fù)責(zé)接受用戶輸入,并告知第二類(lèi)對(duì)象(棋盤(pán)對(duì)象)棋子布局的變化,棋盤(pán)對(duì)象接收到了棋子的變化就要負(fù)責(zé)在屏幕上面顯示出這種變化,同時(shí)利用第三類(lèi)對(duì)象(規(guī)則系統(tǒng))來(lái)對(duì)棋局進(jìn)行判定??梢悦黠@地看出,面向?qū)ο笫且怨δ軄?lái)劃分問(wèn)題,而不是步驟。,功能上的統(tǒng)一保證了面向?qū)ο笤O(shè)計(jì)的可擴(kuò)展性。比如我要加入悔棋的功能,如果要改動(dòng)面向過(guò)程的設(shè)計(jì),那么從輸入到判斷到顯示這一連串的步驟都要改動(dòng),甚至步驟之間的順序都要進(jìn)行大規(guī)模調(diào)整。如果是面向?qū)ο蟮脑挘挥酶膭?dòng)棋盤(pán)對(duì)象就行了,棋盤(pán)系統(tǒng)保存了黑白雙方的棋譜,簡(jiǎn)單回溯就可以了,而顯示和規(guī)則判斷則不用顧及,同時(shí)整個(gè)對(duì)對(duì)象功能的調(diào)用順序都沒(méi)有變化,改動(dòng)只是局部的。,再比如:把五子棋游戲改為圍棋游戲,如果是面向?qū)ο蟮?,只需要改?xiě)規(guī)則對(duì)象就可以刻;如果是面向過(guò)程的,五子棋的規(guī)則分布在程序的每個(gè)角落,要改動(dòng)還不如重寫(xiě)。,面向過(guò)程方法的特點(diǎn),優(yōu)點(diǎn):–這種程序設(shè)計(jì)方法算法描述準(zhǔn)確。–對(duì)每一子過(guò)程模塊容易進(jìn)行程序正確性證明。缺點(diǎn):–程序代碼可重用性差。程序中除少數(shù)標(biāo)準(zhǔn)庫(kù)函數(shù)外,每設(shè)計(jì)一個(gè)程序時(shí),程序員幾乎從零做起。即使重用代碼,通常也是通過(guò)拷貝或編輯重新生成一份。–維護(hù)程序的一致性困難。前一步修改了導(dǎo)致以后步驟的修改。,OOP方法的特點(diǎn),OOP以“對(duì)象”或“數(shù)據(jù)”為中心。由于對(duì)象自然地反映了應(yīng)用領(lǐng)域的模塊性,因此具有相對(duì)穩(wěn)定性,可以被用作一個(gè)組件去構(gòu)成更復(fù)雜的應(yīng)用,又由于對(duì)象一般封裝的是某一實(shí)際需求的各種成分,因此,某一對(duì)象的改變對(duì)整個(gè)系統(tǒng)幾乎沒(méi)有影響。引入了“類(lèi)”的概念。類(lèi)與類(lèi)以層次結(jié)構(gòu)組織,屬于某個(gè)類(lèi)的對(duì)象除具有該類(lèi)所描述的特性外,還具有層次結(jié)構(gòu)中該類(lèi)上層所有類(lèi)描述的全部性質(zhì),OOP中稱(chēng)這種機(jī)制為繼承。OOP方法的模塊性與繼承性,保證了新的應(yīng)用程序設(shè)計(jì)可在原有對(duì)象的數(shù)據(jù)類(lèi)型和功能的基礎(chǔ)上通過(guò)重用、擴(kuò)展和細(xì)化來(lái)進(jìn)行,而不必從頭做起或復(fù)制原有代碼,這樣,大大減少了重新編寫(xiě)新代碼的工作量。,面向?qū)ο蟮某绦蛟O(shè)計(jì)方法與面向過(guò)程的程序設(shè)計(jì)方法的比較,(1)以過(guò)程為中心構(gòu)造應(yīng)用程序,設(shè)計(jì)出的程序可重用代碼少,且當(dāng)代碼量增加時(shí)維護(hù)數(shù)據(jù)和代碼的一致性困難。(2)面向?qū)ο蟪绦蛟O(shè)計(jì)方法中,對(duì)象所具有的封裝性和繼承性使得代碼重用成為可能,并大大減少了程序出錯(cuò)的可能性。(3)面向?qū)ο蠓椒ㄎ樟私Y(jié)構(gòu)化程序設(shè)計(jì)方法的優(yōu)點(diǎn),同時(shí)引入了新概念、新機(jī)制并建立了比傳統(tǒng)方法更高層次的抽象。,,4軟件工程,軟件工程是分析、設(shè)計(jì)、實(shí)現(xiàn)、與維護(hù)軟件系統(tǒng)的一組規(guī)范,它指導(dǎo)著軟件開(kāi)發(fā)人員以工程化的手段規(guī)范地開(kāi)發(fā)高質(zhì)量的軟件。軟件工程源于軟件危機(jī)。,軟件危機(jī)--軟件危機(jī)的表現(xiàn),成本高–美國(guó)空軍:1955年軟件占總費(fèi)用(計(jì)算機(jī)系統(tǒng))的18%,70年60%,85年達(dá)到85%。–美國(guó)全球軍事指揮控制系統(tǒng),硬件1億美元,軟件高達(dá)7.2億美元。軟件和硬件費(fèi)用比不斷增加我國(guó)某軍艦計(jì)算機(jī)CPU運(yùn)行850小時(shí),故障120多次,其中軟件占70%。,軟件質(zhì)量得不到保證–軟件越來(lái)越多的應(yīng)用于安全猶關(guān)(safetycritical)的系統(tǒng),對(duì)軟件質(zhì)量提出更高的要求–80年代歐洲亞麗安娜火箭的發(fā)射失敗,原因是軟件錯(cuò)誤–美國(guó)阿托拉斯火箭的發(fā)射失敗,原因是軟件故障–我國(guó)某型號(hào)導(dǎo)彈,由于軟件問(wèn)題致使打靶失敗,進(jìn)度難以控制–項(xiàng)目延期比比皆是–由于進(jìn)度問(wèn)題而取消的軟件項(xiàng)目較常見(jiàn)–只有一小部分的項(xiàng)目能夠按期完成維護(hù)非常困難–軟件維護(hù)的多樣性–軟件維護(hù)的復(fù)雜性–軟件維護(hù)的副作用,產(chǎn)生軟件危機(jī)的根源,復(fù)雜性高–邏輯產(chǎn)品,邏輯復(fù)雜性遠(yuǎn)高于硬件復(fù)雜性–軟件的復(fù)雜性隨規(guī)模呈指數(shù)級(jí)上升規(guī)模大–應(yīng)用擴(kuò)大,代碼量,1000萬(wàn)行,仍在不斷膨脹影響軟件生產(chǎn)率和質(zhì)量的因素比較復(fù)雜–人員的能力和水平–團(tuán)隊(duì)合作缺乏有效、系統(tǒng)原理、原則、方法和工具的指導(dǎo)和輔助,SoftwareEngineeringvs.OtherEngineeringFields傳統(tǒng)工程,Buildingblocks(構(gòu)件,組件)Roleoftolerances(誤差:傳統(tǒng)工程允許誤差范圍,軟件只有正確與不正確之分)Metrics(度量:傳統(tǒng)工程度量可通過(guò)故障的平均時(shí)間,而軟件不存在磨損),對(duì)軟件開(kāi)發(fā)的深層次認(rèn)識(shí),開(kāi)發(fā)一個(gè)具有一定規(guī)模和復(fù)雜性的軟件系統(tǒng)與編寫(xiě)一個(gè)簡(jiǎn)單的程序不一樣。–正如建設(shè)狗窩和高樓大廈大型、復(fù)雜軟件系統(tǒng)的開(kāi)發(fā)是一項(xiàng)工程,必須按照工程化的方法組織軟件的生產(chǎn)和管理,必須經(jīng)過(guò)分析、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試、維護(hù)等一系列軟件過(guò)程和活動(dòng)。,軟件工程的目標(biāo),軟件工程目標(biāo):生產(chǎn)具有正確性、可用性以及開(kāi)銷(xiāo)合宜的產(chǎn)品。正確性指軟件產(chǎn)品達(dá)到預(yù)期功能的程度??捎眯灾杠浖窘Y(jié)構(gòu)、實(shí)現(xiàn)及文檔為用戶可用的程度。開(kāi)銷(xiāo)合宜是指軟件開(kāi)發(fā)、運(yùn)行的整個(gè)開(kāi)銷(xiāo)滿足用戶要求的程度。,軟件工程強(qiáng)調(diào)使用生存周期方法學(xué)和各種結(jié)構(gòu)分析及結(jié)構(gòu)設(shè)計(jì)技術(shù)。,軟件工程方法,在完成生存周期每個(gè)階段的任務(wù)時(shí),應(yīng)該采用適合該階段任務(wù)特點(diǎn)的系統(tǒng)化的技術(shù)方法──結(jié)構(gòu)分析或結(jié)構(gòu)設(shè)計(jì)技術(shù)。,生存周期方法學(xué)就指從時(shí)間角度對(duì)軟件開(kāi)發(fā)和維護(hù)的復(fù)雜問(wèn)題進(jìn)行分解,把軟件生存的漫長(zhǎng)周期依次劃分為若干個(gè)階段,每個(gè)階段有相對(duì)獨(dú)立的任務(wù),然后逐步完成每個(gè)階段的任務(wù)。,在每個(gè)階段結(jié)束之前都從技術(shù)和管理兩個(gè)角度進(jìn)行嚴(yán)格的審查,合格之后才開(kāi)始下一階段的工作,這就使軟件開(kāi)發(fā)工程的全過(guò)程以一種有條不紊的方式進(jìn)行,保證了軟件的質(zhì)量,特別是提高了軟件的可維護(hù)性。總之,采用軟件工程方法論可以大大提高軟件開(kāi)發(fā)的成功率,軟件開(kāi)發(fā)的生產(chǎn)率也能明顯提高。,軟件生命周期,某一軟件從被提出并著手開(kāi)始實(shí)現(xiàn),直到軟件完成其使命為止的全過(guò)程被劃分為一些階段,并稱(chēng)這一全過(guò)程為軟件生命周期。通常,軟件生命周期分三個(gè)階段:軟件定義、軟件開(kāi)發(fā)、運(yùn)行維護(hù)。,(1)可行性研究與計(jì)劃制定:確定開(kāi)發(fā)目標(biāo)和總的要求,給出功能、可靠性等可能方案,制定實(shí)施計(jì)劃。(2)需求分析:對(duì)軟件需求進(jìn)行分析并給出詳細(xì)定義,編寫(xiě)軟件規(guī)格說(shuō)明書(shū)及初步的用戶手冊(cè),提交評(píng)審。,1軟件定義---軟件要“做什么”,(3)系統(tǒng)設(shè)計(jì):概要設(shè)計(jì)和詳細(xì)設(shè)計(jì),給出軟件的結(jié)構(gòu)、模塊和功能的劃分等。編寫(xiě)概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)說(shuō)明書(shū)和測(cè)試計(jì)劃初稿。(4)詳細(xì)設(shè)計(jì):源程序編碼,把軟件設(shè)計(jì)轉(zhuǎn)換成計(jì)算機(jī)可以接受的程序代碼。編寫(xiě)用戶手冊(cè)、操作手冊(cè)和單元測(cè)試計(jì)劃。(5)編碼:(6)測(cè)試:設(shè)計(jì)測(cè)試用例,檢驗(yàn)軟件各個(gè)組成部分。編寫(xiě)測(cè)試分析報(bào)告。,2軟件開(kāi)發(fā)—軟件要“怎么做”,3軟件運(yùn)行和維護(hù)(7)軟件投入運(yùn)行,維護(hù)(進(jìn)行擴(kuò)充和刪改)。,,TraditionalDevelopmentPhase傳統(tǒng)開(kāi)發(fā)階段,軟件生命周期的開(kāi)發(fā)步驟,Analysis分析,AmajorgoalofanalysisistoidentifywhattheproposedsystemshouldaccomplishRequirements(需求)TheneedsofthepotentialusersStatedintermsoftheapplicationratherthaninthetechnicalterminologySpecifications(說(shuō)明書(shū))Technicaldescriptionsoftherequirements,Design設(shè)計(jì),DesignconcentratesonhowthesystemwillaccomplishthegoalssetinanalysisSystemstructureisestablishedindesignThebeststructureisamodularoneModularity(模塊化)Divisionofasoftwareintomanageableunits,eachperformsonlypartoftheoveralltaskModulardecompositionMakestheimplementationoflargesystemspossibleAllowschangestobemadeonamodularbasis,ImplementationandTesting實(shí)現(xiàn)和測(cè)試,Implementationinvolvestheactualwritingofprograms,creationofdatafiles,anddevelopmentofdatabaseEachmoduleisnormallytestedasitisimplementedStubs(樁模塊)SimplifiedversionsofmodulesusedtotestacertainmoduleFeature(功能)testandloadtestReliabilitygrowthtestandcertificationtest,軟件DevelopmentModels開(kāi)發(fā)模型RecentTrends趨勢(shì),Waterfall(瀑布模型)Performsanalysis,design,implementation,andtestinginastrictlymannerIncremental(迭代模型)SoftwaresystemisconstructedinincrementsPrototyping(原型法)Incompleteversionsoftheproposedsystem(prototypes)arebuiltandevaluatedEvolutionaryprototyping(演化式原型)Earlyprototypingandthrowawayprototyping(拋棄式原型),TestingMethodologyBasedonParetoPrinciple(基于Pareto法則的測(cè)試方法),ParetoprincipleTheresultscanoftenbeincreasedmorerapidlybyapplyingeffortsinaconcentratedareaThusasmallnumberofmoduleswithinalargesoftwaresystemtendtobemoreproblematicthantherest,Testing方法,Glass-boxtesting(白盒測(cè)試)IdentifyproblematicmodulesBasispathtestingBlack-boxtesting(黑盒測(cè)試)Boundary(邊界)valueanalysisApplyredundancy(冗余:兩個(gè)公司開(kāi)發(fā)同一套系統(tǒng))Betatesting(初始版本),ExtremeProgramming(XP極限編程),SuitableforateamoflessthanadozenindividualsAdisciplineofsoftwaredevelopmentbasedonvaluesofsimplicity(簡(jiǎn)易),communication(交流),andcourage12practices,Computer-AidedSoftwareEngineering(CASE)計(jì)算機(jī)輔助軟件工程,ApplicationofcomputertechnologytothesoftwaredevelopmentprocessitselfProjectplanningtoolsProjectmanagementtools(MicrosoftProject2003、2008)DocumentationtoolsPrototypingandsimulationtoolsInterfacedesigntoolsProgrammingtools(e.g.codegenerator),Documentation文檔,UserdocumentationManualTutorial(指南)InstallationguideReferencemanualHelppackagesSystemdocumentationSourcecodesRecordofspecificationdevelopmentSystemspecifications(說(shuō)明書(shū)),SoftwareOwnership(所有權(quán))andLiability(責(zé)任),Copyrightlaws(版權(quán)法)Literary(文學(xué))worksvs.softwareLookandfeelofasoftwaresystemLotusvs.MosaicPatents(專(zhuān)利)AlongstandingprincipleRSAalgorithm(一種加密算法)TradesecretlawsLiabilitylimitations(有限責(zé)任)DisclaimerLevelofcare,作業(yè),第5章:P167:7、12、42第6章:P210:2、21第7章:20、30,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 軟件技術(shù) 算法 程序語(yǔ)言 軟件工程
鏈接地址:http://www.820124.com/p-3272934.html