程式碼覆蓋率與測試覆蓋率
1. 概述
軟體測試幫助我們確保程式碼正常運作,這使其成為開發過程的重要組成部分。在討論測試時,可能會出現程式碼覆蓋率和測試覆蓋率等術語。儘管它們都代表了一種衡量程式碼庫有效性的方法,但它們引用了不同的概念。因此,我們不應該互換使用它們。
在本教程中,我們將了解程式碼和測試覆蓋率之間的差異,並討論各自的含義。
2. 代碼覆蓋率
程式碼覆蓋率是一種衡量測試中涵蓋的原始碼部分的機制。它代表了白盒測試的一種形式,需要存取原始程式碼並考慮實作細節和程式碼的內部結構。程式碼覆蓋率主要由開發人員在單元測試中完成。
有多種方法可以衡量程式碼覆蓋率:
-
Statement/Line coverage
檢查測試期間至少執行一次的語句數。 -
Branch coverage
計算決策過程中涵蓋分支的百分比。 -
Condition/Expression coverage
確保每個條件至少被評估為真或假一次。 -
Function coverage
計算至少呼叫了一次的方法數量。
程式碼覆蓋率結果通常以百分比顯示,衡量測試覆蓋原始程式碼的比率。
此外,我們通常需要一個外部工具來測量程式碼覆蓋率。對於基於 Java 的應用程序,我們可以使用 JaCoCo 或 Cobertura 等工具。這些可以幫助我們產生詳細的報告,顯示原始程式碼的哪些部分被覆蓋,哪些部分未被覆蓋。
最常見的程式碼覆蓋率類型是語句覆蓋率,我們可以使用通用公式來計算:
Statement coverage = (Number of executed statements / Total number of statements) * 100
同樣,我們可以計算其他程式碼覆蓋率類型。
2.1.程式碼覆蓋率優勢
接下來,我們來看看程式碼覆蓋率的優勢。首先,它提供定量指標的結果。
使用程式碼覆蓋工具,我們可以識別測試未覆蓋的部分原始程式碼。
此外,我們可以更輕鬆地檢測未使用的原始程式碼,這使我們能夠刪除不必要的程式碼。
2.2.代碼覆蓋率的缺點
最後,讓我們討論一些程式碼覆蓋率的缺點。
如前所述,程式碼覆蓋率僅計算整個自動化測試中執行的原始碼量。它不能保證我們的測試有效且正確。
我們可以在實現高程式碼覆蓋率的同時編寫糟糕的測試。考慮到這一點,100% 的程式碼覆蓋率並不一定意味著我們的程式碼沒有錯誤和問題。此外,強制 100% 覆蓋率可能會導致僅僅為了增加程式碼覆蓋率而編寫無用的測試。
3. 測試覆蓋率
另一方面,測試覆蓋率是我們用來描述測試覆蓋應用程式功能的程度的指標。
測試覆蓋率的主要目標是確定應用程式的測試情況,同時考慮使用案例、需求、功能、風險、不同環境和其他因素。有了這樣的覆蓋範圍,我們就可以涵蓋所有必要的功能、業務需求和邊緣情況。
測試覆蓋率由 QA 團隊從最終用戶的角度計算。它有助於確定應用程式的哪些部分已經過測試以及哪些部分可能仍需要我們的注意。儘管它可能考慮單元測試,但它還包含其他方面,包括功能測試、整合測試和驗收測試。
此外,測試覆蓋率可以與自動測試和手動測試相關。我們可以使用 Selenium、 Playwright或Cypress等工具進行自動化測試。這些工具可以幫助我們比手動測試更輕鬆地計算測試覆蓋率。
與程式碼覆蓋率不同,測試覆蓋率的重點是確保我們已經涵蓋了應用程式的功能。
有多種方法可以定義測試覆蓋率:
-
Product coverage
檢查測試是否涵蓋整體產品功能。 -
Risk coverage
檢查測試覆蓋應用程式的易受攻擊部分(例如安全性)的程度。 -
Requirements coverage
確保測試涵蓋所有需求和用例。 -
Compatibility coverage
衡量應用程式在不同平台、瀏覽器和作業系統上的運作。 -
Boundary value coverage
檢查測試覆蓋邊緣情況的效率。
與程式碼覆蓋率不同,測試覆蓋率更定性而不是定量,這使得量化更具挑戰性。但是,如果我們想計算需求覆蓋率作為範例,我們可以使用以下公式:
Requirements coverage = (Number of covered requirements / Total number of requirements) * 100
請注意,該表達式類似於程式碼覆蓋率測量,但測試覆蓋率計算的輸入可能更難量化。
3.1.測試覆蓋率優勢
讓我們看看測試覆蓋率的一些正面方面。
首先,它確保應用程式的每個方面都經過檢查並確定仍需要測試的功能。
與程式碼覆蓋率不同,它不一定需要技術知識,特別是當我們談論手動測試時。因此,它更容易實施。
它代表一種黑盒測試方法,測試人員無法存取原始程式碼。它僅關注從給定輸入檢索的輸出。
此外,此類測試著重於整體使用者體驗。
3.2.測試覆蓋率的缺點
就像程式碼覆蓋率一樣,測試覆蓋率並不能保證應用程式運行時不會出現問題。
由於我們無法深入了解原始程式碼,因此我們無法衡量某些方面,例如程式碼庫品質。
此外,我們無法透過測試覆蓋率來檢測原始程式碼中未使用的部分。
4. 程式碼覆蓋率和測試覆蓋率的比較
總而言之,我們用一個比較表來展示程式碼和測試覆蓋率之間的差異:
程式碼覆蓋率 | 測試覆蓋率 |
---|---|
測量測試覆蓋的原始程式碼的百分比。 | 透過測試衡量覆蓋的需求數量。 |
定量測量。 | 定量或定性測量。 |
確保測試覆蓋所有原始程式碼。 | 確保測試涵蓋所有應用程式的功能。 |
由開發人員完成。 | 由品質檢查完成。 |
白盒測試方法。 | 黑盒測試方法。 |
通常在單元測試中完成。 | 通常在驗收測試中完成。 |
5. 結論
在本文中,我們了解了軟體開發中程式碼覆蓋率和測試覆蓋率之間的差異。
總而言之,程式碼和測試覆蓋率之間的混淆之所以出現,是因為它們在某種程度上重疊。然而,它們並不完全相同。程式碼覆蓋率重點在於透過自動化測試執行的程式碼量。我們通常使用在測試執行期間直接分析程式碼庫的工具來計算它。另一方面,測試覆蓋率衡量測試涵蓋應用程式功能、使用者需求和潛在風險的程度。