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