自動化會提高測試覆蓋率,那測試覆蓋率是什麼?

陈哥聊测试發表於2021-09-10

測試覆蓋率是什麼?

測試覆蓋率(test coverage)是 2018 年公佈的電腦科學技術名詞,它是測試質量的度量標準之一,告訴我們測試了多少程式碼。它定義了系統的某些實體,目的是用測試覆蓋它們。這是一種用來指示我們什麼時候進行了充分的測試,並告訴我們還需要測試什麼(從而擴大了覆蓋範圍)的方法。

如果把測試比喻為打掃房子,那些不常用的房間總會被遺漏,我們總會忘記諸如次臥衛生間這樣的區域,所以打掃的覆蓋範圍不包括就那個衛生間。

想象一下,如果我們的打掃標準只包括打掃臥室。按照這個標準,如果打掃了所有的臥室,就意味著整個房子都是乾淨的嗎?

並非如此,因為我們完全忽略了廚房、餐廳、衛生間等房子內的其他部分!因此,務必要細緻精準地度量測試覆蓋率。具有一定程度的覆蓋率是測試質量的一項指標,但它從來不是系統質量的指標,也不能保證所有內容都經過測試。測試覆蓋率告訴我們測試程式碼的百分比,但這並不意味著它在每種情況下都被測試過。

測試覆蓋率有什麼優勢?

依然是以打掃房屋為例,測試覆蓋率可以:
● 度量打掃的質量;
● 指示何時該停止打掃;
● 提醒我們還有其他地方需要清理。

某些標準可能比其他標準更強大。瞭解它們可以讓我們知道測試的深度以及何時應用某個或其他標準。例如,如果涵蓋標準 A 的任何測試用例集 TS 也涵蓋標準 B,則可以說標準 A 包括另一個標準 B。

按照上述原則,清潔房屋就可以遵循以下標準:

  1. 打掃每個臥室;
  2. 打掃房子的每一部分(包括臥室、廚房、衛生間等);
  3. 打掃每一個小地方,甚至是角落,因為它們很可能會積聚灰塵。

顯而易見,標準 3 包括 2,而 2 又包括 1,關係是傳遞的,即 3 包括 1。如果我們為標準 3 設計一個測試用例,它也應該包括前兩個標準。對於測試軟體,標準通常包括程式中的各種路徑、條件、語句、函式等。

另一個真實的例子可能是等價類劃分,先劃分若干個等價類,然後從每個部分中選取具有代表性的資料當做測試用例進行合理的分類,這樣就覆蓋了所有類。如果考慮白盒測試,又有語句覆蓋率、分支覆蓋率、路徑覆蓋率等,特別是對於狀態機,我們有指示覆蓋所有節點、所有轉換等的標準。

自動化測試如何適用?

現在就可以想象一下扔掉掃帚,換成一個超高速的掃地機器人。它可以解放雙手、更快地清理地板、減少被遺漏的區域,還可以讓自己在工作中專注於更重要的事情。

至此,我們可以得出結論:測試自動化=更高的測試覆蓋率。

相關文章