測試覆蓋率之一——測試覆蓋率分類


測試覆蓋率之一——測試覆蓋率分類
 
   關於覆蓋率,網絡上最常見的兩個詞應該是“率”(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“,這兩個用例的路徑走的分支是一樣的,但是條件覆蓋不一樣,實際上兩者的”路徑“也是不一樣的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章