版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第3章 白盒測試 邏輯覆蓋法 插樁法3.1 邏輯覆蓋法邏輯覆蓋法是最常用的白盒測試方法,它包括以下5種方法: 語句覆蓋 判定覆蓋 條件覆蓋 判定-條件覆蓋 條件組合覆蓋3.1.1 語句覆蓋語句覆蓋(Statement Coverage)又稱行覆蓋、段覆蓋、基本塊覆蓋,它是最常見的覆蓋方式。3.1.1 語句覆蓋語句覆蓋的目的是測試程序中的代碼是否被執(zhí)行,它只測試代碼中的執(zhí)行語句,這里的執(zhí)行語句不包括頭文件、注釋、空行等。3.1.1 語句覆蓋語句覆蓋在多分支的程序中,只能覆蓋某一條路徑,使得該路徑中的每一個語句至少被執(zhí)行一次,但不會考慮各種分支組合情況。3.1.1 語句覆蓋在代碼中,AND表示邏輯
2、運算&,OR表示邏輯運算|,第12行代碼表示如果x0成立并且y2成立或者z0成立,則執(zhí)行z=z+(x+y)語句。示例代碼IF x0 AND y2 OR z0 /條件2 z=z+(x+y)3.1.1 語句覆蓋在代碼運行流程圖中,a、b、c、d、e表示程序執(zhí)行分支。在語句覆蓋測試用例中,使程序中每個可執(zhí)行語句至少被執(zhí)行一次。3.1.1 語句覆蓋設(shè)計測試用例:Test1:x=1 y=-1 z=2執(zhí)行測試用例,程序運行路徑為acd。可以看出程序中acd路徑上的每個語句都能被執(zhí)行。但是語句覆蓋對多分支的邏輯無法全面反映,僅僅執(zhí)行一次不能進(jìn)行全面覆蓋,因此,語句覆蓋是弱覆蓋方法。3.1.1 語句覆蓋語句覆
3、蓋雖然可以測試執(zhí)行語句是否被執(zhí)行到,但卻無法測試程序中存在的邏輯錯誤。例如,如果上述程序中的邏輯判斷符號“AND”誤寫了“OR”,使用測試用例Test1同樣可以覆蓋acd路徑上的全部執(zhí)行語句,但卻無法發(fā)現(xiàn)錯誤。同樣,如果將x0誤寫成x=0,使用同樣的測試用例Test1也可以執(zhí)行acd路徑上的全部執(zhí)行語句,但卻無法發(fā)現(xiàn)x=0的錯誤。3.1.1 語句覆蓋語句覆蓋無需詳細(xì)考慮每個判斷表達(dá)式,可以直觀地從源程序中有效測試執(zhí)行語句是否全部被覆蓋,由于程序在設(shè)計時,語句之間存在許多內(nèi)部邏輯關(guān)系,而語句覆蓋不能發(fā)現(xiàn)其中存在的缺陷,因此語句覆蓋并不能滿足白盒測試的測試所有邏輯語句的基本需求。3.1.2 判定覆
4、蓋判定覆蓋(Decision Coverage)又稱為分支覆蓋,其原則是設(shè)計足夠多的測試用例,在測試過程中保證每個判定至少有一次為真值,有一次為假值。3.1.2 判定覆蓋判定覆蓋的作用是使真假分支均被執(zhí)行,雖然判定覆蓋比語句覆蓋測試能力強,但仍然具有和語句覆蓋一樣的單一性。3.1.2 判定覆蓋以3.1.1節(jié)程序為例,設(shè)計判定覆蓋測試用例。測試用例xyz執(zhí)行語句路徑test12-11acdtest2-31-1abdtest33-15acetest431-1abe3.1.2 判定覆蓋上述4個測試用例覆蓋了acd、abd、ace、abe四條路徑,使得每個判定語句的取值都滿足了各有一次“真”與“假”。
5、相比于語句覆蓋,判定覆蓋的覆蓋范圍更廣泛。判定覆蓋雖然保證了每個判定至少有一次為真值,有一次為假值。3.1.2 判定覆蓋判定覆蓋并沒有考慮到程序內(nèi)部取值的情況。例如,測試用例test4,沒有將x2作為條件進(jìn)行判斷,僅僅判斷了z0的條件。此外,若將判定條件z0誤寫成z1 OR c1、c1、c0S1x2S3x0-S1x2-S3y0S4y0-S2z0取真值(即x0成立)的情況,-S1標(biāo)記x0取假值(即x0不成立)的情況。同理,使用S2、S3、S4標(biāo)記y2、z0取真值,使用-S2、-S3、-S4標(biāo)記y2、z0取假值,最后得到執(zhí)行條件判斷語句的8種狀態(tài)3.1.3 條件覆蓋設(shè)計測試用例時,要保證每種狀態(tài)都
6、至少出現(xiàn)一次。設(shè)計測試用例的原則是盡量以最少的測試用例達(dá)到最大的覆蓋率。測試用例xyz條件標(biāo)記執(zhí)行路徑Test1315S1、-S2、S3、S4abeTest2-31-1-S1、-S2、-S3、-S4abdTest33-11S1、S2、S3、-S4ace3.1.3 條件覆蓋從條件覆蓋的測試用例可知,使用3個測試用例就達(dá)到了使每個邏輯條件取真值與取假值都至少出現(xiàn)了一次,但從測試用例的執(zhí)行路徑來看,條件分支覆蓋的狀態(tài)下仍舊不能滿足判定覆蓋,即沒有覆蓋acd路徑。相比于語句覆蓋與判定覆蓋,條件覆蓋達(dá)到了邏輯條件的最大覆蓋率,但卻不能保證判定覆蓋,仍舊不能滿足白盒測試覆蓋所有分支的需求。3.1.4 判定
7、-條件覆蓋判定-條件覆蓋(Condition/Decision Coverage)要求設(shè)計足夠多的測試用例,使得判定語句中所有條件的可能取值至少出現(xiàn)一次,同時,所有判定語句的可能結(jié)果也至少出現(xiàn)一次。例如,對于判定語句if(a1 AND c1、c1、c1 AND c0、y2、z0,我們依然用S1、S2、S3、S4標(biāo)記這四個條件成立,而-S1、-S2、-S3、-S4標(biāo)記這些條件不成立。由于這四個條件每個條件都有取“真”、“假”兩個值,因此所有條件結(jié)果的組合有24=16種3.1.5 條件組合覆蓋序號組合含義1S1、S2、S3、S4x0成立,y2成立,z0成立。2-S1、S2、S3、S4x0不成立,y
8、2成立,z0成立。3S1、-S2、S3、S4x0成立,y2成立,z0成立。4S1、S2、-S3、S4x0成立,y2不成立,z0成立。5S1、S2、S3、-S4x0成立,y2成立,z0不成立。6-S1、-S2、S3、S4x0不成立,y2成立,z0成立。7-S1、S2、-S3、S4x0不成立,y2不成立,z0成立。8-S1、S2、S3、-S4x0不成立,y2成立,z0不成立。9S1、-S2、-S3、S4x0成立,y2不成立,z0成立。10S1、S2、-S3、-S4x0成立,y2不成立,z0不成立。11S1、-S2、S3、-S4x0成立,y2成立,z0不成立。12-S1、-S2、-S3、S4x0不成
9、立,y2不成立,z0成立。13-S1、-S2、S3、-S4x0不成立,y2成立,z0不成立。14S1、-S2、-S3、-S4x0成立,y2不成立,z0不成立。15-S1、S2、-S3、-S4x0不成立,y2不成立,z0不成立。16-S1、-S2、-S3、-S4x0不成立,y2不成立,z0不成立。3.1.5 條件組合覆蓋經(jīng)過分析可以發(fā)現(xiàn),第2、6、8、13這4種情況是不存在的,這幾種情況要求x0不成立,x2成立,這兩種結(jié)果相悖,因此最終圖3-1的所有條件組合情況有12種,根據(jù)這12種情況設(shè)計測試用例。3.1.5 條件組合覆蓋條件覆蓋測試用例序號組合測試用例條件1條件2覆蓋路徑xyztest1S1
10、、S2、S3、S43-1511acetest2S1、-S2、S3、S431501abetest3S1、S2、-S3、S41-1311acetest4S1、S2、S3、-S43-1111acetest5-S1、S2、-S3、S4-5-2101abetest6S1、-S2、-S3、S411101abetest7S1、S2、-S3、-S41-1110acdtest8S1、-S2、S3、-S461-201abetest9-S1、-S2、-S3、S4-11101abetest10S1、-S2、-S3、-S411-200abdtest11-S1、S2、-S3、-S4-2-1-300abdtest12-S1
11、、-S2、-S3、-S4-31-100abd3.1.5 條件組合覆蓋與判定-條件覆蓋相比,條件組合覆蓋包括了所有判定-條件覆蓋,因此它的覆蓋范圍更廣。但是當(dāng)程序中條件比較多時,條件組合的數(shù)量會呈指數(shù)型增長,組合情況非常多,要設(shè)計的測試用例也會增加,這樣反而會使測試效率降低。3.1.6 實例:三角形邏輯覆蓋問題根據(jù)三角形三邊的關(guān)系可將三角形分為4種類型:不構(gòu)成三角形、一般三角形、等腰三角形、等邊三角形。根據(jù)該原則實現(xiàn)一個判斷三角形的程序。三角形邏輯覆蓋3.1.6 實例:三角形邏輯覆蓋問題INT A B C/三角形的三邊IF(A+BC)&(A+CB)&(B+C)A) /是否滿足三角形成立條件 IF
12、(A=B)&(B=C) /等邊三角形 等邊三角形 ELSE IF(A=B)|(B=C)|(A=C) /等腰三角形 等腰三角形 ELSE/一般三角形 一般三角形ELSE 不是三角形 END3.1.6 實例:三角形邏輯覆蓋問題三角形流程圖3.1.6 實例:三角形邏輯覆蓋問題對程序進(jìn)行分析,程序的執(zhí)行路徑如右圖。圖中數(shù)字是代碼行號,當(dāng)執(zhí)行程序輸入數(shù)據(jù)時,程序根據(jù)條件判斷沿著不同的路徑執(zhí)行。3.1.6 實例:三角形邏輯覆蓋問題使用判定覆蓋,使程序中每個判定語句至少有一次“真”值,至少有一次“假”值,根據(jù)流程圖和路徑圖分析,可設(shè)計4個測試用例。編號測試用例路徑預(yù)期輸出ABCtest16661-2-3-4
13、-11等邊三角形test26681-2-5-6-11等腰三角形test33451-2-7-8-11一般三角形test43361-9-10-11不構(gòu)成三角形3.2 插樁法程序插樁就是往被測試程序中插入測試代碼以達(dá)到測試目的的方法,插入的測試代碼被稱為探針。根據(jù)測試代碼插入的時間可以將插樁法分為目標(biāo)代碼插樁和源代碼插樁。3.2.1 目標(biāo)代碼插樁法目標(biāo)代碼插樁是指向目標(biāo)代碼(二進(jìn)制代碼)插入測試代碼,獲取程序運行信息的測試方法,也稱為動態(tài)程序分析方法。3.2.1 目標(biāo)代碼插樁法1、目標(biāo)代碼插樁原理目標(biāo)代碼插樁法的原理是在程序運行平臺和底層操作系統(tǒng)之間建立中間層,通過中間層檢查執(zhí)行程序、修改指令,開發(fā)
14、人員、軟件分析工程師等對運行的程序進(jìn)行觀察,判斷程序是否被惡意攻擊或者出現(xiàn)異常行為,從而提高程序的整體質(zhì)量。3.2.1 目標(biāo)代碼插樁法2、目標(biāo)代碼插樁執(zhí)行模式 即時模式(Just-In-Time):原始的二進(jìn)制或可執(zhí)行文件沒有被修改或執(zhí)行,將修改部分的二進(jìn)制代碼生成文件副本存儲在新的內(nèi)存區(qū)域中,在測試時僅執(zhí)行修改部分的目標(biāo)代碼。3.2.1 目標(biāo)代碼插樁法 解釋模式(Interpretation Mode):在解釋模式中目標(biāo)代碼被視為數(shù)據(jù),測試人員插入的測試代碼作為目標(biāo)代碼指令的解釋語言,每當(dāng)執(zhí)行一條目標(biāo)代碼指令,程序就會在測試代碼中查找并執(zhí)行相應(yīng)的替代指令,測試通過替代指令的執(zhí)行信息就可以獲取
15、程序的運行信息。 探測模式(Probe Mode):探測模式使用新指令覆蓋舊指令進(jìn)行測試,這種模式在某些體系結(jié)構(gòu)(如x86)中比較好用。PinDynamoRIO3.2.1 目標(biāo)代碼插樁法3、目標(biāo)代碼插樁工具3.2.2 源代碼插樁法源代碼插樁是指對源文件進(jìn)行完整的詞法、語法分析后,確認(rèn)插樁的位置,植入探針代碼。相比于目標(biāo)代碼插樁,源代碼插樁具有針對性和精確性。3.2.2 源代碼插樁法源代碼碼插樁模型3.2.2 源代碼插樁法相比于目標(biāo)代碼插樁,源代碼插樁實現(xiàn)復(fù)雜程度低。源代碼插樁是源代碼級別的測試技術(shù),探針代碼程序具有較好的通用性,使用同一種編程語言編寫的程序可以使用一個探針代碼程序來完成測試。對
16、 比3.2.2 源代碼插樁法通過一個小案例來講解源代碼插樁。該案例是一個除法運算。#include #define ASSERT(y) if(y) printf(出錯文件:%sn,_FILE_); printf(在%d行:n,_LINE_); printf(提示:除數(shù)不能為0!n); /定義ASSERT(y)int main() int x,y;printf(請輸入被除數(shù):);scanf(%d,&x);printf(請輸入除數(shù):);scanf(%d,&y);ASSERT(y=0); /插入的樁(即探針代碼)printf(%d,x/y);return 0;3.2.2 源代碼插樁法插入宏函數(shù)ASS
17、ERT(y),當(dāng)除數(shù)為0時打印錯誤原因、出錯文件、出錯行數(shù)等信息提示。根據(jù)除法運算規(guī)則設(shè)計測試用例。測試用例數(shù)據(jù)輸入預(yù)期輸出結(jié)果T11,11T21,-1-1T3-1,-11T4-1,1-1T51,0錯誤T6-1,0錯誤T70,0錯誤T80,10T90,-103.2.2 源代碼插樁法程序插樁測試方法有效的提高了代碼測試覆蓋率,但是插樁測試方法會帶來代碼膨脹、執(zhí)行效率低下和HeisenBugs,在一般情況下插樁后的代碼膨脹率在20%40%,甚至膨脹率達(dá)到100%導(dǎo)致插樁測試失敗???結(jié) 小提示:HeisenBugsHeisenBugs稱為海森堡bug,它是一種軟件缺陷,這種缺陷的重現(xiàn)率很低,當(dāng)人們
18、試圖研究時bug會消失或改變行為。實際開發(fā)軟件測試中,這種缺陷也比較常見,測試人員測試到一個缺陷提交給開發(fā)人員,開發(fā)人員執(zhí)行缺陷重現(xiàn)步驟卻得不到報告的缺陷,缺陷已經(jīng)消失或者出現(xiàn)了其他缺陷。多學(xué)一招:黑盒測試與白盒測試異同1、黑盒測試和白盒測試比較黑盒測試過程中不用考慮內(nèi)部邏輯結(jié)構(gòu),僅僅需要驗證軟件外部功能是否符合用戶實際需求。黑盒測試可發(fā)現(xiàn)以下缺陷: 外部邏輯功能缺陷,如界面顯示信息錯誤等 兼容性錯誤,如系統(tǒng)版本支持、運行環(huán)境等。 性能問題,如運行速度、響應(yīng)時間等。多學(xué)一招:黑盒測試與白盒測試異同1、黑盒測試和白盒測試比較白盒測試與黑盒測試不同,白盒測試可以設(shè)計測試用例盡可能覆蓋程序中分支語句
19、,分析程序內(nèi)部結(jié)構(gòu)。白盒測試常用于以下幾種情況: 源程序中含有多個分支,在設(shè)計測試用例時要盡可能覆蓋所有分支,提高測試覆蓋率。 內(nèi)存泄漏檢查迅速,黑盒測試只能在程序長時間運行中發(fā)現(xiàn)內(nèi)存泄漏問題,而白盒測試能立即發(fā)現(xiàn)內(nèi)存泄露問題。多學(xué)一招:黑盒測試與白盒測試異同2、測試階段測試名稱測試對象測試方法單元測試模塊功能(函數(shù)、類)白盒測試集成測試接口測試(數(shù)據(jù)傳遞)黑盒測試和白盒測試系統(tǒng)測試系統(tǒng)測試(軟件、硬件)黑盒測試驗收測試系統(tǒng)測試(軟件、硬件、用戶體驗)黑盒測試#include int main() int i,mid,a3;for(i=0;i3;i+)scanf(%d,&ai);mid=a2;
20、if(a1a2) if(a0a1)mid=a1; else if(a0a1) mid=a1;else if(a0a2) mid=a0;printf(中間值是:%dn,mid);return 0;3.2.3 實例:求三個數(shù)的中間值3.2.3 實例:求三個數(shù)的中間值上述代碼是比較三個數(shù)中間值的源碼,使用探針LINE()對源程序進(jìn)行插樁,該探針監(jiān)視程序執(zhí)行過程。程序在執(zhí)行后,LINE()會將程序的執(zhí)行過程寫入到一個名為prop.txt的文件中,若沒有prop.txt文件會自動創(chuàng)建,若prop.txt文件已存在,則在每次執(zhí)行程序之后從文件開始重新寫入文件,覆蓋上一次程序?qū)懳募臄?shù)據(jù)。測試人員通過寫入的
21、文件可以查看源程序執(zhí)行的過程。3.2.3 實例:求三個數(shù)的中間值插樁后的代碼: #include #define LINE() fprintf(_POINT_,%3d,_LINE_) FILE *_POINT_; int main()if(_POINT_=fopen(test.txt,w)=NULL)fprintf(stderr,不能打開test.txt文件); int i,mid,a3;for(LINE(),i=0;i3;LINE(),i+)LINE(),scanf(%d,&ai);LINE(),mid=a2;if(LINE(),a1a2)if(LINE(),a0a1)LINE(),mid=
22、a1; else if(LINE(),a0a1)LINE(),mid=a1;else if(LINE(),a0a2LINE(),mid=a0;LINE(),printf(中間值是:%dn,mid);LINE(),fclose(_POINT_);return 0; 3.2.3 實例:求三個數(shù)的中間值設(shè)計測試用例測試用例測試數(shù)據(jù)預(yù)期輸出結(jié)果T11,1,21T21,2,32T33,2,12T43,3,33T56,4,5,5T66,8,46T78,4,983.2.3 實例:求三個數(shù)的中間值執(zhí)行測試用例之后發(fā)現(xiàn),T7結(jié)果與預(yù)期結(jié)果不一致。經(jīng)過分析prop.txt文件和代碼,發(fā)現(xiàn)程序中存在邏輯錯誤:只要輸入的數(shù)據(jù)滿足a0和a2大于a1且a0小于a3時,運行結(jié)果就會錯誤。
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025寫字樓車位租賃合同范本
- 2024新高考地理一輪復(fù)習(xí)專題四自然環(huán)境的內(nèi)在規(guī)律與環(huán)境對人類的活動的影響高頻考點42自然災(zāi)害的成因及避災(zāi)防災(zāi)新人教版
- 2024高中地理課時作業(yè)1地理環(huán)境對區(qū)域發(fā)展的影響含解析新人教版必修3
- 2025年吐魯番道路貨運駕駛員從業(yè)資格證考試
- 2025年海口貨運從業(yè)資格證考試模擬考試答案大全
- 2025年通化貨運從業(yè)資格證考試模擬考試題庫
- 2025廊坊市勞動合同范文
- 2025農(nóng)村房屋買賣合同協(xié)議模板
- 水溶性涂層膠行業(yè)深度研究報告
- 上?,F(xiàn)代化工職業(yè)學(xué)院《工程實踐II》2023-2024學(xué)年第一學(xué)期期末試卷
- 公司經(jīng)營發(fā)展規(guī)劃
- 2024譯林版七年級英語上冊單詞(帶音標(biāo))
- 2024-2025學(xué)年語文二年級上冊 部編版期末測試卷(含答案)
- 新能源汽車充電樁項目可行性研究報告模板及范文
- GB/T 44351-2024退化林修復(fù)技術(shù)規(guī)程
- FANUC機器人培訓(xùn)教程(完成版)
- 2024年意識形態(tài)工作專題會議記錄【6篇】
- 幼兒園公開課:大班語言《相反國》課件(優(yōu)化版)
- 2025年蛇年春聯(lián)帶橫批-蛇年對聯(lián)大全新春對聯(lián)集錦
- 23秋國家開放大學(xué)《液壓氣動技術(shù)》形考任務(wù)1-3參考答案
- 嶺南版六年級上冊美術(shù)18課考試復(fù)習(xí)資料
評論
0/150
提交評論