1. 程式人生 > >白盒測試的六種覆蓋方式

白盒測試的六種覆蓋方式

找了半天的資料,覺得這個比較好。

一、語句覆蓋(Statement coverage)

語句覆蓋”是一個比較弱的測試標準,它的含義是:選擇足夠的測試用例,使得程式中每個語句至少都能被執行一次。


6.4是一個被測試的程式,它的源程式是:

PROCEDUREM(VAR ABXREAL)

BEGIN

IF(A>1) AND (B=0)  THENX:=X/A

IF(A=2)OR (X>1)  THENX:=X+1;

END. 

為使程式中每個語句至少執行一次,只需設計一個能通過路徑ace的例子就可以了,例如選擇輸入資料為:

A=2B=0X=3

 就可達到“語句覆蓋”標準。

十三、白盒測試中的六種覆蓋方法案例分析

從本例可看出,語句覆蓋實際上是很弱的,如果第一個條件語句中的AND錯誤地編寫成OR,上面的測試用例是不能發現這個錯誤的;又如第三個條件語句中X1誤寫成X0這個測試用例也不能暴露它,此外,沿著路徑abd執行時,X的值應該保持不變,如果這一方面有錯誤,上述測試資料也不能發現它們。

總之,一般認為“語句覆蓋”是很不充分的一種標準。


二、判定覆蓋(Decision coverage)

比“語句覆蓋”稍強的覆蓋標準是“判定覆蓋(或稱branch coverage分支覆蓋)標準含義:執行足夠的測試用例,使得程式中的每一個分支至少都通過一次。

6.4的程式,如果設計兩個例子,使它們能通過路徑

aceabd,或者通過路徑acdabe,就可達到“判定覆蓋”標準,為此,可以選擇輸入資料為:

A=3B=0X=1(沿路徑acd執行);       A=2B=1X=3(沿路徑abe執行)

十三、白盒測試中的六種覆蓋方法案例分析

十三、白盒測試中的六種覆蓋方法案例分析

程式中含有判定的語句包括IF-THEN-ELSEDO-WHILEREPEAT-UNTIL等,除了雙值的判定語句外,還有多值的判定語句,如PASCAL中的CASE語句、FORTRAN中帶有三個分支的IF語句等。所以“判定覆蓋”更一般的含義是:使得每一個判定獲得每一種可能的結果。

“判定覆蓋”比“語句覆蓋”嚴格,因為如果每個分支都執行過了,則每個語句也就執行過了。但是,“判定覆蓋”還是很不夠的,例如上面兩個測試用例未能檢查沿著路徑

abd執行時,X的值是否保持不變。

三、條件覆蓋(Condition coverage)

一個判定中往往包含了若干個條件,例如6.4的程式中,判定(A1) AND (B=0)包含了兩個條件:A1以及B=0,所以可引進一個更強的覆蓋標準——“條件覆蓋”。“條件覆蓋”的含義是:執行足夠的測試用例,使得判定中的每個條件獲得各種可能的結果。

6.4的程式有四個條件:

A1B=0A=2X1

為了達到“條件覆蓋”標準,需要執行足夠的測試用例使得在a點有:

A1A1B=0B0

等各種結果出現,以及在b點有:

A=2A2X1X1

等各種結果出現。

現在只需設計以下兩個測試用例就可滿足這一標準:

A=2B=0X=4(沿路徑ace執行)A=1B=1X=1(沿路徑abd執行)

          十三、白盒測試中的六種覆蓋方法案例分析        十三、白盒測試中的六種覆蓋方法案例分析

“條件覆蓋”通常比“判定覆蓋”強,因為它使一個判定中的每一個條件都取到了兩個不同的結果,而判定覆蓋則不保證這一點。但如對語句IF(A AND B)THEN S設計測試用例使其滿足"條件覆蓋",即使A為真並使B為假,以及使A為假而且B為真,但是它們都未能使語句S得以執行。

四、判定/條件覆蓋(Decision/Condition coverage)

針對上面的問題引出了另一種覆蓋標準——判定/條件覆蓋”,它的含義是:執行足夠的測試用例,使得判定中每個條件取到各種可能的值,並使每個判定取到各種可能的結果。對圖6.4的程式,上一節中的兩個例子

      ①A=2B=0X=4 (沿ace路徑)                       A=1B=1X=1(沿abd路徑) 

             十三、白盒測試中的六種覆蓋方法案例分析        十三、白盒測試中的六種覆蓋方法案例分析             

是滿足這一標準的。

“判定/條件覆蓋”似乎是比較合理的,但事實並非如此,因為大多數計算機不能用一條指令對多個條件作出判定,而必須將源程式中對多個條件的判定分解成幾個簡單判定,所以較徹底的測試應使每一個簡單判定都真正取到各種可能的結果。

