軟件工程課件第七章_第1頁
軟件工程課件第七章_第2頁
軟件工程課件第七章_第3頁
軟件工程課件第七章_第4頁
軟件工程課件第七章_第5頁
已閱讀5頁,還剩107頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、12課程概述課程概述3重點和難點重點和難點結構化程序設計的原則和風格結構化程序設計的原則和風格 軟件測試的目的和原則軟件測試的目的和原則 白盒測試、黑盒測試的定義白盒測試、黑盒測試的定義 熟練掌握熟練掌握白盒測試中各種邏輯覆蓋的基本思想白盒測試中各種邏輯覆蓋的基本思想 熟練掌握熟練掌握黑盒測試中等價劃分、邊界值分析方法黑盒測試中等價劃分、邊界值分析方法 軟件測試策略中單元測試、組裝測試、確認測試和系軟件測試策略中單元測試、組裝測試、確認測試和系統測試的相關概念及方法統測試的相關概念及方法 程序調試步驟和幾種程序調試方法、過程程序調試步驟和幾種程序調試方法、過程4 7.1.1 選擇程序設計語言選

2、擇程序設計語言 程序設計語言的分類程序設計語言的分類 從軟件工程的角度,根據程序設計語言從軟件工程的角度,根據程序設計語言發展的歷程,大致分為發展的歷程,大致分為4類:類: l第一代語言:從屬于機器的語言第一代語言:從屬于機器的語言 l第二代語言:匯編語言第二代語言:匯編語言 l第三代語言:高級程序設計語言第三代語言:高級程序設計語言 l第四代語言第四代語言(4GL)5選擇程序設計語言考慮的因素:選擇程序設計語言考慮的因素: l 系統用戶的要求系統用戶的要求 l 可以使用的編譯程序可以使用的編譯程序 l 可以得到的軟件工具可以得到的軟件工具 l 工程規模工程規模 l 程序員的知識程序員的知識

3、l 軟件的可移植性要求軟件的可移植性要求 l 軟件的應用領域軟件的應用領域 項目應用領域是最關鍵的因素。項目應用領域是最關鍵的因素。6一般語言的項目應用領域一般語言的項目應用領域7 編碼風格編碼風格是指一個人編制程序時所表現出是指一個人編制程序時所表現出來的特點、習慣、邏輯思路等。來的特點、習慣、邏輯思路等。 良好編碼風格包括:良好編碼風格包括: l程序內部應該有很好的文檔:程序內部應該有很好的文檔:如標識符、如標識符、注釋良好,程序文檔結構易讀易理解。注釋良好,程序文檔結構易讀易理解。 l數據說明應易于理解和維護。數據說明應易于理解和維護。 l語句結構盡可能簡單直觀。語句結構盡可能簡單直觀。

4、l輸入輸出風格遵守人機界面設計準則。輸入輸出風格遵守人機界面設計準則。 l效率滿足用戶需求即可。效率滿足用戶需求即可。8從三個方面考慮效率問題:從三個方面考慮效率問題:l程序運行的時間程序運行的時間 l存儲器效率存儲器效率 大型機要考慮操作系統頁式調度的特點;大型機要考慮操作系統頁式調度的特點; 微型機可考慮使用最小的存儲單元;微型機可考慮使用最小的存儲單元;提高存儲器效率的關鍵是程序的簡單性。提高存儲器效率的關鍵是程序的簡單性。 l輸入輸入/ /輸出的效率輸出的效率 簡單清晰是提高人機通信效率的關鍵;簡單清晰是提高人機通信效率的關鍵; 硬件間通信也有一些原則要遵循。硬件間通信也有一些原則要遵

5、循。97.2 軟件測試的基礎軟件測試的基礎 什么是軟件測試?什么是軟件測試? 是為了發現錯誤而執行程序的過程。是為了發現錯誤而執行程序的過程。 發現錯誤是為了更正錯誤,最終得到一個發現錯誤是為了更正錯誤,最終得到一個高質量的軟件系統。高質量的軟件系統。 軟件測試的對象:軟件測試的對象:整個軟件定義、開發周期的整個軟件定義、開發周期的產品產品 測試用例:測試用例:通常指測試數據和預期的輸出結果通常指測試數據和預期的輸出結果107.2.1 軟件測試的目標軟件測試的目標 軟件測試存在的矛盾軟件測試存在的矛盾 用戶希望通過軟件測試暴露軟件中用戶希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,以考慮是否可接

6、受隱藏的錯誤和缺陷,以考慮是否可接受該產品。該產品。 軟件開發者希望通過軟件測試表明軟件開發者希望通過軟件測試表明軟件產品中不存在錯誤,已正確地實現軟件產品中不存在錯誤,已正確地實現了用戶的要求。了用戶的要求。11G.Myers給出的軟件測試目的給出的軟件測試目的 l 測試是為了發現錯誤而執行程序的過程;測試是為了發現錯誤而執行程序的過程; l 好的測試用例是極可能發現迄今為止尚未發現的好的測試用例是極可能發現迄今為止尚未發現的錯誤的測試用例;錯誤的測試用例; l 成功的測試是發現了至今尚未發現的錯誤的測試。成功的測試是發現了至今尚未發現的錯誤的測試。 總之,測試的目的是以最少的時間和人力,總

7、之,測試的目的是以最少的時間和人力,系統地找出軟件中潛在的各種錯誤和缺陷;測試系統地找出軟件中潛在的各種錯誤和缺陷;測試附帶的收獲是它能證明軟件的功能和性能與需求附帶的收獲是它能證明軟件的功能和性能與需求說明相符合。說明相符合。 注意:測試不能表明軟件中不存在錯誤,它只能說注意:測試不能表明軟件中不存在錯誤,它只能說明軟件中存在錯誤。明軟件中存在錯誤。121)所有測試都能追溯到用戶需求)所有測試都能追溯到用戶需求2)應該遠在測試開始之前就制定出測試計劃)應該遠在測試開始之前就制定出測試計劃 3)應該把)應該把Pareto原理應用到軟件測試中原理應用到軟件測試中 群集現象:群集現象:8080的錯

