ch4白盒測試技術(shù)_第1頁
ch4白盒測試技術(shù)_第2頁
ch4白盒測試技術(shù)_第3頁
ch4白盒測試技術(shù)_第4頁
ch4白盒測試技術(shù)_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、PartChapter4 白盒測試技術(shù)7/16/202214.1白盒測試概述7/16/20222白盒測試定義軟件的白盒測試是對軟件的過程性細(xì)節(jié)做細(xì)致的檢查。這一方法是把測試對象看作一個打開的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進行測試。通過在不同點檢查程序的狀態(tài),確定實際的狀態(tài)是否與預(yù)期的狀態(tài)一致。因此,白盒測試又也稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試。7/16/20223白盒測試內(nèi)容白盒測試方法,主要對程序模塊進行如下的檢查:對程序模塊的所有獨立的執(zhí)行路徑至少測試一次;對所有的邏輯判定,取“真”與取“假”的兩種情況都能至少測試一次;在循環(huán)的邊界和

2、允許界限內(nèi)執(zhí)行循環(huán)體;測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等待。7/16/20224白盒測試特征已知產(chǎn)品內(nèi)部工作過程,通過測試來檢測產(chǎn)品內(nèi)部動作是否按照編碼規(guī)格說明書的規(guī)定正常進行,而不管它的功能。白盒法全面了解程序內(nèi)部邏輯結(jié)構(gòu)、對所有邏輯路徑進行測試。測試者必須檢查程序的內(nèi)部結(jié)構(gòu),從檢查程序的邏輯著手,得出測試數(shù)據(jù) 。7/16/20225白盒測試特征白盒法是窮舉路徑測試。貫穿程序的獨立路徑數(shù)可能是天文數(shù)字。因此窮舉測試是不可行的。即使是每條路徑都測試了,程序中仍然可能有錯誤。 原因如下。7/16/20226白盒測試也是不完善的原因:第一,窮舉路徑測試決不能查出程序違反了設(shè)計規(guī)范,即程序本身是個錯誤的程

3、序。第二,窮舉路徑測試不可能查出程序中因遺漏路徑而出錯。第三,窮舉路徑測試可能發(fā)現(xiàn)不了一些與數(shù)據(jù)相關(guān)的錯誤。 7/16/202274.2白盒測試基于控制流的方法邏輯覆蓋基本路徑覆蓋循環(huán)覆蓋7/16/202284.2.1基于控制流的方法邏輯覆蓋邏輯覆蓋:語句覆蓋分支覆蓋條件覆蓋條件組合覆蓋全路徑覆蓋7/16/20229邏輯覆蓋以圖1所示程序段為例7/16/202210邏輯覆蓋舉例圖1所示程序段有4條不同路徑。L1(ace): (A=2) (B=0)或 (A1) (B=0) (X/A1)L2(abd): (A 1) (X1)或 (B 0) (A 2) (X1)L3(abe):(A 1) (X1)或

4、 (B 0) (A=2)或 (B 0) (X1)L4(acd):(A1) (B=0) (A 2) (X/A1)7/16/202211語句覆蓋語句覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得每一可執(zhí)行語句至少執(zhí)行一次。又稱為C0覆蓋。根據(jù)粒度不同,也有叫行覆蓋、段覆蓋、基本塊覆蓋(basic block coverage)的。7/16/202212測試用例舉例語句覆蓋我們統(tǒng)一測試用例的格式為:輸入(A,B,X),輸出(A,B,X)或輸入(A,B,X)如上例,設(shè)計滿足語句覆蓋的測試用例是:(2,0,4),(2,0,3)7/16/202213語句覆蓋的盲點對一些控制結(jié)構(gòu)反映遲鈍(發(fā)現(xiàn)不了其中的某些

5、錯誤);可能發(fā)現(xiàn)不了判斷中的邏輯運算中出現(xiàn)的錯誤。如:第一個判斷中的邏輯運算符and錯寫為or,利用上面的測試用例,依然可達(dá)到語句覆蓋。7/16/202214語句覆蓋語句覆蓋是最弱的邏輯覆蓋準(zhǔn)則。在很多公司是最起碼的測試要求 。7/16/202215判定覆蓋判定覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支至少執(zhí)行一次。又稱為分支覆蓋,C1覆蓋,決策覆蓋,All-edges coverage,decision-decision-path(DDP)testing。7/16/202216判定覆蓋特征程序中的每一個分支至少通過一次 。判定覆蓋可擴充到多出口判斷(CA

6、SE語句)的情形。整個BOOL型的表達(dá)式被認(rèn)為是取值一個TRUE和一個FALSE,不考慮其內(nèi)部是否包含了邏輯AND或OR。7/16/202217判定覆蓋的測試用例上例中,如果選擇路徑L1和L2,就可得到滿足判斷覆蓋要求的測試用例: L1:(2,0,4),(2,0,3) L2:(1,1,1),(1,1,1)如果選擇路徑L3和L4,還可得到另一組滿足判定覆蓋條件的測試用例: L3:(2,1,1),(2,1,2) L4: (3,0,3),(3,1,1)可見,測試用例的取法不唯一。7/16/202218判定覆蓋的盲點忽略了BOOL型表達(dá)式內(nèi)部的BOOL取值。例中,如果第二個判定中的條件X1錯寫成X1,

