白盒測試中的六種覆蓋方法


摘要:

白盒測試作為測試人員常用的一種測試方法,越來越受到測試 工程師的重視。白盒測試并不是簡單的按照代碼設(shè)計(jì)用例,而是需要根據(jù)不同的測試需求,結(jié)合不同的測試對象,使用適合的方法進(jìn)行測試。因?yàn)閷τ诓煌瑥?fù)雜度的 代碼邏輯,可以衍生出許多種執(zhí)行路徑,只有適當(dāng)?shù)臏y試方法,才能幫助我們從代碼的迷霧森林中找到正確的方向。本文介紹六種白盒子測試方法:語句覆蓋、判定 覆蓋、條件覆蓋、判定條件覆蓋、條件組合覆蓋、路徑覆蓋。

一、白盒測試的概述

  由于邏輯錯誤和不正確假設(shè)與一條程序路徑被運(yùn)行的可能性成反比。由于我們經(jīng)常相信某邏輯路徑不可能被執(zhí)行, 而事實(shí)上,它可能在正常的情況下被執(zhí)行。由于代碼中的筆誤是隨機(jī)且無法杜絕的,因此我們要進(jìn)行白盒測試。

  白盒測試又稱結(jié)構(gòu)測試,透明盒測試、邏輯驅(qū)動測試或基于代碼的測試。白盒測試是一種測試用例設(shè)計(jì)方法,盒子指的是被測試的軟件,白盒指的是盒子是可視的,你清楚盒子內(nèi)部的東西以及里面是如何運(yùn)作的。

 白盒的測試用例需要做到:

1.保證一個模塊中的所有獨(dú)立路徑至少 被使用一次

2.對所有邏輯值均需測試 true 和 false

3.在上下邊界及可操作范圍內(nèi)運(yùn)行所有循環(huán)

4.檢查內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性

 白盒測試的目的:

通過檢查軟件內(nèi)部的邏輯結(jié)構(gòu),對軟件中的邏輯路徑進(jìn)行覆蓋測試;在程序不同地方設(shè)立檢查點(diǎn),檢查程序的狀態(tài),以確定實(shí)際運(yùn)行狀態(tài)與預(yù)期狀態(tài)是否一致。

 白盒測試的特點(diǎn):

依據(jù)軟件設(shè)計(jì)說明書進(jìn)行測試、對程序內(nèi)部細(xì)節(jié)的嚴(yán)密檢驗(yàn)、針對特定條件設(shè)計(jì)測試用例、對軟件的邏輯路徑進(jìn)行覆蓋測試。

 白盒測試的實(shí)施步驟:

1.測試計(jì)劃階段:根據(jù)需求說明書,制定測試進(jìn)度。

2.測試設(shè)計(jì)階段:依據(jù)程序設(shè)計(jì)說明書,按照一定規(guī)范化的方法進(jìn)行軟件結(jié)構(gòu)劃分和設(shè)計(jì)測試用例。

3.測試執(zhí)行階段:輸入測試用例,得到測試結(jié)果。

4.測試總結(jié)階段:對比測試的結(jié)果和代碼的預(yù)期結(jié)果,分析錯誤原因,找到并解決錯誤。

? ? 白盒測試的方法:

總體上分為靜態(tài)方法和動態(tài)方法兩大類。

1、靜態(tài)分析是一種不通過執(zhí)行程序而進(jìn)行測試的技術(shù)。靜態(tài)分析的關(guān)鍵功能是檢查軟件的表示和描述是否一致,沒有沖突或者沒有歧義。

2、動態(tài)分析的主要特點(diǎn)是當(dāng)軟件系統(tǒng)在模擬的或真實(shí)的環(huán)境中執(zhí)行之前、之中和之后 , 對軟件系統(tǒng)行為的分析。動態(tài)分析包含了程序在受控的環(huán)境下使用特定的期望結(jié)果進(jìn)行正式的運(yùn)行。它顯示了一個系統(tǒng)在檢查狀態(tài)下是正確還是不正確。在動態(tài)分析 技術(shù)中,最重要的技術(shù)是路徑和分支測試。下面要介紹的六種覆蓋測試方法屬于動態(tài)分析方法。

 白盒測試的優(yōu)缺點(diǎn)

1. 優(yōu)點(diǎn)

