白盒測試案例設計方法_白盒

來源:互聯網
上載者:User

一、白盒測試

    根據軟體產品的內部工作過程,在電腦上進行測試,以證實每種內部操作是否符合設計規格要求,所有內部成分是否已經過檢查。這種測試方法就是白盒測試。白盒測試把測試對象看做一個開啟的盒子,允許測試人員利用程式內部的邏輯結構及有關資訊,設計或選擇測試案例,對程式所有邏輯路徑進行測試。通過在不同點檢查程式的狀態,確定實際的狀態是否與預期的狀態一致。

  不論是黑箱測試,還是白盒測試,都不可能把所有可能的輸入資料都拿來進行所謂的窮舉測試。因為可能的測試輸入資料數目往往達到天文數字。下面讓我們看兩個例子。

  假設一個程式P有輸入X和Y及輸出Z,參看圖10-4-1。在字長為32位的電腦上運行。如果X 、Y只取整數,考慮把所有的X 、Y值都做為測試資料,按黑箱測試方法進行窮舉測試,力圖全面、無遺漏地“挖掘”出程式中的所有錯誤。這樣做可能採用的測試資料群組(Xi,Yi)的最大可能數目為: 。如果程式P測試一組X、Y資料需要 1毫秒,且一天工作24小時,一年工作365天,要完成264組測試,需要5億年。


圖 10-4-1 黑盒子

  而對一個具有多重選取和迴圈嵌套的程式,不同的路徑數目也可能是天文數字。設給出一個如圖 10-4-2所示的小程式的流程圖,其中包括了一個執行達20次的迴圈。那麼它所包含的不同執行路徑數高達 條,若要對它進行窮舉測試,覆蓋所有的路徑。假使測試程式對每一條路徑進行測試需要1毫秒,同樣假定一天工作24小時,一年工作365 天,那麼要想把如圖 10-4-2所示的小程式的所有路徑測試完,則需要3170年。


圖 10-4-2 白盒測試中的窮舉測試

  以上的分析表明,實行窮舉測試,由於工作量過大,實施起來是不現實的。任何軟體開發項目都要受到期限、費用、人力和機時等條件的限制,儘管為了充分揭露程式中所有隱藏錯誤,需要針對所有可能的資料進行測試,但事實告訴我們,這樣做是不可能的。

  軟體工程的總目標是充分利用有限的人力、物力資源,高效率、高品質、低成本地完成軟體開發項目。在測試階段既然窮舉測試不可行,為了節省時間和資源,提高測試效率,就必須要從數量極大的可用測試案例中精心地挑選少量的測試資料,使得採用這些測試資料能夠達到最佳的測試效果,能夠高效率地把隱藏的錯誤揭露出來。

二、邏輯覆蓋

  邏輯覆蓋是以程式內部的邏輯結構為基礎的設計測試案例的技術。屬白盒測試。這一方法要求測試人員對程式的邏輯結構有清楚的瞭解,甚至要能掌握來源程式的所有細節。由於覆蓋測試的目標不同,邏輯覆蓋又可分為:語句覆蓋、判定覆蓋、判定-條件覆蓋、條件組合覆蓋及路徑覆蓋。

  1.語句覆蓋

  語句覆蓋就是設計若干個測試案例,運行被測程式,使得每一可執行語句至少執行一次。這種覆蓋又稱為點覆蓋,它使得程式中每個可執行語句都得到執行,但它是最弱的邏輯覆蓋准,效果有限,必須與其他方法互動使用。

  2.判定覆蓋

  判定覆蓋就是設計若干個測試案例,運行被測程式,使得程式中每個判斷的取真分支和取假分支至少經曆一次。判定覆蓋又稱為分支覆蓋。

  判定覆蓋只比語句覆蓋稍強一些,但實際效果表明,只是判定覆蓋,還不能保證一定能查出在判斷的條件中存在的錯誤。因此,還需要更強的邏輯覆蓋準則去檢驗判斷內部條件。

  3.條件覆蓋

  條件覆蓋就是設計若干個測試案例,運行被測程式,使得程式中每個判斷的每個條件的可能取值至少執行一次。

  條件覆蓋深入到判定中的每個條件,但可能不能滿足判定覆蓋的要求。

  4.判定-條件覆蓋

  判定-條件覆蓋就是設計足夠的測試案例,使得判斷中每個條件的所有可能取值至少執行一次,同時每個判斷本身的所有可能判斷結果至少執行一次。換言之,即是要求各個判斷的所有可能的條件取值組合至少執行一次。

  判定-條件覆蓋有缺陷。從表面上來看,它測試了所有條件的取值。但是事實並非如此。往往某些條件掩蓋了另一些條件。會遺漏某些條件取值錯誤的情況。為徹底地檢查所有條件的取值,需要將判定語句中給出的複合條件運算式進行分解,形成由多個基本判定嵌套的流程圖。這樣就可以有效地檢查所有的條件是否正確了。