8、誤可能是由的錯誤可能是由2020的模塊造成的的模塊造成的 4)從)從“小規模小規模”測試開始,逐步過渡到測試開始,逐步過渡到“大規模大規?!睖y試測試5)窮舉測試是不可能的)窮舉測試是不可能的 測試只能證明程序有錯,不能證明程序沒有錯誤測試只能證明程序有錯,不能證明程序沒有錯誤 6)應由獨立的第三方從事測試工作)應由獨立的第三方從事測試工作13 軟件測試方法一般分為:靜態測試和動態測試。軟件測試方法一般分為:靜態測試和動態測試。 靜態測試靜態測試是指被測程序不在機器上運行,是指被測程序不在機器上運行,采用人工檢測和計算機輔助靜態分析的手段采用人工檢測和計算機輔助靜態分析的手段對程序進行檢測。對程

9、序進行檢測。 動態測試動態測試是指通過運行程序發現錯誤,是指通過運行程序發現錯誤,又分又分黑盒法黑盒法和和白盒法白盒法兩種。兩種。14兩種動態測試方法兩種動態測試方法 已知產品應該具有的功能,可以通過已知產品應該具有的功能,可以通過黑盒測試黑盒測試來檢驗每個功能是否符合設計要來檢驗每個功能是否符合設計要求。求。 已知產品的內部工作過程,可以通過已知產品的內部工作過程,可以通過白盒測試白盒測試來檢驗每種內部操作是否按要求來檢驗每種內部操作是否按要求的規定正常進行。的規定正常進行。151、黑盒測試、黑盒測試 又稱功能測試或數據驅動測試。又稱功能測試或數據驅動測試。 將測試對象看做一個黑盒子,完全不

10、考將測試對象看做一個黑盒子,完全不考慮程序內部的邏輯結構和內部特性,只依據慮程序內部的邏輯結構和內部特性,只依據程序需求規格說明書,檢查程序的功能是否程序需求規格說明書,檢查程序的功能是否符合它的功能說明。符合它的功能說明。16 測試所有可能的輸入測試所有可能的輸入條件和輸出條件是不可能的。條件和輸出條件是不可能的。設某程序設某程序P P,輸入變量,輸入變量X X和和Y Y,輸出,輸出Z Z。若在字長為若在字長為3232位的計算機上運行,且位的計算機上運行,且X X、Y Y取取整數,按黑盒方法進行窮舉測試,可能采用整數,按黑盒方法進行窮舉測試,可能采用的測試數據組:的測試數據組: 2 2323

11、2 2 23232 2 264 64 如果測試一組數據需要如果測試一組數據需要1 1毫秒,一年工毫秒,一年工作作3653652424小時,完成所有測試需小時,完成所有測試需5 5億年。億年。17 又稱又稱結構測試結構測試或或邏輯驅動測試邏輯驅動測試。 將測試對象看做一個透明的盒子,允許將測試對象看做一個透明的盒子,允許測試人員利用程序內部的邏輯結構及有關信測試人員利用程序內部的邏輯結構及有關信息,設計或選息,設計或選 擇測試用例,對程序所有邏擇測試用例,對程序所有邏輯路徑進行測試。輯路徑進行測試。 注意:注意:對一個具有多重選擇和循環嵌套對一個具有多重選擇和循環嵌套的程序,的程序, 不同的路徑

12、數目可能是天文數字。不同的路徑數目可能是天文數字。18例:例: 某程序的流程圖,包括一個執行某程序的流程圖,包括一個執行20次的循環,次的循環, 則包含的不同執行路徑數達則包含的不同執行路徑數達5 20 條。條。 若對每條路徑進行測試需要若對每條路徑進行測試需要1毫秒,設一年工作毫秒,設一年工作 365 24小時,要把所有路徑測試完,需小時,要把所有路徑測試完,需3170 年。年。19測試的測試的4 4個步驟:個步驟: l 單元(模塊)測試單元(模塊)測試 l 集成測試(子系統和系統測試)集成測試(子系統和系統測試) l 確認(驗收)測試確認(驗收)測試 l 平行運行平行運行20 21 222

13、3 在單元測試的開始,應對通過被測模在單元測試的開始,應對通過被測模 塊塊的數據流進行測試。的數據流進行測試。測試項目:測試項目: l 調用本模塊的輸入參數是否正確;調用本模塊的輸入參數是否正確; l 本模塊調用子模塊時,輸入給子模塊的參數本模塊調用子模塊時,輸入給子模塊的參數 是否正確;是否正確; l 輸出給標準函數的參數是否正確;輸出給標準函數的參數是否正確; l 全局量的定義和用法在各模塊中是否一致;全局量的定義和用法在各模塊中是否一致; l 與外部設備的輸入輸出是否正確與外部設備的輸入輸出是否正確24測試項目:測試項目: l 不正確或不一致的數據類型說明不正確或不一致的數據類型說明 l

14、 使用尚未賦值或尚未初始化的變量使用尚未賦值或尚未初始化的變量 l 錯誤的初始值或錯誤的缺省值錯誤的初始值或錯誤的缺省值 l 變量名拼寫錯或書寫錯變量名拼寫錯或書寫錯 l 不一致的數據類型不一致的數據類型 l 全局數據對模塊的影響全局數據對模塊的影響25關鍵:測試用例要適當關鍵:測試用例要適當26著重測試以下可能發生的錯誤:著重測試以下可能發生的錯誤: l出錯的描述是否難以理解出錯的描述是否難以理解 l出錯的描述是否能夠對錯誤定位出錯的描述是否能夠對錯誤定位 l顯示的錯誤與實際的錯誤是否相符顯示的錯誤與實際的錯誤是否相符 l對錯誤條件的處理正確與否對錯誤條件的處理正確與否 l在對錯誤進行處理之