·迫使測試人員去仔細(xì)思考軟件的實(shí)現(xiàn)

·可以檢測代碼中的每條分支和路徑

·揭示隱藏在代碼中的錯誤

·對代碼的測試比較徹底

·最優(yōu)化

2. 缺點(diǎn)

·昂貴

·無法檢測代碼中遺漏的路徑和數(shù)據(jù)敏感性錯誤

·不驗(yàn)證規(guī)格的正確性

二、六種覆蓋方法

  1、語句覆蓋

  1)主要特點(diǎn):語句覆蓋是最起碼的結(jié)構(gòu)覆蓋要求,語句覆蓋要求設(shè)計(jì)足夠多的測試用例,使得程序中每條語句至少被執(zhí)行一次。

  2)用例設(shè)計(jì):(如果此時將A路徑上的語句1—〉T去掉,那么用例如下)

  3)優(yōu)點(diǎn):可以很直觀地從源代碼得到測試用例,無須細(xì)分每條判定表達(dá)式。

  4)缺點(diǎn):由于這種測試方法僅僅針對程序邏輯中顯式存在的語句,但對于隱藏的條件和可能到達(dá)的隱式邏輯分支,是無法測試的。在本例中去掉了語句 1—〉T去掉,那么就少了一條測試路徑。在if結(jié)構(gòu)中若源代碼沒有給出else后面的執(zhí)行分支,那么語句覆蓋測試就不會考慮這種情況。但是我們不能排除這 種以外的分支不會被執(zhí)行,而往往這種錯誤會經(jīng)常出現(xiàn)。再如,在Do-While結(jié)構(gòu)中,語句覆蓋執(zhí)行其中某一個條件分支。那么顯然,語句覆蓋對于多分支的 邏輯運(yùn)算是無法全面反映的,它只在乎運(yùn)行一次,而不考慮其他情況。

2、判定覆蓋

1)主要特點(diǎn):判定覆蓋又稱為分支覆蓋,它要求設(shè)計(jì)足夠多的測試用例,使得程序中每個判定至少有一次為真值,有一次為假值,即:程序中的每個分支至少執(zhí)行一次。每個判斷的取真、取假至少執(zhí)行一次。

2)用例設(shè)計(jì):

3)優(yōu)點(diǎn):判定覆蓋比語句覆蓋要多幾乎一倍的測試路徑,當(dāng)然也就具有比語句覆蓋更強(qiáng)的測試能力。同樣判定覆蓋也具有和語句覆蓋一樣的簡單性,無須細(xì)分每個判定就可以得到測試用例。

4)缺點(diǎn):往往大部分的判定語句是由多個邏輯條件組合而成(如,判定語句中包含AND、OR、CASE),若僅僅判斷其整個最終結(jié)果,而忽略每個條件的取值情況,必然會遺漏部分測試路徑。

3、條件覆蓋

1)主要特點(diǎn):條件覆蓋要求設(shè)計(jì)足夠多的測試用例,使得判定中的每個條件獲得各種可能的結(jié)果,即每個條件至少有一次為真值,有一次為假值。

2)用例設(shè)計(jì):

3)優(yōu)點(diǎn):顯然條件覆蓋比判定覆蓋,增加了對符合判定情況的測試,增加了測試路徑。

4)缺點(diǎn):要達(dá)到條件覆蓋,需要足夠多的測試用例,但條件覆蓋并不能保證判定覆蓋。條件覆蓋只能保證每個條件至少有一次為真,而不考慮所有的判定結(jié)果。

4、判定/條件覆蓋

1)主要特點(diǎn):設(shè)計(jì)足夠多的測試用例,使得判定中每個條件的所有可能結(jié)果至少出現(xiàn)一次,每個判定本身所有可能結(jié)果也至少出現(xiàn)一次。

2)用例設(shè)計(jì):

3)優(yōu)點(diǎn):判定/條件覆蓋滿足判定覆蓋準(zhǔn)則和條件覆蓋準(zhǔn)則,彌補(bǔ)了二者的不足。

4)缺點(diǎn):判定/條件覆蓋準(zhǔn)則的缺點(diǎn)是未考慮條件的組合情況。

5、組合覆蓋

