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