<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    白盒測試中的六種覆蓋方法
    ?
    http://tech.ddvip.com/2008-02/120350056542135.html
    ?
    ??? 白盒測試作為測試人員常用的一種測試方法,越來越受到測試工程師的重視。白盒測試并不是簡單的按照代碼設計用例,而是需要根據不同的測試需求,結合不同的測試對象,使用適合的方法進行測試。因為對于不同復雜度的代碼邏輯,可以衍生出許多種執行路徑,只有適當的測試方法,才能幫助我們從代碼的迷霧森林中找到正確的方向。本文介紹六種白盒子測試方法:語句覆蓋、判定覆蓋、條件覆蓋、判定條件覆蓋、條件組合覆蓋、路徑覆蓋
    ?
    白盒測試的概述
    ?
    ??? 由于邏輯錯誤和不正確假設與一條程序路徑被運行的可能性成反比。由于我們經常相信某邏輯路徑不可能被執行, 而事實上,它可能在正常的情況下被執行。由于代碼中的筆誤是隨機且無法杜絕的,因此我們要進行白盒測試。
    ?
    ??? 白盒測試又稱結構測試,透明盒測試、邏輯驅動測試或基于代碼的測試。白盒測試是一種測試用例設計方法,盒子指的是被測試的軟件,白盒指的是盒子是可視的,你清楚盒子內部的東西以及里面是如何運作的。
    ?
      白盒的測試用例需要做到:
    ?
      1、保證一個模塊中的所有獨立路徑至少被使用一次
      2、對所有邏輯值均需測試 true 和 false
      3、在上下邊界及可操作范圍內運行所有循環
      4、檢查內部數據結構以確保其有效性
    ?
      白盒測試的目的:通過檢查軟件內部的邏輯結構,對軟件中的邏輯路徑進行覆蓋測試;在程序不同地方設立檢查點,檢查程序的狀態,以確定實際運行狀態與預期狀態是否一致。
    ?
      白盒測試的特點:依據軟件設計說明書進行測試、對程序內部細節的嚴密檢驗、針對特定條件設計測試用例、對軟件的邏輯路徑進行覆蓋測試。
    ?
      白盒測試的實施步驟:
    ?
      1、測試計劃階段:根據需求說明書,制定測試進度。
      2、測試設計階段:依據程序設計說明書,按照一定規范化的方法進行軟件結構劃分和設計測試用例。
      3、測試執行階段:輸入測試用例,得到測試結果。
      4、測試總結階段:對比測試的結果和代碼的預期結果,分析錯誤原因,找到并解決錯誤。
    ?
      白盒測試的方法:總體上分為靜態方法和動態方法兩大類。
    ?
      靜態分析:是一種不通過執行程序而進行測試的技術。靜態分析的關鍵功能是檢查軟件的表示和描述是否一致,沒有沖突或者沒有歧義。
    ?
      動態分析:主要特點是當軟件系統在模擬的或真實的環境中執行之前、之中和之后,對軟件系統行為的分析。動態分析包含了程序在受控的環境下使用特定的期望結果進行正式的運行。它顯示了一個系統在檢查狀態下是正確還是不正確。在動態分析技術中,最重要的技術是路徑和分支測試。下面要介紹的六種覆蓋測試方法屬于動態分析方法。
    ?
      白盒測試的優缺點
    ?
    ??? 1、優點
    ??? ◆迫使測試人員去仔細思考軟件的實現
    ??? ◆可以檢測代碼中的每條分支和路徑
    ??? 揭示隱藏在代碼中的錯誤
    ??? ◆對代碼的測試比較徹底
    ??? ◆最優化
    ?
    ??? 2、缺點
    ??? ◆昂貴
    ??? ◆無法檢測代碼中遺漏的路徑和數據敏感性錯誤
    ??? ◆不驗證規格的正確性
    ?
      六種覆蓋方法
    ?
      首先為了下文的舉例描述方便,這里先給出一張程序流程圖。(本文以1995年軟件設計師考試的一道考試題目為例,圖中紅色字母代表程序執行路徑)

    ?
    ??? white_box_test
    ?
    ?
    ?
    ??? 1、語句覆蓋
    ?
      1) 主要特點:語句覆蓋是最起碼的結構覆蓋要求,語句覆蓋要求設計足夠多的測試用例,使得程序中每條語句至少被執行一次。
    ?
      2) 用例設計:(如果此時將A路徑上的語句1—〉T去掉,那么用例如下)
    ?????? X Y ?路徑
    ??? -- -- -- -----
    ??? 1.50 50 OBDE
    ??? 2.90 70 OBCE

    ?
      3) 優點:可以很直觀地從源代碼得到測試用例,無須細分每條判定表達式。
    ?
      4) 缺點:由于這種測試方法僅僅針對程序邏輯中顯式存在的語句,但對于隱藏的條件和可能到達的隱式邏輯分支,是無法測試的。在本例中去掉了語句1—〉T去掉,那么就少了一條測試路徑。在if結構中若源代碼沒有給出else后面的執行分支,那么語句覆蓋測試就不會考慮這種情況。但是我們不能排除這種以外的分支不會被執行,而往往這種錯誤會經常出現。再如,在Do-While結構中,語句覆蓋執行其中某一個條件分支。那么顯然,語句覆蓋對于多分支的邏輯運算是無法全面反映的,它只在乎運行一次,而不考慮其他情況。
    ?
    ??? 注:要把語句和判定條件區分清楚,語句是指每一次判定之后的處理,而<>中的是判定條件。
    ?
    ?
    ??? 2、判定覆蓋
    ?
      1) 主要特點:判定覆蓋又稱為分支覆蓋,它要求設計足夠多的測試用例,使得程序中每個判定至少有一次為真值,有一次為假值,即:程序中的每個分支至少執行一次。每個判斷的取真、取假至少執行一次。
    ?
      2) 用例設計:
    ?????? X Y ?路徑
    ??? -- -- -- -----
    ??? 1.?90?90 OAE
    ??? 2.?50?50 OBDE
    ??? 3. 90 70 OBCE

      3) 優點:判定覆蓋比語句覆蓋要多幾乎一倍的測試路徑,當然也就具有比語句覆蓋更強的測試能力。同樣判定覆蓋也具有和語句覆蓋一樣的簡單性,無須細分每個判定就可以得到測試用例。
    ?
      4) 缺點:往往大部分的判定語句是由多個邏輯條件組合而成(如,判定語句中包含AND、OR、CASE),若僅僅判斷其整個最終結果,而忽略每個條件的取值情況,必然會遺漏部分測試路徑。
    ?
    ?
      3、條件覆蓋
    ?
      1) 主要特點:條件覆蓋要求設計足夠多的測試用例,使得判定中的每個條件獲得各種可能的結果,即每個條件至少有一次為真值,有一次為假值。
    ?
      2) 用例設計:
    ?????? X Y ?路徑
    ??? -- -- -- -----
    ??? 1.?90?70 OBC
    ??? 2.?40?90 OBD

      3) 優點:顯然條件覆蓋比判定覆蓋,增加了對符合判定情況的測試,增加了測試路徑。
    ?
      4) 缺點:要達到條件覆蓋,需要足夠多的測試用例,但條件覆蓋并不能保證判定覆蓋。條件覆蓋只能保證每個條件至少有一次為真,而不考慮所有的判定結果。
    ?
    ??? 注:條件覆蓋就是針對單獨的判定語句來設計的,例如本例中的判定語句包括以下5句:x>=80|y>=80|x>=90|y>=90|x+y>=140
    ?
    ?
    ??? 4、判定/條件覆蓋
    ?
      1) 主要特點:設計足夠多的測試用例,使得判定中每個條件的所有可能結果至少出現一次,每個判定本身所有可能結果也至少出現一次。
    ?
      2) 用例設計:
    ?????? X Y ?路徑
    ??? -- -- -- -----
    ??? 1. 90 90 OAE
    ??? 2. 50 50 OBDE
    ??? 3. 90 70 OBCE
    ??? 4. 70 90 OBCE

      3) 優點:判定/條件覆蓋滿足判定覆蓋準則和條件覆蓋準則,彌補了二者的不足。
    ?
      4) 缺點:判定/條件覆蓋準則的缺點是未考慮條件的組合情況。
    ?
    ?
    ??? 5、組合覆蓋
    ?
      1) 主要特點:要求設計足夠多的測試用例,使得每個判定中條件結果的所有可能組合至少出現一次。
    ?
      2) 用例設計:
    ?????? X Y ?路徑
    ??? -- -- -- -----
    ??? 1. 90 90 OAE
    ??? 2. 90 70 OBCE
    ??? 3. 90 30 OBDE
    ??? 4. 70 90 OBCE
    ??? 5. 30 90 OBDE
    ??? 6. 70 70 OBDE
    ??? 7. 50 50 OBDE

      3) 優點:多重條件覆蓋準則滿足判定覆蓋、條件覆蓋和判定/條件覆蓋準則。更改的判定/條件覆蓋要求設計足夠多的測試用例,使得判定中每個條件的所有可能結果至少出現一次,每個判定本身的所有可能結果也至少出現一次。并且每個條件都顯示能單獨影響判定結果。
    ?
      4) 缺點:線性地增加了測試用例的數量。
    ?
    ?
    ??? 6、路徑覆蓋
    ?
      1) 主要特點:設計足夠的測試用例,覆蓋程序中所有可能的路徑。
    ?
      2) 用例設計:
    ?????? X Y ?路徑
    ??? -- -- -- -----
    ??? 1. 90 90 OAE
    ??? 2. 50 50 OBDE
    ??? 3. 90 70 OBCE
    ??? 4. 70 90 OBCE

      3) 優點:這種測試方法可以對程序進行徹底的測試,比前面五種的覆蓋面都廣。
    ?
      4) 缺點:由于路徑覆蓋需要對所有可能的路徑進行測試(包括循環、條件組合、分支選擇等),那么需要設計大量、復雜的測試用例,使得工作量呈指數級增長。而在有些情況下,一些執行路徑是不可能被執行的,如:
    ?
      If (!A)B++;
      If (!A)D--;
    ?
      這兩個語句實際只包括了2條執行路徑,即A為真或假時候對B和D的處理,真或假不可能都存在,而路徑覆蓋測試則認為是包含了真與假的4條執行路徑。這樣不僅降低了測試效率,而且大量的測試結果的累積,也為排錯帶來麻煩。
    ?
    ?
      總結
    ?
    ??? 白盒測試是一種被廣泛使用的邏輯測試方法,是由程序內部邏輯驅動的一種單元測試方法。只有對程序內部十分了解才能進行適度有效的白盒測試。但是貫穿在程序內部的邏輯存在著不確定性和無窮性,尤其對于大規模復雜軟件。因此我們不能窮舉所有的邏輯路徑,即使窮舉也未必會帶來好運(窮舉不能查出程序邏輯規則錯誤,不能查出數據相關錯誤,不能查出程序遺漏的路徑)。
    ?
    ??? 那么正確使用白盒測試,就要先從代碼分析入手,根據不同的代碼邏輯規則、語句執行情況,選用適合的覆蓋方法。任何一個高效的測試用例,都是針對具體測試場景的。邏輯測試不是片面的測試正確的結果或是測試錯誤的結果,而是盡可能全面地覆蓋每一個邏輯路徑。
    ?
    ?
    ?
    posted on 2009-05-08 23:25 decode360 閱讀(250) 評論(0)  編輯  收藏 所屬分類: 01.IT_Base
    主站蜘蛛池模板: 视频免费在线观看| 亚欧国产一级在线免费| 4虎1515hh永久免费| 国产精品亚洲аv无码播放| 人妻仑刮八A级毛片免费看| 日本人的色道www免费一区| 亚洲欧洲精品成人久久曰| 成年男女男精品免费视频网站| 亚洲大尺码专区影院| 国产精品久久久久久久久免费| 亚洲视频日韩视频| 久视频精品免费观看99| 亚洲一区无码中文字幕乱码| 四虎永久在线观看免费网站网址| 亚洲人成在线播放| 日本免费高清一本视频| 男女啪啪免费体验区| 亚洲无av在线中文字幕| 日本人成在线视频免费播放| 精品亚洲成AV人在线观看| 国产精品成人免费福利| 亚洲午夜成人精品无码色欲| 男女交性永久免费视频播放| 四虎影视久久久免费| 亚洲国产精华液网站w| 69影院毛片免费观看视频在线| 激情综合亚洲色婷婷五月APP| 精品久久久久久久免费人妻| 日本视频免费观看| 亚洲av无码精品网站| 18禁网站免费无遮挡无码中文| 亚洲久热无码av中文字幕| 亚洲人午夜射精精品日韩| 污视频在线免费观看| 亚洲乱色伦图片区小说 | 67194国产精品免费观看| 33333在线亚洲| 亚洲人成色7777在线观看不卡 | 三年片在线观看免费观看大全动漫| 亚洲色av性色在线观无码| 国产精品极品美女免费观看|