1)主要特點(diǎn):要求設(shè)計(jì)足夠多的測試用例,使得每個判定中條件結(jié)果的所有可能組合至少出現(xiàn)一次。

2)用例設(shè)計(jì):

3)優(yōu)點(diǎn):多重條件覆蓋準(zhǔn)則滿足判定覆蓋、條件覆蓋和判定/條件覆蓋準(zhǔn)則。更改的判定/條件覆蓋要求設(shè)計(jì)足夠多的測試用例,使得判定中每個條件的所有可能結(jié)果至少出現(xiàn)一次,每個判定本身的所有可能結(jié)果也至少出現(xiàn)一次。并且每個條件都顯示能單獨(dú)影響判定結(jié)果。

4)缺點(diǎn):線性地增加了測試用例的數(shù)量。

6、路徑覆蓋

1)主要特點(diǎn):設(shè)計(jì)足夠的測試用例,覆蓋程序中所有可能的路徑。

2)用例設(shè)計(jì):


3)優(yōu)點(diǎn):這種測試方法可以對程序進(jìn)行徹底的測試,比前面五種的覆蓋面都廣。

4)缺點(diǎn):由于路徑覆蓋需要對所有可能的路徑進(jìn)行測試(包括循環(huán)、條件組合、分支選擇等),那么需要設(shè)計(jì)大量、復(fù)雜的測試用例,使得工作量呈指數(shù)級增長。而在有些情況下,一些執(zhí)行路徑是不可能被執(zhí)行的,如:

If? (!A)B++;

If? (!A)D--;

  這兩個語句實(shí)際只包括了2條執(zhí)行路徑,即A為真或假時候?qū)和D的處理,真或假不可能都存在,而路徑覆蓋測試則認(rèn)為是包含了真與假的4條執(zhí)行路徑。這樣不僅降低了測試效率,而且大量的測試結(jié)果的累積,也為排錯帶來麻煩。

總結(jié)

白盒測試是一種被廣泛使用的邏輯測試方法,是由程序內(nèi)部邏輯驅(qū)動的一種單元測試方法。只有對程序內(nèi)部十分了解才能進(jìn)行適度有效的白盒測試。但是 貫穿在程序內(nèi)部的邏輯存在著不確定性和無窮性,尤其對于大規(guī)模復(fù)雜軟件。創(chuàng)建了一個測試交流群,如果對軟件測試、接口測試、自動化測試、面試經(jīng)驗(yàn)交流感興趣可以加測試交流群:829792258,還會有同行一起技術(shù)交流??

那么正確使用白盒測試,就要先從代碼分析入手,根據(jù)不同的代碼邏輯規(guī)則、語句執(zhí)行情況,選用適合的覆蓋方法。任何一個高效的測試用例,都是針對具體測試場景的。邏輯測試不是片面的測試正確的結(jié)果或是測試錯誤的結(jié)果,而是盡可能全面地覆蓋每一個邏輯路徑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 白盒測試又稱結(jié)構(gòu)測試、透明盒測試、邏輯驅(qū)動測試或基于代碼的測試。白盒測試是一種測試用例設(shè)計(jì)方法,盒子指的是被測試的...
    開開心心_哈閱讀 9,017評論 1 3
  • 談?wù)劙缀袦y試中的幾種覆蓋方法白盒測試用例設(shè)計(jì)的一個很重要的評估標(biāo)準(zhǔn)就是對代碼的覆蓋度。一說到覆蓋,大家都感覺非常熟...
    古佛青燈度流年閱讀 5,460評論 3 3
  • 定義:白盒測試又稱結(jié)構(gòu)測試,透明盒測試、邏輯驅(qū)動測試或基于代碼的測試。白盒測試是一種測試用例設(shè)計(jì)方法,白盒指的是程...
    裁塵的人兒閱讀 837評論 0 0
  • 1.語句覆蓋。這個是起碼要做到的覆蓋了,程序里的每條可執(zhí)行的語句都要至少執(zhí)行一次。這個設(shè)計(jì)起來比較簡單,用例數(shù)據(jù)很...
    hmyixiu閱讀 5,735評論 0 3
  • 文章轉(zhuǎn)自:http://www.51testing.com/html/44/n-3713444.html 白盒測試...
    Moonsmile閱讀 10,009評論 0 4

友情鏈接更多精彩內(nèi)容