6.5是由編譯系統產生的6.4的目標程式。上面的兩個例子未能使目標程式中的每一個簡單判定取到各種可能的結果;它們不能使判定I為“假”也不能使判定K為“真”,其原因在於:含有ANDOR的邏輯表示式中,某些條件將抑制其他條件,例如邏輯表示式A AND B,如果A為“假”,目標程式就不再檢查條件B了,這樣B中的錯誤就發現不了。

十三、白盒測試中的六種覆蓋方法案例分析

上面的討論說明了,儘管“判定/條件覆蓋”看起來能使各種條件取到所有可能的值,但實際上並不一定能檢查到這樣的程度。

五、條件組合覆蓋(branch condition combination)

針對上述問題又提出了另一種標準——“條件組合覆蓋”。它的含義是:執行足夠的例子,使得每個判定中條件的各種可能組合都至少出現一次。顯然,滿足“條件組合覆蓋”的測試用例是一定滿足“判定覆蓋”、“條件覆蓋”和“判定/條件覆蓋”的。

再看6.4的程式,我們需要選擇適當的例子,使得下面8種條件組合都能夠出現:

1A>1, B=0        2)  A>1, B¹03)  A1, B=0  4)A1, B≠0

5)A=2, X>16)A=2,X≤17)A≠2, X>1    8)A≠2, X≤1

必須注意到5)6)7)8)四種情況是第二個IF語句的條件組合,而X的值在該語句之前是要經過計算的,所以還必須根據程式的邏輯推算出在程式的入口點X的輸入值應是什麼。
下面四個例子可以使上述8種條件組合至少出現一次:

A=2B=0X=4使1)5)兩種情況出現;A=2B=1X=1使2)6)兩種情況出現;

       十三、白盒測試中的六種覆蓋方法案例分析    十三、白盒測試中的六種覆蓋方法案例分析

A=1B=0X=2使3)7)兩種情況出現; A=1B=1X=1使4)8)兩種情況出現。
       十三、白盒測試中的六種覆蓋方法案例分析         十三、白盒測試中的六種覆蓋方法案例分析

上面四個例子雖然滿足條件組合覆蓋,但並不能覆蓋程式中的每一條路徑,例如路徑acd就沒有執行,因此,條件組合覆蓋標準仍然是不徹底。

六、路徑覆蓋(path coverage)

語句覆蓋是一種最弱的覆蓋,判定覆蓋和條件覆蓋比語句覆蓋強,滿足判定/條件覆蓋標準的測試用例一定也滿足判定覆蓋、條件覆蓋和語句覆蓋,條件組合覆蓋是除路徑覆蓋外最強的,路徑覆蓋也是一種比較強的覆蓋,但未必考慮判定條件結果的組合,並不能代替條件覆蓋和條件組合覆蓋。


相關推薦

測試覆蓋方法

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/write6/article/details/78702977  定義:    白盒測試又稱結構測試,透明盒測試、邏輯驅動測試或基於程式碼的測試。白盒測試是一種測試用例設計方法,

測試覆蓋方式