15、前,錯誤條件是否已在對錯誤進行處理之前,錯誤條件是否已經引起系統的干預等經引起系統的干預等 27 重點檢查剛好等于、大于或小于邊重點檢查剛好等于、大于或小于邊界值的數據;界值的數據; 對運行時間有要求的模塊,還要專對運行時間有要求的模塊,還要專門進行關鍵路徑測試,以確定最壞情況門進行關鍵路徑測試,以確定最壞情況下和平均意義下影響模塊運行時間的因下和平均意義下影響模塊運行時間的因素。素。返回返回28 人工測試源程序。人工測試源程序。 參與者:參與者:程序的設計者、編寫者、測試者程序的設計者、編寫者、測試者 沒有直接參與系統開發,但有能力的程序沒有直接參與系統開發,但有能力的程序員。員。 方法:方

16、法:研究設計說明書,一起審查程序代研究設計說明書,一起審查程序代碼如何實現設計,從中發現問題。碼如何實現設計,從中發現問題。 注意:注意:通常代碼審查和機器測試結合使用。通常代碼審查和機器測試結合使用。29 單元測試通常在編碼階段進行。常用單元測試通常在編碼階段進行。常用機器機器測試測試,即通過運行模塊發現問題。,即通過運行模塊發現問題。 兩個重要概念:兩個重要概念: l 驅動程序驅動程序(driver):相當于被測試模塊的:相當于被測試模塊的“主程序主程序”,接收測試數據,把這些數據,接收測試數據,把這些數據傳送給被測試的模塊,并且輸出相關結果。傳送給被測試的模塊,并且輸出相關結果。 l 存

17、根程序存根程序(stub):代替被測試模塊所調用:代替被測試模塊所調用的的 模塊。不需要具有子模塊所有功能,但模塊。不需要具有子模塊所有功能,但不允許什么事情也不做。不允許什么事情也不做。3031 要測試要測試“編輯子系統編輯子系統”,需要上層,需要上層“驅驅動模動模 塊塊”和下層和下層“存根程序存根程序”32 在單元測試之后,將模塊組裝承系統,為發現并在單元測試之后,將模塊組裝承系統,為發現并排除模塊在連接中可能出現的問題,而進行的測試。排除模塊在連接中可能出現的問題,而進行的測試。需要考慮:需要考慮: l 模塊連接時穿越模塊接口的數據是否會丟失;模塊連接時穿越模塊接口的數據是否會丟失; l

18、 一個模塊對另一個模塊是否會產生不利的影響;一個模塊對另一個模塊是否會產生不利的影響; l 各子功能組合起來,能否達到預期要求的父功各子功能組合起來,能否達到預期要求的父功 能;能; l 全局數據結構是否有問題;全局數據結構是否有問題; l 單個模塊的誤差累積起來,是否會放大至不能接單個模塊的誤差累積起來,是否會放大至不能接 受受的程度。的程度。33 非漸增式組裝方式非漸增式組裝方式 對每個模塊分別進行單元測試,再把所對每個模塊分別進行單元測試,再把所有模塊組裝成一個完整的系統進行的測試,從有模塊組裝成一個完整的系統進行的測試,從而得到要求的軟件系統。而得到要求的軟件系統。 漸增式組裝方式漸增

19、式組裝方式 先對模塊進行單元測試,然后將測試后的先對模塊進行單元測試,然后將測試后的模塊逐步組裝成較大的系統;在組裝的過程中模塊逐步組裝成較大的系統;在組裝的過程中邊連接邊測試,以發現連接過程中產生的問題;邊連接邊測試,以發現連接過程中產生的問題;最后組裝成為最后組裝成為 要求的軟件系統。要求的軟件系統。34l自頂向下的漸增方式自頂向下的漸增方式l自底向上結合的漸增方式自底向上結合的漸增方式 l混合漸增測試混合漸增測試35 自頂向下的增殖方式自頂向下的增殖方式 將模塊按系統程序結構,沿控制層將模塊按系統程序結構,沿控制層次自頂向下進行組裝。次自頂向下進行組裝。 不需要驅動模塊,需要存根模塊不需

20、要驅動模塊,需要存根模塊? 深度優先深度優先 ? 寬度優先寬度優先36深度優先組裝的例子深度優先組裝的例子37組合步驟組合步驟1 1)對主模塊進行測試,用存根模塊代替)對主模塊進行測試,用存根模塊代替 下層模塊;下層模塊;2 2)根據選定的結合策略,每次用一個實)根據選定的結合策略,每次用一個實 際模塊代替一個樁模塊;際模塊代替一個樁模塊;3 3)在結合進一個模塊的同時進行測試;)在結合進一個模塊的同時進行測試; 4 4)為保證加入的模塊沒有引進新的錯)為保證加入的模塊沒有引進新的錯 誤,誤,可能需要進行回歸測試可能需要進行回歸測試38優點優點 1 1)能在早期驗證主要的控制和判斷點。)能在早

21、期驗證主要的控制和判斷點。2 2)選用按深度方向組裝的方式,可以首先)選用按深度方向組裝的方式,可以首先 實現和驗證一個完整的軟件功能。實現和驗證一個完整的軟件功能。 缺點:缺點:可能遇到邏輯次序上的問題可能遇到邏輯次序上的問題39 自底向上的增殖方式自底向上的增殖方式 從程序模塊結構最底層的模塊開始組裝和測試。從程序模塊結構最底層的模塊開始組裝和測試。 不再需要存根程序,需要驅動模塊。不再需要存根程序,需要驅動模塊。 組合策略:組合策略: 1 1)把低層模塊組合成實現某個特定的軟件子功把低層模塊組合成實現某個特定的軟件子功 能的族;能的族; 2 2)用驅動程序協調測試數據的輸入和輸出;用驅動