7、取真為T1,取假為T1 條件B=0,取真為T2,取假為T2對第二個判斷: 條件A=2,取真為T3,取假為T3 條件X1,取真為T4,取假為T47/16/202221滿足條件覆蓋的測試用例可選取的測試用例如下:7/16/202222滿足條件覆蓋的測試用例以下測試用例也可。7/16/202223條件覆蓋的弱點完全的條件覆蓋并不能保證完全的分支覆蓋。7/16/202224兩組測試用例分析第一組測試用例滿足條件覆蓋,同時也滿足分支覆蓋。第二組測試用例滿足條件覆蓋,但不滿足分支覆蓋??梢?,滿足了條件覆蓋的測試用例并不一定能測試所有可能的分支。(條件覆蓋的盲點)7/16/202225判定條件覆蓋判定條件覆

8、蓋就是設(shè)計足夠的測試用例,運行被測程序,使得程序中每個判斷的每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷的所有可能判斷結(jié)果(分支)至少執(zhí)行一次。也叫分支條件組合覆蓋。7/16/202226判定條件覆蓋判定條件覆蓋是分支覆蓋和條件覆蓋的一個混血。它有兩者的簡單性。但卻沒有兩者的缺點。7/16/202227判定條件覆蓋的測試用例上例中,只需設(shè)計以下兩個測試用例,便可覆蓋圖中的8個條件取值以及4個判斷分支。7/16/202228判定條件覆蓋的盲點從表面上看,它測試了所有條件的取值。但事實并非如此,因為往往某些條件會掩蓋另一些條件。例如,對于條件表達(dá)式 (A1)and(B=0),若(A1)為真,則

9、還要測試(B=0),才能決定表達(dá)式的值;若(A1)為假,可以立刻決定表達(dá)式的值為假,這時,程序往往就不再測試(B=0)的取值了;這樣,條件(B=0)就沒有檢查。因此,采用判斷條件覆蓋,邏輯表達(dá)式中的錯誤不一定能夠查得出來。7/16/202229修正條件/判定覆蓋Modified Condition/Decision Coverage,也稱MC/DC。每一個條件對于判定的結(jié)果值是獨立的,即單條件的變化將導(dǎo)致判決的變化。7/16/202230多重條件判定分解為了徹底檢查所有條件的取值,可以將圖1給出的多重條件判定分解,形成圖2所示的由多個基本判斷組成的流程圖。這樣就可以有效地檢查所有的條件是否正確

10、了。7/16/202231圖2 圖1的多重條件判斷分解分解為多個基本判斷7/16/202232條件組合覆蓋條件組合覆蓋就是設(shè)計足夠的測試用例,運行被測程序,使得程序中每個判斷的所有可能的條件取值組合至少執(zhí)行一次。也叫多(重)條件覆蓋。7/16/202233條件組合覆蓋每個判定中條件的各種組合至少出現(xiàn)一次。多條件覆蓋需要的測試用例是用一個條件的邏輯操作符的真值表來確定的。7/16/202234條件組合覆蓋優(yōu)缺點優(yōu)點:達(dá)到了條件組合覆蓋,所有的語句、分支和條件都將覆蓋,因此測試比較徹底。但不保證全部路徑的覆蓋。在實際測試中,達(dá)到所有條件組合常常是不可能。缺點:測試用例比較冗長復(fù)雜。測試用例對于相似

