1. 程式人生 > 其它 >白盒測試方法論

白盒測試方法論

白盒測試又稱為結構測試、透明盒測試、邏輯驅動測試或基於程式碼的測試。白盒測試是一種測試用例設計方法。盒子指的是被測試的軟體,白盒指的是盒子是可視的,即清楚盒子內部的東西以及裡面是如何運作的。"白盒"法全面瞭解程式內部邏輯結構,對所有邏輯路徑進行測試。"白盒"法是窮舉路徑測試。在使用這一方案時,測試者必須檢查程式的內部結構,從檢查程式的邏輯著手,得出測試資料。

 

白盒測試通過檢查軟體內部的邏輯結構,對軟體中的邏輯路徑進行覆蓋測試。在程式不同地方設立檢查點,檢查程式的狀態,以確定實際執行狀態與預期狀態是否一致。


白盒測試的度量

根據待測產品的內部實現細節來設計測試用例。白盒測試的執行手段可以涵蓋單元測試、整合測試。一般使用程式碼覆蓋率作為白盒測試的主要度量指標。
程式碼覆蓋率常見概念

  • 語句覆蓋:每行程式碼都要覆蓋至少一次(最基礎,不能保證完整度)

  • 判定覆蓋:判定表示式的真假至少覆蓋一次

  • 判定/條件覆蓋:判定覆蓋與條件覆蓋都必須覆蓋

  • 條件組合覆蓋:判定表示式中的所有條件組合都需要覆蓋

  • 分支覆蓋:控制流中的每條邊都要被覆蓋一次

  • 路徑覆蓋:所有的路徑都要儘量覆蓋

  • 指令覆蓋:一行程式碼會被編譯為多條指令,儘可能的覆蓋所有指令

  • 方法覆蓋:每個方法至少要被覆蓋一次

  • 類覆蓋:每個類至少被覆蓋一次


覆蓋率統計的工具

  • EMMA:是一個開源、面向 Java 程式的測試覆蓋率收集和報告工具。它通過對編譯後的 Java 位元組碼檔案進行插樁,在測試執行過程中收集覆蓋率資訊,並通過支援多種報表格式對覆蓋率結果進行展示。

  • Cobertura:是一款優秀的開源測試覆蓋率統計工具,它與單元測試程式碼結合,標記並分析在測試包執行時執行了哪些程式碼和沒有執行哪些程式碼以及所經過的條件分支,來測量測試覆蓋率。除了找出未測試到的程式碼並發現 bug 外,Cobertura 還可以通過標記無用的、執行不到的程式碼來優化程式碼,最終生成一份美觀詳盡的 HTML 覆蓋率檢測報告。

  • Jacoco:是一個開源的覆蓋率工具,針對 Java 語言,是現在最流行的 Java 覆蓋率統計工具。

流程覆蓋

流程覆蓋用路徑覆蓋率表達,是利用程式碼執行流代表流程。執行時需要對流程進行裁剪獲得一個適合業務的小規模的業務子集。

流程覆蓋率 = 測試經過的路徑 / 業務子集路徑


精準化測試

精準化測試是一套計算機測試輔助分析系統。精準化測試的核心元件包含軟體測試示波器、用例和程式碼的雙向追溯、智慧迴歸測試用例選取、覆蓋率分析、缺陷定位、測試用例聚類分析、測試用例自動生成系統。這些功能完整的構成了精準化測試技術體系。

精準化測試強調程式碼呼叫鏈與黑盒測試用例之間的關聯。可以根據程式碼變更自動分析影響範圍。比如說研發修改了 1 行程式碼,功能用例有 1000 條,其實很多用例和這 1 行程式碼是沒有關係的。精準化測試可以判斷出有哪些測試用例和改動的這 1 行程式碼有關係。比如說這 1000 條用例當中,只有 20 條和修改的程式碼有關係。那麼測試的範圍可以大大縮減,測試效率就會提高。

精準化測試還有一個很有價值的作用,就是在黑盒測試過程中,藉助程式碼流程覆蓋率指導測試活動。比如在黑盒測試結束之後,觀察程式碼的覆蓋情況,發現有一些路徑沒有被覆蓋到,這個時候就需要繼續補充用例,一直到程式碼流程可以很全面的覆蓋。這是系統測試與底層白盒測試相結合的一個方法。

精準化測試還可以用線上資料推導有效的測試用例。比如測試一個系統,這個系統是有大量歷史資料的。這時就可以提取其中一段時間的資料,使用這些資料繼續測試這個系統。測試完成後統計這些測試資料中哪些資料對於測試覆蓋率的增加是有幫助的。可以使用大資料的方法,自動提取出對於測試覆蓋率有增益效果的資料。這種方法可以看出哪些測試資料覆蓋的程式碼是相同的。這些測試資料其實就屬於同一個集合,在這種集合中,只取一個測試資料就可以。利用線上資料反推有效測試用例也是精準化測試的重要作用。

由於精準化測試需要對底層白盒測試相當瞭解,對於測試人員要求比較高,所以現在實現起來有一定的難度。目前行業中還沒有開源的精準化測試的工具。現階段只能通過 Jacoco 等覆蓋率統計的工具,自己去實現精準化測試平臺。