【干貨詳解】全網(wǎng)最全白盒測試攻略大全(白盒測試都有哪些)
白盒測試(White Box Testing)又稱結(jié)構(gòu)測試、透明盒測試、邏輯驅(qū)動測試或基于代碼的測試。白盒測試只測試軟件產(chǎn)品的內(nèi)部結(jié)構(gòu)和處理過程,而不測試軟件產(chǎn)品的功能,用于糾正軟件系統(tǒng)在描述、表示和規(guī)格上的錯誤,是進一步測試的前提。
白盒測試遵循的四大原則:
保證一個模塊中所有路徑至少被測試一次;
所有邏輯值都要測試真(true)和假(false)兩種情況
檢查程序的內(nèi)部數(shù)據(jù)結(jié)構(gòu)是否有效;
檢查上、下邊界及可操作范圍內(nèi)運行所有循環(huán)
靜態(tài)白盒測試
白盒測試分靜態(tài)和動態(tài)兩種,靜態(tài)測試是指不運行程序,通過人工對程序和文檔進行分析與檢查。下面是靜態(tài)白盒測試檢查的故障模式。
- 內(nèi)存泄漏的故障(Memory Leak Fault, MLF)
- 數(shù)組越界故障的故障(Out of Bounds Array Access Fault OBAF)
- 使用未初始化變量故障(Uninitialized Variable Fault,UVF)
- 空指針使用故障(NULL Pointer Dereference Fault NPDF)
- 非法計算類故障(Illegal Computing Fault ILCF)
- 死循環(huán)結(jié)構(gòu)(Dead Loop Fault DLF)
- 資源泄漏(RLF)
- 并發(fā)故障 (Concurrency Fault)
- 安全漏洞故障
- 疑問代碼故障
簡單來說,靜態(tài)白盒測試就是看代碼找bug
動態(tài)白盒測試
白盒測試分靜態(tài)和動態(tài)兩種,動態(tài)測試是指通過運行被測程序,檢查運行結(jié)果與預(yù)期結(jié)果的差異,并分析運行效率和健壯性等性能。
動態(tài)白盒測試流程:
- 選取定義域有效值,或定義域外無效值;(等價類劃分思想)
- 已選取值決定預(yù)期的結(jié)果;
- 用選取值執(zhí)行程序;
- 執(zhí)行結(jié)果與對已選取值決定預(yù)期的結(jié)果對比,不吻合程序有錯
邏輯覆蓋測試
為了滿足白盒測試的四大原則,需要使用邏輯覆蓋測試法來設(shè)計測試用例。邏輯覆蓋測試是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)設(shè)計測試用例的方法,首先需要就行代碼的結(jié)構(gòu)分析,繪制流程圖。
代碼如圖所示:
對應(yīng)結(jié)構(gòu)圖如下:
注意:圓圈中的數(shù)字代表代碼的行數(shù)
之后進行邏輯覆蓋,由于覆蓋測試的目標不同,邏輯覆蓋又可分為:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋。
從表中的介紹可知,從上到下,該方法覆蓋的路徑越多。其他方法覆蓋的路徑不全面,那為什么不直接使用路徑覆蓋?這是由于如果程序中出現(xiàn)了多個判斷和多個循環(huán),可能的路徑數(shù)目將會急劇增長,以至實現(xiàn)路徑覆蓋不可能。
為了解決上面的問題,出現(xiàn)了基本路徑覆蓋,它在程序控制流圖的基礎(chǔ)上,通過分析程序控制流圖的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑(獨立路徑)的集合,然后據(jù)此設(shè)計測試用例。
各個覆蓋方法的優(yōu)缺點:
在實際測試中,即使對于路徑數(shù)很有限的程序已經(jīng)做到路徑覆蓋,仍然不能保證被測試程序的正確性,還需要采用其他測試方法進行補充。
數(shù)據(jù)流測試
數(shù)據(jù)流測試分析常常集中于定義/引用異常的缺陷,用于如下三方面測試。
- 變量被定義,但是從來沒有使用(引用)
- 所使用的變量沒有被定義
- 變量在使用之前被定義兩次
早期的數(shù)據(jù)流測試主要用于檢測程序編寫時出現(xiàn)的一些警告信息,如“所定義的變量未被使用等”問題,這些問題光靠簡單的語法分析器或者是語義分析器是無法檢測出來的。
程序插樁
在程序的特定部位插入記錄動態(tài)特性的語句,最終是為了把程序執(zhí)行過程中發(fā)生的一些重要的歷史事件記錄下來。例如,記錄在程序執(zhí)行過程中某些變量值的變化情況,變化的范圍等。這些插入的語句常常被稱為“探測器”或者“探測點”。
總結(jié)
- 白盒測試方法基于被測程序的源代碼開發(fā)測試用例。常見的白盒測試方法有邏輯覆蓋、數(shù)據(jù)流測試、路徑分析以及程序插裝等。
- 邏輯覆蓋以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)設(shè)計測試用例,要求對被測程序的結(jié)構(gòu)作到一定程度的覆蓋,如語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋及路徑覆蓋。路徑覆蓋是最強的邏輯覆蓋準則,實際上我們只能有選擇地測試程序中某些有代表的性路徑。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。