軟體測試技術 白盒測試

2021-06-22 17:44:33 字數 3555 閱讀 1943

白盒測試又稱為覆蓋率測試

首先介紹覆蓋率的概念

覆蓋率是用來度量測試完整性的乙個手段,大體上可以分為兩大類:點覆蓋和邊覆蓋

覆蓋率=被執行的item數/item的總數*100%

通過覆蓋率資料,可以知道測試工作做得是否充分,測試的弱點在哪些方面,進而指導人們設計能夠增強覆蓋率的測試用例

白盒測試要求測試人員對程式的邏輯結構有清楚的了解,甚至要求掌握**的細節

(1)邏輯覆蓋測試

邏輯覆蓋方法又可分為語句覆蓋,塊覆蓋,判斷覆蓋,判定-條件覆蓋,條件組合覆蓋以及路徑覆蓋

通過乙個簡單的函式為例子來分別對各個覆蓋方法做出簡要介紹

程式如下:

public int test(int a,int b,int x)

if(a==2||x>1)

return x;

}

函式流程圖如下:

通過流程圖可以得到

該函式有四條不同的路徑,分別對第乙個判定的取假分支,取真分支以及第二個判定的取假分支,去真分支命名為b,c,d,e

所以四條路徑可以表示為:

p1(a->c->e)

p2(a->b->d)

p3(a->b->e)

p4(a->c->d)

1.語句覆蓋與塊覆蓋

所謂的語句覆蓋就是設計若干測試用例,執行被測試程式,使得每乙個可執行語句至少執行一次,若干個是指測試用例越少越好

語句覆蓋率=被評價到的語句數/可執行的語句數*100%

在本例中,所有可執行的語句剛好在p1這條路徑上(注意,所有可執行的語句和所有可執行的流程並不相等,本例所有可能的流程為p1,p2,p3,p4)

所以針對p1設計測試用例

滿足語句覆蓋率可以達到100%的測試用例可以是:

test1:[(2,0,4),(2,0,3)]    覆蓋路徑ace[p1]

從度量的角度看,語句覆蓋方法設計的測試用例始終跟蹤  可執行的語句  的執**況

對**達到100%的語句覆蓋率也是現實的

然後語句覆蓋方法發現缺陷的能力很弱,不能發現程式中出現的一些邏輯錯誤,所以語句覆蓋是 最弱 的邏輯覆蓋準則

塊覆蓋是語句覆蓋的乙個變體,唯一的區別就是計算方式不同

指令塊是函式體中的一組語句,在這組語句中不存在控制語句(會引起分支的)

塊覆蓋率=被執行的塊數/總塊數*100%

2.判定覆蓋

判定覆蓋是使得程式中每個判定的取真取假分支至少被評價一次,所以又被稱為分支覆蓋

判定覆蓋率=被評價到的分支數/總分支數*100%

對於本例函式,相對於選擇路徑12和路徑34

可以滿足的測試用例各有不同

所以測試用例的取法不唯一

但是判定覆蓋也沒有辦法發現程式中的一些邏輯錯誤

判定路徑覆蓋

由於並不是所有的判定條件都是兩分支的,如switch,以及判定條件可能出現很複雜的情況

所以使用簡單的判定覆蓋極易出現漏判情形,所以就出現了變體---判定路徑覆蓋

它將每乙個判定語句序列當做一條路徑,該路徑的起始位置是乙個判定的入口(如if,switch等),終點位置是另外乙個判定的入口

3.條件覆蓋

條件覆蓋率=被評價到的條件取值的數量/條件取值的總數*100%

從公式中可以看出條件覆蓋的特點,就是取判定中條件的所有取值可能進行測試

這樣看來,條件覆蓋似乎和判定覆蓋有著共同點

可是事實上滿足了條件覆蓋的測試用例並不一定可以滿足判定覆蓋

4.條件--判定覆蓋

為了解決條件覆蓋和判定覆蓋的矛盾,就可以考慮使用條件---判定覆蓋

條件--判定覆蓋率=條件覆蓋率/判定覆蓋率=被評價到的條件取值數+被 評價到的分支數量/條件取值總數+判定分支總數

所以,根據公式卡可以知道,條件--判定覆蓋就是設計足夠的測試用例,使得函式中的每乙個判定條件的取值至少被評價一次同時所有的判定分支至少被評價一次

5.條件組合覆蓋

條件組合覆蓋率=被評價的條件組合數/總條件組合數

條件組合就是每個判定的所有可能取值的組合,如例子函式中的(1)(a>1&&b==0)(2)(a>1&&b!=0)

