當前位置首頁 > 計算機 > 架構及軟件工程
搜柄,搜必應! 快速導航 | 使用教程

7程序設計和軟件工程基礎

文檔格式:PPT| 81 頁|大小 421KB|積分 10|2024-12-12 發(fā)布|文檔ID:253377605
第1頁
第2頁
第3頁
下載文檔到電腦,查找使用更方便 還剩頁未讀,繼續(xù)閱讀>>
1 / 81
此文檔下載收益歸作者所有 下載文檔
  • 版權提示
  • 文本預覽
  • 常見問題
  • 西北師范大學計算中心,81,第,7,,章,,程序設計 和軟件工程基礎,7.1,程序設計風格,,7.2,結構化程序設計,,7.3,面向對象程序設計,,7.4,軟件工程基礎,7,程序設計和軟件工程基礎,隨著計算機應用范圍的不斷擴大和硬件環(huán)境的不斷完善,軟件的規(guī)模也越來越大,復雜性不斷增加,,如何保證軟件的正確性,驗證軟件的正確性成為突出問題為此在軟件設計領域涌現(xiàn)出結構化程序設計、面向對象程序設計等技術,同時將工程化引入到軟件開發(fā)中,像處理工程一樣處理軟件研制的全過程,,本章主要介紹,:,,,◇,結構化程序設計,,,◇,面向對象程序設計,,,◇,軟件工程,7.1,程序設計風格,____,程序與程序設計,,◆,程序,是為計算機解決某一問題而編寫的指令序列,,從計算機角度來說,程序是用某種計算機所能理解并執(zhí)行的計算機語言描述解決問題的方法步驟,,程序,=,算法,+,數(shù)據(jù)結構,,◆,程序設計,是編寫程序的過程,,◆,程序設計語言,是用于描述計算機所執(zhí)行操作的語言,,◆,程序設計,主要經(jīng)歷了四個階段:,機器語言程序設計階段,,高級語言程序設計階段,,結構化程序設計階段,,面向對象程序設計階段,7.1,程序設計風格,____,語言與程序設計語言,◆,,程序設計語言的,發(fā)展,:,,,◇,,低級語言,→,高級語言,,,◇,,具體算法,→,程序設計方法學,,,◇,,順序程序設計,→,并發(fā)、并行、分布式程序設計,,,◇,,非結構化程序設計,→,結構化程序設計,,,◇,,過程式程序設計,→,邏輯式、函數(shù)式、對象式以及可視化程序設計,,階段,年 限,語 言,程 序 標 準,一,1946,年,~,1956,年,機器語言或匯編語言,功效、時間短、占用空間小,二,1956,年,~,1968,年,高級語言,易讀性、易維護性,三,,1968,年,~,現(xiàn)代高級語言,結構良好性,易讀、易維護,◆,,程序設計語言的,發(fā)展趨勢,:,,,◇,,模塊化,,◇,,簡明性,,◇,,形式化,,◇,,并行化,,◇,,可視化,7.1,程序設計風格,____,面向機器的語言,,◆,,機器指令,,是計算機可以理解并執(zhí)行的操作命令,有完整含義,,,指令格式:,,操作碼+地址碼,,◇,操作碼,是指明該指令要完成的操作,如加、減、傳送、輸入等,,,◇,,操作數(shù),是指參加運算的數(shù)或者數(shù)所在的單元地址,,,◆,,機器語言,,直接用二進制代碼表示指令系統(tǒng)的語言。

    用機器語言所編寫的程序可以被計算機直接識別和執(zhí)行,,,◆,,匯編語言,,用一些特定的助記符形式來表示所要進行的操作和數(shù)據(jù),又被稱為,“,符號語言,”,例如:,MOV AX,1,;,MOV BX,1,;,ADD AX,BX,,,匯編語言編寫的程序還需要通過匯編程序,“,翻譯,”,成機器指令后才能執(zhí)行,,在不同的計算機上提供了不同的機器語言或匯編語言,所編寫的程序一般只能在同類型的計算機上運行,所以機器語言和匯編語言被稱為,“,面向機器的語言,”,,相對于高級語言又被成為,“,低級語言,”,操作碼,地址碼,7.1,程序設計風格,____,面向過程的語言,,◆,,高級語言,使用了人類的自然語言,采用了數(shù)學的公式描述方法;同時又能脫離對機器的要求,能在任何計算機上運行如:,,IF B^2-4*a*c>=0 THEN PRINT (-B+SQR(B^2-4*A*C))/(2*A),,,◆,,匯編語言或高級語言編寫的程序稱為“,源程序,”,源程序不能在計算機上直接運行,必須將其“翻譯”成擊機器指令的“,目標程序,”,,,◆,,編譯方式,,,◇,,編譯,,整個翻譯,整體執(zhí)行,,◇,,解釋,,逐條翻譯,逐條執(zhí)行,源程序,結果,解釋程序,,(解釋執(zhí)行),源程序,目標文件,,.,obj,編譯程序,結果,連接程序,可執(zhí)行文件,,.exe,執(zhí)行,7.1,程序設計風格,____,程序示例,,以,A=7+8,的計算為例,比較機器、匯編和高級語言不同的表達方式,,,◇,IBM-PC,機的,機器語言程序,:,,,1011 0000,0000,0111,: 把,7,放入累加器,A,中,,,0010 1100 0000 1000,:,8,與累加器,A,中的值相加,結果仍放入,A,中,,,1111 0100,: 停機,,◇,,IBM-PC,機的,匯編程序,,,ORG 00H,:,設置程序起始地址,,,MOV A,7,: 把,7,放入累加器,A,中,,,ADD A,8,:,8,與累加器,A,中的值相加,結果仍放入,A,中,,,HALT,:,停機,,◇,,高級語言程序,(,FORTRAN,),,,A=7+8,:,7,與,8,相加的結果放入變量,A,中,,,WRITE(*,*)A,:,在顯示器上輸出變量,A,的值,,,END,:,結束程序,7.1,程序設計風格,____,常用,程序設計語言,語言,特 點,FORTRAN,第一個計算機高級語言。

    面向過程,適合于科學計算,ALGOL,算法語言面向過程,以子程序結構為基礎,COBOL,一種用于事務數(shù)據(jù)處理的通用程序設計語言,LISP,一種用于處理“表”的函數(shù)式程序設計語言,BASIC,一種交互式程序設計語言,簡單易學、小巧靈活、使用方便,PASCAL,一種結構化程序設計語言,簡明性和結構化,適于描述算法,PROLOG,一種處理邏輯問題的邏輯程序設計語言,C,一種通用程序設計語言,中級語言,主要用于系統(tǒng)程序設計,Ads,一種通用的模塊化程序設計語言,主要特征是強類型化和模塊化,C++,一種以,C,語言為基礎、支持數(shù)據(jù)抽象和面向對象技術的通用程序設計語言,Java,一種簡捷的、面向對象的、用于網(wǎng)絡環(huán)境的、可分布執(zhí)行的程序設計語言,7.1,程序設計風格,____,面向對象的語言,,◆,,面向對象的計算機語言,是一種非過程化語言或陳述性語言使用時只要提出問題,計算機就能自動給出計算步驟或結果,,,◆,,Visual Basic,、,Visual FoxPro,、,C++,、,Java,、,Object Pascal,等,,,◆,,面向對象計算機語言的,優(yōu)點,,,◇,,與人類的思維方法一致,,,,◇,,穩(wěn)定性好,,,◇,,可重用性好,,,◇,,可維護性好,,,◇,,易于開發(fā)大型軟件產(chǎn)品,7.1,程序設計風格,程序設計風格,是指編寫程序時所表現(xiàn)出的特點、習慣和邏輯思路,,,程序設計風格會極大地影響軟件的質(zhì)量和可維護性,良好的程序設計風格可以使程序結構清晰合理,使程序代碼便于維護。

    因此總體而言應該強調(diào)程序簡單和清晰,并且是可以理解的,,著名的,“,清晰第一,,,效率第二,”,論點已成為當今主導的程序設計風格,,,形成良好的程序設計的風格,需要注意以下幾個方面:,,,◇,,程序文檔與使用的符號名應具有一定的實際含義,以便對程序功能的理解,,,◇,,數(shù)據(jù)的說明次序要規(guī)范,數(shù)據(jù)總體說明次序固定,可以使數(shù)據(jù)的屬性容易查找,有利于測試、排錯和維護,,,◇,,程序簡單易懂,語句構造簡單直接,不應該為了提高效率而把語句復雜化,,,◇,,輸入和輸出方式和格式應盡可能方便用戶的使用,7.2,,結構化程序設計,7.2.1,結構化程序設計的原則,,7.2.2,結構化程序的基本結構與特點,,7.2.3,結構化程序設計原則和方法的應用,7.2.1,結構化程序設計的原則,結構化程序設計方法,是一種程序設計的技術,采用自頂向下、逐步求精的方法和單入口,/,單出口的控制結構,,程序設計時,應先考慮總體,后考慮細節(jié);先考慮全局目標,后考慮局部目標,將一個復雜的,問題解法逐步細化成若干個簡單的問題,采用模塊化組織,再進一步分解為具體的處理步驟,每個處理步驟可以使用單一入口的控制結構,,結構化程序設計的,主要原則,:,,,◇,,自頂向下,,,◇,逐步求精,,,,◇,,模塊化,,,◇,,限制使用,goto,語句,,,,采用結構化程序設計方法編寫程序,可使程序結構良好、易讀、易理解、易維護;提高了編程工作的效率,降低了軟件開發(fā)成本,7.2.2,結構化程序的基本結構與特點,,◆,,結構化程序設計基本結構,,,◇,,順序結構,。

    按照程序語句行的自然順序,一條語句一條語句地執(zhí)行程序順序結構是一種最基本、最常用的程序設計結構,,◇,,選擇結構,(分支結構,),包括簡單選擇和多分支選擇結構,這種結構可以根據(jù)設定的條件,判斷應該選擇哪一條分支來執(zhí)行相應的語句序列,,◇,,循環(huán)結構,(重復結構,),根據(jù)給定條件,判斷是否需要重復執(zhí)行某一相同的或類似的程序段循環(huán)結構對應兩類:對先判斷后執(zhí)行循環(huán)體的稱為當型循環(huán)結構對先執(zhí)行循環(huán)體后判斷的稱為直到型循環(huán)結構,,使用這三種基本控制結構就能表達出各種其它形式結構的程序設計方法,A,B,條件,A,B,T,F,條件,A,F,T,條件,A,T,F,條件,F,A,T,順序結構 對稱選擇結構 非對稱選擇結構 當型循環(huán)結構 直到型循環(huán)結構,7.2.3,結構化程序設計原則和方法的應用,,◆,,結構化程序設計原則,,,基于對結構化程序設計原則、方法以及結構化程序基本構成結構的掌握和了解,在結構化程序設計的具體實施中,要注意把握如下要素:,,,◇,,使用程序設計語言中的順序、選擇、循環(huán)等有限的控制結構表示程序的控制邏輯,,,◇,,選用的控制結構只準許有一個入口和一個出口,,,,◇,,每個程序塊只有一個入口和一個出口,,,,◇,,復雜結構應該用基本控制結構的嵌套、組合來實現(xiàn),,,,◇,,嚴格控制,GOTO,語句的使用,7.3,,面向對象程序設計,,7.3.1,面向對象程序設計基本概念,,7.3.2,面向對象的程序設計,7.3.1,面向對象程序設計基本概念,,雖然結構化程序設計方法曾經(jīng)給計算機軟件業(yè)帶來了巨大進步。

    但是,,20,世紀,80,年代末期以來,人們注意到把結構化程序設計方法應用到大型軟件開發(fā)時很少取得成功到,20,世紀,90,年代前半期,面向對象的設計方法已經(jīng)成為人們開發(fā)軟件時的首選技術今天,面向對象技術是一種非常流行的軟件開發(fā)技術,,所謂面向對象就是指一個軟件系統(tǒng)使用對象、類、繼承、通信等,4,個概念設計和實現(xiàn)的,一個面向對象的程序的每一組成部分都是對象,計算是通過建立新的對象與對象之間的通信來執(zhí)行的即,,面向對象,=,對象,+,類,+,繼承,+,通信,,,下面分別介紹面向對象方法中幾個重要的基本概念,這些概念是理解和使用面向對象方法的關鍵和基礎,7.3.1,面向對象程序設計基本概念,____,對象、屬性和方法,,對象是面向對象方法中最基本的概念面向對象程序設計方法中涉及的,對象是系統(tǒng)中用來描述客觀事物的一個實體,,是構成系統(tǒng)的基本單位,它由一組表示靜態(tài)特征的屬性和它可執(zhí)行的一組操作組成,,組成對象的三要素:,,屬性,用于描述對象的一組特征,,事件,是對象上所發(fā)生的事情,是預先定義好的、能夠被對象識別的動作,,,方法,是對象要執(zhí)行的操作,,,對象具有惟一性、分類性、封裝性和模塊獨立性較好等特點,7.3.1,面向對象程序設計基本概念,____,封裝性,操作描述了對象執(zhí)行的功能,若通過消息傳遞,還可以為其他對象使用。

    操作的過程對外是封閉的,即用戶只能看到這一操作實施后的結果這相當于事先已經(jīng)設計好的各種過程,只需要調(diào)用就可以了,用戶不必關心這一過程是如何編寫的,,也就是說,把對象的屬性和方法結合成一個獨立的系統(tǒng)單位,并盡可能隱蔽對象的細節(jié),這個過程已經(jīng)封裝在對象中,用戶也看不到對象的這一特性,就是,對象的封裝性,7.3.1,面向對象程序設計基本概念,____,類和實例,類是具有共同屬性、共同方法的對象的集合,所以,類是對象的抽象,它描述了屬于該對象類型的所有對象的性質(zhì),而,一個對象則是其對應類的一個實例,,實例是指一個具體的對象,,例如:,Integer,是一個整型類,它描述了所有整數(shù)的性質(zhì)因此任何整數(shù)都是整數(shù)類的對象,而一個具體的整數(shù),“,123,”,是類,Integer,的一個實例,,由類的定義可知,,類是關于對象性質(zhì)的描述,,它同對象一樣,包括一組數(shù)據(jù)屬性和數(shù)據(jù)上的合法操作,,例如,顯示一個半徑,3cm,紅顏色的圓,一個半徑,4cm,綠顏色的圓和一個半徑,1cm,黃顏色的圓這三個圓的圓心位置、半徑大小,,和顏色均不相同,是三個不同的對象但它們有相,,同的屬性(圓心坐標、半徑、顏色)和相同的操作,,(顯示、放大縮小半徑、在屏幕上移動位置等等)。

    因此,可以用,“,Circle,類,”,來定義,7.3.1,面向對象程序設計基本概念,____,消息,,面向對象的世界是通過對象與對象間彼此的相互合作來推動的,對象間的這種相互合作需要一個機制協(xié)助進行,這樣的機制稱為,“,消息,”,,,消息是一個實例與另一個實例之間傳遞的信息,,它請求對象執(zhí)行某一處理或回答要求的信息,它統(tǒng)一了數(shù)據(jù)流和控制流,,消息中只包含傳遞者的要求,它告訴接受者需要做哪些處理,但并不指示接受者如何完成這些處理消息完全由接受者解釋,接受者獨立決定采用什么方式完成所需的處理,發(fā)送者對接受者不起任何控制作用,,一個對象能夠接受不同形式、不同內(nèi)容的多個消息;相同形式的消息可以送往不同的對象,不同的對象對于形式相同的消息可以有不同的解釋,能夠做出不同的反映一個對象可以同時往多個對象傳遞信息,兩個對象也可以同時向某個對象傳遞消息,傳遞對象,消息,接口,接受對象,,操作名、參數(shù),,,7.3.1,面向對象程序設計基本概念,____,消息,通常,一個消息由接受消息的對象的名稱、消息標識符,(,也稱為消息名,),、零個或多個參數(shù)三部分組成,,例如,,MyCircle,是一個半徑,4cm,、,圓心位于,(100,200),的,Circle,類的對象,也就是,Circle,類的一個實例,當要求它以綠顏色在屏幕上顯示自己時,在,C++,語言中應該向它發(fā)下列消息:,,,MyCircle,.Show(Green),,,其中,,MyCircle,是接受消息的對象的名字,,Show,是消息名,,Green,是消息的參數(shù),發(fā)送對象,消息,接口,接受對象,,操作名、參數(shù),,,7.3.1,面向對象程序設計基本概念,____,繼承性,,繼承是面向對象的方法的一個主要特征。

    繼承是使用已有的類定義新類的定義技術,已有的類可當作基類來引用,則新類相應地可當作派生類來引用廣義地說,繼承是指能夠直接獲得已有的性質(zhì)和特征,而不必重復定義它們,,面向對象軟件技術的許多強有力的功能和突出的優(yōu)點,都來源于把類組成一個層次結構的系統(tǒng):一個類的上層可以有父類,下層可以有子類這種層次結構系統(tǒng)的一個重要性質(zhì)是繼承性,一個類直接繼承其父類的描述(數(shù)據(jù)和操作)或特性,子類自動地共享基類中定義的數(shù)據(jù)和方法,,繼承具有傳遞性,如果類,C,繼承,,類,B,,類,B,繼承類,A,,,則類,C,繼承類,A,因此,一個類實際上繼承了它上層,,的全部基類的特性,也就是說,屬,,于某類的對象除了具有該類所定義,,的特性外,還具有該類上層全部基,,類定義的特性,類A,,A,類實例,a1,A,類操作,,類A,A,的變量,,A,的實例變量,,,,類,B:A,的子類,,B,的實例,b1,從,A,的繼承性,,類B,B,類操作,,繼承來的,A,的實例變量,B,的變量,,B,的實例變量,7.3.1,面向對象程序設計基本概念,____,多態(tài)性,,對象的,多態(tài)性,是指在一般類中定義的屬性、方法被特殊類繼承后,可以具備不同的數(shù)據(jù)類型或表現(xiàn)不同的行為,使對象的同一個屬性或方法名在一般類及其各個特殊類中具有不同的語義,7.3.2,面向對象的程序設計,____,對象方法的主要優(yōu)點,◇,,面向對象方法和技術,以對象為核心,。

    對象由數(shù)據(jù)和操作組成的封裝體,對象之間通過傳遞消息互相聯(lián)系,以模擬現(xiàn)實世界中不同事物彼此之間的聯(lián)系,使用現(xiàn)實世界的概念抽象地理解思考問題從而自然地解決問題,,,◇,,面向對象方法,基于對象模型,當對系統(tǒng)的功能需求變化時并不會引起軟件結構的整體變化,往往僅需作一些局部性的修改,,◇,,面向對象方法,可重用性好,軟件重用是指在不同的軟件開發(fā)過程中重復使用相同或相似軟件的過程可以利用可重用的軟件成分構造新的系統(tǒng),,◇,,用面向對象方法開發(fā)軟件時,可以把一個大型產(chǎn)品看作是一系列本質(zhì)上相互獨立的小產(chǎn)品來處理,這樣不僅降低了開發(fā)的技術難度和成本,而且使得對開發(fā)工作的管理變得容易,軟件整體質(zhì)量也大大提高,,◇,,面向對象的方法開發(fā)的,軟件可維護性好,,,軟件穩(wěn)定性比較好,,比較容易修改,容易理解,易于測試和調(diào)試,7.4,,軟件工程基礎,,7.4.1,軟件工程基本概念,,7.4.2,結構化分析與設計方法,,7.4.3,軟件測試,,7.4.4,程序調(diào)試,7.4.1,軟件工程基本概念,____,軟件特點,,計算機軟件,包括程序、數(shù)據(jù)及相關文檔的完整集合其特點是:,,◇,,軟件是一種邏輯部件,不是硬件部件,具有很高的抽象性,,◇,,軟件生產(chǎn)沒有明顯的制作過程,一旦研制開發(fā)成功,可以大量拷貝同一內(nèi)容的副本,所以對軟件的質(zhì)量控制,必須著重在軟件開發(fā)方面下功夫,,◇,,軟件的開發(fā)、運行對計算機系統(tǒng)具有依賴性,受計算機系統(tǒng)的限制,這導致了軟件移植的問題,,◇,,軟件復雜性高,成本昂貴,軟件涉及人類社會的各行各業(yè),開發(fā)常常涉及其他領域的專門知識,開發(fā)需要投入大量、高強度的腦力勞動,成本高,風險大,,◇,,軟件開發(fā)涉及諸多的社會因素,許多軟件的開發(fā)和運行涉及軟件用戶的機構設置,體制問題以及管理方式等,甚至涉及到人們的觀念和心理,軟件知識產(chǎn)權及法律等問題,7.4.1,軟件工程基本概念,____,軟件危機,,隨著計算機技術的發(fā)展和應用領域的擴大,軟件規(guī)模越來越大,復雜程度不斷增加,軟件成本逐年上升,質(zhì)量沒有可靠的保證,軟件已成為計算機科學發(fā)展的,“,瓶頸,”,,所謂,軟件危機,是指在計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。

    實際上,幾乎所有的軟件都不同程度地存在這個問題,,具體地說,在軟件開發(fā)和維護過程中,軟件危機主要表現(xiàn)在:,,◇,,軟件需求的增長得不到滿足,,◇,,軟件開發(fā)的進度無法控制,,◇,,軟件質(zhì)量難以保證,,◇,軟件不可維護或維護程度非常低,,◇,軟件的成本不斷提高,,◇,軟件開發(fā)生產(chǎn)率的提高趕不上硬件的發(fā)展和應用需求的增長,,總之,可以將軟件危機歸結為成本、質(zhì)量、生產(chǎn)率等問題,7.4.1,軟件工程基本概念,____,軟件工程,,在軟件開發(fā)和維護過程中,之所以存在這些嚴重的問題,一方面,與軟件本身的特點有關,,例如,在軟件運行前,軟件開發(fā)過程的進展難衡量,質(zhì)量難以評價,因此管理和控制軟件開發(fā)過程相當困難;在軟件運行過程中,軟件維護意味著改正或修改原來的設計;另外,軟件的顯著特點是規(guī)模龐大,復雜度超線性增長,在開發(fā)大型軟件時,要保證高質(zhì)量,極端復雜困難,不僅涉及技術問題(如分析方法、設計方法、版本控制),更重要的是必須有嚴格而科學的管理另一方面,與軟件開發(fā)和維護方法不正確有關,,這是主要原因,,為了消除軟件危機,通過認真研究解決軟件危機的方法,認識到軟件工程是使計算機軟件走向工程科學的途徑,逐步形成了軟件工程的概念,開辟了工程學的新興領域,——,軟件工程學,,,軟件工程,就是試圖用工程、科學和數(shù)學的原理與方法研制、維護計算機軟件的有關技術及管理方法,7.4.1,軟件工程基本概念,____,軟件工程,,軟件工程的進步是近幾十年軟件產(chǎn)業(yè)迅速發(fā)展的重要原動力,,軟件工程的核心思想是把軟件產(chǎn)品看作是一個工程產(chǎn)品來處理,,把需求計劃、可行性研究、工程審核、質(zhì)量監(jiān)督等工程化的概念引入到軟件生產(chǎn)當中,以期達到工程項目的三個基本要素:,進度,、,經(jīng)費,和,質(zhì)量,的目標。

    同時,軟件工程針對軟件的特點提出了許多有別于一般工業(yè)工程技術的一些技術方法代表性的有結構化方法、面向對象方法和軟件開發(fā)模型及軟件開發(fā)過程等,,特別地,從經(jīng)濟學的意義上來說,考慮到軟件龐大的維護費用遠比軟件開發(fā)費用要高,因而開發(fā)軟件不能只考慮開發(fā)期間的費用,而且應該考慮軟件生命周期內(nèi)的全部費用因此,軟件生命周期的概念就變得特別重要在考慮軟件費用時,不僅僅要降低開發(fā)成本,更要降低整個軟件生命周期的總成本,7.4.1,軟件工程基本概念,____,軟件生命周期,,為了有效、科學地組織和管理軟件生產(chǎn),根據(jù)某一軟件從被提出并著手開始實現(xiàn),直到軟件完成其使命為止的全過程稱為,軟件生命周期,,通常,軟件生命周期包括問題定義、可行性研究、需求分析、概要設計、詳細設計、軟件編碼、軟件測試及運行維護,八個階段,,為使各時期的任務更明確,將,軟件生命周期,劃分為以下三個時期:,,,◇,軟件定義期,,,◇,軟件開發(fā)期,,,◇,軟件維護期,軟件定義期,問題定義,,,,可行性研究,,,,需求分析,,,軟件開發(fā)期,,,概要設計,,,,詳細設計,,,,軟件編碼,,,,軟件測試,,,軟件,,維護期,,,運行維護,7.4.1,軟件工程基本概念,____,軟件生命周期,,◆,,軟件定義期,問題定義,理解用戶要求,劃清工作范圍,提交書面報告給用戶及使用部門負責人進行審查,,,可行性研究,復查系統(tǒng)的目標和規(guī)模,研究當前系統(tǒng),導出系統(tǒng)邏輯模型;分析物理系統(tǒng)的可行性,推薦一個可行方案,提出可行性分析報告,,,需求分析,從數(shù)據(jù)流程圖出發(fā),對目標系統(tǒng)提出清晰、準確和具體的要求。

    確定對系統(tǒng)的綜合要求;分析系統(tǒng)數(shù)據(jù)要求;推導出系統(tǒng)的詳細模型系統(tǒng);建立模型系統(tǒng),軟件定義期階段提交的文檔內(nèi)容包括:系統(tǒng)的功能說明;系統(tǒng)對數(shù)據(jù)的要求;用戶系統(tǒng)描述,7.4.1,軟件工程基本概念,____,軟件生命周期,,◆,,軟件開發(fā)期,概要設計,進行系統(tǒng)的邏輯設計,劃分出構成系統(tǒng)的各物理元素,設計出軟件的結構提出可選擇方案;選擇合理方案;推薦最佳方案;功能分解;設計軟件結構;制定測試計劃;提交文檔,,,詳細設計,進行系統(tǒng)模塊的設計,對系統(tǒng)作出精確的描述,以便在編碼階段可直接將這一描述用程序設計語言編制成程序通常用層次圖加輸入,/,處理,/,輸出圖或過程描述語言來描述,,,軟件編碼,該概要設計和詳細設計階段中的結果翻譯成用某種程序設計語言書寫的程序以文檔形式提交程序、數(shù)據(jù)和詳細注釋,,,軟件測試,是保證軟件可靠性的主要手段,是軟件開發(fā)過程中最艱巨、最繁重的工作測試的目的是查找程序中的錯誤,但決不能證明程序中沒有錯誤,7.4.1,軟件工程基本概念,____,軟件生命周期,◆,,軟件維護期,,,軟件維護通常有以下四類:,,改正性維護,為糾正使用中出現(xiàn)的錯誤而進行,,適應性維護,為適應環(huán)境變化而進行,,完善性維護,為改進原有軟件而進行,,預防性維護,為將來的可維護和可靠而進行,7.4.1,軟件工程基本概念,____,軟件工程的目標與原則,,軟件工程的,目標,是在給定成本、進度的前提下,開發(fā)出具有有效性、可靠性、可理解性、可維護性、可重用性、可適應性、可移植性、可操作性且滿足用戶需求的產(chǎn)品,,基于上述目標,軟件工程的理論和技術性研究的內(nèi)容主要包括,軟件開發(fā)技術,和,軟件工程管理,,為了達到軟件工程目標,在軟件開發(fā)過程中,,必須遵循軟件工程的基本原則,,這些原則適用于所有的軟件項目。

    這些基本原則包括抽象、信息隱蔽、模塊化、局部化、一致性、完備性和可驗證性,7.4.1,軟件工程基本概念,____,軟件開發(fā)工具與軟件開發(fā)環(huán)境,,現(xiàn)代軟件工程方法之所以得以實施,其,重要的保證是軟件開發(fā)工具和環(huán)境的保證,,使軟件在開發(fā)效率、工程質(zhì)量等多方面得到改善,,工具和環(huán)境的使用進一步提高了軟件的開發(fā)效率、維護效率和軟件質(zhì)量,,◇,,軟件開發(fā)工具,是為支持軟件人員開發(fā)和維護活動而使用的軟件,軟件開發(fā)工具的發(fā)展從單項工具的開發(fā)逐步向集成工具發(fā)展,為軟件工程方法提供了自動的或半自動的軟件支撐環(huán)境同時,軟件開發(fā)方法的有效應用也必須得到相應工具的支持,,◇,,軟件開發(fā)環(huán)境,或稱軟件工程環(huán)境是全面支持開發(fā)全過程的軟件工具集合這些軟件工具按照一定的方法或模式組合起來,支持軟件生命周期內(nèi)的各個階段和各項任務的完成,7.4.2,結構化分析與設計方法,____,結構化分析方法,,結構化分析方法是結構化程序設計理論在軟件需求分析階段的運用,其目的是幫助弄清用戶對軟件的需求,,結構化分析就是使用數(shù)據(jù)流圖、數(shù)據(jù)字典、結構化自然語言、判定表和判定樹等工具,來建立一種新的、稱為結構化規(guī)格說明的目標文檔其實質(zhì)是著眼于數(shù)據(jù)流,自頂向下,逐層分解,建立系統(tǒng)的處理流程,以數(shù)據(jù)流圖和數(shù)據(jù)字典為主要工具,建立系統(tǒng)的邏輯模型,,結構化分析的常用工具,:,,,◇,,數(shù)據(jù)流圖,,,◇,,數(shù)據(jù)字典,,,◇,,判定樹,,,◇,,判定表,7.4.2,結構化分析與設計方法,____,結構化分析方法,,◆,,數(shù)據(jù)流圖,,,數(shù)據(jù)流圖是描述數(shù)據(jù)處理過程的工具,是需求理解的邏輯模型的圖形表示,直接支持系統(tǒng)的功能建模,從數(shù)據(jù)傳遞和加工的角度,來刻畫數(shù)據(jù)流從輸入到輸出的移動變換過程,,加工,(,轉換,),。

    輸入數(shù)據(jù)經(jīng)加工變換產(chǎn)生輸出,,數(shù)據(jù)流,沿箭頭方向傳送數(shù)據(jù)的通道,一般在旁邊標注數(shù)據(jù)流名,,存儲文件,(,數(shù)據(jù)源,),表示處理過程中存放各種數(shù)據(jù)的文件,,源,表示系統(tǒng)和環(huán)境的接口,屬系統(tǒng)之外的實體,研究生業(yè)務活動數(shù)據(jù)流圖,7.4.2,結構化分析與設計方法,____,結構化分析方法,,數(shù)據(jù)流圖是對實際(已有的或要設計的)信息處理系統(tǒng)的抽象具體畫數(shù)據(jù)流圖的方法有很多,常用的有以下兩種方法:,,◇,,自頂向下逐步分解,,對于一個大型的軟件系統(tǒng)來說,直接畫出一張數(shù)據(jù)流圖是很困難的,但如果自頂向下分成若干層,再對每一層的數(shù)據(jù)來描述就簡單了,分層的數(shù)據(jù)流圖一般由頂層、中層和底層組成,頂層圖說明系統(tǒng)的邊界,即系統(tǒng)的輸入和輸出,底層有一些不再分解的加工組成,中間層還可以分為若干層,最后就將這三層的數(shù)據(jù)流圖并為一張的總的數(shù)據(jù)流圖,,◇,,由外向里逐步深化,,用這種方法畫數(shù)據(jù)流圖時,首先畫出系統(tǒng)的輸入和輸出數(shù)據(jù)流 ,然后再考慮系統(tǒng)的內(nèi)部在畫加工時,同樣畫出它們的輸入和輸出,再考慮這個加工的內(nèi)部,在數(shù)據(jù)流的組成或發(fā)生變化地方應畫上一個,“,加工,”,,以便實現(xiàn)這一變化,7.4.2,結構化分析與設計方法,____,結構化分析方法,,◆,,數(shù)據(jù)字典,,,數(shù)據(jù)字典是結構化分析方法的核心。

    數(shù)據(jù)字典,是對所有與系統(tǒng)相關的數(shù)據(jù)元素的一個有組織的列表,以及精確的、嚴格的定義,使得用戶和系統(tǒng)分析員對于輸入、輸出、存儲成分和中間計算結果有共同的理解數(shù)據(jù)字典把不同的需求文檔和分析模型緊密地結合在一起,與各模型的圖形表示配合,能清楚地表達數(shù)據(jù)處理的要求,,通常數(shù)據(jù)字典包含的信息有:名稱、別名、何處使用,/,如何使用、內(nèi)容描述、補充信息等,,數(shù)據(jù)字典是給數(shù)據(jù)流圖中的每一個數(shù)據(jù)流名、文件名及加工名建立一個目錄,在這些條目中給出各名字的定義而在每一個目錄下又可建立子目錄,直到每一個組成部分不能再分為止,7.4.2,結構化分析與設計方法,____,結構化分析方法,,在數(shù)據(jù)字典中,通常有四種類型的條目:,,◇,,數(shù)據(jù)流條目,:數(shù)據(jù)流條目給出某個數(shù)據(jù)流的定義,其形式為列出組成數(shù)據(jù)流的數(shù)據(jù)項如數(shù)據(jù)流,“,課程目錄,”,(由文件流出)由課程名、學時、學分、教員等數(shù)據(jù)項組成,在數(shù)據(jù)字典中表示為:課程目錄,=,課程名,+,學時,+,學分,+,教員,+,課表,而,“,課表,”,又可以列為一個子條目,表示為:課表,=,星期幾,+,第幾節(jié),+,教室,,◇,,文件條目,:文件條目給出某個文件的定義,它的形式與數(shù)據(jù)流條目基本相同。

    例如,上述數(shù)據(jù)流條目實際上也是,“,課程目錄,”,文件的條目,,◇,,數(shù)據(jù)項條目,:數(shù)據(jù)項條目給出某個數(shù)據(jù)單項的定義,通常是數(shù)據(jù)項值的類型、允許值范圍等如學生,“,年齡,”,這個數(shù)據(jù)項值是,16,~,30,之間的任意整數(shù),則在數(shù)據(jù)字典中表示成:年齡,=16,~,30,,◇,,加工條目,:加工條目實際上是對數(shù)據(jù)流圖中的每個基本加工給出精細的描述,所有加工條目的綜合就是整個系統(tǒng)的說明,每一個加工條目對應系統(tǒng)的一個模塊的處理描述,7.4.2,結構化分析與設計方法,____,結構化分析方法,,◆,,判定樹,,,使用判定樹進行描述時,應先從問題定義的文字描述中分清哪些是判定的條件,哪些是判定的結論,根據(jù)描述材料中的連接詞找出判定條件之間的從屬關系、并列關系、選擇關系,根據(jù)它們構造判定樹,,例如,某貨物托運管理系統(tǒng)中,對發(fā)貨情況的處理要依賴檢查發(fā)貨單,檢查發(fā)貨單受貨物托運金額、欠款等條件的約束,可以使用類似分段函數(shù)的形式來描述這些約束和處理對這種約束條件的描述,如果使用自然語言,表達易出現(xiàn)不準確和不清晰如果使用判定樹來描述,則簡捷清晰,檢查發(fā)貨單,欠款,>$500,欠款,>60———,不發(fā)出批準書,,,欠款≤,60———,發(fā)出批準書、發(fā)貨單,,欠款≤,$500,欠款,>60———,發(fā)出批準書、發(fā)貨單及賒欠報告,,,欠款≤,60———,發(fā)出批準書、發(fā)貨單,7.4.2,結構化分析與設計方法,____,結構化分析方法,,◆,,判定表,,,判定表與判定樹相似,當數(shù)據(jù)流圖中的加工要依賴于多個邏輯條件的取值,即完成該加工的一組動作是由于某一組條件取值的組合而引發(fā)的,使用判定表描述比較適宜。

    判定表由四部分組成:,,①,基本條件,列出了各種可能的條件,,②,條件項,列出了各種可能的條件組合,,③,基本動作項,列出了所有的操作,,④,動作項,列出在對應的條件組合下所選的操作,其中,“,√,”,表示滿足對應條件項時執(zhí)行的操作,,,1,2,3,4,條件,發(fā)貨單金額,>$500,>$500,≤,$500,≤,$500,,賒欠情況,>,60,天,≤,60,天,>60,天,≤,60,天,操 作,不,發(fā)出批準書,√,,,,,發(fā)出批準書,,√,√,√,,發(fā)出發(fā)貨單,,√,√,√,,發(fā)出賒欠報告,,,√,,① 基本條件,③ 基本動作項,② 條件項,④ 動作項,7.4.2,結構化分析與設計方法,____,結構化設計方法,,軟件設計是軟件工程的重要階段,是一個把軟件需求轉換為軟件表示的過程軟件設計的,基本目標,是用比較抽象概括的方式確定目標系統(tǒng)如何完成預定的任務,即軟件設計是確定系統(tǒng)的物理模型,,,從技術觀點來看,,軟件設計包括軟件結構設計、數(shù)據(jù)設計、接口設計、過程設計其中,結構是定義軟件系統(tǒng)各主要部件之間的關系;數(shù)據(jù)設計是將分析時創(chuàng)建的模塊轉化為數(shù)據(jù)結構的定義;接口設計是描述軟件內(nèi)部、軟件和協(xié)作系統(tǒng)之間以及軟件與人之間如何通信;過程設計則是把系統(tǒng)結構部件轉化為軟件的過程性描述,,,從工程管理角度來看,,軟件設計分兩步來完成:概要設計和詳細設計。

    概要設計(又稱結構設計)將軟件需求轉化為軟件體系結構、確定系統(tǒng)級接口、全局數(shù)據(jù)結構或數(shù)據(jù)庫模式;詳細設計確立每個模塊的實現(xiàn)算法和局部數(shù)據(jù)結構,用適當方法表示算法和數(shù)據(jù)結構的細節(jié),7.4.2,結構化分析與設計方法,____,結構化設計方法,,軟件設計階段通常分為兩步:,,◇,,系統(tǒng)的總體設計,(概要設計),,以確定軟件系統(tǒng)結構,,◇,,系統(tǒng)的詳細設計,,即模塊內(nèi)部的具體設計一般過程是先進行高層次的結構設計,后進行低層次的過程設計,穿插進行數(shù)據(jù)設計和接口設計,,,與結構化需求分析方法相對應的是結構化設計方法,,,結構化設計,是采用可能的最佳方法設計系統(tǒng)的各個組成部分以及各成分之間的內(nèi)部聯(lián)系的技術,,,結構化設計的基本思想,是將軟件設計成由相對獨立、單一功能的模塊組成的結構,7.4.2,結構化分析與設計方法,____,結構化設計方法,,◆,,概要設計,設計軟件系統(tǒng)結構,將需求分析階段的層次結構進一步分解、劃分為模塊以及模塊的層次結構劃分的具體過程,為:,①,將系統(tǒng)按功能劃分成模塊;,②,確定每個模塊的功能;,③,確定模塊之間的調(diào)用關系;,④,確定模塊之間的接口,即模塊之間傳遞的信息;,⑤,評價模塊結構的質(zhì)量,數(shù)據(jù)結構及數(shù)據(jù)庫設計,,(,數(shù)據(jù)設計,),實現(xiàn)數(shù)據(jù)對象的邏輯表示。

    數(shù)據(jù)設計的,具體任務,是:,①,確定輸入、輸出文件的詳細數(shù)據(jù)結構;,②,結合算法設計,確定算法所必需的邏輯數(shù)據(jù)結構及其操作;,③,確定對邏輯數(shù)據(jù)結構操作的程序模塊,限制和確定各個數(shù)據(jù)設計決策的影響范圍;,④,需要和操作系統(tǒng)或調(diào)度程序接口所必需的控制表進行數(shù)據(jù)交換時,確定其詳細的數(shù)據(jù)結構和使用規(guī)則;,⑤,數(shù)據(jù)的防衛(wèi)性、一致性、冗余性設計,編寫概要設計文檔,編寫,①,概要設計說明書、,②,數(shù)據(jù)庫說明書、,③,集成測試計劃等,概要設計文檔評審,對,①,設計部分是否完整地實現(xiàn)了需求中規(guī)定的功能、性能等要求,,②,設計方案的可行性,,③,關鍵的處理及內(nèi)部接口定義的正確性,,④,各部分之間的一致性等都要進行評審,7.4.2,結構化分析與設計方法,____,結構化設計方法,,◆,,詳細設計,,,詳細設計是為每一個模塊確定實現(xiàn)算法和局部數(shù)據(jù)結構,用某種選定的表達工具表示算法和數(shù)據(jù)結構的細節(jié)表達工具可以由設計人員自由選擇,但它應該具有描述過程細節(jié)的能力,而且能夠使程序員在編程時便于直接翻譯成程序設計語言的源程序常見的設計工具有:,,◇,,圖形工具,:程序流程圖,,N-S,圖,,PAD,,,HIPO,,◇,,表格工具,:判定表,,◇,,語言工具,:,PDL,(,偽代碼),,,在過程設計階段,要對每個模塊規(guī)定的功能以及算法的設計,給出適當?shù)乃惴枋?,即確定模塊內(nèi)部詳細執(zhí)行過程,包括局部數(shù)據(jù)組織、控制流、每一步具體處理要求和各種實現(xiàn)細節(jié)等。

    其目的是確定應該怎樣來具體實現(xiàn)所要求的系統(tǒng),7.4.2,結構化分析與設計方法,____,結構化設計方法,,◇,,程序流程圖,,,程序流程圖是一種傳統(tǒng)的、應用廣泛的軟件過程設計表示工具,通常也稱為程序框圖,程序流程圖表達直觀、清晰、易于學習掌握,且獨立于任何一種程序設計語言程序流程圖雖然簡單易學,但若程序員不受任何約束,隨意轉移控制,會破壞結構化設計原則,而且程序流程圖不易表示數(shù)據(jù)結構,起止框 輸入輸出框 判斷框 處理框 流程線 連接點 注釋框,A,B,條件,A,B,T,F,條件,A,F,T,條件,A,T,F,條件,F,A,T,順序結構 對稱選擇結構 非對稱選擇結構 當型循環(huán)結構 直到型循環(huán)結構,7.4.2,結構化分析與設計方法,____,結構化設計方法,,【,程序流程圖示例,】,簡單托運貨物運費計算的問題設貨物重量,x,,,客戶信息,y,輸入,X,Y,0<,X≤15,X>15,公式,1,計算,公式,2,計算,I=0,I<3,記賬、輸出,I=I+1,結束,T,T,T,F,F,F,7.4.2,結構化分析與設計方法,____,結構化設計方法,,◇,,N-S,圖,,,為避免流程圖在描述程序邏輯時的隨意性,通常使用,N-S,圖,,,N-S,圖的特征為:每個構件具有明確的功能域;控制轉移必須遵守結構化設計要求;易于確定局部數(shù)據(jù)和(或)全局數(shù)據(jù)的作用域;易于表達嵌套關系和模塊的層次結構,A,,,T,,F,B,,A,B,當P1,,,A,,,A,,,,,,,直到,P2,,P0,,◇,,偽代碼,不用圖形符號,,用介于自然語言和計算機語言之間的文字和符號來描述算法,S1,:,C←A,(,將變量,A,的值賦給變量,C),;,,S2,:,A←B,(,將變量B的值賦給變量,A),;,,S3,:,B←C,(,將變量,C,的值賦給變量,B),。

    7.4.2,結構化分析與設計方法,____,結構化設計方法,,◇,,PAD,圖,,,PAD,圖(問題分析圖)是繼程序流程圖和方框圖之后,提出的一種主要用于描述軟件詳細設計的圖形表示工具,,,PAD,圖結構清晰,結構化程度高;易于閱讀;最左端的縱線是程序主干線,對應程序的第一層結構,每增加一層,PAD,圖向右擴展一條縱線,故程序是縱線數(shù)等于程序層次數(shù);程序執(zhí)行:從,PAD,圖最左主干線上端結點開始,自上而下,自左而右依次執(zhí)行,程序終止于最左主干線,7.4.2,結構化分析與設計方法,____,結構化設計方法,,◇,,PDL,,,PDL,(,過程設計語言)是一種混合語言,采用英語的詞匯和結構化程序設計語言的語法,類似編程語言,C,,,用,PDL,表示的基本控制結構的常用詞匯如下:,,條件:,IF/THEN/ELSE/ENDIF,,,循環(huán):,DO WHILE/ENDO,、,REPEAT UNTIL/ENDREPEAT,,,分支:,CASE_OF/WHEN/,,SELECT/WHEN/SELECT/ENDCASE,/*,計算運費 *,/,,count ( );,,{,輸入,x;,輸出,y;,,if (o15) {,公式,2,計算,;call sub;},,},,sub ( );,,{ for(i=1,3,i++) do {,記賬;輸出;,},,},7.4.3,軟件測試,,提高程序的可靠性是每一個軟件工作者的愿望,也是用戶對軟件開發(fā)人員的要求。

    雖然有效的軟件設計方法可以提高軟件的可靠性,但是,由于各種各樣的原因,軟件產(chǎn)品中的缺陷總是難免的為了保證軟件產(chǎn)品的質(zhì)量,提高每一個程序的可靠性,必須對軟件進行測試,,測試具有以下特點:,,◇,,測試的挑剔性,,,◇,,完全測試的不可能性,,,◇,,測試的經(jīng)濟性,7.4.3,軟件測試,____,軟件測試的目的、準則,,◆,,軟件測試的目的,,,軟件測試就是使用人工或自動手段來運行或測定某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或是弄清預期結果與實際結果之間的差別,,,◆,,軟件測試的準則,,◇,,軟件測試的目的是發(fā)現(xiàn)錯誤,而最嚴重的錯誤不外乎是導致程序無法滿足用戶需求的錯誤因此,所有測試都應追溯到需求,,,◇,,軟件測試應當制定明確的測試計劃并按照計劃執(zhí)行,嚴格執(zhí)行測試計劃,排除測試的隨意性,,,◇,,為了達到好的測試效果,應該由第三方來構造測試,應避免程序員自己檢查程序,,,◇,,即使規(guī)模較小的程序,其路徑排列數(shù)也相當大,在實際測試過程中不可能窮舉每一種組合,測試只能證明程序中有錯誤,不能證明程序中沒有錯誤,7.4.3,軟件測試,____,軟件測試的過程,靜態(tài)測試、動態(tài)測試和自動測試是程序的測試的三種方式進行,也是。

    測試的過程,即先進行靜態(tài)分析,然后進行動態(tài)測試,在某些特殊情況下,又可以借助自動測試工具對程序進行查錯,靜態(tài)測試,是指不執(zhí)行程序,而只由人工對程序文本進行檢查,通過閱讀和討論,分析和發(fā)現(xiàn)程序中的錯誤大約,30,~,70%,的邏輯設計錯誤和編碼錯誤可以通過靜態(tài)分析檢查出來,動態(tài)測試,是使用測試用例在計算機上運行程序,使程序在運行過程中暴露錯誤,自動測試,自動測試工具通常有靜態(tài)分析工具、動態(tài)分析工具、綜合測試評估工具幾種,7.4.3,軟件測試,____,軟件測試的層次,,◆,,模塊測試,(單元測試),,大型程序是由許多模塊按層次結構組織在一起的因此,首先要對組成程序的各個模塊進行測試,其,目標,是發(fā)現(xiàn)局部模塊的邏輯與功能上的錯誤和缺陷它主要對以下幾個方面進行測試:,,◇,,模塊接口,主要測試穿過模塊的數(shù)據(jù)流,,◇,,局部數(shù)據(jù)結構,數(shù)據(jù)結構通常是錯誤的藏身之地這些錯誤主要包括數(shù)據(jù)引用錯和數(shù)據(jù)說明錯除了對局部變量進行測試外,有時還需要測試全局變量對模塊的影響,,◇,,重要路徑,選擇適當?shù)臏y試用例,對模塊中的重要執(zhí)行路徑進行測試,從而暴露程序中的錯誤,,◇,,錯誤處理能力,有意識地給出不合理的輸入,以檢查程序對錯誤的處理能力,,◇,,I/O,錯,。

    對含有,I/O,功能的模塊,還應測試,I/O,方面的有關錯誤,如文件屬性是否正確、,OPEN,語句是否正確、格式說明是否正確等,7.4.3,軟件測試,____,軟件測試的層次,由于模塊不是一個獨立的程序,不能單獨運行,因此,在進行模塊測試時,還應為每個被測試的模塊另外設計兩類模塊:驅動模塊和承接模塊其中,驅動模塊,的作用是將測試數(shù)據(jù)傳給被測試模塊,并顯示被測試模塊所產(chǎn)生的結果;,承接模塊,的作用是模擬被測試模塊的下層模塊,,通常,承接模塊有若干個,,,驅動模塊,,,,,,,,,,,,,,被測試模塊,,,,,,,,,,,,承接模塊,,,…,承接模塊,,,7.4.3,軟件測試,____,軟件測試的層次,,◆,,整體測試,,,當各模塊的獨立測試完成之后,還要將各模塊連接起來進行整體測試整體測試的目標在于暴露模塊測試時不能暴露的結構錯誤,如一個模塊是否破壞另外一個模塊的功能,數(shù)據(jù)通過接口時是否會丟失,能否產(chǎn)生主功能,誤差是否有積累等整體測試分為漸增式和非漸增式兩種:,,◇,,非漸增式的整體測試,是將經(jīng)過單獨測試的所有模塊連接到一起進行測試,,◇,,漸增式的整體測試,往往是與模塊測試同步進行的,即在對模塊逐步裝配的過程中同時進行的。

    這種測試方式可以減少模塊測試時要設計的驅動模塊或承接模塊數(shù),又可以及時、準確地發(fā)現(xiàn)結構錯誤的位置漸增式的整體測試一般又可以分為,“,由頂向下,”,和,“,由底向上,”,兩種,7.4.3,軟件測試,____,軟件測試的層次,,◆,,高級測試,功能測試,有效性測試主要用黑箱法測試軟件功能是否與用戶要求一致,,,系統(tǒng)測試,把軟件元素與硬件元素結合在一起進行測試,,,驗收測試,主要檢查程序的操作與原設計要求及用戶要求是否一致,,,安裝測試,主要檢查軟件在安裝時產(chǎn)生的問題,以上四種測試統(tǒng)稱為高級測試進行這四種測試,往往要求測試人員有比較深入的知識和豐富的經(jīng)驗,7.4.3,軟件測試,____,軟件測試技術,,對程序進行測試需要使用一些數(shù)據(jù),通常稱為一個,“,測試用例,”,由于完全測試的不可能性,用有限的測試用例去發(fā)現(xiàn)更多的錯誤就顯得非常重要設計和使用測試用例有以下幾個基本原則:,,,◇,,設計測試用例應同時確定程序運行的預期結果,,,◇,,測試用例不僅要選用合理的輸入數(shù)據(jù),也要選用不合理的輸入數(shù)據(jù),,,◇,,除了需要檢查程序是否做了應該做的事,還要檢查程序是否做了不應該做的事,,,◇,,千萬不要幻想程序是正確的,,,◇,,保留有用的測試用例,以便再測試時使用,,,◇,,測試用例要系統(tǒng)地進行設計,不可隨意湊合,,,下面分別介紹用白箱法和黑箱法測試時其測試用例的設計,7.4.3,軟件測試,____,軟件測試技術,,◆,,白箱法,(邏輯覆蓋測試),,白箱測試是根據(jù)對程序內(nèi)部邏輯結構的分析來選取測試用例。

    由于測試用例對程序邏輯覆蓋的程度決定了測試完全性的程度,,白箱測試用例的設計準則有:,,◇,,語句覆蓋,企圖用足夠多的測試用例,使程序中的每個語句都執(zhí)行一遍,以盡可能多地發(fā)現(xiàn)程序中的錯誤,,◇,,分支覆蓋,(,判定覆蓋準則,),它要求通過足夠多的測試用例,使程序中的每個分支至少通過一次,,◇,,條件覆蓋,通過執(zhí)行足夠多的測試用例,使每個判定中的每個條件都能取到兩種不同的結果(,“,真,”,與,“,假,”,),,◇,,組合條件覆蓋,條件覆蓋并不能完全滿足分支覆蓋例如,上述條件覆蓋所使用的兩個測試用例不能使第一個判定框為,“,真,”,,也不能使第二個判定框為,“,假,”,于是,人們便提出組合條件覆蓋準則,要求通過足夠多的測試用例,使每個判定中各條件的各種可能組合至少出現(xiàn)一次,7.4.3,軟件測試,____,軟件測試技術,,◆,,黑箱法,,,黑箱測試方法完全不考慮程序的內(nèi)部結構和內(nèi)部特征,而只是根據(jù)程序功能導出測試用例常用的黑箱測試有等價分類法、邊值分析法、因果圖法和錯誤推測法,,◇,,等價分類法,等價分類法是把所有可能的輸入數(shù)據(jù)(有效的和無效的)劃分成若干等價類,使每一類中的一個典型數(shù)據(jù)在測試中的作用與這類中所有其它數(shù)據(jù)的作用相同。

    因此,在實際進行測試時,可以從每個等價類中只取一組數(shù)據(jù)作為測試用例,,等價分類法分為兩步:一是劃分等價類(包括有效等價類和無效等價類);二是從每個等價類中選取測試用例,,劃分等價類的基本方法是:根據(jù)程序的功能說明,找出所有的輸入條件,然后為每一個輸入條件劃分等價類,7.4.3,軟件測試,____,軟件測試技術,◇,,邊值分析法,邊值分析不是從等價類中隨便選一個例子作為代表,而是著眼于使該等價類的邊界情況成為測試的主要目標來選取測試用例,并且邊值分析不僅考慮輸入條件,還要考慮輸出條件采用邊值分析設計測試的原則為:如果輸入條件規(guī)定了值的范圍,則要對這個范圍的邊界情況以及稍超出范圍的無效情況進行測試;如果輸入條件規(guī)定了值的個數(shù),則要分別對值的最大個數(shù)、最小個數(shù)、稍多于最大個數(shù)及稍少于最小個數(shù)的情況進行測試,,◇,,因果圖法,設計測試用例的一種系統(tǒng)方法,有助于測試人員系統(tǒng)地選擇高效的測試用例其基本思想是把輸入條件視為,“,因,”,,輸出條件視為,“,果,”,,把黑箱視為從因到果的邏輯網(wǎng)絡圖通過因果圖可以得到一張判定表,然后為判定表的每一列設計測試用例,,◇,,錯誤推測法,(猜錯法),無一定之規(guī)可循,在很大程度上是憑經(jīng)驗或直覺推測程序中可能存在的各種錯誤,從而有針對性地編寫測試用例,7.4.3,軟件調(diào)試,,程序調(diào)試,也稱排錯,它是一個與測試有聯(lián)系又有區(qū)別的概念,調(diào)試與測試的關系體現(xiàn)在以下幾個方面:,,,◇,,測試的目的是暴露錯誤,評價程序的可靠性;而調(diào)試的目的是發(fā)現(xiàn)錯誤的位置,并改正錯誤,,,◇,,測試是機械的、強制的、嚴格的、也是可預測的,,,◇,,經(jīng)測試發(fā)現(xiàn)錯誤后,可以立即進行調(diào)試并改正錯誤;經(jīng)過調(diào)試的程序還需要進行回歸測試,以檢查調(diào)試的效果,同時也可防止在調(diào)試過程中引進新的錯誤,,,◇,,調(diào)試用例與測試用例可以一致,也可以不一致,7.4.3,軟件調(diào)試,,調(diào)試的關鍵在于推斷程序內(nèi)部的錯誤位置及原因。

    軟件調(diào)試可以分為靜態(tài)調(diào)試和動態(tài)調(diào)試軟件測試中討論的靜態(tài)分析方法同樣適用靜態(tài)調(diào)試靜態(tài)調(diào)試主要指通過人的思維來分析源程序代碼和排錯,是主要的調(diào)試手段,而動態(tài)調(diào)試是輔助靜態(tài)調(diào)試的,,主要的調(diào)試方法可以采用:,,◇,,強行排錯法,,,作為傳統(tǒng)的調(diào)試方法,其過程可概括為,:,設置斷點、程序暫停、觀察程序狀態(tài)、繼續(xù)運行程序這是目前使用較多、效率較低的調(diào)試方法涉及的調(diào)試技術主要是設置斷點和監(jiān)視表達式例如:通過內(nèi)存全部打印來排錯、在程序特定部位設置打印語句(斷點法)、自動調(diào)試工具等應用以上任何一種技術之前,都應當對錯誤的征兆進行全面徹底的分析,得出對出錯位置及錯誤性質(zhì)的推測,再使用一種適當?shù)呐佩e方法來檢驗推測的正確性,7.4.3,軟件調(diào)試,,◇,,回溯法,,,該方法適合于小規(guī)模程序的排錯即一旦發(fā)現(xiàn)了錯誤,先分析錯誤征兆,確定最先發(fā)現(xiàn),“,癥狀,”,的位置然后,從發(fā)現(xiàn),“,癥狀,”,的地方開始,沿程序的控制流程,逆向跟蹤源程序代碼,直到找到錯誤根源或確定錯誤產(chǎn)生的范圍回溯法對于小程序很有效,往往能把錯誤范圍縮小到程序中的一小段代碼,仔細分析這段代碼不難確定出錯的準確位置但隨著源代碼行數(shù)的增加,潛在的回溯路徑數(shù)目很多,回溯會變得很困難,而且實現(xiàn)這種回溯的開銷大,7.4.3,軟件調(diào)試,,◇,,原因排除法,,通過演繹、歸納和二分法來實現(xiàn),,○,,演繹法,一種從一般原理或前提出發(fā),推導出結論的思考方法。

    首先測試人員根據(jù)已有的測試用例,設想及枚舉出所有可能出錯的原因作為假設,然后再用原始測試數(shù)據(jù)或新的測試,從中逐個排除不可能正確的假設,最后,再用測試數(shù)據(jù)驗證余下的假設確定出錯的原因,,○,,歸納法,一種從特殊推斷出一般的系統(tǒng)化思考方法從一些線索(錯誤征兆或與錯誤發(fā)生有關的數(shù)據(jù))著手,通過分析尋找潛在的原因,從而找出錯誤,,○,,二分法,已知每個變量在程序中若干個關鍵點的正確值時,使用賦值語句、輸入語句等定值語句在程序中的某點附近給這些變量賦值,然后運行程序并檢查程序的輸出如果輸出結果是正確的,則錯誤原因在程序的前半部分;反之,錯誤原因在程序的后半部分對錯誤原因所在的部分重復使用這種方法,直到將出錯范圍縮小到容易診斷的程度為止,7.4.3,軟件調(diào)試,上面的每一種方法都可以使用調(diào)試工具來輔助完成例如,可以使用帶調(diào)試功能的編譯器、動態(tài)調(diào)試器、自動測試用例生成器以及交叉引用工具等,,,需要注意的一個實際問題是,調(diào)試的結果是排錯,為了修改程序中錯誤,往往會采用,“,補丁程序,”,來實現(xiàn),而這種做法會引起整個程序質(zhì)量的下降,但是從目前程序設計發(fā)展的狀況看,對大規(guī)。

    點擊閱讀更多內(nèi)容
    最新文檔
    傳統(tǒng)文化道德不是高懸的明月而是腳下的星光.pptx
    世界無煙日關注青少年成長健康無煙為成長護航.pptx
    五四青年節(jié)詩詞贊歌五四青年自強不息.pptx
    XX學校班主任培訓用心管理慧做班主任.pptx
    拒絕熬夜健康養(yǎng)生規(guī)律作息遠離亞健康.pptx
    兒童成長手冊時光里的童真印記.pptx
    幼兒園夏季傳染病預防指南預見夏天健康童行夏季傳染病預防科普.pptx
    高中生心理健康教育主題班會快樂學習高效學習正視壓力學會減壓.pptx
    員工職業(yè)道德與職業(yè)素養(yǎng)培訓遵守職業(yè)道德提高職業(yè)修養(yǎng).pptx
    2025職業(yè)病防治法宣傳周健康守護職防同行.pptx
    XX幼兒園防災減災安全教育臨災不亂安全童行學會保護自己.pptx
    在2025年縣教育工作大會暨高考備考工作推進會上的講話發(fā)言材料.docx
    在2025年縣全面從嚴治黨和黨風廉政會議上的講話發(fā)言材料.docx
    在2025年全市慶?!拔逡弧濒邉趧幽7侗碚么髸系闹v話發(fā)言材料多篇.docx
    2025年稅務局青年代表在五四青年座談會上的發(fā)言材料3篇.docx
    在2025年市委全體會議上的主持講話發(fā)言材料.docx
    2025年黨風廉政建設工作要點材料.docx
    在2025年全市青年干部慶祝五四青年節(jié)大會上的講話發(fā)言材料多篇.docx
    在入黨積極分子培訓班上的講話發(fā)言材料.docx
    縣文旅局黨組書記在五一假期及夏季旅游安全生產(chǎn)工作部署會議上的講話發(fā)言材料.docx
    賣家[上傳人]:無極劍圣
    資質(zhì):實名認證