圖 10-4-3(a) 複合判定的例子


圖 10-4-3(b) 改為單個條件判定的嵌套結構的例子

  5.多重條件覆蓋

  多重條件覆蓋就是設計足夠的測試案例,運行被測程式,使得每個判斷的所有可能的條件取值組合至少執行一次。

  這是一種相當強的覆蓋準則,可以有效地檢查各種可能的條件取值的組合是否正確。它不但可覆蓋所有條件的可能取值的組合,還可覆蓋所有判斷的可取分支,但可能有的路徑會遺漏掉。測試還不完全。

  6.路徑測試

  路徑測試就是設計足夠的測試案例,覆蓋程式中所有可能的路徑。這是最強的覆蓋準則。但在路徑數目很大時,真正做到完全覆蓋是很困難的,必須把覆蓋路徑數目壓縮到一定限度。下面我們做一分析。

三、關於控制結構測試的一些討論

  1.分支結構的路徑數

  當程式中判定多於一個時,形成的分支結構可以分為兩類:嵌套型分支結構和連鎖型分支結構。如圖 10-4-4所示。對於嵌套型分支結構,若有n個判定語句,則需要n+1個測試案例;但對連鎖型分支結構,若有n個判定語句,則需要有 個測試案例,去覆蓋它的 條路徑。當n較大時將無法測試。


(a)嵌套型分支結構


(b)連鎖型分支結構

圖 10-4-4 分支的兩種類型

  為減少測試案例的數目,可採用實驗設計法,抽取部分路徑進行測試。由於抽樣服從均勻分布,因此,在假定各條路徑的重要性相同,或暫不明確各條路徑的重要性的情況下可以做到均勻抽樣。如果明確了各條路徑的重要性,還可以採取加權的辦法,篩選掉部分路徑,再用如下的措施進行抽樣。具體步驟如下:

  (1) 設耦合型分支結構中有n個判定,計算滿足關係式 的最小自然數m;

  (2) 設 ,取正交表L4,並利用它設計測試資料。

  例如,一個耦合型分支結構中有三個判定語句P1,P2,P3。它全部路徑是23=8條。先計算 的t,得t= 4。取正交表L4,如圖10-4-5(a)所示,把每一列當做一個判定,每一行當做可取的測試案例,則正交表L4最多可取三個判定,分別代之以P1,P2,P3。判定P1,P2,P3的取假分支和取真分支分別記作S1、S2;S3、S4;S5、S6,用各個判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的“1”,就建立起一個測試路徑矩陣,如圖 10-4-5(b)所示。這樣,測試路徑數目從 條減少到3+1=4條。


圖 10-4-5(a) 正交表L4


