程式碼覆蓋率與測試覆蓋率比較

banq發表於2024-04-16

軟體測試幫助我們確保程式碼正常工作,這使其成為開發過程的重要組成部分。在討論測試時,可能會出現程式碼覆蓋率和測試覆蓋率等術語。儘管它們都代表了一種衡量程式碼庫有效性的方法,但它們引用了不同的概念。因此,我們不應該互換使用它們。

在本教程中,我們將瞭解程式碼和測試覆蓋率之間的差異,並討論各自的含義。

程式碼覆蓋率
程式碼覆蓋率是一種衡量測試中覆蓋的原始碼部分的機制。它代表了白盒測試的一種形式,需要訪問原始碼並考慮實現細節和程式碼的內部結構。程式碼覆蓋率主要由開發人員在單元測試中完成。

有多種方法可以衡量程式碼覆蓋率:

  • 語句/行覆蓋率檢查測試期間至少執行一次的語句數。
  • 分支覆蓋率計算決策過程中覆蓋分支的百分比。
  • 條件/表示式覆蓋確保每個條件至少被評估為真或假一次。
  • 函式覆蓋率計算至少呼叫了一次的方法數​​量。

程式碼覆蓋率結果通常以百分比顯示,衡量測試覆蓋原始碼的比率。

此外,我們通常需要一個外部工具來測量程式碼覆蓋率。對於基於 Java 的應用程式,我們可以使用JaCoCo或Cobertura等工具。這些可以幫助我們生成詳細的報告,顯示原始碼的哪些部分被覆蓋,哪些部分未被覆蓋。

最常見的程式碼覆蓋率型別是語句覆蓋率,我們可以使用通用公式來計算:

Statement coverage = (Number of executed statements / Total number of statements) * 100
同樣,我們可以計算其他程式碼覆蓋率型別。

1.程式碼覆蓋率優勢
接下來,我們來看看程式碼覆蓋率方面的優勢。首先,它提供定量指標的結果。

  • 使用程式碼覆蓋工具,我們可以識別測試未覆蓋的部分原始碼。
  • 此外,我們可以更容易地檢測未使用的原始碼,這使我們能夠刪除不必要的程式碼。

2.程式碼覆蓋率的缺點
最後,讓我們討論一些程式碼覆蓋率的缺點。

  • 如前所述,程式碼覆蓋率僅計算整個自動化測試中執行的原始碼量。它不能保證我們的測試有效且正確。
  • 我們可以在實現高程式碼覆蓋率的同時編寫糟糕的測試。考慮到這一點,100% 的程式碼覆蓋率並不一定意味著我們的程式碼沒有錯誤和問題。
  • 此外,強制 100% 覆蓋率可能會導致僅僅為了增加程式碼覆蓋率而編寫無用的測試。

測試覆蓋率
另一方面,測試覆蓋率是我們用來描述測試覆蓋應用程式功能的程度的指標。

測試覆蓋率的主要目標是確定應用程式的測試情況,同時考慮用例、需求、功能、風險、不同環境和其他因素。有了這樣的覆蓋範圍,我們就可以覆蓋所有必要的功能、業務需求和邊緣情況。

測試覆蓋率由 QA 團隊從終端使用者的角度計算。它有助於確定應用程式的哪些部分已經過測試以及哪些部分可能仍需要我們的注意。儘管它可能考慮單元測試,但它還包含其他方面,包括功能測試、整合測試和驗收測試。

此外,測試覆蓋率可以與自動測試和手動測試相關。我們可以使用Selenium、Playwright或Cypress等工具進行自動化測試。這些工具可以幫助我們比手動測試更輕鬆地計算測試覆蓋率。

與程式碼覆蓋率不同,測試覆蓋率的重點是確保我們已經覆蓋了應用程式的功能。

有多種方法可以定義測試覆蓋率:

  • 產品覆蓋率檢查測試是否涵蓋整體產品功能。
  • 風險覆蓋率檢查測試覆蓋應用程式的易受攻擊部分(例如安全性)的程度。
  • 需求覆蓋率確保測試涵蓋所有需求和用例。
  • 相容性覆蓋率衡量應用程式在不同平臺、瀏覽器和作業系統上的執行情況。
  • 邊界值覆蓋檢查測試覆蓋邊緣情況的效率。

與程式碼覆蓋率不同,測試覆蓋率更定性而不是定量,這使得量化更具挑戰性。但是,如果我們想計算需求覆蓋率作為示例,我們可以使用以下公式:

Requirements coverage = (Number of covered requirements / Total number of requirements) * 100

請注意,該表示式類似於程式碼覆蓋率測量,但測試覆蓋率計算的輸入可能更難量化。

1.測試覆蓋率優勢
讓我們看看測試覆蓋率的一些積極方面。

  • 首先,它確保應用程式的每個方面都經過檢查並確定仍需要測試的功能。
  • 與程式碼覆蓋率不同,它不一定需要技術知識,特別是當我們談論手動測試時。因此,它更容易實施。
  • 它代表一種黑盒測試方法,測試人員無法訪問原始碼。它僅關注從給定輸入檢索的輸出。
  • 此外,此類測試側重於整體使用者體驗。

2.測試覆蓋率的缺點
就像程式碼覆蓋率一樣,測試覆蓋率並不能保證應用程式執行時不會出現問題。

  • 由於我們無法深入瞭解原始碼,因此我們無法衡量某些方面,例如程式碼庫質量。
  • 此外,我們無法透過測試覆蓋率檢測原始碼中未使用的部分。

程式碼覆蓋率和測試覆蓋率的比較
總而言之,我們用一個比較表來展示程式碼和測試覆蓋率之間的差異:

覆蓋:

  • 程式碼覆蓋率:測量測試覆蓋的原始碼的百分比。  
  •  測試覆蓋率: 透過測試衡量覆蓋的需求數量。

定量:

  • 程式碼覆蓋率:定量測量。  
  •  測試覆蓋率: 定量或定性測量。

完整:

  • 程式碼覆蓋率:確保測試覆蓋所有原始碼。    
  •  測試覆蓋率:確保測試涵蓋所有應用程式的功能。

角色:

  • 程式碼覆蓋率:由開發人員完成。    
  •  測試覆蓋率:由質量檢查完成。

方法:

  • 程式碼覆蓋率:白盒測試方法。    
  •  測試覆蓋率:黑盒測試方法。

測試:

  • 程式碼覆蓋率:通常在單元測試中完成。    
  •  測試覆蓋率:通常在驗收測試中完成。

相關文章