22、程序協調測試數據的輸入和輸出; 3 3)對由模塊組成的子功能族進行測試;對由模塊組成的子功能族進行測試; 4 4)去掉驅動程序,沿軟件結構自下向上移動,去掉驅動程序,沿軟件結構自下向上移動, 把子功能族組合起來形成更大的子功能族。把子功能族組合起來形成更大的子功能族。40自底向下組合測試的例子自底向下組合測試的例子41回歸測試回歸測試思考:思考:采用采用“漸增式測試漸增式測試”時,測試中當新的模時,測試中當新的模塊結合進來之后,是否需要對程序進行再次測塊結合進來之后,是否需要對程序進行再次測試?試? 定義:定義:指集成測試中,重新執行已經做過測試的指集成測試中,重新執行已經做過測試的某個子集,

23、以保證上述這些變化沒有帶來非預某個子集,以保證上述這些變化沒有帶來非預期的副作用。期的副作用。 先采取自頂向下的方式測試被修改的模塊先采取自頂向下的方式測試被修改的模塊及其子模塊;然后將這一部分視為子系統,再及其子模塊;然后將這一部分視為子系統,再自底向上測試。自底向上測試。42混合策略混合策略 1 1)衍變的自頂向下的增殖測試)衍變的自頂向下的增殖測試 先對輸入輸出模塊和引入新算法先對輸入輸出模塊和引入新算法模塊進行測試;模塊進行測試; 再自底向上組裝成為功能相當完整再自底向上組裝成為功能相當完整且相對獨立的子系統;且相對獨立的子系統; 然后由主模塊開始自頂向下進行增然后由主模塊開始自頂向下

24、進行增殖測試。殖測試。432 2)自底向上)自底向上自頂向下的增殖測試自頂向下的增殖測試 先對含讀操作的子系統自底向上直先對含讀操作的子系統自底向上直至根結點模塊進行組裝和測試;至根結點模塊進行組裝和測試; 再對含寫操作的子系統做自頂向下再對含寫操作的子系統做自頂向下的組裝與測試。的組裝與測試。4445確認測試的步驟確認測試的步驟46 通常采用通常采用黑盒測試黑盒測試,驗證被測軟件是否,驗證被測軟件是否滿足用戶需求。滿足用戶需求。 測試計劃:測試計劃:包括測試種類及進度安排;包括測試種類及進度安排; 測試步驟:測試步驟:描述具體的測試用例描述具體的測試用例 測試目的:測試目的:確定軟件的特性是

25、否與需求相符;確定軟件的特性是否與需求相符; 所有的文檔都是正確且便于使用;所有的文檔都是正確且便于使用; 其它軟件需求。其它軟件需求。測試結果:測試結果:與預期的結果相符;與預期的結果相符; 與預期的結果不符:要提交一份問題報告。與預期的結果不符:要提交一份問題報告。4748 適用:適用:為多個用戶開發的軟件為多個用戶開發的軟件 測試:測試:由用戶在開發環境下進行的測試。由用戶在開發環境下進行的測試。 主要評價軟件產品的主要評價軟件產品的FLURPSFLURPS(即功能、(即功能、局域化、局域化、 可使用性、可靠性、性能和支持)??墒褂眯?、可靠性、性能和支持)。 測試:測試:由最終用戶在實際

26、使用環境下進行的測由最終用戶在實際使用環境下進行的測試,這些用戶定期返回有關錯誤信息給開發者。試,這些用戶定期返回有關錯誤信息給開發者。 注意:注意:只有當只有當測試達到一定的可靠程度時,才測試達到一定的可靠程度時,才開始開始測試。測試。497.6 白盒測試技術白盒測試技術 白盒測試執行的要求:白盒測試執行的要求: p 對程序模塊的所有獨立的執行路徑至少測對程序模塊的所有獨立的執行路徑至少測試一次;試一次; p 對所有的邏輯判定,取對所有的邏輯判定,取“真真”與取與取“假假”的兩種情況都至少測試一次;的兩種情況都至少測試一次; p 在循環的邊界和運行界限內執行循環體;在循環的邊界和運行界限內執

27、行循環體; p 測試內部數據結構的有效性。測試內部數據結構的有效性。50 邏輯覆蓋是以程序內部的邏輯結構為基礎邏輯覆蓋是以程序內部的邏輯結構為基礎設計測試用例的技術。設計測試用例的技術。 l 語句覆蓋語句覆蓋 l 判定覆蓋判定覆蓋 l 條件覆蓋條件覆蓋 l 判定條件覆蓋判定條件覆蓋 l 條件組合覆蓋條件組合覆蓋 l 點覆蓋點覆蓋 l 邊覆蓋邊覆蓋 l 路徑覆蓋路徑覆蓋5152535455561、語句覆蓋、語句覆蓋 設計若干個測試用例,使得被測程序設計若干個測試用例,使得被測程序的的至少執行一次。至少執行一次。5758語句覆蓋的弱點語句覆蓋的弱點思考:思考:假使程序中兩個判定的邏輯運算有問題,假

28、使程序中兩個判定的邏輯運算有問題,第一個判定運算符第一個判定運算符“AND”AND”錯成錯成“OR”OR”,或者,或者是第二個判定運算符是第二個判定運算符 “ “OR”OR”錯成錯成“AND”AND”; 或者第二個條件語句中或者第二個條件語句中X1X1誤寫成誤寫成X0X0, 若仍然使用該測試用例若仍然使用該測試用例(2, 0, 4)(2, 0, 4),是否能夠,是否能夠發現程序的錯誤?發現程序的錯誤?答:不能發現。答:不能發現。程序仍然按照流程圖上的路徑程序仍然按照流程圖上的路徑 a ac ce e執行。執行。 一般認為,語句覆蓋是很不充一般認為,語句覆蓋是很不充分的一種標準。分的一種標準。5