圖 10-4-5(b) 路徑抽樣矩陣

  2.條件測試的策略

  程式中的條件分為簡單條件和複合條件。簡單條件是一個布爾變數或一個關聯運算式(可加首碼NOT),複合條件由簡單條件通過邏輯運算子(AND、OR、NOT)和括弧串連而成。如果條件出錯,至少是條件中某一成分有錯。條件中可能的出錯類型有:布林運算子錯、布爾變數錯、布爾括弧錯、關係運算子錯、算術運算式錯。

  如果在一個判定的複合條件運算式中每個布爾變數和關係運算子最多隻出現一次,而且沒有公開變數,應用一種稱之為BRO(分支與關係運算子)的測試法可以發現多個布林運算子或關係運算子錯,以及其他錯誤。

  BRO策略引入條件約束的概念。設有n個簡單條件的複合條件C,其條件約束為,其中 是條件C中第i個簡單條件的輸出約束。如果在C的執行過程中,其每個簡單條件的輸出都滿足D中對應的約束,則稱條件C的條件約束D由C的執行所覆蓋。特別地,布爾變數或布林運算式的輸出約束必須是真(t)或假(f);關聯運算式的輸出約束為符號>、=、<。

  (1) 設條件為 。其中 是布爾變數, 的輸出約束為 ,在此, 和 或為t或為f。則是 可能的一個約束。覆蓋此約束的測試(一次運行)將令 為t, 為f。BRO策略要求對 的可能約束集合 中的每一個,分別設計一組測試案例。如果布林運算子有錯,這三組測試案例的運行結果必有一組導致 失敗。

  (2) 設條件為 。其中 是布林運算式, 和 是算術運算式, 的輸出約束為 ,在此, 或為t或為f; 則是<、= 或>。因此,只有 與 中 的不同,可以修改 的約束集合,匯出 的約束集合。因為在 中,“t”相當於“=”,“f”相當於“<”或“>”,則 的約束集合為 。據此設計4組測試案例,檢查 中可能的布爾或關係運算子中的錯誤。

  (3) 設條件為 。其中 都是算術運算式, 的輸出約束為 ,在此, 和 的約束均為<、=、>。 中只有 與 中的 不同,可以修改 的約束集合 ,匯出 的約束集合。因為在 中,“t” 相當於“>”,"f"相當於“<”或“=”,則 的約束集合為 。根據這個約束集合設計測試案例,就能夠檢測 中的關係運算子中的錯誤。

  3.迴圈測試

  迴圈分為4種不同類型:簡單迴圈、連鎖迴圈、嵌套迴圈和非結構迴圈,見圖 10-4-6。


圖 10-4-6 迴圈的分類

  對於簡單迴圈,測試應包括以下幾種,其中的n表示迴圈允許的最大次數。

  (1) 零次迴圈:從迴圈入口直接跳到迴圈出口。

  (2) 一次迴圈:尋找迴圈初始值方面的錯誤。

  (3) 二次迴圈:檢查在多次迴圈時才能暴露的錯誤。

  (4) m次迴圈:此時的m<n,也是檢查在多次迴圈時才能暴露的錯誤。

  ·最大次數迴圈、比最大次數多一次的迴圈、比最大次數少一次的迴圈。

  對於嵌套迴圈,不能將簡單迴圈的測試方法簡單地擴大到嵌套迴圈,因為可能的測試數目將隨嵌套層次的增加呈幾何倍數增長。這可能導致一個天文數位測試數目。下面給出一種有助於減少測試數目的測試方法。

  ·除最內層迴圈外,從最內層迴圈開始,置所有其他層的迴圈為最小值;

  ·對最內層迴圈做簡單迴圈的全部測試。測試時保持所有外層迴圈的迴圈變數為最小值。另外,對越界值和非法值做類似的測試。

  ·逐步外推,對其外面一層迴圈進行測試。測試時保持所有外層迴圈的迴圈變數取最小值,所有其它嵌套內層迴圈的迴圈變數取“典型”值。

  ·反覆進行,直到所有各層迴圈測試完畢。

  ·對全部各層迴圈同時取最小迴圈次數,或者同時取最大迴圈次數。對於後一種測試,由於測試量太大,需人為指定最大迴圈次數。

  對於連鎖迴圈,要區別兩種情況。如果各個迴圈互相獨立,則連鎖迴圈可以用與簡單迴圈相同的方法進行測試。例如,有兩個迴圈處於連鎖狀態,則前一個迴圈的迴圈變數的值就可以做為後一個迴圈的初值。但如果幾個迴圈不是互相獨立的,則需要使用測試嵌套迴圈的辦法來處理。

  對於非結構迴圈,應該使用結構化程式設計方法重新設計測試案例。

