分享軟件測試中那些常用的白盒測試方法 | 當(dāng)前位置: 首頁> 學(xué)習(xí)中心> 測試知識> 詳情 |
從是否考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的角度,測試方法可分為白盒測試、黑盒測試和灰盒測試。軟件單元測試和軟件集成測試一般采用白盒測試方法,輔助以黑盒測試方法;配置項(xiàng)測試、配置項(xiàng)集成測試和系統(tǒng)測試一般采用黑盒測試方法,輔助以白盒測試方法。今天我們介紹一下軟件測試中常用的那些白盒測試方法。
一、控制流測試
依據(jù)控制流程圖產(chǎn)生測試用例,通過對不同控制結(jié)構(gòu)成份的測試,驗(yàn)證程序的控制結(jié)構(gòu)。所謂驗(yàn)證某種控制結(jié)構(gòu),即指使這種控制結(jié)構(gòu)在程序運(yùn)行中得到執(zhí)行,也稱這一過程為覆蓋。
常用的覆蓋有語句覆蓋、分支覆蓋、條件覆蓋、條件組合覆蓋、修正的條件判定覆蓋(MC/DC)、路徑覆蓋等。
控制流測試的標(biāo)準(zhǔn)步驟為:
a) 將程序流程圖轉(zhuǎn)換成控制流圖;
b) 經(jīng)過語法分析求得路徑表達(dá)式;
c) 生成路徑樹;
d) 進(jìn)行路徑編碼;
e) 經(jīng)過譯碼得到執(zhí)行的路徑;
f) 通過路徑枚舉產(chǎn)生特定路徑的測試用例。
當(dāng)然,如果被測代碼的邏輯比較簡單,也可以適當(dāng)簡化上述步驟。
二、數(shù)據(jù)流測試
數(shù)據(jù)流測試是用控制流程圖對變量的定義和引用進(jìn)行分析,查找出未定義的變量或定義了而未使用的變量,這些變量可能是拼錯的變量、變量混淆或丟失了語句。數(shù)據(jù)流測試通過一定的覆蓋準(zhǔn)則,檢查程序中每個數(shù)據(jù)對象的每次定義、使用和消除的情況。
數(shù)據(jù)流測試方法的標(biāo)準(zhǔn)步驟為:
a) 將程序流程圖轉(zhuǎn)換成控制流圖;
b) 在每個鏈路上標(biāo)注對有關(guān)變量的數(shù)據(jù)操作的操作符號或符號序列;
c) 選定數(shù)據(jù)流測試策略;
d) 根據(jù)測試策略得到測試路徑;
e) 根據(jù)路徑可以獲得測試輸入數(shù)據(jù)和測試用例。
靜態(tài)的數(shù)據(jù)流測試一般使用測試工具自動進(jìn)行。動態(tài)數(shù)據(jù)流異常檢查在程序運(yùn)行時執(zhí)行,獲得的是對數(shù)據(jù)對象的真實(shí)操作序列,克服了靜態(tài)分析檢查的局限,但動態(tài)方式檢查是沿與測試輸入有關(guān)的一部分路徑進(jìn)行的,檢查的全面性和程序結(jié)構(gòu)覆蓋有關(guān)。
三、程序插樁
程序插樁是向被測程序中插入操作以實(shí)現(xiàn)測試目的方法。程序插樁不應(yīng)該影響被測程序的運(yùn)行過程和功能。
由于數(shù)據(jù)記錄量大,手工進(jìn)行將是一件很煩瑣的事,所以程序插樁一般會直接采用測試工具進(jìn)行。
注意,這里的程序插樁需要與通常說的單元測試時對函數(shù)的打樁區(qū)別開來,這里的程序插樁是指在保證被測程序原有邏輯完整性的基礎(chǔ)上在程序中插入一些探針(本質(zhì)上就是進(jìn)行信息采集的代碼段,可以是賦值語句或采集覆蓋信息的函數(shù)調(diào)用),通過探針的執(zhí)行并拋出程序運(yùn)行的特征數(shù)據(jù)。也就是通過程序插樁的方式來檢測被測代碼的執(zhí)行覆蓋情況。
四、接口打樁
樁,是指用來代替關(guān)聯(lián)代碼或者未實(shí)現(xiàn)代碼的代碼,也就是我們在做軟件單元測試時常說的對接口函數(shù)打樁。打樁的目的主要有:隔離、補(bǔ)齊、控制。
隔離:將測試任務(wù)之外的,并且與測試任務(wù)相關(guān)的代碼,用樁來代替,從而實(shí)現(xiàn)分離測試任務(wù)。補(bǔ)齊:用樁來代替未實(shí)現(xiàn)的代碼。控制:在測試時,人為設(shè)定相關(guān)代碼的行為,使之符合測試需求。
五、程序變異
程序變異是一種錯誤驅(qū)動測試方法。該方法針對某類特定程序錯誤,定義一系列的變異算子,將變異算子作用于程序代碼,產(chǎn)生若干符合語法的變異體,實(shí)際是將故障植入程序,用測試數(shù)據(jù)逐個測試變異體。根據(jù)變異程度的不同,可以分為強(qiáng)變異和弱變異。程序變異方法具有針對性強(qiáng)、系統(tǒng)性強(qiáng)的特點(diǎn),在對軟件進(jìn)行測試的同時,也可評價測試用例集的錯誤檢測能力。
有別于基于需求的覆蓋測試和基于結(jié)構(gòu)的覆蓋測試,變異測試則更為直接的選擇了缺陷覆蓋。因?yàn)樽儺悳y試相信如果一個測試用例集能夠發(fā)現(xiàn)人為注入的這些缺陷,也存在極大的可能會發(fā)現(xiàn)那些我們并不知道的缺陷。基于這樣的思路,在測試之前,需要對被測試的程序進(jìn)行變異,然后利用測試用例來殺死這些變異體,以獲取與注入缺陷類型相同或相近的那些隱藏缺陷。
六、域測試
域測試是要判別程序?qū)斎肟臻g的劃分是否正確。該方法限制較多,使用不方便,供有特殊要求的測試使用。
七、符號求值
符號求值是允許數(shù)值變量取“符號值”以及數(shù)值。符號求值可以檢查公式的執(zhí)行結(jié)果是否達(dá)到程序預(yù)期的目的,也可以通過程序的符號執(zhí)行,產(chǎn)生出程序的路徑,用于產(chǎn)生測試數(shù)據(jù)。
符號求值最好使用工具,在公式分支較少時手工推導(dǎo)也是可行的。
總結(jié)
以上就是軟件測試中的一些白盒測試方法,其中最常用的當(dāng)屬控制流測試、數(shù)據(jù)流測試、程序插樁和接口打樁。后三種用得比較少,僅供了解。你都學(xué)會了嗎?
更多軟件測試相關(guān)推薦:
文章來源:網(wǎng)絡(luò) 版權(quán)歸原作者所有
上文內(nèi)容不用于商業(yè)目的,如涉及知識產(chǎn)權(quán)問題,請權(quán)利人聯(lián)系博為峰小編(021-64471599-8103),我們將立即處理