軟件測試覆蓋率之一——測試覆蓋率分類 軟件測試工具
關于覆蓋率,網絡上最常見的兩個詞應該是“測試覆蓋率”(Test Coverage)和”代碼覆蓋率“(Code Coverage)。今天就來探探這兩個東西。
在測試里面,一般會將測試覆蓋率分為兩個部分,即”需求覆蓋率“和”代碼覆蓋率“?梢钥吹,代碼覆蓋率其實是測試覆蓋率的一部分而已。其中,最常討論和關心的是”代碼覆蓋率“,代碼覆蓋率又分為程序語句和代碼行覆蓋,分支覆蓋和條件覆蓋。對于這些概念,我們逐個解釋。
需求覆蓋率:如果需求已經定義好,這個時侯我們就需要考慮需求覆蓋率了。這個時候需要注意的是,這里的需求不僅僅是指功能需求,還要包括性能需求。衡量需求覆蓋率的最直觀的方式是我們有多少功能點,我們有多少性能點要求,這些將作為分母;我們寫了多少測試用例,覆蓋了多少模塊,多少功能點,我們的性能測試用例考慮了待測程序多少性能點,這些作為分子。
代碼覆蓋率:為了更加全面的覆蓋,我們可能還需要測試程序的流程,我們可能會考慮到一個函數的數據的輸入與輸出,甚至是每一行代碼的執行情況,代碼的每一條邏輯和分支,這個時候我們的測試執行情況就以代碼覆蓋率來衡量,這也是我們常在單元測試中念叨的覆蓋率覆蓋率的問題。
語句覆蓋率:換個名字叫做代碼行覆蓋率,這就是監視每行代碼是否在用例(當然之所有的)中是否被執行到,準確點說是我們的用例里面大概執行了百分之多少的語句/代碼行數。需要注意的是,即使所有的語句都被執行到,也不一定執行到了所有的路徑。比如有五條語句:ABCDE,如果我們執行了用例覆蓋了ABCDE,另外一個用例這個時候我們覆蓋了所有語句,但是可能還存在一個路徑(如ABC)沒有執行,例如:
public verifyToken(string yourname, string yourtitle)
{
A output(”Hello, my dear friends“);
B if(yourname == "uniquestudiowcd")
{
C output("Hello, Aaron");
}
D if(yourtitle == "tester")
{
E output("Hello, my dear tester");
}
}
這個時候我們輸入參數”uniquestudiowcd“和”tester“覆蓋到了所有的語句,但是我們漏掉了一個路徑:即輸入參數”uniquestudiowcd“和”coder“。
分支覆蓋率:我們也給它換個名字即”路徑覆蓋率“,盡管并不完全對。在上面的例子中,如果我們僅考慮了第一個用例(即輸入參數”uniquestudiowcd“和”tester“),我們的語句覆蓋率為100%,帶式路徑覆蓋率可就低了,因為它存在ABD,ABCD,ABCDE,ABDE等等很多路徑。 軟件測試
條件覆蓋率:這也就是為什么不能說”分支覆蓋“不同于”路徑覆蓋“的原因所在。如果我們在一個IF語句中加入了判斷組合,那就要考慮更多的問題了,因為主要出現在條件語句中,所以我們稱之為”條件覆蓋“。我們更改上述示例代碼:
public verifyToken(string yourname, string yourtitle,string gendar)
{
A output(”Hello, my dear friends“);
B if(yourname == "uniquestudiowcd" && gendar == ”man“)
{
C output("Hello, Aaron");
}
D if(yourtitle == "tester")
{
E output("Hello, my dear tester");
}
}
很明顯即使我們輸入參數”uniquestudiowcd“”tester“,”woman“和”uniquestudiowcd“”tester“”man“,這兩個用例的路徑走的分支是一樣的,但是條件覆蓋不一樣,實際上兩者的”路徑“也是不一樣的。
上面主要介紹的測試覆蓋率的一些基本知識,在關于測試覆蓋率的第二篇文章中,我將介紹歸納一下測試覆蓋率的用處,或者說測試覆蓋率的意義。
文章來源于領測軟件測試網 http://www.kjueaiud.com/