29、92、判定覆蓋、判定覆蓋 又稱為分支覆蓋又稱為分支覆蓋 程序中每個判斷表達式的取真分支和程序中每個判斷表達式的取真分支和取假分支至少執行一次。取假分支至少執行一次。6061另一組測試用例另一組測試用例即路徑即路徑abeabe和和acdacd,得另一組測試用例,得另一組測試用例: : 【(2, 1, 1)(2, 1, 1),(2, 1, 2)(2, 1, 2)】覆蓋】覆蓋 abeabe【L3L3】 【(3, 0, 3)(3, 0, 3),(3, 1, 1)(3, 1, 1)】覆蓋】覆蓋 acdacd【L4L4】62判定覆蓋總結判定覆蓋總結 上述兩組測試用例不僅滿足了上述兩組測試用例不僅滿足了“判

30、定覆判定覆蓋蓋”,同時還滿足了,同時還滿足了“語句覆蓋語句覆蓋”,從這點看,從這點看,判定覆蓋強于語句覆蓋。判定覆蓋強于語句覆蓋。 若第二個判定條件若第二個判定條件X1X1錯寫成了錯寫成了X1X1,能,能否發現問題?否發現問題? 仍然按原路執行。仍然按原路執行。 判定覆蓋不能判定覆蓋不能確定判定內部條件的錯誤,需要更強的邏輯覆確定判定內部條件的錯誤,需要更強的邏輯覆蓋來檢驗判定內的條件。蓋來檢驗判定內的條件。633、條件覆蓋、條件覆蓋 使每個判斷表達式中的每個條件都取到各使每個判斷表達式中的每個條件都取到各種可能的結果。設:種可能的結果。設:條件條件A A1 1,真為,真為T1 T1 ,假為,

31、假為F1 F1 條件條件B B0 0,真為,真為T2 T2 ,假為,假為F2 F2 條件條件A A2 2,真為,真為T3 T3 ,假為,假為F3 F3 條件條件X X1 1,真為,真為T4 T4 ,假為,假為F4F464符合條件覆蓋的測試用例符合條件覆蓋的測試用例 65條件覆蓋總結條件覆蓋總結覆蓋了條件的測試覆蓋了條件的測試 用例不一定覆蓋分支。用例不一定覆蓋分支。 為解決這個矛盾,需為解決這個矛盾,需要兼顧條件和分支。要兼顧條件和分支。664、判定條件覆蓋、判定條件覆蓋 判斷中每個條件的所有可能取值至少執行一次,判斷中每個條件的所有可能取值至少執行一次,同時每個判斷的可能取值也至少執行一次。

32、同時每個判斷的可能取值也至少執行一次。675、條件組合覆蓋、條件組合覆蓋 每個判斷表達式中所有可能的每個判斷表達式中所有可能的至少執行一次。設:至少執行一次。設:686 6、路徑覆蓋、路徑覆蓋 路徑測試就是設計足夠的測試用例,路徑測試就是設計足夠的測試用例,覆蓋程序中所有可能的路徑。覆蓋程序中所有可能的路徑。l當程序中判定多于一個時,形成的分支結當程序中判定多于一個時,形成的分支結構可以分為兩類:構可以分為兩類:和和。l對于嵌套型分支結構嵌套型分支結構,若對于嵌套型分支結構嵌套型分支結構,若有有 個判定語句,需要個判定語句,需要 個測試用例;個測試用例;l對于連鎖型分支結構連鎖型分支結構,對于

33、連鎖型分支結構連鎖型分支結構, 若若有有 個判定語句,需要有個判定語句,需要有個測試用例,覆個測試用例,覆蓋它的蓋它的條路徑。當條路徑。當 較大時將無法測試。較大時將無法測試。69707、點覆蓋、點覆蓋 與語句覆蓋標準相同。與語句覆蓋標準相同。 如果連通圖如果連通圖G G的子圖的子圖GG是連通的,而且包含是連通的,而且包含G G的所有的所有節點,由稱節點,由稱GG是是G G的點覆蓋。的點覆蓋。 8、邊覆蓋、邊覆蓋 與判斷覆蓋相同。與判斷覆蓋相同。 如果連通圖如果連通圖G G的子的子圖圖GG是連通的,而且包含是連通的,而且包含G G的所有邊,的所有邊,由稱由稱GG是是G G的邊覆蓋。的邊覆蓋。7

34、1總結:總結:6種覆蓋標準的對比種覆蓋標準的對比727.6.2 控制結構測試控制結構測試1、基本路徑測試、基本路徑測試 以環形復雜度為基礎,導出基本可以環形復雜度為基礎,導出基本可執行路徑集合,設計測試用例的方法。執行路徑集合,設計測試用例的方法。 測試用例要保證程序的每個可執行語句測試用例要保證程序的每個可執行語句至少執行一次。至少執行一次。73步驟:步驟: 步驟步驟1:由程序流程圖導出程序控制流圖,由程序流程圖導出程序控制流圖, 并計算其環路復雜度。并計算其環路復雜度。 步驟步驟2:確定程序的獨立路徑。確定程序的獨立路徑。 什么是獨立路徑?什么是獨立路徑? 流圖中,一條獨立路徑是至少包含一