11、的復(fù)雜性的條件可能有非常大的變化。7/16/202235條件組合覆蓋的測試用例對于第一個判斷,有2個條件,4個取值組合。 T1 T2 T1F2 F1 T2 F1 F2對于第二個判斷,也有2個條件,4個取值組合。 T3 T4 T3F4 F3 T4 F3 F47/16/202236條件組合覆蓋的測試用例如果考慮第一個判斷的4個組合與第二個判斷的4個組合再進行組合,就需要42=16個測試用例了。如果不考慮第一個判斷的4個組合與第二個判斷的4個組合再進行組合,則取4個測試用例就能覆蓋上面8種條件取值的組合。(下頁)7/16/202237條件組合覆蓋的盲點表中的這組測試用例覆蓋了所有條件的可能取值的組合

12、,覆蓋了所有判斷的可取分支。但路徑漏掉了L4,故達(dá)到條件組合覆蓋的測試用例仍是不完全的。7/16/202238全路徑覆蓋全路徑覆蓋就是設(shè)計足夠多的測試用例,覆蓋程序中所有可能的路徑。一個路徑就是一個從函數(shù)的入口到函數(shù)的出口的唯一的系列分支。優(yōu)點:這種方法最嚴(yán)密,可以進行徹底的測試。但所花費的時間和成本也最高,通常實用性不大。7/16/202239全路徑覆蓋的測試用例仍以圖1為例,可以選擇如下的一組測試用例(可有多組)來覆蓋該程序段的全部路徑。7/16/202240全路徑覆蓋缺點缺點:路徑是以分支的指數(shù)級別增加的。例如:一個函數(shù)包含10個if語句,就有1024需要個路徑測試,如果再加入一個if語

13、句,就有2048個路徑要測試。許多路徑不可能和執(zhí)行的數(shù)據(jù)無關(guān)。 例如:路徑覆蓋認(rèn)為下列語句 包含四條路徑。 7/16/202241全路徑覆蓋缺點 if(success) statement1; statement2; if(success) statement3;但實際上可行的路徑只有兩條。7/16/202242部分邏輯覆蓋的理解要領(lǐng)分支覆蓋是以判斷的整個布爾表達(dá)式為主;條件覆蓋是以判斷的布爾表達(dá)式中的某項條件為主;由于分支覆蓋和條件覆蓋不是包含的關(guān)系,因此教嚴(yán)密的方法是結(jié)合這兩種方法在一起,即判定條件覆蓋。條件組合覆蓋是從判定條件覆蓋延伸過來的。7/16/202243各種邏輯覆蓋的關(guān)系從語句

14、覆蓋,到全路徑覆蓋,越來越嚴(yán)格。7/16/2022444.2.2基于控制流的方法基本路徑測試上面的例子是個非常簡單的程序段,只有4條路徑。在實際問題中,一個不太復(fù)雜的程序(特別是程序中有循環(huán)體時) ,其路徑都是一個龐大的數(shù)字。要在測試中覆蓋這么多的路徑是不現(xiàn)實的。為解決這一問題,只得把覆蓋的路徑數(shù)壓縮到一定限度內(nèi)(例如,程序的循環(huán)體只執(zhí)行一次。),基本路徑覆蓋就是這樣的一種測試方法。7/16/202245基本路徑測試基本路徑是Tom McCabe首先提出的一種白盒測試技術(shù)。7/16/202246基本路徑測試基本路徑覆蓋是在程序控制圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合

15、,從而來設(shè)計測試用例。從該基本集導(dǎo)出的測試用例能保證程序中的每一個可執(zhí)行語句至少執(zhí)行一次?;韭窂郊皇俏ㄒ坏摹?/16/202247基本路徑測試的主要步驟以詳細(xì)設(shè)計或源代碼作為基礎(chǔ),導(dǎo)出程序的控制流圖。計算得到的控制流圖G的環(huán)路復(fù)雜性V(G)。確定線性無關(guān)的路徑的基本集。生成測試用例,確?;韭窂郊忻織l路徑的執(zhí)行。7/16/202248控制流圖的圖形符號符號o 稱為控制流圖的一個結(jié)點,它表示一個或多個無分支的程序語句。程序結(jié)構(gòu)表示:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、多分支選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。如果選擇結(jié)構(gòu)的判斷中的條件表達(dá)式是復(fù)合條件時,需要改復(fù)合條件的判斷為一系列只有單個條件的嵌套的判斷。7/16/20

