版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、白盒測試白盒測試白盒測試白盒測試 白盒測試概念 測試覆蓋規(guī)范 邏輯驅(qū)動測試 根本途徑測試白盒測試概念 白盒測試也稱構(gòu)造測試或邏輯驅(qū)動測試,是一種測試用例設計方法,它從程序的控制構(gòu)造導出測試用例。測試用例由測試輸入數(shù)據(jù)以及與之對應的輸出結(jié)果組成。 測試用例設計的好壞直接決議了測試的效果和結(jié)果。所以說在軟件測試活動中最關(guān)鍵的步驟就是設計有效的測試用例。 白盒測試運用被測單元內(nèi)部如何任務的信息,允許測試人員對程序內(nèi)部邏輯構(gòu)造及有關(guān)信息來設計和選擇測試用例,對程序的邏輯途徑進展測試?;谝粋€運用代碼的內(nèi)部邏輯知識,測試是基于覆蓋全部代碼、分支、途徑、條件。 白盒測試的主要目的: 保證一個模塊中的一切獨
2、立途徑至少被執(zhí)行一次; 對一切的邏輯值均需求測試真、假兩個分支; 在上下邊境及可操作范圍內(nèi)運轉(zhuǎn)一切循環(huán); 檢查內(nèi)部數(shù)據(jù)構(gòu)造以確保其有效性。測試覆蓋規(guī)范 白盒法特點:以程序的內(nèi)部邏輯為根底設計測試用例,所以又稱為邏輯覆蓋法。運用白盒法時,手頭必需有程序的規(guī)格闡明以及程序清單。 白盒法思索的是測試用例對程序內(nèi)部邏輯的覆蓋程度。最徹底的白盒法是覆蓋程序中的每一條途徑,但是由于程序中普通含有循環(huán),所以途徑的數(shù)目極大,要執(zhí)行每一條途徑是不能夠的,只能希望覆蓋的程度盡能夠高些。 測試覆蓋規(guī)范測試覆蓋規(guī)范 上頁小程序的流程圖,其中包括了一個執(zhí)行達20次的循環(huán)。那么它所包含的不同執(zhí)行途徑數(shù)高達5201013條
3、,假設要對它進展窮舉測試,覆蓋一切的途徑。假使測試程序?qū)γ恳粭l途徑進展測試需求1毫秒,同樣假定一天任務24小時,一年任務365 天, 那么要想把如下圖的小程序的一切途徑測試完,那么需求3170年。測試覆蓋規(guī)范為了衡量測試的覆蓋程度,需求建立一些規(guī)范,目前常用的一些覆蓋規(guī)范從低到高分別是: 語句覆蓋:是一個比較弱的測試規(guī)范,它的含義是:選擇足夠的測試用例,使得程序中每個語句至少都能被執(zhí)行一次。 它是最弱的邏輯覆蓋,效果有限,必需與其它方法交互運用。 測試覆蓋規(guī)范斷定覆蓋也稱為分支覆蓋:執(zhí)行足夠的測試用例,使得程序中的每一個分支至少都經(jīng)過一次。 斷定覆蓋只比語句覆蓋稍強一些,但實踐效果闡明,只是斷
4、定覆蓋,還不能保證一定能查出在判別的條件中存在的錯誤。因此,還需求更強的邏輯覆蓋準那么去檢驗判別內(nèi)部條件。條件覆蓋:執(zhí)行足夠的測試用例,使程序中每個判別的每個條件的每個能夠取值至少執(zhí)行一次; 條件覆蓋深化到斷定中的每個條件,但能夠不能滿足斷定覆蓋的要求。 測試覆蓋規(guī)范斷定/條件覆蓋:執(zhí)行足夠的測試用例,使得斷定中每個條件取到各種能夠的值,并使每個斷定取到各種能夠的結(jié)果。 斷定/條件覆蓋有缺陷。從外表上來看,它測試了一切條件的取值。但是現(xiàn)實并非如此。往往某些條件掩蓋了另一些條件。會脫漏某些條件取值錯誤的情況。為徹底地檢查一切條件的取值,需求將斷定語句中給出的復合條件表達式進展分解,構(gòu)成由多個根本
5、斷定嵌套的流程圖。這樣就可以有效地檢查一切的條件能否正確了。測試覆蓋規(guī)范條件組合覆蓋:執(zhí)行足夠的例子,使得每個斷定中條件的各種能夠組合都至少出現(xiàn)一次。 這是一種相當強的覆蓋準那么,可以有效地檢查各種能夠的條件取值的組合能否正確。它不但可覆蓋一切條件的能夠取值的組合,還可覆蓋一切判別的可取分支,但能夠有的途徑會脫漏掉。測試還不完全。白盒測試的主要方法: 邏輯驅(qū)動測試 語句覆蓋:語句覆蓋就是設計假設干個測試用例,運轉(zhuǎn)被測試程序,使得每一條可執(zhí)行語句至少執(zhí)行一次; 斷定覆蓋也稱為分支覆蓋:設計假設干個測試用例,運轉(zhuǎn)所測程序,使程序中每個判別的取真分支和取假分支至少執(zhí)行一次; 條件覆蓋:設計足夠多的測
6、試用例,運轉(zhuǎn)所測程序,使程序中每個判別的每個條件的每個能夠取值至少執(zhí)行一次; 斷定/條件覆蓋:設計足夠多的測試用例,運轉(zhuǎn)所測程序,使程序中每個判別的每個條件的一切能夠取值至少執(zhí)行一次,并且每個能夠的判別結(jié)果也至少執(zhí)行一次,換句話說,即是要求各個判別的一切能夠的條件取值組合至少執(zhí)行一次;白盒測試的主要方法: 條件組合覆蓋:設計足夠多的測試用例,運轉(zhuǎn)所測程序,使程序中每個判別的一切能夠的條件取值組合至少執(zhí)行一次; 根本途徑測試 設計足夠多的測試用例,運轉(zhuǎn)所測程序,要覆蓋程序中一切能夠的途徑。這是最強的覆蓋準那么。但在途徑數(shù)目很大時,真正做到完全覆蓋是很困難的,必需把覆蓋途徑數(shù)目緊縮到一定限制。 語
7、句覆蓋 語句覆蓋是一個比較弱的測試規(guī)范,它的含義是:選擇足夠的測試用例,使得程序中每個語句至少都能被執(zhí)行一次。 如,例1: PROCEDURE M(VAR A,B,X:REAL); BEGIN IF (A1) AND (B=0) THEN X:=X/A; IF (A=2) OR (X1) THEN X:=X+1; END.語句覆蓋 為使程序中每個語句至少執(zhí)行一次,只需設計一個能經(jīng)過途徑ace的例子就可以了,例如選擇輸入數(shù)據(jù)為: A=2,B=0,X=3 就可到達“語句覆蓋規(guī)范。 語句覆蓋 語句覆蓋 從上例可看出,語句覆蓋實踐上是很弱的,假設第一個條件語句中的AND錯誤地編寫成OR,上面的測試用例
8、是不能發(fā)現(xiàn)這個錯誤的;又如第三個條件語句中X1誤寫成X0,這個測試用例也不能暴露它,此外,沿著途徑abd執(zhí)行時,X的值應該堅持不變,假設這一方面有錯誤,上述測試數(shù)據(jù)也不能發(fā)現(xiàn)它們。 分支覆蓋 比“語句覆蓋稍強的覆蓋規(guī)范是“分支覆蓋(或稱分支覆蓋)規(guī)范。含義是:執(zhí)行足夠的測試用例,使得程序中的每一個分支至少都經(jīng)過一次。 分支覆蓋 對例1的程序,假設設計兩個例子,使它們能經(jīng)過途徑ace和abd,或者經(jīng)過途徑acd和abe,就可到達“斷定覆蓋規(guī)范,為此,可以選擇輸入數(shù)據(jù)為: A=3,B=0,X=1 (沿途徑acd執(zhí)行); A=2,B=1,X=3(沿途徑abe執(zhí)行) 分支覆蓋斷定覆蓋 斷定覆蓋 A=3
9、,B=0,X=1 (沿途徑acd執(zhí)行) A=2,B=1,X=3 (沿途徑abe執(zhí)行)分支覆蓋 程序中含有斷定的語句包括IF-THEN-ELSE、DO-WHILE、REPEAT-UNTIL等,除了雙值的斷定語句外,還有多值的斷定語句,如PASCAL中的CASE語句、FORTRAN中帶有三個分支的IF語句等。所以“分支覆蓋更普通的含義是:使得每一個分支獲得每一種能夠的結(jié)果。 “分支覆蓋比“語句覆蓋嚴厲,由于假設每個分支都執(zhí)行過了,那么每個語句也就執(zhí)行過了。但是,“分支覆蓋還是很不夠的,例如例1兩個測試用例未能檢查沿著途徑abd執(zhí)行時,X的值能否堅持不變。 條件覆蓋 一個斷定中往往包含了假設干個條件
10、,如例1的程序中,斷定 (A1) AND (B=0)包含了兩個條件: A1以及 B=0,所以可引進一個更強的覆蓋規(guī)范“條件覆蓋?!皸l件覆蓋的含義是:執(zhí)行足夠的測試用例,使得斷定中的每個條件獲得各種能夠的結(jié)果。 條件覆蓋例1的程序有四個條件: A1、 B=0、A=2、X1 為了到達“條件覆蓋規(guī)范,需求執(zhí)行足夠的測試用例使得在a點有: A1、A1、B=0、B0 等各種結(jié)果出現(xiàn),以及在b點有: A=2、A2、X1、X1 等各種結(jié)果出現(xiàn)。如今只需設計以下兩個測試用例就可滿足這一規(guī)范: A=2,B=0,X=4 (沿途徑ace執(zhí)行); A=1,B=1,X=1 (沿途徑abd執(zhí)行)。 條件覆蓋條件覆蓋條件覆
11、蓋A=2,B=0,X=4 (沿途徑ace執(zhí)行)A=1,B=1,X=1 (沿途徑abd執(zhí)行)條件覆蓋 “條件覆蓋通常比“分支覆蓋強,由于它使一個斷定中的每一個條件都取到了兩個不同的結(jié)果,而斷定覆蓋那么不保證這一點。 “條件覆蓋并不包含“分支覆蓋,如對語句IF(A AND B)THEN S 設計測試用例使其滿足條件覆蓋,即使A為真并使B為假,以及使A為假而且B為真,但是它們都未能使語句S得以執(zhí)行。 分支/條件覆蓋 針對上面的問題引出了另一種覆蓋規(guī)范“分支 條件覆蓋,它的含義是:執(zhí)行足夠的測試用例,使得分支中每個條件取到各種能夠的值,并使每個分支取到各種能夠的結(jié)果。 對例1的程序,前面的兩個例子 A
12、=2,B=0,X=4 (沿ace路) A=1,B=1,X=1 (沿abd途徑) 是滿足這一規(guī)范的。條件組合覆蓋 針對上述問題又提出了另一種規(guī)范“條件組合覆蓋。它的含義是:執(zhí)行足夠的例子,使得每個斷定中條件的各種能夠組合都至少出現(xiàn)一次。顯然,滿足“條件組合覆蓋的測試用例是一定滿足“分支覆蓋、“條件覆蓋和“分支/條件覆蓋的。 條件組合覆蓋再看例1的程序,我們需求選擇適當?shù)睦?,使得下?8種條件組合都可以出現(xiàn):1A1, B=0 2) A1, B03) A1, B=0 4) A1, B05) A=2, X1 6) A=2,X1 7) A2, X1 8) A2, X1 5)、 6)、 7)、8四種情況
13、是第二個 IF語句的條件組合,而X的值在該語句之前是要經(jīng)過計算的,所以還必需根據(jù)程序的邏輯推算出在程序的入口點X的輸入值應是什么。 條件組合覆蓋 下面設計的四個例子可以使上述 8種條件組合至少出現(xiàn)一次: A=2,B=0,X=4 使 1)、5)兩種情況出現(xiàn); A=2,B=1,X=1 使 2)、6)兩種情況出現(xiàn); A=1,B=0,X=2 使 3)、7)兩種情況出現(xiàn); A=1,B=1,X=1 使 4)、8)兩種情況出現(xiàn)。條件組合覆蓋 上面四個例子雖然滿足條件組合覆蓋,但并不能覆蓋程序中的每一條途徑,例如途徑acd就沒有執(zhí)行,因此,條件組合覆蓋規(guī)范依然是不徹底。 途徑測試 途徑測試就是設計足夠多的測試
14、用例,覆蓋被測試對象中的一切能夠途徑。 對于例1,下面的測試用例那么可對程序進展全部的途徑覆蓋。測試用例 通過路徑 A=2、B=0、X=3 aceA=1、B=0、X=1abdA=2、B=1、X=1abeA=3、B=0、X=1acd根本途徑測試 例1、例2都是很簡單的程序函數(shù),只需四條途徑。但在實際中,一個不太復雜的程序,其途徑都是一個龐大的數(shù)字,要在測試中覆蓋一切的途徑是不現(xiàn)實的。為理處理這一難題,只得把覆蓋的途徑數(shù)緊縮到一定限制內(nèi),例如,程序中的循環(huán)體只執(zhí)行一次。 下面引見的根本途徑測試就是這樣一種測試方法,它在程序控制圖的根底上,經(jīng)過分析控制構(gòu)造的環(huán)行復雜性,導出根本可執(zhí)行途徑集合,從而設
15、計測試用例的方法。設計出的測試用例要保證在測試中程序的每一個可執(zhí)行語句至少執(zhí)行一次。 根本途徑測試 前提條件 測試進入的前提條件是在測試人員曾經(jīng)對被測試對象有了一定的了解,根本上明確了被測試軟件的邏輯構(gòu)造。 測試過程 過程是經(jīng)過針對程序邏輯構(gòu)造設計和加載測試用例,驅(qū)動程序執(zhí)行,以對程序途徑進展測試。測試結(jié)果是分析實踐的測試結(jié)果與預期的結(jié)果能否一致。 根本途徑測試在程序控制流圖的根底上,經(jīng)過分析控制構(gòu)造的環(huán)路復雜性,導出根本可執(zhí)行途徑集合,從而設計測試用例。包括以下4個步驟和一個工具方法:程序的控制流圖:描畫程序控制流的一種圖示方法。程序圈復雜度:McCabe復雜性度量。從程序的環(huán)路復雜性可導出
16、程序根本途徑集合中的獨立途徑條數(shù),這是確定程序中每個可執(zhí)行語句至少執(zhí)行一次所必需的測試用例數(shù)目的上界。導出測試用例:根據(jù)圈復雜度和程序構(gòu)造設計用例數(shù)據(jù)輸入和預期結(jié)果。預備測試用例:確保根本途徑集中的每一條途徑的執(zhí)行。 根本途徑測試工具方法: 圖形矩陣:是在根本途徑測試中起輔助作用的軟件工具,利用它可以實現(xiàn)自動地確定一個根本途徑集??刂屏鲌D的符號 在引見根本途徑方法之前,必需先引見一種簡單的控制流表示方法,即流圖。流圖是對待測試程序過程處置的一種表示。流圖運用下面的符號描畫邏輯控制流,每一種構(gòu)造化構(gòu)成元素有一個相應的流圖符號。順序構(gòu)造if 構(gòu)造Case 構(gòu)造while 構(gòu)造until 構(gòu)造控制流
17、圖 流圖只需二種圖形符號 圖中的每一個圓稱為流圖的結(jié)點,代表一條或多條語句。 流圖中的箭頭稱為邊或銜接,代表控制流。 任何過程設計都要被翻譯成控制流圖。 控制流圖 在將程序流程圖簡化成控制流圖時,應留意: 在選擇或多分支構(gòu)造中,分支的會聚處應有一個會聚結(jié)點。 邊和結(jié)點圈定的區(qū)域叫做區(qū)域,當對區(qū)域計數(shù)時,圖形外的區(qū)域也應記為一個區(qū)域。 如下頁圖所示控制流圖1762,38910114,5 76 231 8 4 511 910節(jié)點邊區(qū)域區(qū)域:由邊和節(jié)點封鎖起來的區(qū)域計算區(qū)域:不要忘記區(qū)域外的部分待測試程序用流圖表示的待測試程序控制流圖假設判別中的條件表達式是由一個或多個邏輯運算符 (OR, AND,
18、 NAND, NOR) 銜接的復合條件表達式,那么需求改為一系列只需單條件的嵌套的判別。例如: 1 if a or b 2 x 3 else 4 y對應的邏輯為:獨立途徑獨立途徑:至少沿一條新的邊挪動的途徑1762,38910114,5途徑1:1-11途徑2:1-2-3-4-5-10-1-11途徑3:1-2-3-6-8-9-10-1-11途徑4:1-2-3-6-7-9-10-1-11對以上途徑的遍歷,就是至少一次地執(zhí)行了程序中的一切語句。根本途徑測試 第一步:畫出控制流圖 流程圖用來描畫程序控制構(gòu)造??蓪⒘鞒虉D映射到一個相應的流圖(假設流程圖的菱形決議框中不包含復合條件)。在流圖中,每一個圓,
19、稱為流圖的結(jié)點,代表一個或多個語句。一個處置方框序列和一個菱形決測框可被映射為一個結(jié)點,流圖中的箭頭,稱為邊或銜接,代表控制流,類似于流程圖中的箭頭。一條邊必需終止于一個結(jié)點,即使該結(jié)點并不代表任何語句(例如:if-else-then構(gòu)造)。由邊和結(jié)點限定的范圍稱為區(qū)域。計算區(qū)域時應包括圖外部的范圍。根本途徑測試 畫出其程序流程圖和對應的控制流圖如下467810111314467148101113程序流程圖 控制流圖根本途徑測試 - 計算圈復雜度第二步:計算圈復雜度圈復雜度是一種為程序邏輯復雜性提供定量測度的軟件度量,將該度量用于計算程序的根本的獨立途徑數(shù)目,為確保一切語句至少執(zhí)行一次的測試數(shù)
20、量的上界。獨立途徑必需包含一條在定義之前不曾用到的邊。有以下三種方法計算圈復雜度:流圖中區(qū)域的數(shù)量對應于環(huán)型的復雜性;給定流圖G的圈復雜度V(G),定義為V(G)=E-N+2,E是流圖中邊的數(shù)量,N是流圖中結(jié)點的數(shù)量;給定流圖G的圈復雜度V(G),定義為V(G)=P+1,P是流圖G中斷定結(jié)點的數(shù)量。 根本途徑測試 - 計算圈復雜度 對應上面圖中的圈復雜度,計算如下:流圖中有四個區(qū)域;V(G)=10條邊-8結(jié)點+2=4;V(G)=3個斷定結(jié)點+1=4。4671481011132134根本途徑測試 - 導出測試用例 第三步:導出測試用例 根據(jù)上面的計算方法,可得出四個獨立的途徑。(一條獨立途徑是指
21、,和其他的獨立途徑相比,至少引入一個新處置語句或一個新判別的程序通路。V(G)值正好等于該程序的獨立途徑的條數(shù)。) 途徑1:4-14 途徑2:4-6-7-14 途徑3:4-6-8-10-13-4-14 途徑4:4-6-8-11-13-4-14根據(jù)上面的獨立途徑,去設計輸入數(shù)據(jù),使程序分別執(zhí)行到上面四條途徑。4671481011132134根本途徑測試 - 預備測試用例 第四步:預備測試用例 為了確保根本途徑集中的每一條途徑的執(zhí)行,根據(jù)判別結(jié)點給出的條件,選擇適當?shù)臄?shù)據(jù)以保證某一條途徑可以被測試到,滿足上面例子根本途徑集的測試用例是:根本途徑測試再舉例 例5:下例程序流程圖描畫了最多輸入50個值
22、以1作為輸入終了標志,計算其中有效的學生分數(shù)的個數(shù)、總分數(shù)和平均值。開場 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112123456789111012R1R2R3R4R5R6開場 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112步驟1:導出過程的流圖。步驟2:確定環(huán)形復雜性度量V(G):1V(G)=
23、6 個區(qū)域2V(G)=EN+2=1612+2=6 其中E為流圖中的邊數(shù),N為結(jié)點數(shù);3V(G)=P+1=5+1=6 其中P為謂詞結(jié)點的個數(shù)。在流圖中,結(jié)點2、3、5、6、9是謂詞結(jié)點。根本途徑測試再舉例123456789111012R1R2R3R4R5R6根本途徑測試再舉例步驟3:確定根本途徑集合即獨立途徑集合。于是可確定6條獨立的途徑:途徑1:1-2-9-10-12途徑2:1-2-9-11-12途徑3:1-2-3-9-10-12途徑4:1-2-3-4-5-8-2途徑5:1-2-3-4-5-6-8-2途徑6:1-2-3-4-5-6-7-8-2123456789111012R1R2R3R4R5R
24、6根本途徑測試再舉例步驟4:為每一條獨立途徑各設計一組測試用例,以便強迫程序沿著該途徑至少執(zhí)行一次。1途徑1(1-2-9-10-12)的測試用例: scorek=有效分數(shù)值,當k i ; scorei=1, 2i50; 期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1、總分sum和平均分average。開場 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112根本途徑測試再舉例2途徑2(1-2-9-11-12)的測試用例: score 1 = 1 ;
25、 期望的結(jié)果:average = 1 ,其他量堅持初值。3途徑3(1-2-3-9-10-12)的測試用例: 輸入多于50個有效分數(shù),即試圖處置51個分數(shù),要求前51個為有效分數(shù);期望結(jié)果:n1=50、且算出正確的總分和平均分。開場 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112根本途徑測試再舉例4途徑4(1-2-3-4-5-8-2)的測試用例: scorei=有效分數(shù),當i50; scorek0,k i ;期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分
26、數(shù)個數(shù)n1、總分sum和平均分average。5途徑5的測試用例: scorei=有效分數(shù),當i100,k i ;期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1、總分sum和平均分average。開場 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112根本途徑測試再舉例6途徑6(1-2-3-4-5-6-7-8-2)的測試用例: scorei=有效分數(shù), 當i50; 期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1、總 分 s u m 和 平 均
27、 分average。開場 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112第4章 白盒測試及其用例的設計4.1 白盒測試方法4.2 白盒測試的根本概念4.3 覆蓋測試4.4 途徑測試4.5 最少測試用例數(shù)計算本章教學目的實際環(huán)節(jié)實際環(huán)節(jié)學習了解白盒測試方法的根本概念學習了解白盒測試方法的根本概念學習了解白盒測試的覆蓋實際學習了解白盒測試的覆蓋實際學習掌握白盒測試的途徑表達學習掌握白盒測試的途徑表達學習掌握白盒測試的根本途徑測試法學習掌握白盒測試的根
28、本途徑測試法實際環(huán)節(jié)實際環(huán)節(jié)經(jīng)過案例運用學習掌握覆蓋問題的處理方法經(jīng)過案例運用學習掌握覆蓋問題的處理方法運用根本途徑測試方法進展實踐程序測試運用根本途徑測試方法進展實踐程序測試4.1 白盒測試方法 為什么要進展白盒測試? 假設一切軟件錯誤的根源都可以追溯到某個獨一緣由,那么問題就簡單了。然而,現(xiàn)實上一個bug 經(jīng)常是由多個要素共同導致的,如以下圖所示。白盒測試方法續(xù) 白盒測試也稱構(gòu)造測試或邏輯驅(qū)動測試,是針對被測單元內(nèi)部是如何進展任務的測試。它根據(jù)程序的控制構(gòu)造設計測試用例,主要用于軟件或程序驗證。 白盒測試法檢查程序內(nèi)部邏輯構(gòu)造,對一切邏輯途徑進展測試,是一種窮舉途徑的測試方法。但即使每條途
29、徑都測試過了,依然能夠存在錯誤。由于: 窮舉途徑測試無法檢查出程序本身能否違反了設計規(guī)范,即程序能否是一個錯誤的程序。 窮舉途徑測試不能夠查出程序由于脫漏途徑而出錯。 窮舉途徑測試發(fā)現(xiàn)不了一些與數(shù)據(jù)相關(guān)的錯誤。白盒測試方法續(xù) 采用白盒測試方法必需遵照以下幾條原那么,才干到達測試的目的: 保證一個模塊中的一切獨立途徑至少被測試一次。 一切邏輯值均需測試真 (true) 和假 (false) 兩種情況。 檢查程序的內(nèi)部數(shù)據(jù)構(gòu)造,保證其構(gòu)造的有效性。 在上下邊境及可操作范圍內(nèi)運轉(zhuǎn)一切循環(huán)。 白盒測試主要是檢查程序的內(nèi)部構(gòu)造、邏輯、循環(huán)和途徑。常用測試用例設計方法有: 邏輯覆蓋法邏輯驅(qū)動測試 根本途徑
30、測試方法4.2 白盒測試的根本概念4.2.1 控制流圖4.2.2 環(huán)形復雜度4.2.3 圖矩陣4.2.1 控制流圖 控制流圖可簡稱流圖是對程序流程圖進展簡化后得到的,它可以更加突出的表示程序控制流的構(gòu)造。 控制流圖中包括兩種圖形符號:節(jié)點和控制流線。 節(jié)點由帶標號的圓圈表示,可代表一個或多個語句、一個處置框序列和一個條件斷定框假設不包含復合條件。 控制流線由帶箭頭的弧或線表示,可稱為邊。它代表程序中的控制流。 對于復合條件,那么可將其分解為多個單個條件,并映射成控制流圖。常見構(gòu)造的控制流圖順序結(jié)構(gòu)IF選擇結(jié)構(gòu)WHILE重復結(jié)構(gòu)UNTIL重復結(jié)構(gòu)CASE多分支結(jié)構(gòu)其中,包含條件的節(jié)點被稱為斷定節(jié)
31、點也叫謂詞節(jié)點,由斷定節(jié)點發(fā)出的邊必需終止于某一個節(jié)點,由邊和節(jié)點所限定的范圍被稱為區(qū)域。4.2.2 環(huán)形復雜度 環(huán)形復雜度也稱為圈復雜度,它是一種為程序邏輯復雜度提供定量尺度的軟件度量。 環(huán)形復雜度的運用可以將環(huán)形復雜度用于根本途徑方法,它可以提供:程序根本集的獨立途徑數(shù)量;確保一切語句至少執(zhí)行一次的測試數(shù)量的上界。 獨立途徑是指程序中至少引入了一個新的處置語句集合或一個新條件的程序通路。采用流圖的術(shù)語,即獨立途徑必需至少包含一條在本次定義途徑之前不曾用過的邊。 測試可以被設計為根本途徑集的執(zhí)行過程,但根本途徑集通常并不獨一。 計算環(huán)形復雜度的方法 環(huán)形復雜度以圖論為根底,為我們提供了非常有
32、用的軟件度量??捎萌缦氯N方法之一來計算環(huán)形復雜度: 控制流圖中區(qū)域的數(shù)量對應于環(huán)形復雜度。 給定控制流圖G的環(huán)形復雜度V(G),定義為 V(G) = E-N+2 其中,E是控制流圖中邊的數(shù)量,N是控制流圖中的節(jié)點數(shù)量。 給定控制流圖G的環(huán)形復雜度V(G),也可定義為 V(G) = P+1 其中,P是控制流圖G中斷定節(jié)點的數(shù)量。4.2.3 圖矩陣 圖矩陣是控制流圖的矩陣表示方式。 圖矩陣是一個方形矩陣,其維數(shù)等于控制流圖的節(jié)點數(shù)。矩陣中的每列和每行都對應于標識的節(jié)點,矩陣元素對應于節(jié)點間的邊。 通常,控制流圖中的結(jié)點用數(shù)字標識,邊那么用字母標識。假設在控制流圖中從第 i 個結(jié)點到第 j 個結(jié)點
33、有一個標識為 x 的邊相銜接,那么在對應圖矩陣的第 i 行第 j 列有一個非空的元素 x 。習題 根據(jù)左圖給出的程序流程圖,完成以下要求: 1畫出相應的控制流圖。 2計算環(huán)形復雜度。 3給出相應的圖矩陣。 4找出程序的獨立途徑集合。4.3 覆蓋測試4.3.1 測試覆蓋率4.3.2 邏輯覆蓋法4.3.3 面向?qū)ο蟮母采w4.3.4 測試覆蓋準那么4.3.1 測試覆蓋率 測試覆蓋率:用于確定測試所執(zhí)行到的覆蓋項的百分比。其中的覆蓋項是指作為測試根底的一個入口或?qū)傩?,比如語句、分支、條件等。 測試覆蓋率可以表示出測試的充分性,在測試分析報告中可以作為量化目的的根據(jù),測試覆蓋率越高效果越好。但覆蓋率不是
34、目的,只是一種手段。 測試覆蓋率包括功能點覆蓋率和構(gòu)造覆蓋率: 功能點覆蓋率大致用于表示軟件曾經(jīng)實現(xiàn)的功能與軟件需求實現(xiàn)的功能之間的比例關(guān)系。 構(gòu)造覆蓋率包括語句覆蓋率、分支覆蓋率、循環(huán)覆蓋率、途徑覆蓋率等等。4.3.2 邏輯覆蓋法 根據(jù)覆蓋目的的不同,邏輯覆蓋又可分為語句覆蓋、斷定覆蓋、條件覆蓋、斷定/條件覆蓋、組合覆蓋和途徑覆蓋。 語句覆蓋:選擇足夠多的測試用例,使得程序中的每個可執(zhí)行語句至少執(zhí)行一次。 斷定覆蓋:經(jīng)過執(zhí)行足夠的測試用例,使得程序中的每個斷定至少都獲得一次“真值和“假值, 也就是使程序中的每個取“真分支和取“假分支至少均閱歷一次,也稱為“分支覆蓋。 條件覆蓋:設計足夠多的測
35、試用例,使得程序中每個斷定包含的每個條件的能夠取值真/假都至少滿足一次。邏輯覆蓋法續(xù) 斷定/條件覆蓋:設計足夠多的測試用例,使得程序中每個斷定包含的每個條件的一切情況真/假至少出現(xiàn)一次,并且每個斷定本身的斷定結(jié)果真/假也至少出現(xiàn)一次。 滿足斷定/條件覆蓋的測試用例一定同時滿足斷定覆蓋和條件覆蓋。 組合覆蓋:經(jīng)過執(zhí)行足夠的測試用例,使得程序中每個斷定的一切能夠的條件取值組合都至少出現(xiàn)一次。 滿足組合覆蓋的測試用例一定滿足斷定覆蓋、條件覆蓋和斷定/條件覆蓋。 途徑覆蓋:設計足夠多的測試用例,要求覆蓋程序中一切能夠的途徑。 邏輯覆蓋法續(xù)組合覆蓋判別/條件覆蓋判別覆蓋條件覆蓋語句覆蓋邏輯覆蓋法續(xù)voi
36、d DoWork (int x,int y,int z) int k=0,j=0; if ( (x3)&(z5) ) j=x*y+10; /語句塊2 j=j%3; /語句塊3邏輯覆蓋法續(xù)X3 & z5執(zhí)行語句塊執(zhí)行語句塊3FFTTabdce語句覆蓋 要實現(xiàn)DoWork函數(shù)的語句覆蓋,只需設計一個測試用例就可以覆蓋程序中的一切可執(zhí)行語句。 測試用例輸入為: x=4、y=5、z=5 程序執(zhí)行的途徑是:abd 分析: 語句覆蓋可以保證程序中的每個語句都得到執(zhí)行,但發(fā)現(xiàn)不了斷定中邏輯運算的錯誤,即它并不是一種充分的檢驗方法。例如在第一個斷定(x3)&(z5錯誤寫為y3)&
37、;(z3 取真值記為T1,取假值記為-T1 條件z5) ): 條件x=4 取真值記為T3,取假值記為-T3 條件y5 取真值記為T4,取假值記為-T4條件覆蓋續(xù) 根據(jù)條件覆蓋的根本思想,要使上述4個條件能夠產(chǎn)生的8種情況至少滿足一次,設計測試用例如下: 測試用例 執(zhí)行路徑 覆蓋條件 覆蓋分支 x=4、y=6、z=5 abd T1、T2、T3、T4 bd x=2、y=5、 z=15 ace -T1、-T2、 -T3、-T4 ce 分析:上面這組測試用例不但覆蓋了4個條件的全部8種情況,而且將兩個斷定的4個分支b、c、d、e也同時覆蓋了,即同時到達了條件覆蓋和斷定覆蓋。條件覆蓋續(xù) 闡明:雖然前面的
38、一組測試用例同時到達了條件覆蓋和斷定覆蓋,但是,并不是說滿足條件覆蓋就一定能滿足斷定覆蓋。假設設計了下表中的這組測試用例,那么雖然滿足了條件覆蓋,但只是覆蓋了程序中第一個斷定的取假分支c 和第二個斷定的取真分支d,不滿足斷定覆蓋的要求。 測試用例 執(zhí)行路徑 覆蓋條件覆蓋分支x=2、y=6、z=5 acd-T1、T2、 -T3、T4 cdx=4、y=5、z=15 acdT1、-T2、 T3、-T4 cd斷定/條件覆蓋 斷定/條件覆蓋實踐上是將斷定覆蓋和條件覆蓋結(jié)合起來的一種方法,即:設計足夠的測試用例,使得斷定中每個條件的一切能夠取值至少滿足一次,同時每個斷定的能夠結(jié)果也至少出現(xiàn)一次。 根據(jù)斷定
39、/條件覆蓋的根本思想,只需設計以下兩個測試用例便可以覆蓋4個條件的8種取值以及4個斷定分支。 測試用例 執(zhí)行路徑 覆蓋條件覆蓋分支x=4、y=6、z=5 abdT1、T2、 T3、T4 bdx=2、y=5、z=15ace-T1、-T2、 -T3、-T4 ce斷定/條件覆蓋續(xù) 分析:從外表上看,斷定/條件覆蓋測試了各個斷定中的一切條件的取值,但實踐上,編譯器在檢查含有多個條件的邏輯表達式時,某些情況下的某些條件將會被其它條件所掩蓋。因此,斷定/條件覆蓋也不一定可以完全檢查出邏輯表達式中的錯誤。 例如:對于第一個斷定(x3)&(z3和z3為假,那么編譯器將不再檢查z5)來說,假設條件x=4
40、滿足,就以為該斷定為真,這時將不會再檢查y5,那么同樣也無法發(fā)現(xiàn)這個條件中的錯誤。組合覆蓋 組合覆蓋的目的是要使設計的測試用例能覆蓋每一個斷定的一切能夠的條件取值組合。 對DoWork函數(shù)中的各個斷定的條件取值組合加以標志: 1、x3, z3, z=10 記做T1 -T2,第一個斷定的取假分支 3、x=3, z10 記做-T1 T2,第一個斷定的取假分支 4、x=10 記做-T1 -T2,第一個斷定的取假分支 5、x=4, y5 記做T3 T4,第二個斷定的取真分支 6、x=4, y5 記做-T3 T4,第二個斷定的取真分支 8、x!=4, y8 AND Y5X0 OR Y0援用語句1援用語句
41、2NYNYX16 OR Y10援用語句3NY4.3.3 面向?qū)ο蟮母采w 承繼上下文覆蓋承繼上下文覆蓋 由于傳統(tǒng)的構(gòu)造化度量沒有思索面向?qū)ο蟮囊恍┨匦匀缬捎趥鹘y(tǒng)的構(gòu)造化度量沒有思索面向?qū)ο蟮囊恍┨匦匀缍鄳B(tài)、承繼和封裝等,所以在面向?qū)ο箢I(lǐng)域,傳統(tǒng)的構(gòu)多態(tài)、承繼和封裝等,所以在面向?qū)ο箢I(lǐng)域,傳統(tǒng)的構(gòu)造化覆蓋必需被加強,以滿足面向?qū)ο筇匦?。造化覆蓋必需被加強,以滿足面向?qū)ο筇匦浴?承繼上下文覆蓋思索在每個類的上下文內(nèi)獲得的覆蓋率級承繼上下文覆蓋思索在每個類的上下文內(nèi)獲得的覆蓋率級別。它是擴展到面向?qū)ο箢I(lǐng)域里的一種覆蓋率度量方法,別。它是擴展到面向?qū)ο箢I(lǐng)域里的一種覆蓋率度量方法,用于度量在系統(tǒng)中的多態(tài)調(diào)
42、用被測試得多好。用于度量在系統(tǒng)中的多態(tài)調(diào)用被測試得多好。 承繼上下文定義將基類上下文內(nèi)例行程序的執(zhí)行作為獨立承繼上下文定義將基類上下文內(nèi)例行程序的執(zhí)行作為獨立于承繼類上下文內(nèi)例行程序的執(zhí)行。同樣,它們在思索承于承繼類上下文內(nèi)例行程序的執(zhí)行。同樣,它們在思索承繼類上下文內(nèi)例行程序的執(zhí)行也獨立于基類上下文內(nèi)例行繼類上下文內(nèi)例行程序的執(zhí)行也獨立于基類上下文內(nèi)例行程序的執(zhí)行。為了獲得程序的執(zhí)行。為了獲得100承繼上下文覆蓋,代碼必需承繼上下文覆蓋,代碼必需在每個適當?shù)纳舷挛膬?nèi)被完全執(zhí)行。在每個適當?shù)纳舷挛膬?nèi)被完全執(zhí)行。 面向?qū)ο蟮母采w續(xù) 基于形狀的上下文覆蓋基于形狀的上下文覆蓋 在絕大多數(shù)面向?qū)ο蟮南?/p>
43、統(tǒng)中存在這樣的一些類:這些類在絕大多數(shù)面向?qū)ο蟮南到y(tǒng)中存在這樣的一些類:這些類的對象可以存在于眾多不同形狀中的任何一種,并且由于的對象可以存在于眾多不同形狀中的任何一種,并且由于類的行為依賴于形狀,每個類的行為在每個能夠的形狀中類的行為依賴于形狀,每個類的行為在每個能夠的形狀中其性質(zhì)是不同的。其性質(zhì)是不同的。 基于形狀的上下文覆蓋對應于被測類對象的潛在形狀?;谛螤畹纳舷挛母采w對應于被測類對象的潛在形狀。 這樣基于形狀的上下文覆蓋把一個形狀上下文內(nèi)的一個例這樣基于形狀的上下文覆蓋把一個形狀上下文內(nèi)的一個例行程序的執(zhí)行以為是獨立于另一個形狀內(nèi)一樣例行程序的行程序的執(zhí)行以為是獨立于另一個形狀內(nèi)一樣
44、例行程序的執(zhí)行。為了到達執(zhí)行。為了到達100的基于形狀的上下文覆蓋,例行程的基于形狀的上下文覆蓋,例行程序必需在每個適當?shù)纳舷挛男螤顑?nèi)被執(zhí)行。序必需在每個適當?shù)纳舷挛男螤顑?nèi)被執(zhí)行。4.3.4 測試覆蓋準那么 邏輯覆蓋的出發(fā)點是合理的、完善的。所謂“覆蓋,就是想要做到全面而無脫漏,但邏輯覆蓋并不能真正做到無脫漏。 例如:我們不小心將前面提到的程序段中的 if (x3 & Z=3 & Z10) 按照我們前面設計的測試用例x的值取2或4來看,邏輯覆蓋對這樣的小問題都無能為力。分析出現(xiàn)這一情況的緣由在于:錯誤區(qū)域僅僅在x=3這個點上,即僅當x的值取3時,測試才干發(fā)現(xiàn)錯誤。面對這類情況,
45、我們應該從中汲取的教訓是測試任務要有重點,要多針對容易發(fā)生問題的地方設計測試用例。測試覆蓋準那么續(xù) ESTCA覆蓋準那么:在容易發(fā)生問題的地方設計測試用例,即注重程序中謂詞條件判別的取值。 ESTCA覆蓋準那么是一套錯誤敏感用例分析規(guī)那么。這一規(guī)那么雖然并不完備,但在普通程序中卻是有效的。緣由在于這是一種閱歷型的覆蓋準那么,規(guī)那么本身針對了程序編寫人員容易發(fā)生的錯誤,或是圍繞著發(fā)生錯誤的頻繁區(qū)域,從而提高了發(fā)現(xiàn)錯誤的命中率。詳細規(guī)那么如下: 規(guī)那么1 對于A rel B型 (rel可以是) 的分支謂詞,應適當?shù)倪x擇A與B的值,使得測試執(zhí)行到該分支語句時,AB的情況分別出現(xiàn)一次。 這是為了檢測邏
46、輯符號寫錯的情況,如將“AB。測試覆蓋準那么續(xù) 規(guī)那么2 對于A rel C型 (rel可以是或, A是變量,C是常量)的分支謂詞:當rel為時,應適當?shù)倪x擇A的值,使A=C+M。 這是為了檢測“差1之類的錯誤,如“A1錯寫成“A0。 規(guī)那么3 對外部輸入變量賦值,使其在每一個測試用例中均有不同的值與符號,并與同一組測試用例中其他變量的值與符號不同。 這是為了檢測程序語句中的錯誤,如應該援用某一變量而錯成援用另一個常量。測試覆蓋準那么續(xù) 關(guān)于LCSAJ LCSAJ (Linear Code Sequence and Jump) 的字面含義是線性代碼序列與跳轉(zhuǎn)。在程序中,一個LCSAJ是一組順序
47、執(zhí)行的代碼,以控制跳轉(zhuǎn)為其終了點。 LCSAJ的起點是根據(jù)程序本身決議的。它的起點可以是程序第一行或轉(zhuǎn)移語句的入口點,或是控制流可跳達的點。 假設有幾個LCSAJ首尾相接,且第一個LCSAJ起點為程序起點,最后一個LCSAJ終點為程序終點,這樣的LCSAJ串就組成了程序的一條途徑LCSAJ途徑。一條LCSAJ程序途徑能夠是由2個、3個或多個LCSAJ組成的。測試覆蓋準那么續(xù) 基于LCSAJ與途徑的關(guān)系,提出了層次LCSAJ覆蓋準那么。它是一個分層的覆蓋準那么,可以概括的描畫為: 第一層 語句覆蓋。 第二層 分支覆蓋。 第三層 LCSAJ覆蓋,即程序中的每一個LCSAJ都至少在測試中閱歷過一次。
48、 第四層 兩兩LCSAJ覆蓋,即程序中的每兩個相連的LCSAJ組合起來在測試中都要閱歷一次。 第n+2層 每n個首尾相連的LCSAJ組合在測試中都要閱歷一次。 在實施測試時,假設要實現(xiàn)上述的層次LCSAJ覆蓋,需求產(chǎn)生被測程序的一切LCSAJ。測試覆蓋準那么續(xù) 例:找出前面DoWork函數(shù)的一切LCSAJ和LCSAJ途徑。 LCSAJ5個: 1int k=0,j=0; if ( (x3)&(z5) ) 3if ( (x=4)|(y5) ) 4j=x*y+10; j=j%3 5j=j%3 LCSAJ途徑4條: 1-2-4 1-2-5 1-3-4 1-3-54.4 途徑測試4.4.1 途徑表達式4.4.2 根本途徑測試方法4.4.3 循環(huán)測試方法4.4.4 產(chǎn)生測試用例4.4.1 途徑表達式 為了滿足途徑覆蓋
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程規(guī)劃設計合同
- 市場調(diào)研咨詢服務合同
- 2024年私人簡易勞務合同
- 拆遷合同樣本2024年
- 2025年春人教版九年級語文下冊 期末綜合測試卷
- 2023年湖北特種設備檢驗檢測研究院隨州分院招聘考試真題
- 英語節(jié)假日活動
- 迎新早會怎么主持詞
- 過橋幼兒園教案5篇
- 普通員工離職申請書模板15篇
- 施工圖預算的編制工作規(guī)范
- 日立電梯MCA調(diào)試培訓課件
- 電動客車驅(qū)動橋總成設計
- 四川省阿壩藏族羌族自治州《綜合知識》事業(yè)單位國考真題
- 2023年人民法院電子音像出版社招聘筆試題庫及答案解析
- 大學生心理健康優(yōu)秀說課-比賽課件
- 收款賬戶變更的聲明
- 九年級道德與法治中考復習資料
- 《化學發(fā)展簡史》學習心得
- 班組建設與班組長管理技巧課件
- 簽派員執(zhí)照考試題庫匯總-8簽派和實踐應用
評論
0/150
提交評論