35、條在其流圖中,一條獨立路徑是至少包含一條在其它獨立路徑中從未有過的邊的路徑。它獨立路徑中從未有過的邊的路徑。 獨立路徑條數獨立路徑條數是確保程序中,每個可執行語是確保程序中,每個可執行語句至少能被執行一次所必需的測試用例數目的上界。句至少能被執行一次所必需的測試用例數目的上界。 獨立路徑獨立路徑條數程序環路復雜性條數程序環路復雜性V(G)V(G)74例:獨立路徑例:獨立路徑 圖中一組獨立的路徑是:圖中一組獨立的路徑是:L1L1:1,11 1,11 L2L2:1,2,3,4,5,10,1,11 1,2,3,4,5,10,1,11 L3L3:1,2,3,6,8,9,10,1,11 1,2,3,6,

36、8,9,10,1,11 L4L4:1,2,3,6,7,9,10,1,111,2,3,6,7,9,10,1,11 路徑路徑L1L1,L2L2,L3L3,L4L4組組 成了控制流圖的一個基本成了控制流圖的一個基本路徑集。路徑集。75步驟步驟3:由基本路徑集,導出測試用例由基本路徑集,導出測試用例 基本路徑集不是唯一的,對于給定的基本路徑集不是唯一的,對于給定的程序圖,可以得到不同的基本路徑集。程序圖,可以得到不同的基本路徑集。 導出測試用例,確?;韭窂郊械膶С鰷y試用例,確?;韭窂郊械?每一條路徑的執行。每一條路徑的執行。767.7 黑盒測試技術黑盒測試技術黑盒測試主要是為了發現以下錯誤黑盒

37、測試主要是為了發現以下錯誤: : l 是否有不正確或遺漏了的功能是否有不正確或遺漏了的功能? ? l 能否正確地接受輸入能否正確地接受輸入? ? 能否正確的輸出結果能否正確的輸出結果? ? l 是否有數據結構錯誤或外部數據庫訪問錯誤是否有數據結構錯誤或外部數據庫訪問錯誤? ? l 性能上是否能夠滿足要求性能上是否能夠滿足要求? ? l 是否有初始化或終止性錯誤是否有初始化或終止性錯誤? ? 幾種黑盒測試技術:幾種黑盒測試技術: 等價類劃分、邊界值分析、等價類劃分、邊界值分析、錯誤推測法、因果圖錯誤推測法、因果圖777.7.1 等價劃分等價劃分 基本思想:基本思想:把所有可能的輸入數據(包括把所

38、有可能的輸入數據(包括 有效或無效的),劃分成若干數據類(等有效或無效的),劃分成若干數據類(等價類),然后從每個數據類中選取少數有價類),然后從每個數據類中選取少數有代表性的數據做為測試用例。代表性的數據做為測試用例。 這種方法完全不考慮程序的內部結這種方法完全不考慮程序的內部結構,只依據程序的規格說明來設計測試用構,只依據程序的規格說明來設計測試用例。例。78設計測試用例的步驟設計測試用例的步驟步驟步驟1 1:劃分等價類(列出等價類表)劃分等價類(列出等價類表) 等價等價類是指輸入數據的子集合。在該子集合中,類是指輸入數據的子集合。在該子集合中,各輸入數據對于發現程序中的錯誤都是等各輸入數

39、據對于發現程序中的錯誤都是等效的。效的。 根據程序功能說明,確定有效和根據程序功能說明,確定有效和無效的等價類。無效的等價類。 設計測試用例的步驟設計測試用例的步驟 步驟步驟2 2:根據等價類設計測試用例包括有效根據等價類設計測試用例包括有效等價類和無效等價類的設計。等價類和無效等價類的設計。79步驟步驟1:劃分等價類:劃分等價類等價類分為:等價類分為: l 有效等價類:有效等價類:是指對于程序的規格說明是指對于程序的規格說明來說,是合理的,有意義的輸入數據構成來說,是合理的,有意義的輸入數據構成的集合。的集合。 l 無效等價類:無效等價類:是指對于程序的規格說明是指對于程序的規格說明來說,是