這就是兩個不同的條件組合,在本例函式中有8個條件組合,進行條件組合覆蓋時要先給出所有的可能的條件組合

然後根據這些條件組合設計測試用例進行測試

6.路徑覆蓋

路徑覆蓋率=被評價到的路徑數/程式中的路徑總數

7.邏輯覆蓋總結

儘管從語句覆蓋到路徑覆蓋,發現程式中的邏輯錯誤能力已經逐步加強,但是仍然不可避免的無法檢查出程式中的一些邏輯錯誤

資料表名,最容易出錯的部分是判定條件中的條件表示式

所以為了更好的解決這個問題,出現了estca和lcsaj覆蓋的概念

(2)路徑測試

1.分支結構的路徑測試

由於程式中存在中而大量的分支結構,所以要做到100%的路徑測試是比較不可能實現的

所以可是使用正交實驗設計法抽取部分路徑進行測試

當程式中的路徑重要性都一樣或者不明白程式中路徑的重要性的時候可以使用隨機均勻抽樣

反之,可使用加權的方法抽取部分路徑

具體步驟為:

1)假設分支結構中有n個判斷語句,n+1<=2的m次方   計算滿足該關係式的最小自然數m

2)設t=2的m次方   去正交表lt,並利用它設計測試資料

2.迴圈結構的路徑測試

對於簡單迴圈,測試應包括一下幾種:

0次迴圈:從迴圈入口直接跳轉到迴圈出口

1次迴圈:查詢在迴圈初始值方面的錯誤

m次迴圈:m最大次數迴圈,最大次數少一次的迴圈,最大次數多一次的迴圈

如果將簡單迴圈的測試擴大到巢狀迴圈,可能導致乙個天文數字的測試數目,所以應該使用如下的測試方法進行適當的選擇:

測試最內層迴圈,其他外層的迴圈次數置為1

逐步外推,測試該層迴圈,其他層的迴圈置為1

測試最外層的迴圈,其他內層的迴圈置為1

(使用簡單迴圈的測試方法對相應的迴圈進行測試)

3.圈複雜度與基本路徑測試

(3)資料流測試

資料流測試也可是看做是一種路徑測試,它主要關注在一條路徑上變數是在何處定義,何處使用的,通過監視變數的定義和使用異常來分析源**

第一類定義/使用異常:變數被定義,但從未被使用

第二類定義/使用異常:所使用的變數從未被定義

第三類定義/使用異常:變數在使用之前重複被定義

(4)基於覆蓋的測試用例選擇

在使用邏輯覆蓋的測試時,選擇和使用覆蓋率必須基於以下幾個原則:

1)覆蓋率不是目的,只是一種手段。

2)不可能針對所有的覆蓋率指標進行測試,反之,只進行一種覆蓋率的測試要是不可取的

3)不要追求覺得100%的覆蓋率

(5)程式插樁技術

程式插樁要成為程式插裝,其含義就是通過向北側程式源**中插入特定的**來檢視程式的狀態,尋找缺陷

如,經常需要在測試程式的時候在特定的地方插入一些列印語句

程式插樁的基本思想和步驟為:

1)插入探針(如列印語句等)

2)編譯執行並輸出探針資料(挑選測試用例)

3)處理探針執行的特殊資料

軟體測試 白盒測試

1 白盒測試的概述 由於邏輯錯誤和不正確假設與一條程式路徑被執行的可能性成反比。由於我們經常相信某邏輯路徑不可能被執行,而事實上,它可能在正常的情況下被執行。由於 中的筆誤是隨機且無法杜絕的,因此我們要進行白盒測試。白盒測試又稱結構測試,透明盒測試 邏輯驅動測試或基於 的測試。白盒測試是一種測試用例...

軟體測試 白盒測試

白盒測試分為 語句覆蓋 判定覆蓋 條件覆蓋 判定條件覆蓋 條件組合覆蓋 路徑覆蓋 以下程式為例 語句覆蓋 顧名思義 把所有語句都都走一遍 按上圖 測試路徑 p1 a c e 判定覆蓋把所有判定都走一遍 按上圖 測試路徑 答案不唯一 p1 a c e p2 a b d 條件覆蓋把所有條件都走一遍 按上...

白盒測試技術

1.白盒測試基本技術 詞法分析與語法分析 分析建立各種表 靜態錯誤分析法 資料型別和單位分析 變數引用分析 表示式分析 介面分析 程式插樁技術。2.插樁技術的一些名詞 程式插樁 program instruction 探測點 斷言 assertions 3.白盒測試方法 檢查法 靜態結構分析法 靜態...