測試覆蓋率是什么?
測試覆蓋率(test coverage)是2018年公布的計算機科學(xué)技術(shù)名詞,它是測試質(zhì)量的度量標準之一,告訴我們測試了多少代碼。它定義了系統(tǒng)的某些實體,目的是用測試覆蓋它們。這是一種用來指示我們什么時候進行了充分的測試,并告訴我們還需要測試什么(從而擴大了覆蓋范圍)的方法。
如果把測試比喻為打掃房子,那些不常用的房間總會被遺漏,我們總會忘記諸如次臥衛(wèi)生間這樣的區(qū)域,所以打掃的覆蓋范圍不包括就那個衛(wèi)生間。
想象一下,如果我們的打掃標準只包括打掃臥室。按照這個標準,如果打掃了所有的臥室,就意味著整個房子都是干凈的嗎?
并非如此,因為我們完全忽略了廚房、餐廳、衛(wèi)生間等房子內(nèi)的其他部分!因此,務(wù)必要細致精準地度量測試覆蓋率。具有一定程度的覆蓋率是測試質(zhì)量的一項指標,但它從來不是系統(tǒng)質(zhì)量的指標,也不能保證所有內(nèi)容都經(jīng)過測試。測試覆蓋率告訴我們測試代碼的百分比,但這并不意味著它在每種情況下都被測試過。
測試覆蓋率有什么優(yōu)勢?
依然是以打掃房屋為例,測試覆蓋率可以:
● 度量打掃的質(zhì)量;
● 指示何時該停止打掃;
● 提醒我們還有其他地方需要清理。
某些標準可能比其他標準更強大。了解它們可以讓我們知道測試的深度以及何時應(yīng)用某個或其他標準。例如,如果涵蓋標準A的任何測試用例集TS也涵蓋標準B,則可以說標準A包括另一個標準B。
按照上述原則,清潔房屋就可以遵循以下標準:
1. 打掃每個臥室;
2. 打掃房子的每一部分(包括臥室、廚房、衛(wèi)生間等);
3. 打掃每一個小地方,甚至是角落,因為它們很可能會積聚灰塵。
顯而易見,標準3包括2,而2又包括1,關(guān)系是傳遞的,即3包括1。如果我們?yōu)闃藴?設(shè)計一個測試用例,它也應(yīng)該包括前兩個標準。對于測試軟件,標準通常包括程序中的各種路徑、條件、語句、函數(shù)等。
另一個真實的例子可能是等價類劃分,先劃分若干個等價類,然后從每個部分中選取具有代表性的數(shù)據(jù)當(dāng)做測試用例進行合理的分類,這樣就覆蓋了所有類。如果考慮白盒測試,又有語句覆蓋率、分支覆蓋率、路徑覆蓋率等,特別是對于狀態(tài)機,我們有指示覆蓋所有節(jié)點、所有轉(zhuǎn)換等的標準。
自動化測試如何適用?
現(xiàn)在就可以想象一下扔掉掃帚,換成一個超高速的掃地機器人。它可以解放雙手、更快地清理地板、減少被遺漏的區(qū)域,還可以讓自己在工作中專注于更重要的事情。
至此,我們可以得出結(jié)論:測試自動化=更高的測試覆蓋率。