




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第4章 白盒測試及其用例的設(shè)計,4.1 白盒測試方法 4.2 白盒測試的基本概念 4.3 覆蓋測試 4.4 路徑測試 4.5 最少測試用例數(shù)計算,本章教學(xué)目標(biāo),理論環(huán)節(jié) 學(xué)習(xí)理解白盒測試方法的基本概念 學(xué)習(xí)理解白盒測試的覆蓋理論 學(xué)習(xí)掌握白盒測試的路徑表達(dá) 學(xué)習(xí)掌握白盒測試的基本路徑測試法 實踐環(huán)節(jié) 通過案例運用學(xué)習(xí)掌握覆蓋問題的解決方法 運用基本路徑測試方法進(jìn)行實際程序測試,4.1 白盒測試方法,為什么要進(jìn)行白盒測試? 如果所有軟件錯誤的根源都可以追溯到某個唯一原因,那么問題就簡單了。然而,事實上一個bug 常常是由多個因素共同導(dǎo)致的,如下圖所示。,Return,假設(shè)此時開發(fā)工作已結(jié)束,程序
2、送交到測試組,沒有人知道代碼中有一個潛在的被 0 除的錯誤。若測試組采用的測試用例的執(zhí)行路徑?jīng)]有同時經(jīng)過x=0和y=5/x進(jìn)行測試,顯然測試工作似乎非常完善,測試用例覆蓋了所有執(zhí)行語句,也沒有被 0 除的錯誤發(fā)生。,白盒測試方法(續(xù)),白盒測試也稱結(jié)構(gòu)測試或邏輯驅(qū)動測試,是針對被測單元內(nèi)部是如何進(jìn)行工作的測試。它根據(jù)程序的控制結(jié)構(gòu)設(shè)計測試用例,主要用于軟件或程序驗證。 白盒測試法檢查程序內(nèi)部邏輯結(jié)構(gòu),對所有邏輯路徑進(jìn)行測試,是一種窮舉路徑的測試方法。但即使每條路徑都測試過了,仍然可能存在錯誤。因為: 窮舉路徑測試無法檢查出程序本身是否違反了設(shè)計規(guī)范,即程序是否是一個錯誤的程序。 窮舉路徑測試不
3、可能查出程序因為遺漏路徑而出錯。 窮舉路徑測試發(fā)現(xiàn)不了一些與數(shù)據(jù)相關(guān)的錯誤。,白盒測試方法(續(xù)),采用白盒測試方法必須遵循以下幾條原則,才能達(dá)到測試的目的: 保證一個模塊中的所有獨立路徑至少被測試一次。 所有邏輯值均需測試真 (true) 和假 (false) 兩種情況。 檢查程序的內(nèi)部數(shù)據(jù)結(jié)構(gòu),保證其結(jié)構(gòu)的有效性。 在上下邊界及可操作范圍內(nèi)運行所有循環(huán)。 白盒測試主要是檢查程序的內(nèi)部結(jié)構(gòu)、邏輯、循環(huán)和路徑。常用測試用例設(shè)計方法有: 邏輯覆蓋法(邏輯驅(qū)動測試) 基本路徑測試方法,4.2 白盒測試的基本概念,4.2.1 控制流圖 4.2.2 環(huán)形復(fù)雜度 4.2.3 圖矩陣,Return,4.2.
4、1 控制流圖,控制流圖(可簡稱流圖)是對程序流程圖進(jìn)行簡化后得到的,它可以更加突出的表示程序控制流的結(jié)構(gòu)。 控制流圖中包括兩種圖形符號:節(jié)點和控制流線。 節(jié)點由帶標(biāo)號的圓圈表示,可代表一個或多個語句、一個處理框序列和一個條件判定框(假設(shè)不包含復(fù)合條件)。 控制流線由帶箭頭的弧或線表示,可稱為邊。它代表程序中的控制流。 對于復(fù)合條件,則可將其分解為多個單個條件,并映射成控制流圖。,常見結(jié)構(gòu)的控制流圖,常見結(jié)構(gòu)的控制流圖,其中,包含條件的節(jié)點被稱為判定節(jié)點(也叫謂詞節(jié)點),由判定節(jié)點發(fā)出的邊必須終止于某一個節(jié)點,由邊和節(jié)點所限定的范圍被稱為區(qū)域。,4.2.2 環(huán)形復(fù)雜度,環(huán)形復(fù)雜度也稱為圈復(fù)雜度,
5、它是一種為程序邏輯復(fù)雜度提供定量尺度的軟件度量。 環(huán)形復(fù)雜度的應(yīng)用可以將環(huán)形復(fù)雜度用于基本路徑方法,它可以提供:程序基本集的獨立路徑數(shù)量;確保所有語句至少執(zhí)行一次的測試數(shù)量的上界。 獨立路徑是指程序中至少引入了一個新的處理語句集合或一個新條件的程序通路。采用流圖的術(shù)語,即獨立路徑必須至少包含一條在本次定義路徑之前不曾用過的邊。 測試可以被設(shè)計為基本路徑集的執(zhí)行過程,但基本路徑集通常并不唯一。,計算環(huán)形復(fù)雜度的方法,環(huán)形復(fù)雜度以圖論為基礎(chǔ),為我們提供了非常有用的軟件度量??捎萌缦氯N方法之一來計算環(huán)形復(fù)雜度: 控制流圖中區(qū)域的數(shù)量對應(yīng)于環(huán)形復(fù)雜度。 給定控制流圖G的環(huán)形復(fù)雜度V(G),定義為 V
6、(G) = E-N+2 其中,E是控制流圖中邊的數(shù)量,N是控制流圖中的節(jié)點數(shù)量。 給定控制流圖G的環(huán)形復(fù)雜度V(G),也可定義為 V(G) = P+1 其中,P是控制流圖G中判定節(jié)點的數(shù)量。,4.2.3 圖矩陣,圖矩陣是控制流圖的矩陣表示形式。 圖矩陣是一個方形矩陣,其維數(shù)等于控制流圖的節(jié)點數(shù)。矩陣中的每列和每行都對應(yīng)于標(biāo)識的節(jié)點,矩陣元素對應(yīng)于節(jié)點間的邊。 通常,控制流圖中的結(jié)點用數(shù)字標(biāo)識,邊則用字母標(biāo)識。如果在控制流圖中從第 i 個結(jié)點到第 j 個結(jié)點有一個標(biāo)識為 x 的邊相連接,則在對應(yīng)圖矩陣的第 i 行第 j 列有一個非空的元素 x 。,習(xí)題,根據(jù)左圖給出的程序流程圖,完成以下要求:
7、(1)畫出相應(yīng)的控制流圖。 (2)計算環(huán)形復(fù)雜度。 (3)給出相應(yīng)的圖矩陣。 (4)找出程序的獨立路徑集合。,4.3 覆蓋測試,4.3.1 測試覆蓋率 4.3.2 邏輯覆蓋法 4.3.3 面向?qū)ο蟮母采w 4.3.4 測試覆蓋準(zhǔn)則,Return,4.3.1 測試覆蓋率,測試覆蓋率:用于確定測試所執(zhí)行到的覆蓋項的百分比。其中的覆蓋項是指作為測試基礎(chǔ)的一個入口或?qū)傩?,比如語句、分支、條件等。 測試覆蓋率可以表示出測試的充分性,在測試分析報告中可以作為量化指標(biāo)的依據(jù),測試覆蓋率越高效果越好。但覆蓋率不是目標(biāo),只是一種手段。 測試覆蓋率包括功能點覆蓋率和結(jié)構(gòu)覆蓋率: 功能點覆蓋率大致用于表示軟件已經(jīng)實現(xiàn)
8、的功能與軟件需要實現(xiàn)的功能之間的比例關(guān)系。 結(jié)構(gòu)覆蓋率包括語句覆蓋率、分支覆蓋率、循環(huán)覆蓋率、路徑覆蓋率等等。,4.3.2 邏輯覆蓋法,根據(jù)覆蓋目標(biāo)的不同,邏輯覆蓋又可分為語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。 語句覆蓋:選擇足夠多的測試用例,使得程序中的每個可執(zhí)行語句至少執(zhí)行一次。 判定覆蓋:通過執(zhí)行足夠的測試用例,使得程序中的每個判定至少都獲得一次“真”值和“假”值, 也就是使程序中的每個取“真”分支和取“假”分支至少均經(jīng)歷一次,也稱為“分支覆蓋”。 條件覆蓋:設(shè)計足夠多的測試用例,使得程序中每個判定包含的每個條件的可能取值(真/假)都至少滿足一次。,邏輯覆蓋法
9、(續(xù)),判定/條件覆蓋:設(shè)計足夠多的測試用例,使得程序中每個判定包含的每個條件的所有情況(真/假)至少出現(xiàn)一次,并且每個判定本身的判定結(jié)果(真/假)也至少出現(xiàn)一次。 滿足判定/條件覆蓋的測試用例一定同時滿足判定覆蓋和條件覆蓋。 組合覆蓋:通過執(zhí)行足夠的測試用例,使得程序中每個判定的所有可能的條件取值組合都至少出現(xiàn)一次。 滿足組合覆蓋的測試用例一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋。 路徑覆蓋:設(shè)計足夠多的測試用例,要求覆蓋程序中所有可能的路徑。,邏輯覆蓋法(續(xù)),邏輯覆蓋法(續(xù)),void DoWork (int x,int y,int z) int k=0,j=0; if ( (x3)
10、/語句塊3 ,邏輯覆蓋法(續(xù)),語句覆蓋,要實現(xiàn)DoWork函數(shù)的語句覆蓋,只需設(shè)計一個測試用例就可以覆蓋程序中的所有可執(zhí)行語句。 測試用例輸入為: x=4、y=5、z=5 程序執(zhí)行的路徑是:abd 分析: 語句覆蓋可以保證程序中的每個語句都得到執(zhí)行,但發(fā)現(xiàn)不了判定中邏輯運算的錯誤,即它并不是一種充分的檢驗方法。例如在第一個判定(x3) if ( (x3) j=j%3 (5)j=j%3 LCSAJ路徑(4條): (1)-(2)-(4) (1)-(2)-(5) (1)-(3)-(4) (1)-(3)-(5),4.4 路徑測試,4.4.1 路徑表達(dá)式 4.4.2 基本路徑測試方法 4.4.3 循環(huán)
11、測試方法 4.4.4 產(chǎn)生測試用例,Return,4.4.1 路徑表達(dá)式,為了滿足路徑覆蓋,必須首先確定具體的路徑以及路徑的個數(shù)。我們通常采用控制流圖的邊(?。┬蛄泻凸?jié)點序列表示某一條具體路徑,更為概括的表示方法為: (1)弧a和弧b相乘,表示為ab,它表明路徑是先經(jīng)歷弧a,接著再經(jīng)歷弧b,弧a和弧b是先后相接的。 (2)弧a和弧b相加,表示為a+b,它表明兩條弧是“或”的關(guān)系,是并行的路段。 路徑數(shù)的計算: 在路徑表達(dá)式中,將所有弧均以數(shù)值1來代替,再進(jìn)行表達(dá)式的相乘和相加運算,最后得到的數(shù)值即為該程序的路徑數(shù)。,4.4.2 基本路徑測試方法,路徑測試就是從一個程序的入口開始,執(zhí)行所經(jīng)歷的各
12、個語句的完整過程。從廣義的角度講,任何有關(guān)路徑分析的測試都可以被稱為路徑測試。 完成路徑測試的理想情況是做到路徑覆蓋,但對于復(fù)雜性大的程序要做到所有路徑覆蓋(測試所有可執(zhí)行路徑)是不可能的。 在不能做到所有路徑覆蓋的前提下,如果某一程序的每一個獨立路徑都被測試過,那么可以認(rèn)為程序中的每個語句都已經(jīng)檢驗過了,即達(dá)到了語句覆蓋。這種測試方法就是通常所說的基本路徑測試方法。,基本路徑測試方法(續(xù)),基本路徑測試方法是在控制流圖的基礎(chǔ)上,通過分析控制結(jié)構(gòu)的環(huán)形復(fù)雜度,導(dǎo)出執(zhí)行路徑的基本集,再從該基本集設(shè)計測試用例?;韭窂綔y試方法包括以下4個步驟: (1)畫出程序的控制流圖。 (2)計算程序的環(huán)形復(fù)雜
13、度,導(dǎo)出程序基本路徑集中的獨立路徑條數(shù),這是確定程序中每個可執(zhí)行語句至少執(zhí)行一次所必須的測試用例數(shù)目的上界。 (3)導(dǎo)出基本路徑集,確定程序的獨立路徑。 (4)根據(jù)(3)中的獨立路徑,設(shè)計測試用例的輸入數(shù)據(jù)和預(yù)期輸出。,基本路徑測試方法(續(xù)),void Sort ( int iRecordNum, int iType ) 1 2 int x=0; 3 int y=0; 4 while ( iRecordNum- 0 ) 5 6 If ( iType=0 ) 7x=y+2; 8 else 9 If ( iType=1 ) 10 x=y+10; 11 else 12 x=y+20; 13 14 ,
14、基本路徑測試方法(續(xù)),畫出控制流圖: 如右圖所示 計算環(huán)形復(fù)雜度: 10(條邊)- 8(個節(jié)點)+ 2 = 4 導(dǎo)出獨立路徑(用語句編號表示) 路徑1:414 路徑2:46714 路徑3:4691013414 路徑4:4691213414,基本路徑測試方法(續(xù)),設(shè)計測試用例:,習(xí)題,1、使用基本路徑測試方法,為以下程序段設(shè)計測試用例。 void Do (int X,int A,int B) 1 if ( (A1) 5 2、在三角形問題中,要求輸入三個邊長:a,b,c。當(dāng)三邊不可能構(gòu)成三角形時提示錯誤,可構(gòu)成三角形時計算三角形的周長。若是等腰三角形打印“等腰三角形”,若是等邊三角形,則打印“
15、等邊三角形”。畫出相應(yīng)的程序流程圖,并采用基本路徑測試方法為該程序設(shè)計測試用例。,4.4.3 循環(huán)測試方法,從本質(zhì)上說,循環(huán)測試的目的就是檢查循環(huán)結(jié)構(gòu)的有效性。 通常,循環(huán)可以劃分為簡單循環(huán)、嵌套循環(huán)、串接循環(huán)和 非結(jié)構(gòu)循環(huán)4類。 (1)測試簡單循環(huán)。設(shè)其循環(huán)的最大次數(shù)為n ,可采用以下測試集: 跳過整個循環(huán); 只循環(huán)一次; 只循環(huán)兩次; 循環(huán) m 次,其中mn; 分別循環(huán) n-1、n 和 n+1 次。,循環(huán)測試方法(續(xù)),(2)測試嵌套循環(huán)。如果將簡單循環(huán)的測試方法用于嵌套循環(huán),可能的測試次數(shù)會隨嵌套層數(shù)成幾何級數(shù)增加。 此時可采用以下辦法減少測試次數(shù): 測試從最內(nèi)層循環(huán)開始,所有外層循環(huán)次
16、數(shù)設(shè)置為最小值; 對最內(nèi)層循環(huán)按照簡單循環(huán)的測試方法進(jìn)行; 由內(nèi)向外進(jìn)行下一個循環(huán)的測試,本層循環(huán)的所有外層循環(huán)仍取最小值,而由本層循環(huán)嵌套的循環(huán)取某些“典型”值; 重復(fù)上一步的過程,直到測試完所有循環(huán)。 (3)測試串接循環(huán)。若串接的各個循環(huán)相互獨立,則可分別采用簡單循環(huán)的測試方法;否則采用嵌套循環(huán)的測試方法。 (4)對于非結(jié)構(gòu)循環(huán)這種情況,無法進(jìn)行測試,需要按結(jié)構(gòu)化程序設(shè)計的思想將程序結(jié)構(gòu)化后,再進(jìn)行測試。,Z路徑覆蓋下的循環(huán)測試方法,Z路徑覆蓋是路徑覆蓋的一種變體,它是將程序中的循環(huán)結(jié)構(gòu)簡化為選擇結(jié)構(gòu)的一種路徑覆蓋。 循環(huán)簡化的目的是限制循環(huán)的次數(shù),無論循環(huán)的形式和循環(huán)體實際執(zhí)行的次數(shù),簡
17、化后的循環(huán)測試只考慮執(zhí)行循環(huán)體一次和零次(不執(zhí)行)兩種情況,即考慮執(zhí)行時進(jìn)入循環(huán)體一次和跳過循環(huán)體這兩種情況。,在循環(huán)簡化的思路下,循環(huán)與判定分支的效果是一樣的,即:循環(huán)要么執(zhí)行、要么跳過。,4.4.4 產(chǎn)生測試用例,在實踐中,除了前面給出的各種方法外,通常還可以采用以下三種方法來補充設(shè)計測試用例: (1)通過非路經(jīng)分析得到測試用例 這種方法得到的測試用例是在應(yīng)用系統(tǒng)本身的實踐中提供的,基本上是測試人員憑工作經(jīng)驗的得到,甚至是猜測得到的。 (2)尋找尚未測試過的路徑并生成相應(yīng)的測試用例 這種方法需要窮舉被測程序的所有路徑,并與前面已測試路徑進(jìn)行對比。 (3)通過指定特定路徑并生成相應(yīng)的測試用例
18、,4.5 最少測試用例數(shù)計算,為實現(xiàn)測試的邏輯覆蓋,必須設(shè)計足夠多的測試用例,并使用這些測試用例執(zhí)行被測程序,實施測試。我們關(guān)心的是:對于某個具體的程序來說,至少需要設(shè)計多少個測試用例。這里提供一種估算最少測試用例數(shù)的方法。 我們知道,結(jié)構(gòu)化程序是由 3 種基本控制結(jié)構(gòu)組成:順序型(構(gòu)成串行操作)、選擇型(構(gòu)成分支操作)和重復(fù)型(構(gòu)成循環(huán)操作)。 為了把問題化簡,避免出現(xiàn)測試用例極多的組合爆炸,把構(gòu)成循環(huán)操作的重復(fù)型結(jié)構(gòu)用選擇結(jié)構(gòu)代替。這樣,任一循環(huán)便改造成進(jìn)入循環(huán)體或不進(jìn)入循環(huán)體的分支操作了。,最少測試用例數(shù)計算(續(xù)),用N-S圖表示程序的3種基本控制結(jié)構(gòu):,圖中A、B、C、D、S均表示要執(zhí)
19、行的操作,P是可取真假值的謂詞,Y表真值,N表假值。 圖中的 (c) 和 (d) 兩種重復(fù)型結(jié)構(gòu)代表了兩種循環(huán)。在做了簡化循環(huán)的假設(shè)以后,對于一般的程序控制流,我們只考慮選擇型結(jié)構(gòu)。事實上它已經(jīng)能體現(xiàn)順序型和重復(fù)型結(jié)構(gòu)了。,最少測試用例數(shù)計算(續(xù)),顯然,要測試這個小程序,需要至少提供4個測試用例才能作到邏輯覆蓋,使得ac、ad、bc及bd操作均得到檢驗。其實,這里的4是圖中的第1個分支謂詞引出的兩個操作,及第2個分支謂詞引出的兩個操作組合起來而得到的,即 22=4。并且,這里的2是由于兩個并列的操作,即1+1=2 而得到的。,例如,下圖表達(dá)了兩個順序執(zhí)行的分支結(jié)構(gòu)。當(dāng)兩個分支謂詞P1和P2取不同值時,將分別執(zhí)行a或b及c或d操作。,最少測試用例數(shù)計算(續(xù)),對于一般的、更
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交際翻譯理論指導(dǎo)下的心理學(xué)文本《共鳴的半徑》(節(jié)選)韓中翻譯實踐報告
- 青少年心理健康調(diào)研活動方案范文
- 疫情防控醫(yī)療質(zhì)量安全事件報告制度及流程
- 電子科學(xué)與技術(shù)專業(yè)畢業(yè)實習(xí)報告范文
- 中班疫情管控班務(wù)協(xié)調(diào)計劃
- 2025年三年級上語文課時分配計劃
- 社區(qū)人口與計劃生育統(tǒng)計員考試試題及答案
- 電氣自動化設(shè)備企業(yè)發(fā)展策略分析報告
- 實戰(zhàn)導(dǎo)向的IT認(rèn)證培訓(xùn)市場分析報告
- 合同管理文檔編制與執(zhí)行
- 2025至2030中國糠酸行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 江西省上饒市廣信區(qū)2023-2024學(xué)年七年級下學(xué)期6月期末考試數(shù)學(xué)試卷(含答案)
- 糖尿病病人胰島素治療講課件
- 高壓氣體絕緣設(shè)備中SF6分解產(chǎn)物檢測SO2傳感器的設(shè)計與應(yīng)用
- poct科室管理制度
- 溝通與表達(dá)講課件
- 2025年山東高考化學(xué)真題及答案
- 2025-2030年中國魚膠原蛋白肽行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 形勢與政策(2025春)超星學(xué)習(xí)通章節(jié)測試、考試及完整答案(奪冠)
- 廣東省中山市2023-2024學(xué)年七年級下學(xué)期期末數(shù)學(xué)試題(含答案)
- 2025年人教部編版語文五年級下冊期末檢測真題及答案(2套)
評論
0/150
提交評論