16、2249程序環(huán)路復(fù)雜性從程序的環(huán)路復(fù)雜性可導(dǎo)出程序基本路徑集合中的獨立路徑條數(shù),這是確保程序中每個可執(zhí)行語句至少執(zhí)行一次所必需的測試用例數(shù)目的上界。一條“獨立路徑”是指至少包含有一條在其它獨立路徑中從未有過的邊的路徑。7/16/202250計算控制流圖的環(huán)路復(fù)雜性V(G)控制流圖的區(qū)域數(shù)量。注:控制流圖中,邊和結(jié)點圈定的封閉范圍叫區(qū)域。圖形外不封閉的區(qū)域也應(yīng)記為一個區(qū)域。V(G)P+1 P為流圖中判定結(jié)點數(shù)量。V(G)E-V+2 E為流圖中邊的數(shù)量,N為流圖中節(jié)點數(shù)量。(edge, node)7/16/2022514.2.3基于控制流的方法循環(huán)測試循環(huán)是大多數(shù)軟件實現(xiàn)算法的重要部分。循環(huán)測試報

17、告你是否執(zhí)行了每個循環(huán)零次,只有一次,還是多次。循環(huán)測試注重于循環(huán)構(gòu)造的有效性。有四種循環(huán):簡單循環(huán)、串接循環(huán)、嵌套循環(huán)、不規(guī)則循環(huán)。(如圖所示)7/16/202252四種循環(huán)測試7/16/202253簡單循環(huán)的測試集整個跳過循環(huán)。只有一次通過循環(huán)。兩次通過循環(huán)。m次通過循環(huán),其中mn。n1,n,n1次通過循環(huán)。n是允許通過循環(huán)的最大次數(shù)。7/16/202254嵌套循環(huán)的測試集如果將簡單循環(huán)的測試方法用于嵌套循環(huán),測試數(shù)就會隨著嵌套層數(shù)成幾何級增加,導(dǎo)致不實際的測試數(shù)目。Beizer提出了一種減少測試數(shù)的方法:從內(nèi)層循環(huán)開始,將其他循環(huán)設(shè)置為最小值。7/16/202255嵌套循環(huán)的測試集對最內(nèi)

18、層循環(huán)使用簡單循環(huán)測試,而使外層循環(huán)的循環(huán)計數(shù)最小,并為范圍外或排除的值增加其他測試。由內(nèi)向外構(gòu)造下一個循環(huán)的測試,但其他的外層循環(huán)為最小值,并使其他的嵌套循環(huán)為典型值。繼續(xù)直到測試完所有的循環(huán)。7/16/202256串接循環(huán)測試和不規(guī)則循環(huán)可以使用嵌套循環(huán)的策略測試串接循環(huán)。對于不規(guī)則循環(huán),應(yīng)盡可能地將這類循環(huán)重新設(shè)計為結(jié)構(gòu)化的程序結(jié)構(gòu)。7/16/202257循環(huán)測試循環(huán)控制值集7/16/2022584.3白盒測試基于數(shù)據(jù)流的方法通過一定的覆蓋準(zhǔn)則檢查程序中每個數(shù)據(jù)對象的每次定義、使用和消除。數(shù)據(jù)流模型(DUK) 數(shù)據(jù)流覆蓋策略7/16/2022594.4 白盒測試代碼覆蓋率分析7/16/2

19、02260代碼覆蓋率分析的過程找出程序經(jīng)過一系列測試而沒有執(zhí)行到的部分代碼。創(chuàng)建一個附加的測試用例來增加覆蓋率。決定代碼覆蓋的定量度量。達(dá)到則停止,否則繼續(xù)執(zhí)行步驟一、二。7/16/202261代碼覆蓋率分析覆蓋率分析有一定的好處和弱點。好處:能夠識別出沒有增加覆蓋率的無效的測試用例。但,覆蓋率分析只是許多種測試技術(shù)中的一種,你不能只是依靠它。你應(yīng)該選擇一個度量方法,建立一個覆蓋率要達(dá)到的最小百分比,來決定何時可以停止覆蓋率分析了。7/16/202262代碼覆蓋率分析的基礎(chǔ)假設(shè)和控制流相關(guān)的缺陷,都可以通過變更控制流的方法來發(fā)現(xiàn)。尋找和控制流相關(guān)的缺陷,不需要知道缺陷引起的后果和缺陷發(fā)生的可能性。程序中沒有不可達(dá)到的代碼且完成了需求定義的功能。7/16/202263覆蓋率分析基本的度量基于代碼的控制流的邏輯,邏輯覆蓋:語句覆蓋(

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論