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