四、基本路徑測試

  如果把覆蓋的路徑數壓縮到一定限度內,例如,程式中的迴圈體只執行零次和一次,就成為基本路徑測試。它是在程式控制流程圖的基礎上,通過分析控制構造的環路複雜性,匯出基本可執行路徑集合,從而設計測試案例的方法。

  設計出的測試案例要保證在測試中,程式的每一個可執行語句至少要執行一次。

  1.程式的控制流程圖

  控制流程圖是描述程式控制流程的一種圖示方法。基本控制構造的圖形符號如圖10-4-7所示。符號○稱為控制流程圖的一個結點,一組順序處理框可以映射為一個單一的結點。控制流程圖中的箭頭稱為邊,它表示了控制流程的方向,在選擇或多分支結構中分支的匯聚處,即使沒有執行語句也應該有一個匯聚結點。邊和結點圈定的地區叫做地區,當對地區計數時,圖形外的地區也應記為一個地區。


圖 10-4-7 控制流程圖的各種圖形符號

  如果判定中的條件運算式是複合條件時,即條件運算式是由一個或多個邏輯運算子(OR,AND,NAND,NOR)串連的邏輯運算式,則需要改複合條件的判定為一系列只有單個條件的嵌套的判定。例如對應圖 10-4-8(a)的複合條件的判定,應該畫成如圖 10-4-8(b)所示的控制流程圖。條件陳述式ifaORb中條件a和條件b各有一個只有單個條件的判定結點。


圖 10-4-8 複合邏輯下的控制流程圖

  2.計算程式環路複雜性

  進行程式的基本路徑測試時,程式的環路複雜性給出了程式基本路徑集合中的獨立路徑條數,這是確保程式中每個可執行語句至少執行一次所必需的測試案例數目的上界。

  所謂獨立路徑,是指包括一組以前沒有處理的語句或條件的一條路徑。如在圖10-4-9(b)所示的控制流程圖中,一組獨立的路徑是

  path1:1-11

  path2:1-2-3-4-5-10-1-11

  path3:1-2-3-6-8-9-10-1-11

  path4:1-2-3-6-7-9-10-1-11

  路徑path1,path2,path3,path4組成了圖 10-4-9(b)所示控制流程圖的一個基本路徑集。只要設計出的測試案例能夠確保這些基本路徑的執行,就可以使得程式中的每個可執行語句至少執行一次,每個條件的取真和取假分支也能得到測試。基本路徑集不是唯一的,對於給定的控制流程圖,可以得到不同的基本路徑集。


(a)程式流程圖


(b)控制流程圖

圖 10-4-9 程式流程圖與對應的控制流程圖

  通常環路複雜性可用以下3種方法求得。

  (1) 將環路複雜性定義為控制流程圖中的地區數。

  (2) 設E為控制流程圖的邊數,N為圖的結點數,則定義環路複雜性為V(G)=E-N+2。

  (3) 若設P為控制流程圖中的判定結點數,則有V(G)=P+1。

  因為圖 10-4-9(b)所示控制流程圖有4個地區。其環路複雜性為4。它是構成基本路徑集的獨立路徑數的上界。可以據此得到應該設計的測試案例的數目。

  3.匯出測試案例   利用邏輯覆蓋方法產生測試案例,確保基本路徑集中每條路徑的執行。

Word版本下載地址/Files/Jackc/白盒測試案例設計方法.doc


from: http://www.cnblogs.com/Jackc/archive/2009/09/16/1567203.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.