更新時間:2022-08-12 來源:黑馬程序員 瀏覽量:
邏輯覆蓋法是白盒測試最常用的測試方法,它包括語句覆蓋、判定覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋5種,今天先來介紹一下語句覆蓋。
語句覆蓋(Statement Coverage)又稱行覆蓋、段覆蓋、基本塊覆蓋,它是最常見的覆蓋方式。語句覆蓋的目的是測試程序中的代碼是否被執(zhí)行,它只測試代碼中的執(zhí)行語句,這里的執(zhí)行語句不包括頭文件、注釋、空行等。語句覆蓋在多分支的程序中,只能覆蓋某一條路徑,使得該路徑中的每一個語句至少被執(zhí)行一次,但不會考慮各種分支組合情況。
為了讓讀者更深刻地理解語句覆蓋,下面結(jié)合一段小程序介紹語句覆蓋方法的執(zhí)行,程序偽代碼如下所示。
IF x>0 AND y<0 //條件1 z=z-(x-y) IF x>2 OR z>0 //條件2 z=z+(x+y)
在上述代碼中,AND表示邏輯運算&&,OR表示邏輯運算Ⅱ,第1~2行代碼表示如果x>0成立并且y<0成立,則執(zhí)行z=z-(x-y)語句;第3~4行代碼表示如果x>2成立或者z>0成立,則執(zhí)行z=z+(x+y)語句。該段程序的流程圖如圖3-1所示。
在圖3-1中,a、b、c、d、e表示程序執(zhí)行分支,在語句覆蓋測試用例中,使程序中每個可執(zhí)行語句至少被執(zhí)行一次。根據(jù)圖3-1程序流程圖中標示的語句執(zhí)行路徑設計測試用例,具體如下。
Test1: x=1 y=-1 z=2
圖3-1 程序執(zhí)行流程圖
執(zhí)行上述測試用例,程序運行路徑為acd。可以看出程序中acd路徑上的每個語句都能被執(zhí)行,但是語句覆蓋對多分支的邏輯無法全面反映,僅僅執(zhí)行一次不能進行全面覆蓋,因此,語句覆蓋是弱覆蓋方法。
語句覆蓋雖然可以測試執(zhí)行語句是否被執(zhí)行到,但卻無法測試程序中存在的邏輯錯誤,例如,如果上述程序中的邏輯判斷符號“AND”誤寫成了“OR”,使用測試用例Test1同樣可以覆蓋acd路徑上的全部執(zhí)行語句,但卻無法發(fā)現(xiàn)錯誤。同樣,如果將x>0誤寫成x>=0,使用同樣的測試用例Test1也可以執(zhí)行acd路徑上的全部執(zhí)行語句,但卻無法發(fā)現(xiàn)x>=0的錯誤。
語句覆蓋無須詳細考慮每個判斷表達式,可以直觀地從源程序中有效測試執(zhí)行語句是否全部被覆蓋,由于程序在設計的時候,語句之間存在許多內(nèi)部邏輯關系,而語句覆蓋不能發(fā)現(xiàn)其中存在的缺陷,因此語句覆蓋并不能滿足白盒測試的測試所有邏輯語句的基本需求。