40、不合理的,無意義的輸入數據構來說,是不合理的,無意義的輸入數據構成的集合。成的集合。 在設計測試用例時,要同時考慮有在設計測試用例時,要同時考慮有效等價類和無效等價類的設計!效等價類和無效等價類的設計!80等價類劃分原則(等價類劃分原則(1)原則原則1:若規定了取值范圍,或輸入值的個數,則可:若規定了取值范圍,或輸入值的個數,則可以以 確立一個有效等價類和兩個無效等價類。確立一個有效等價類和兩個無效等價類。 例:例:程序對輸入條件的要求是:程序對輸入條件的要求是:輸入數是從輸入數是從1 1到到 999 999 則有效等價類是則有效等價類是“11輸入數輸入數999”999”; 兩個無效等價類是兩

41、個無效等價類是“輸入數輸入數1”1”或或“輸入數輸入數999”999” 81等價類劃分原則(等價類劃分原則(2)原則原則2 2:如果規定了輸入數據的一組值,而且程序:如果規定了輸入數據的一組值,而且程序要對每種輸入數據分別處理,則可為每種輸入值要對每種輸入數據分別處理,則可為每種輸入值確立一個有效等價類,此外針對這組值確立一個確立一個有效等價類,此外針對這組值確立一個無效等價類,它是所有不允許的輸入值的集合。無效等價類,它是所有不允許的輸入值的集合。例:例:教師上崗方案中規定對教授、副教授、講師和教師上崗方案中規定對教授、副教授、講師和助助 教分別計算分數,做相應的處理。因此可以教分別計算分數

42、,做相應的處理。因此可以確定確定 4 4個有效等價類為教授、副教授、講師和助個有效等價類為教授、副教授、講師和助教,教, 一個無效等價類,它是所有不符合以上身一個無效等價類,它是所有不符合以上身分的人員的輸入值的集合。分的人員的輸入值的集合。 82等價類劃分原則(等價類劃分原則(3) 原則原則3 3:若規定了輸入值的集合,或者是規:若規定了輸入值的集合,或者是規定了定了“必必 須如何須如何”的條件,則可確立一的條件,則可確立一個有效等價類和一個有效等價類和一 個無效等價類。個無效等價類。例:例:PascalPascal語言對變量標識符規定必須語言對變量標識符規定必須“以字母以字母 打頭打頭”,

43、則所有以字母打頭的,則所有以字母打頭的構成有效等價類,而不構成有效等價類,而不 以字母打頭的歸以字母打頭的歸于無效等價類。于無效等價類。 83等價類劃分原則(等價類劃分原則(4)原則原則4 4:如果規定輸入數據為整型,則可劃:如果規定輸入數據為整型,則可劃分出正整分出正整 數、零和負整數三個有效類,數、零和負整數三個有效類,其他數據為無效類。其他數據為無效類。 原則原則5 5:如果程序處理對象是表格,則應使:如果程序處理對象是表格,則應使用空表、含一項和多項的表。用空表、含一項和多項的表。 原則原則6 6:如果確知,已劃分的等價類中各元:如果確知,已劃分的等價類中各元素在程序中的處理方式不同,

44、則應將此素在程序中的處理方式不同,則應將此等價類進一步劃分成更小的等價類。等價類進一步劃分成更小的等價類。 84步驟步驟2:確立測試用例:確立測試用例 在確立了等價類之后,建立等價類在確立了等價類之后,建立等價類表,列出所有劃分出的等價類。表,列出所有劃分出的等價類。85測試用例的選擇原則測試用例的選擇原則原則原則1 1:為每一個等價類規定一個唯一編號;:為每一個等價類規定一個唯一編號; 原則原則2 2:設計一個新的測試用例,使其盡可能多:設計一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價類,重復這一地覆蓋尚未被覆蓋的有效等價類,重復這一步步, ,直到所有的有效等價類都被覆蓋為止;直

45、到所有的有效等價類都被覆蓋為止; 原則原則3 3:設計一個新的測試用例,使其僅覆蓋一:設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重復這一步,個尚未被覆蓋的無效等價類,重復這一步,直到所有的無效等價類都被覆蓋為止。直到所有的無效等價類都被覆蓋為止。86等價類劃分法設計測試用例(例等價類劃分法設計測試用例(例1)例例1 1: 某報表處理系統,要求用戶輸入處理報表的某報表處理系統,要求用戶輸入處理報表的日期。日期。 系統規定日期由年、月的系統規定日期由年、月的6 6位數字字符組成,位數字字符組成,前前4 4 位代表年,后兩位代表月。位代表年,后兩位代表月。 設日期限制在設日期限制在

46、19901990年年1 1月至月至19991999年年1212月,即系月,即系統只能對該段時期內的報表進行處理。如果用戶統只能對該段時期內的報表進行處理。如果用戶輸入的日期不在此范圍內,則顯示輸入錯誤。輸入的日期不在此范圍內,則顯示輸入錯誤。 現用等價類劃分法設計測試用例,來測試程現用等價類劃分法設計測試用例,來測試程序的序的 “ “日期檢查功能日期檢查功能”。87劃分等價類并編號劃分等價類并編號 88為合理等價類設計測試用例為合理等價類設計測試用例 6位數字字符位數字字符 在在19901999之間之間 在在112之間之間89為每個不合理等價類設計測試用例為每個不合理等價類設計測試用例907.

47、7.2 邊界值分析邊界值分析 邊界是指,對于輸入和輸出等價類而言,稍邊界是指,對于輸入和輸出等價類而言,稍高和稍低于其邊界值的一些特定情況。高和稍低于其邊界值的一些特定情況。 經驗得知,大量的錯誤是發生在輸入或輸出經驗得知,大量的錯誤是發生在輸入或輸出范圍范圍 的邊界上,而不是在輸入范圍的內部。的邊界上,而不是在輸入范圍的內部。 邊界值分析方法思想:邊界值分析方法思想:確定邊界之后,選取確定邊界之后,選取正好等于、剛剛大于或剛剛小于邊界的值做為測正好等于、剛剛大于或剛剛小于邊界的值做為測試數據,而不是選取等價類中典型值或任意值做試數據,而不是選取等價類中典型值或任意值做為測試數據。為測試數據。

48、 通??偸桥c等價劃分技術聯合使用,是等價通??偸桥c等價劃分技術聯合使用,是等價類劃分方法的補充。類劃分方法的補充。917.7.3 錯誤推測錯誤推測 基本思想:基本思想:列舉程序中所有可能有列舉程序中所有可能有的錯誤和容易發生錯誤的特殊情況,根的錯誤和容易發生錯誤的特殊情況,根據它們選擇據它們選擇 測試用例。測試用例。 依靠經驗和直覺推測程序中可能存依靠經驗和直覺推測程序中可能存在的各種錯誤,從而有針對性地編寫檢在的各種錯誤,從而有針對性地編寫檢查這些錯誤查這些錯誤 的測試用例。的測試用例。927.8 調試(調試(Debug) 軟件調試軟件調試是在成功測試之后,進一步是在成功測試之后,進一步診斷

49、和改正程序中潛在的錯誤。診斷和改正程序中潛在的錯誤。調試活動的組成部分調試活動的組成部分: l 確定程序中可疑錯誤的確切性質和位置。確定程序中可疑錯誤的確切性質和位置。 l 對程序對程序( (設計設計, ,編碼編碼) )進行修改,排除這進行修改,排除這個錯誤。個錯誤。937.8.1 調試過程調試過程 從錯誤的外部表現形式入手,確定程序從錯誤的外部表現形式入手,確定程序 中出錯位置;中出錯位置; 研究有關程序,找出錯誤的內在原因;研究有關程序,找出錯誤的內在原因; 修改設計和代碼,排除這個錯誤;修改設計和代碼,排除這個錯誤; 重復進行暴露了這個錯誤的原始測試或重復進行暴露了這個錯誤的原始測試或

50、某些有關測試。某些有關測試。9495調試在技術上的難度調試在技術上的難度l 錯誤現象與原因所處的位置可能相距甚遠。當錯誤現象與原因所處的位置可能相距甚遠。當其它錯誤得到糾正時,這一錯誤所表現出的現其它錯誤得到糾正時,這一錯誤所表現出的現象可能會暫時消失,但并未實際排除。象可能會暫時消失,但并未實際排除。 l 非錯誤原因非錯誤原因( (例如,舍入誤差例如,舍入誤差) )。 l 不容易發現的人為錯誤。不容易發現的人為錯誤。 l 錯誤是由于時序問題引起的,與處理過程無關。錯誤是由于時序問題引起的,與處理過程無關。 l 現象是由于難于精確再現的輸入狀態(例如,現象是由于難于精確再現的輸入狀態(例如,實

51、實 時應用中輸入順序不確定)引起。時應用中輸入順序不確定)引起。 l 現象可能是周期出現的。在軟、硬件結合的嵌現象可能是周期出現的。在軟、硬件結合的嵌入式系統中常常遇到。入式系統中常常遇到。967.8.2 調試途徑調試途徑 強行排錯強行排錯 效率最低的方法,常見形式效率最低的方法,常見形式: : 打印出所有存儲內容、代碼打印出所有存儲內容、代碼 在程序特定部位設置打印語句在程序特定部位設置打印語句 自動調試工具。自動調試工具。97 回溯法回溯法( (跟蹤法跟蹤法) ) 根據錯誤癥狀位置,人工沿程序控根據錯誤癥狀位置,人工沿程序控制流程向回追蹤源代碼。制流程向回追蹤源代碼。 適用于小程序,路徑數

52、目很大時無適用于小程序,路徑數目很大時無法進行。法進行。98 歸納法調試歸納法調試一種從特殊現象推斷一般原理的思考方法。一種從特殊現象推斷一般原理的思考方法。99歸納法調試步驟歸納法調試步驟 收集有關數據。收集有關數據。列出所有已知的測試用例和程列出所有已知的測試用例和程序執行結果。序執行結果。 組織數據。組織數據。組織整理數據,以發現規律。組織整理數據,以發現規律。3W1H3W1H形式。形式。 提出假設。提出假設。利用分析結果,設計一個或多個關利用分析結果,設計一個或多個關于出于出 錯原因的假設。若提不出假設,則需收錯原因的假設。若提不出假設,則需收集更多數據。集更多數據。 證明假設。證明假

53、設。把假設與原始線索或數據進行比較,把假設與原始線索或數據進行比較,若它能完全解釋一切現象,則假設得到證明;若它能完全解釋一切現象,則假設得到證明;否則,否則, 就認為假設不合理、不完全,或是存就認為假設不合理、不完全,或是存在多個錯誤,在多個錯誤, 以致只能消除部分錯誤。以致只能消除部分錯誤。100演繹法調試演繹法調試 一種從一般原理或前提出發,經過排除和精化的一種從一般原理或前提出發,經過排除和精化的過程來推導出結論的思考方法。過程來推導出結論的思考方法。101演繹法調試步驟演繹法調試步驟列舉所有可能出錯原因的假設。列舉所有可能出錯原因的假設。把所有可能的把所有可能的錯誤原因列成表。通過它

54、們,組織、分析現有錯誤原因列成表。通過它們,組織、分析現有數據。數據。 利用已有的測試數據,排除不正確的假設。利用已有的測試數據,排除不正確的假設。仔仔細分析已有的數據,尋找矛盾,力求排除前一細分析已有的數據,尋找矛盾,力求排除前一步列出的所有原因。如果所有原因都被排除了,步列出的所有原因。如果所有原因都被排除了,則需要補充則需要補充 一些數據一些數據( (測試用例測試用例) ),以建立新,以建立新的假設。的假設。 改進余下的假設。改進余下的假設。對沒有被排除的原因,利用對沒有被排除的原因,利用已知已知 的線索,進一步改進,使之更具體化,的線索,進一步改進,使之更具體化,以便可以精確地確定出錯

55、位置。以便可以精確地確定出錯位置。 證明余下的假設。證明余下的假設。見歸納法第四步。見歸納法第四步。102調試原則調試原則 確定錯誤的性質和位置的原則確定錯誤的性質和位置的原則 l 用頭腦去分析思考與錯誤征兆有關的信息。用頭腦去分析思考與錯誤征兆有關的信息。 l 避開死胡同。避開死胡同。 l 只把調試工具當做輔助手段來使用。利用只把調試工具當做輔助手段來使用。利用調試工具,可以幫助思考,但不能代替思調試工具,可以幫助思考,但不能代替思考。考。 l 避免用試探法,最多只能把它當做最后手避免用試探法,最多只能把它當做最后手 段。段。103修改錯誤的原則修改錯誤的原則l修改錯誤的一個常見失誤是只修改了這修改錯誤的一個常見失誤是只修改了這個錯誤的征兆或這個錯誤的表現,而沒個錯誤的征兆或這個錯誤的表現,而沒有修改錯有修改錯 誤的本身。誤的本身。 l當心修正一個錯誤的同時有可能會引入當心修正一個錯誤的同時有可能會引入新的錯誤。新的錯誤。 l修改錯誤的過程將迫使人們暫時回到程修改錯誤的過程將迫使人們暫時回到程序設計階段。序設計階段。 l修改源代碼程序,不要改變目標代碼。修改源代碼程序,不要改變目標代碼。1047.9 軟件可靠性軟件可靠性7.9.1 基本概念基本概念 1、什么是軟件可靠性?、什么是軟件可靠性? 程序在給定的時間間隔內,按照規

溫馨提示

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

評論

0/150

提交評論