版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、白盒測試基礎,白盒測試技術之一,目錄,白盒測試技術概述,白盒測試用例設計技術,白盒測試工具,實例,1、白盒測試技術概述,1.1 白盒測試概念 1.2 白盒測試與黑盒測試比較 1.3 白盒測試的分類 1.4 白盒測試的合適程度,1、白盒測試技術概述,1.1 白盒測試概念 白盒測試(white-box testing),又稱結構測試或者邏輯驅動測試,其按照程序內部的結構進行測試。 白盒測試方法就是把測試對象看做一個透明的盒子,測試人員利用程序內部的邏輯結構及有關信息,設計或選擇測試用例,對程序所有邏輯路徑進行測試,通過測試證明每種內部操作是否符合設計規(guī)格說明。,1、白盒測試技術概述,1.1 白盒測
2、試概念,對程序模塊的所有獨立的執(zhí)行路徑至少測試一遍。,在循環(huán)的邊界和運行的界限內執(zhí)行循環(huán)體。,白盒測試主要是想對程序模塊進行如下檢查:,對所有的邏輯判定,取“真”與取“假”的兩種情況都能至少測一遍。,測試內部數據結構的有效性等。,1、白盒測試技術概述,1.2 白盒測試與黑盒測試比較 白盒測試和黑盒測試都是軟件測試的手段之一,在測試過程中兩者互為補充,共同驗證軟件的質量。其中,黑盒測試主要用在系統(tǒng)測試階段;而白盒測試則把測試深入到“盒子內部”,關注軟件的結構和邏輯細節(jié),主要用在單元測試和集成測試階段。,1、白盒測試技術概述,1.2 白盒測試與黑盒測試比較,表1.1 黑盒測試與白盒測試比較,1、白
3、盒測試技術概述,1.3 白盒測試的分類 根據是否運行源代碼,白盒測試分為靜態(tài)分析和動態(tài)測試。 靜態(tài)分析:不實際運行程序,只是靜態(tài)的分析程序的代碼是否符合相應的編碼規(guī)范或是檢查程序里面的邏輯錯誤。 靜態(tài)分析可分為:代碼走查、代碼審查及技術評審等。 靜態(tài)分析需借助白盒測試工具(Logiscope、C+ Test)來自動檢測。,1、白盒測試技術概述,1.3 白盒測試的分類 表1.2 靜態(tài)分析方法比較,1、白盒測試技術概述,1.3 白盒測試的分類 動態(tài)測試,即實際運行被測軟件來測試。動態(tài)測試是白盒測試的重點,常用的測試技術有邏輯驅動覆蓋、路徑圖法、邊界值等。,1、白盒測試技術概述,1.4 白盒測試的合
4、適程度 一般而言,白盒測試做多做少與產品形態(tài)有關,如果產品更多的具備軟件平臺特性,白盒測試應占總測試的80%以上,甚至接近100%,而如果產品具備復雜的業(yè)務操作,有大量GUI界面,黑盒測試的份量應該更重些。 根據經驗,對于大多數嵌入式產品,白盒測試方式展開測試(包括代碼走讀)應占總測試投入的一半以上,白盒測試發(fā)現的問題數也應超過總問題數的一半。,2、白盒測試用例設計,2.1 邏輯驅動覆蓋技術 2.2 基本路徑覆蓋技術 2.3 循環(huán)覆蓋技術 2.4 邊界值測試,2、白盒測試用例設計,2.1 邏輯驅動覆蓋技術 邏輯覆蓋測試:主要是針對程序的內部邏輯結構設計測試用例的技術,它通過運行測試用例達到邏輯
5、覆蓋的目的。主要包括以下6種類型的邏輯覆蓋: 語句覆蓋SC 判斷覆蓋(分支DC) 條件覆蓋 判定條件覆蓋 條件組合覆蓋 路徑覆蓋,2、白盒測試用例設計技術,2.1 邏輯驅動覆蓋技術 方法步驟: 1)分析程序中的可執(zhí)行語句,把可執(zhí)行語句分塊,并進行標記。 2)畫出程序流程圖,在流程圖中使用語句塊表示各個順序執(zhí)行的語句。 3) a、設計測試用例,使模塊中的可執(zhí)行語句都被覆蓋,即語句覆蓋率 達到100%。 b、設計測試用例,使模塊中每個分支都被執(zhí)行,即分支覆蓋了達到 85%以上。 c、。 4)為了使模塊能夠運行,需要寫驅動函數和樁函數。,2、白盒測試用例設計,2.1 邏輯驅動覆蓋技術 例1: fun
6、c(int a,b,x) if(a1) 邏輯覆蓋用例 表2.1,2、白盒測試用例設計,2.1 邏輯驅動覆蓋技術 實際項目中,程序內部的邏輯存在著不確定性和無窮性,因此不能窮舉所有的邏輯路徑。任何一種方法也不能完全覆蓋所有的測試用例,因此,在實際的測試用例設計過程中,可以將不同的設計方法組合起來,交叉使用,以達到最高的覆蓋率。 通常語句覆蓋、分支覆蓋和路徑覆蓋用的比較多。 一般情況下,對設計的測試用例有以下要求: 語句覆蓋率:100%。 分支覆蓋率:85%以上。 路徑覆蓋率:85%以上。,2、白盒測試用例設計,2.2 基本路徑覆蓋技術 基本路徑測試法是在程序控制流圖的基礎上,通過分析控制構造的環(huán)
7、路復雜度,導出基本可執(zhí)行路徑集合,從而設計測試用例的方法。設計出的測試用例要保證被測程序的每個可執(zhí)行語句至少被執(zhí)行一次。,2、白盒測試用例設計,2.2 基本路徑覆蓋技術 基本路徑覆蓋是一種簡化的邏輯覆蓋測試的方法。通過繪制控制流圖得到一個基本路徑集,再根據要執(zhí)行的路徑設計測試用例。,2、白盒測試用例設計,2.2 基本路徑覆蓋技術 方法步驟: 1)程序流程控制圖。 2)可用三種方法計算圈復雜度V(G)。 a 、控制流圖中區(qū)域的數量對應于環(huán)型的圈復雜度,注意也要計 算圖形外的區(qū)域。 b 、邊-結點+2。 c 、若沒有switch的語句,可采用判斷結點數量加1的方法得到 圈復雜度。 3)根據圈復雜度
8、,可以確定基本路徑數,從而設計基本路徑集的 測試用例。,2、白盒測試用例設計,2.2 基本路徑覆蓋技術 怎么得到程序的控制流圖呢? 例1: func(int a,b,x) 1 if(a1) 5 控制流圖2.1,2、白盒測試用例設計,基本路徑為三條: 1)1-2-3-4-5 2)1-2-3-5 3)1-3-5,2.2 基本路徑覆蓋技術,2、白盒測試用例設計,2.2 基本路徑覆蓋技術 例1: 另外一種方法:根據復合條件畫控制流圖。 func(int a,b,x) 1 7 控制流圖2.2,2、白盒測試用例設計,計算得到五條基本路徑: 1)1-2-3-4-6-7 2)1-2-3-4-5-7 3)1-2
9、-3-4-5-6-7 4)1-2-4-5-7 5)1-4-5-7 這五條路徑覆蓋MC/DC路徑?。,2.2 基本路徑覆蓋技術,2、白盒測試用例設計,2.3 循環(huán)覆蓋技術 程序的結構主要有三種:順序結構、分支結構、循環(huán)結構。而前面所講的邏輯覆蓋測試方法主要是針對分支結構來使用的,那么循環(huán)結構要如何測試呢? 測試循環(huán)是一種特殊的路徑測試,一般把循環(huán)分為以下幾種: 2.3.1 簡單循環(huán); 2.3.2 嵌套循環(huán); 2.3.3 串接循環(huán); 2.3.4 不規(guī)則循環(huán)。,2、白盒測試用例設計,2.3 循環(huán)覆蓋技術 2.3.1 簡單循環(huán):使模塊中的循環(huán)語句不執(zhí)行(整個跳過循環(huán))、執(zhí)行一次、執(zhí)行兩次、m次通過循環(huán)
10、,其中mn、執(zhí)行n-1次和執(zhí)行n次,即保證循環(huán)測試的充分性。,2、白盒測試用例設計,2.3 循環(huán)覆蓋技術 2.3.1 簡單循環(huán) 例2: viod main() int i=0; int sum=0; while(i=10) sum=sum+i; i+; Printf(“%dn”,sum); 簡單循環(huán)測試 表2.2,2、白盒測試用例設計,2.3 循環(huán)覆蓋技術 2.3.1 簡單循環(huán),2、白盒測試用例設計,2.3 循環(huán)覆蓋技術 2.3.2 嵌套循環(huán) 重點測試以下幾個方面: 1) 當外循環(huán)變量為最小值,內循環(huán)變量也為最小值時, 運算的結果。 2) 當外循環(huán)變量為最小值,內循環(huán)變量為最大值時, 運算的結
11、果。 3) 當外循環(huán)變量為最大值,內循環(huán)變量為最小值時, 運算的結果。 4) 當外循環(huán)變量為最大值,內循環(huán)變量也為最大值時, 運算的結果。 5) 循環(huán)變量的增量是否正確。 6) 何時退出內循環(huán)。 7) 何時退出外循環(huán)。,2、白盒測試用例設計,2.3 循環(huán)覆蓋技術 2.3.2 嵌套循環(huán) 例3: void main() int i=0,j=0; int a55; for(i=0;i5;i+) for(j=0;j5;j+) aij=i+j; printf(“%dn”,aij); 嵌套循環(huán)語句測試 表2.3,2、白盒測試用例設計,2、白盒測試用例設計,2.3 循環(huán)覆蓋技術 2.3.3 串接循環(huán) 如果串
12、接循環(huán)的循環(huán)體彼此獨立,可以使用簡單循環(huán)的測試方法。但是如果兩個循環(huán)串接起來,并且第一次循環(huán)是第二個循環(huán)的初值,則采用嵌套循環(huán)的方法。 2.3.4 不規(guī)則循環(huán) 此循環(huán)不能測試,需重新設計成結構化的程序后再進行測試。,2、白盒測試用例設計,2.4 邊界值測試 邊界值測試就是根據輸入數據的范圍來找到邊界值,然后測試邊界值和正好超出邊界值的數據。 在白盒測試中,需要重點測試以下幾點: 2.4.1 測試數據類型的邊界值,如整數的范圍; 2.4.2 測試數組的邊界值; 2.4.3 測試分支判斷語句的邊界值,如if(a=0)中的 a=0。,2、白盒測試用例設計,2.4 邊界值測試 2.4.1 數據類型的邊
13、界值 任何數據類型在內存中都有一定的存儲空間,那么存儲空間的范圍就是測試的邊界值,如下表2.1。 表2.1 C語言數據類型范圍(Windows平臺),2、白盒測試用例設計,2.4 邊界值測試 2.4.1 數據類型的邊界值 例4: #include Main() int a=32765; int b=3; int c; c=a+b; Printf(“%d”,c); 假設該程序是在DOS環(huán)境下開發(fā)的,則輸出為-1,而不是32768。,2、白盒測試用例設計,2.4 邊界值測試 2.4.2 數組的邊界值 測試數組時要重點測試其邊界值,防止產生數組越界問題。 例5: #include Main() in
14、t a5; int i=0; for(i=0;i=5;i+) 第一個for循環(huán):數據越界,易內存溢出。 scanf(“%d”,a); for(i=1;i5;i+) 第二個for循環(huán):漏掉a0這一數組元素。 printf(“%d”,ai); ,2、白盒測試用例設計,2.4 邊界值測試 2.4.3 分支判斷語句的邊界值 邊界值的另外一個重要應用就是分支判斷語句的測試。 如if(a=0),else if(b=1),那么需要測試a=0,b=1時是否成立。,3、白盒測試工具,白盒測試工具是指測試軟件的源代碼的工具,可以實現代碼的靜態(tài)分析、動態(tài)測試、評審等功能,主要用于單元測試。 主要講以下三種種工具:
15、3.1 IBM的Logiscope 3.2 Parasoft公司的C+ Test 3.3 嵌入式測試工具CodeTest 3.4 C#單元測試工具NUnit(開源) 3.5 Parasoft .TEST(商業(yè)),3、白盒測試工具,3.1 IBM的Logiscope Logiscope是IBM公司的一款白盒測試工具,為了評估和提高軟件的質量等級,其采用國際間的標準度量方法(如Halstead、McCabe等)的質量模型對軟件進行分析,從軟件的編碼規(guī)則,靜態(tài)特征等多個方面定義質量模型,并檢查、評估軟件質量。,3、白盒測試工具,3.2 Parasoft公司的C+ Test C+ Test是法國Par
16、asoft公司開發(fā)的一款面向C/C+的單元測試工具,自動測試任何C/C+類、函數,而不需要編寫測試用例、測試驅動程序或樁調用。 C+Test能夠自動測試代碼構造(白盒測試)、測試代碼的功能性(黑盒測試)和維護代碼的完整性(回歸測試)。 C+Test的主要功能: 1)對代碼進行自動的靜態(tài)測試,檢查其是否符合相應的語法規(guī)范; 2)對代碼進行自動的動態(tài)測試,包括自動創(chuàng)建測試樁函數和測試用例, 也可以手動添加自定義的測試用例; 3)對代碼進行自動的回歸測試和各種覆蓋率統(tǒng)計。,3、白盒測試工具,3.3 嵌入式測試工具CodeTest CodeTest是一臺專為嵌入式系統(tǒng)軟件測試而設計的工具套件,Code
17、Test為追蹤嵌入式應用程序,分析軟件性能,測試軟件的覆蓋率以及存儲體的動態(tài)分配等提供了一個實時在線的高效率解決方案。 基本的CodeTest 系統(tǒng)包括以下四個模塊: 1) 測試覆蓋分析 2) 性能分析 3) 內存分析 4) 執(zhí)行追蹤分析(TRACE),4、實例,例1:模塊源代碼 /*ateo:把科學計數法表示的數轉換為實數 1.45E+3 *參數:char s,為被轉換的用字符串表示的數 *返回值:double類型 */ double atoe(char s) double val=0. ,power=.0; int i=0; int sign=0; int e=0; char c; 1 i
18、f(0=decision(s) ,4、實例,2 printf(輸入的數據不正確!n); return 0.0; sign=1; 3 if(si=+|si=-) 4 sign=(si+=+)?1:-1; /判斷數據的正負 5 for(val=0;si=0 ,4、實例,10 if(si=e|si=E) /判斷字符串中的e或E i+; 11 if(si=+|si=-) /判斷指數的正負 12 c=si; i+; 13 for(e=0;si=0 ,程序流程圖4.1,程序流程圖4.1,4、實例,測試策略: 1)理解設計,通過閱讀需求文檔和設計文檔,了解程序的背景知識。 2)閱讀源代碼。 3)設計測試用例
19、。根據測試重點不同,可以把測試用例分組為功能點測 試、基本路徑測試、邏輯覆蓋測試等。為了輔助設計用例,可以畫 出流程圖或控制流圖。 4)搭建測試環(huán)境,即寫樁函數和驅動函數。為了采集結果,可以用以下 兩種方法: 1)修改被測函數,使其返回驗證的預期結果。 2)添加一個全局變量,在程序中把驗證的值賦值給該全局變量。 5)執(zhí)行測試用例,可以借助于工具Logiscope和C+ Test。,根據流程圖,畫出控制流圖4.2,4、實例,根據控制流圖,我們知道,該實例的圈復雜度為12,那么基本路徑為12條。在走這12條路徑的時候,遇到循環(huán)語句,采用循環(huán)覆蓋方法(即循環(huán)0次,1次,中間次,n-1次,n次以及最大
20、次是否跳出循環(huán)),其中case語句類似于判斷語句。,4、實例,驅動函數: void main() char s100; while(1) printf(“請輸入一個科學計數法表示的數據:n”); scanf(“%s”,s); fflush(stdin); /清空輸入緩沖區(qū),通常是為了不影響后面的數據讀取(例如在讀完一個 /一個字符串后緊接著又要地區(qū)一個字符串,此時應先執(zhí)行fflush(stdin)) if(0=strcmp(“exit”,s) return; printf(“對應的實數是:%fnn”,aeto(s); 樁函數 int decision(char s) return 1; /re
21、turn 0; /如果設置轉換失敗,則返還0 ,附1:關于樁函數和驅動函數? 概念:驅動函數:被測函數(模塊)的主函數(模塊),主要完成以下事情:接受測試數據,將數據傳給被測單元(模塊);對預期輸出和實際輸出進行比較;接收被測單元執(zhí)行結果,得到測試結果;將測試結果輸出。而樁函數:用以代替被測函數(模塊)調用的子單元。 函數可能實現的功能,修改局部變量的值、修改全局變量的值、修改一組數據的值、返回一個值。那么寫驅動函數,修改局部變量的值,可以通過設置一個全局變量等于該局部變量來輸出(監(jiān)控)。,附2:什么是MC/DC覆蓋? 有兩種覆蓋。一種是對需求的覆蓋,另外一種是對代碼的覆蓋。對代碼的覆蓋包括語
22、句(SC)覆蓋、分支(DC/判定)覆蓋、條件覆蓋、分支條件覆蓋、條件組合覆蓋、LSACJ覆蓋、MC/DC覆蓋(修改的條件/判定覆蓋)、路徑覆蓋等。 MC/DC(修訂的條件/判定覆蓋)(Modified Condition Decision Coverage)準則是一種實用的軟件結構覆蓋率測試準則,已被廣泛地應用于軟件驗證和測試過程中。修正條件判定覆蓋方法要求在一個程序中每一種輸入輸出至少得出現一次,在程序中的每一個條件必須產生所有可能的輸出結果至少一次,并且每一個判定中的每一個條件必須能夠獨立影響一個判定的輸出,即在其他條件不變的前提下僅改變這個條件的值,而使判定結果改變。,例如: if A
23、or B and C then Statement1; else Statement2; A,B,C都是一個條件,而(A or B and C)叫一個Decision,如果是判定覆蓋的話只需兩個case就能覆蓋,就是讓這個decision為true和false各一次就能達到,即為 0 1 1、 0 1 0。如果是MC/DC的話就得四個case。 定義: 在每個判定中的每個條件都曾獨立的影響判定的結果至少一次,(獨立影響意思是在其他的條件不變的情況下,改變一個條件)。 總結一句:每個條件對結果都獨立起作用。 比如A對結果起作用的話, B 必須為 false, C必須為 true - 1 0 1
24、和 0 0 1,這樣結果就獨立受A的值影響。 同理如果B對結果獨立起作用的話,A必須為false,C必須為 true,兩種情況B為true,false各一. 即為 0 1 1 和 0 0 1。 而C獨立對結果起作用的話就是讓(A or B) 為 true,為了減少case,上面的case 已經含有這樣的case了,我們就取A為false,B為true,這樣c獨體起作用的case為: 0 1 1 和 0 1 0。 可以看出每個條件各走了一次true和false, 這樣三個變量條件就會有六個case,可以看出case 2 和case 4重復, case 3 和case5 重復,這樣去掉兩個 剩四個case,從而判定里面的條件數為N個,那么這個判定就需要N+1個case。,附3:什么是DO-178B標準? 飛機和汽車都是重要的交通工具,但從它們的安全性要求來說,有著很大的不同。汽車發(fā)生碰撞和故障時,人存活的概率比較大;一旦飛機發(fā)生碰撞和故障,存活的概率則幾乎是零。因此,飛機的研制過程中對安全性的要求比汽車高得多。 飛機分成二類:軍用飛機與民用飛機。每個國家對軍用飛機的研制都有自己的標準和質量監(jiān)督體系;但對于民用飛機說,由于一個國家研制的飛機會飛到其它國
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學大二(海洋科學)海洋化學基礎理論測試題及答案
- 2025年高職工業(yè)機器人技術(PLC編程應用)試題及答案
- 2025年大學藥膳與食療(藥膳食療基礎)試題及答案
- 2025年中職車輛維修(電氣系統(tǒng)保養(yǎng)框架工具)試題及答案
- 企業(yè)《生態(tài)環(huán)境保護培訓計劃》
- 神仙居介紹教學課件
- 內蒙古赤峰市寧城縣八里罕中學2025-2026學年高二上學期期末考試歷史試卷(含答案)
- 2022-2023學年廣東深圳羅湖區(qū)九年級上學期11月考歷史試題含答案
- 2026年宿州學院高層次人才公開招聘預備考題庫及1套參考答案詳解
- 2025云南昭通新華書店有限公司招聘工作人員3人備考題庫及一套完整答案詳解
- 孕婦貧血教學課件
- 超市冷庫應急預案(3篇)
- 5年(2021-2025)山東高考生物真題分類匯編:專題17 基因工程(解析版)
- 2025年10月自考00610高級日語(二)試題及答案
- 新華資產招聘筆試題庫2025
- 2025年中國潛孔鉆機行業(yè)細分市場研究及重點企業(yè)深度調查分析報告
- 食品經營場所及設施設備清洗消毒和維修保養(yǎng)制度
- 2026年遼寧軌道交通職業(yè)學院單招職業(yè)技能測試題庫必考題
- 老年人遠離非法集資講座
- 沙子石子采購合同范本
- 名詞單數變復數教案
評論
0/150
提交評論