軟件測試:黑盒測試、白盒測試和灰盒測試

1. 黑盒測試和白盒測試的直觀圖

  從圖中可以直接看出來,黑盒測試就當整個程序是個黑盒子,我們看不到它裏面做了些什麼事情,只能通過輸入輸出看是否能得到我們所需的來測試。而白盒測試可以當盒子是透明的,裏面的一切我們都看的清楚,從而我們可以通過去測內部結構來測試。  

2. 黑盒測試 (Black-Box Testing)

  黑盒測試又稱爲功能測試、數據驅動測試或基於規格說明書的測試,是一種從用戶觀點出發的測試。測試人員一般把被測程序當作一個黑盒子。

  黑盒測試主要測到的錯誤類型有:不正確或遺漏的功能;接口、界面錯誤;性能錯誤;數據結構或外部數據訪問錯誤;初始化或終止條件錯誤等等。

  常用的黑盒測試方法有:等價類劃分法;邊界值分析法;因果圖法;場景法;正交實驗設計法;判定表驅動分析法;錯誤推測法;功能圖分析法。

  · 等價類劃分法

    等價類分爲有效等價類和無效等價類,其中,有效等價類是指對於程序的規格說明來說是合理的,有意義的輸入數據構成的集合;而無效等價類是指對於程序的規格說明來說是不合理的,沒有意義的輸入數據構成的集合。

    確定等價類的原則是:a. 在輸入條件規定了取值範圍或值的個數的情況下,則可以確定一個有效等價類和兩個無效等價類,比如若規定的輸入範圍是1<x<10的所有數,則有效的是1~10內的任意數,而無效的是 -∞~0.9999 和10.00001~+∞; b. 在輸入條件規定了輸入值的集合或者規定了“必須如何”的條件的情況下,則可以確立一個有效等價類和一個無效等價類;c.在輸入條件是一個布爾量的情況下,可以確定一個有效的等價類和一個無效的等價類;d. 在規定了輸入數據的一組值(假定n個),並且程序要對每一個輸入值分別處理的情況下,可以確立n個有效等價類和一個無效等價類;e. 在規定了輸入數據必須遵守的規則的情況下,可以確立一個有效等價類(符合規則)和若干個無效等價類(從不同角度違反規則);f.在確知已劃分的等價類中各元素在程序處理中的方式不同的情況下,則應再將改等價類進一步的劃分爲更小的等價類。

  · 邊界值分析法

    根據經驗法則,大量的錯誤是發生在輸入或輸出範圍的邊界上的,而不是發生在輸入輸出範圍的內部。因此針對各種邊界情況涉及測試用例,可以查出更多的錯誤。而使用邊界值的分析方法涉及測試用例,首先應確定邊界情況。通常輸入和輸出等價類的邊界,應當選取正好等於,剛剛大於或者剛剛小於邊界的值作爲測試數據,而不是選取等價類中的典型值或任意值作爲測試數據。

    邊界值選擇的原則: a. 如果輸入條件規定了值的範圍,則應取剛達到這個範圍的邊界的值,以及剛剛超越這個範圍的邊界的值作爲測試輸入數據。 例如,如果程序的規格說明中規定:“重量在10公斤至50公斤範圍內的郵件,其郵費計算公式爲……”。作爲測試用例,我們應取10及50,還應取10.01,49.99,9.99及50.01等;b. 如果輸入條件規定了值的個數,則用最大個數,最小個數,比最小個數小一,和比最大個數大一的數作爲測試數據。例如,一個輸入文件應包括1~255個記錄,則測試用例可取1和255,還應取0及256等。c. 將前面兩個原則應用於輸出條件,即涉及測試用例使輸出值達到邊界值及其左右的值。d.如果程序的規格說明給出的輸入域或輸出域是有序集合,則應選取集合的第一個元素和最後一個元素作爲測試用例。e. 如果程序中使用了一個內部數據結構,則應當選擇這個內部數據結構的邊界上的值作爲測試用例數據;f. 分析規格說明,找出其他可能的邊界條件。

  · 因果圖法

    因果圖是一種利用圖解法分析輸入的各種組合情況,從而設計測試用例的方法,它適合於檢查程序輸入條件的各種組合情況。

    利用因果圖生成測試用例的基本步驟有:1. 分析軟件規格說明描述中哪些是原因(輸入,包括前提條件,操作過程),哪些是結果(輸出),並給每個原因和結果賦予一個標識符;2. 分析軟件規格說明描述的語義,找出原因和結果之間,原因和原因之間的關係,根據這些關係,畫出因果圖;3. 在因果圖上用一些記號表明約束或限制條件;4. 把因果圖轉換爲判定表;5. 把判定表的每一列拿出來作爲依據,設計測試用例。

    因果圖的基本符號和約束符號:

    

  · 場景法

    場景法一般包含基本流和備用流,從一個流程開始,通過描述經過的路徑來確定的過程,經過遍歷所有的基本流和備用流來完成整個場景。其中,基本流就是正常的,正確場景;備選流一般指中斷操作的。

  · 正交實驗設計法

    使用正交試驗設計法首先要知道正交表,正交表是研究多因素多水平的一種設計方法,它是格局正交性從全面試驗中挑選出部分有代表性的點進行試驗,這些有代表性的點具備了“均勻分散,齊整可比”的特點,正交試驗設計是一種基於正交表的、高效率、快速、經濟的試驗設計方法。正交表由三個成分構成,Runs:正交表的行數,即實驗的次數;Factors:正交表的列數,即因素數;Levels:水平數,任何單個因素能夠取得的值的最大個數。 正交表的表現形式是:  L行數 (水平數因素數)   L runs(levels^factors  )。

    用正交表設計測試用例的步驟: 1. 有哪些因素(變量); 2.每個因素有那幾個水平(變量的取值):用等價類劃分出來的;3. 選擇一個合適的正交表;4. 把變量的值映射到表中;5. 把每一行的各因素水平的組合作爲一個測試用例;6. 加上你認爲可以且沒有在表中出現的組合。

    如何選擇正交表呢?取行數最少的一個,情況分三種:1.因素數(變量)、水平數(變量值)相符;2. 因素數不相同: 取因素數最接近但略大的實際值的表;3. 水平數不相同: 有五個因素(變量)A、B、C、D和E。兩個因素有兩個水平(變量的取值)、兩個因素有三個水平,一個因素有六個水平。行數取最少的一個( 行數取最少的一個(L49(78)、 L18(3661)

  · 判定表驅動分析法

    判定表是分析和表達多邏輯條件下執行不同操作的情況的工具。判定表由以下部分構成: 1. 條件樁(Condition Stub):列出了問題的所有條件。通常認爲列出的條件的次序無關緊要; 2. 動作樁(Action Stub):列出了問題規定可能採取的操作。這些操作的排列順序沒有約束;3. 條件項(Condition Entry):列出針對它左列條件的取值在所有可能情況下的真假值; 4. 動作項(Action Entry):列出在條件項的各種取值情況下應該採取的動作。

 

  · 錯誤推測法

    錯誤推測法是基於經驗和直覺推測程序中所有可能存在的各種錯誤, 從而有針對性的設計測試用例的方法。錯誤推測方法的基本思想: 列舉出程序中所有可能有的錯誤和容易發生錯誤的特殊情況, 根據它們選擇測試用例。

    最後,對於黑盒測試的綜合策略是:首先,考慮邊界值分析法,邊界值分析法是在任何情況下都必須使用的方法,因爲經驗表明這種方法設計的測試用例發現程序錯誤的能力最強。必要時用等價類劃分方法補充一些測試用例。其次,可以用錯誤推測法再追加一些測試用例。這時,可以對照程序邏輯,檢查已設計出的測試用例的邏輯覆蓋率,如果沒有達到要求的覆蓋標準,應當再補充足夠的測試用例;如果程序的功能說明中含有輸入條件的組合情況,則一開始就可以選用因果圖法。

3. 白盒測試 (White-Box Testing)

  爲什麼要考慮白盒測試呢?舉個栗子說明,設x=0,y=5, 程序設計z=y/x, 如果只考慮輸入輸出的黑盒測試,我們看不出程序內部的邏輯錯誤(分母不能爲零),即使我們使用黑盒測試的測試用例覆蓋的再全也發現不了這個問題,這個時候就要考慮使用白盒測試了。

  而什麼是白盒測試呢?白盒測試也稱爲結構測試或邏輯驅動測試,是針對被測單元內部是如何進行工作的測試。它根據程序的控制結構設計測試用例,主要用於軟件或程序驗證。白盒測試法檢查程序內部邏輯結構,對所有的邏輯路徑進行測試,是一種窮舉路徑的測試方法,但即使每條路徑都測試過了,但仍然有可能存在錯誤。因爲:窮舉路徑測試無法檢查出程序本身是否違反了設計規範,即程序是否是一個錯誤的程序;窮舉路徑測試不可能檢查出程序因爲遺漏路徑而出錯;窮舉路徑測試發現不了一些與數據相關的錯誤。

  白盒測試需要遵循的原則有: 1. 保證一個模塊中的所有獨立路徑至少被測試一次;2. 所有邏輯值均需要測試真(true)和假(false);兩種情況;3. 檢查程序的內部數據結構,保證其結構的有效性;4. 在上下邊界及可操作範圍內運行所有循環。

  白盒測試方法有:

  · 靜態測試&動態測試

  靜態測試是不用運行程序的測試,包括代碼檢查、靜態結構分析、代碼質量度量、文檔測試等等,它可以由人工進行,充分發揮人的邏輯思維優勢,也可以藉助軟件工具(Fxcop)自動進行。動態測試則需要執行代碼,也是我們用的最多的一種測試,通過運行程序找到問題,包括功能確認與接口測試、覆蓋率分析、性能分析、內存分析等。

  · 單元測試

  · 代碼檢查

  · 同行評審

  · 技術評審

  要檢驗測試的效果,就要去看測試的覆蓋率,當覆蓋率越大,說明測試成效越好,軟件的缺陷越少。但覆蓋率不是目標(質量纔是目標)而只是一種手段。測試覆蓋率包括功能點覆蓋率和結構覆蓋率,其中,功能點覆蓋率大致用於表示軟件已經實現的功能與軟件需要實現的功能之間的比例關係;而結構覆蓋率包括語句覆蓋率、分支覆蓋率、循環覆蓋率和路徑覆蓋率等等。

  而邏輯覆蓋法中根據覆蓋目標的不同和覆蓋源程序語句的詳盡程度,邏輯覆蓋又可分爲:語句覆蓋; 判定覆蓋;條件覆蓋;判定/條件覆蓋;組合覆蓋;路徑覆蓋,且這些覆蓋程度越往後越全。

4. 灰盒測試 (Gray-Box Testing)

  灰盒測試更像是白盒測試和黑盒測試的混合測試,現階段對灰盒測試沒有更明確的定義,但更多的時候,我們的測試做的就是灰盒測試,即既會做黑盒測試又會做白盒測試。

總結:

       黑盒測試就是不看代碼測試,模擬最真實的用戶使用環境。

       白盒測試是看代碼測試,結合測試結果和代碼邏輯來測試,有時候這種方式更能發現、找出問題,尤其是一些潛伏性bug。

        灰盒測試介於白盒測試與黑盒測試之間的一種測試方法,灰盒測試多用於集成測試階段,它不僅關注輸出、輸入的正確性,同時也關注程序內部的情況。灰盒測試不像白盒那樣詳細、完整,但又比黑盒測試更關注程序的內部邏輯,常常是通過一些表徵性的現象、事件、標誌來判斷內部的運行狀態。灰盒測試看作是白盒測試和黑盒的結合體。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章