找了半天的資料,覺得這個比較好。 一、語句覆蓋(Statement coverage) “語句覆蓋”是一個比較弱的測試標準,它的含義是:選擇足夠的測試用例,使得程式中每個語句至少都能被執行一次。 圖6.4是一個被測試的程式,它的源程式是: PROCEDUREM(VA

測試中邏輯覆蓋方法

   1.語句覆蓋。這個是起碼要做到的覆蓋了,程式裡的每條可執行的語句都要至少執行一次。這個設計起來比較簡單,用例資料很直觀的就能看出來。但是語句裡的判定,分支等就沒什麼意義了。可以說這樣的測試是最低的要求了。  2.判定覆蓋。每個判斷的真假分支至少執行一次,就是真要至少取一次,假要至少取一次。這個設計起來也

測試---邏輯路徑覆蓋的五方法和物理路徑覆蓋(一)

一、語句路徑覆蓋:是一個比較弱的邏輯路徑覆蓋標準。是指通過選擇足夠的測試用例,使得執行這些用例時,被測程式的每一個語句至少被執行一次。 舉例:  測試用例  輸入 預期輸出  被測路徑

測試之邏輯覆蓋---軟考

   白盒測試也稱為結構測試,根據程式的內部結構和邏輯來設計測試用例,對程式的路徑和過程進行測試,檢查是否滿足設計的需要。    白盒測試常用的技術是邏輯覆蓋、迴圈覆蓋和基本路徑測試。    本次,小

測試:語句覆蓋、條件覆蓋、判定覆蓋、條件-判定覆蓋、組合覆蓋、路徑覆蓋

語句覆蓋:所有的“語句”都要覆蓋一遍判定覆蓋:包含語句覆蓋,每個判斷T、F各一次條件覆蓋:包含語句覆蓋,每個條件T、F各一次判定條件覆蓋:包含判定覆蓋、條件覆蓋條件組合覆蓋:每個條件的每種組合路徑覆蓋:

【軟體測試測試的條件覆蓋標準強於判定覆蓋(錯)

白盒測試的條件覆蓋標準強於判定覆蓋(錯) 條件覆蓋:每個複合判定表示式的每個簡單判定條件的取真和取假情況至少執行一次; 判定覆蓋:又稱為分支覆蓋,其含義是保證程式中每個判定節點的取真和取假分支至

測試之邏輯覆蓋

   語句覆蓋是指選擇足夠的測試用例,使得執行這些測試用例時,被測程式的每個可執行語句都至少執行一次    欲使每個語句都執行一次,只需執行路徑L1(sabcde)即可。 L1=(y=2) and (z=0) or (y>1) and (z=0) and (x>y) 測試用例如下:

測試方法--邏輯覆蓋

本文目的主要為軟考準備的複習內容。 例項程式碼: int method(bool a, bool b, bool c) { 1  int x; 2  x=0; 3  if(a && (b || c)) 4    x=1; 5  return x; } 1

軟考總計之測試中的覆蓋

      白盒測試 中的邏輯覆蓋有分為很多種,在此對其中比較有代表性的幾種覆蓋簡單總結如下: 覆蓋標準 概念 特點 語句覆蓋 選擇足夠多的測試資料,使得被測試程式中每一條

測試之語句覆蓋

定義: 語句覆蓋旨在讓程式中每個可執行語句至少被執行一次。語句覆蓋一般不會根據原始碼來設計測試用例,而是根據流程圖。 示例: 只要測試用例能讓可執行程式碼塊2和4執行到,則達到了語句覆蓋的目的,為

Junit測試條件組合覆蓋

語句 技術分享 img 覆蓋 table 白盒 最大 題目 print 題目介紹 給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時定義子段和為0,依此定義,

測試覆蓋準則

 白盒測試作為測試人員常用的一種測試方法,越來越受到測試工程師的重視。白盒測試並不是簡單的按照程式碼設計用例,而是需要根據不同的測試需求,結合不同的測試物件,使用適合的方法進行測試。因為對於不同複雜度的程式碼邏輯,可以衍生出許多種執行路徑,只有適當的測試方法,才能幫助我們從程

談談測試中的幾覆蓋方法

 談談白盒測試中的幾種覆蓋方法  白盒測試用例設計的一個很重要的評估標準就是對程式碼的覆蓋度。一說到覆蓋,大家都感覺非常熟悉,但是常見的覆蓋都有哪些?各自有什麼優缺點?在白盒測試的用例設計中我們應該如何自如地運用呢?今天小編就為大家總結了一下幾種常見的覆蓋以及各自的優缺點。  白盒測試中常見的覆蓋有六種:語句

測試(1)

常用的軟體測試方法有兩大類:靜態測試方法和動態測試方法。其中軟體的靜態測試不要求在計算機上實際執行所測程式,主要以一些人工的模擬技術對軟體進行分析和測試;而軟體的動態測試是通過輸入一組預先按照一定的測試準則構造的例項資料來動態執行程式,而達到發現程式錯誤的過程。

測試覆蓋方式

語句覆蓋(statement coverage):語句覆蓋是指程式的每一行程式碼是否都被覆蓋到;語句覆蓋是最常用的一種程式碼覆蓋率指標,也非常簡單。但是對一些控制結構的程式碼而言,它不能真正表示是否完全覆蓋到。 決策覆蓋(decision coverage):又叫分支覆蓋

測試中幾覆蓋的區別

比較常用的邏輯覆蓋測試方法有:語句覆蓋、判定覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋、路徑覆蓋。基本路徑測試:在程式控制圖的基礎上,通過分析控制構造的環行復雜性,匯出基本可執行路徑集合,從而設計測試用例的方法。設計出的測試用例要保證在測試中程式的每一個可執行語句至少執行

測試的中邏輯覆蓋的強弱

常用的軟體測試方法有兩大類:靜態測試方法和動態測試方法。其中軟體的靜態測試不要求在計算機上實際執行所測程式,主要以一些人工的模擬技術對軟體進行分析和測試;而軟體的動態測試是通過輸入一組預先按照一定的測試準則構造的例項資料來動態執行程式,而達到發現程式錯誤的過程。   白

[5]測試方法2—圖覆蓋準則

學習圖覆蓋準則需要了解一些其他基本概念。 可達:從某一個結點開始存在一條路徑可達子圖。 可達包括兩個方面:語法可達和語義可達。 語法可達:通過語法構建某種子圖結構當中,存在一條路徑可達到這個子圖。 語義可達:指在實際的程式當中存在這麼一個測試,可到到這個

整理測試中的邏輯覆蓋

舉例public class Coverage{public void Main(){1 System.out.println("start main function:path a...");2 int A,B,X;3 if(A>1 and B==0){4 X=X/