邏輯覆蓋測試的類型及特點(diǎn)

知乎首發(fā):https://www.zhihu.com/question/385083557/answer/1128108136

由于對于不同復(fù)雜度的代碼邏輯,可以衍生出許多種執(zhí)行路徑,只有選擇適當(dāng)?shù)臏y試方法,才能幫助我們從代碼的迷霧森林中找到正確的方向。

1、語句覆蓋(Statement Coverage)

對程序的邏輯覆蓋很少,只關(guān)心判定表達(dá)式的值,是很弱的邏輯覆蓋標(biāo)準(zhǔn)。

【基本思想】:設(shè)計(jì)若干測試用例,運(yùn)行被測程序,使程序中每個(gè)可執(zhí)行語句至少執(zhí)行一次。

【優(yōu)點(diǎn)】:檢查所有語句、代碼覆蓋率高

【缺點(diǎn)】:無法檢查出條件、循環(huán)語句的錯(cuò)誤

2、判定覆蓋(Decision Coverage)

判定覆蓋比語句覆蓋強(qiáng)一些,能發(fā)現(xiàn)一些語句覆蓋無法發(fā)現(xiàn)的問題。但是往往一些判定條件都是由多個(gè)邏輯條件組合而成的,進(jìn)行分支判斷時(shí)相當(dāng)于對整個(gè)組合的最終結(jié)果進(jìn)行判斷,這樣就會(huì)忽略每個(gè)條件的取值情況,導(dǎo)致遺漏部分測試路徑。

【基本思想】:設(shè)計(jì)若干測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次,即判斷真假值均曾被滿足。

【優(yōu)點(diǎn)】:判定覆蓋具有比語句覆蓋更強(qiáng)的測試能力。

【缺點(diǎn)】:往往大部分的判定語句是由多個(gè)邏輯條件組合而成,若僅僅判斷其整個(gè)最終結(jié)果,而忽略每個(gè)條件的取值情況,必然會(huì)遺漏部分測試路徑,判定覆蓋仍是較弱的邏輯覆蓋。

3、條件覆蓋(Condition Coverage)

通常而言條件覆蓋比判定覆蓋強(qiáng),因?yàn)闂l件覆蓋使得判定中的每一個(gè)條件都取到了不同的結(jié)果,這一點(diǎn)判定覆蓋則無法保證。但條件覆蓋也有缺陷,因?yàn)樗荒鼙WC每個(gè)條件都取到了不同結(jié)果,但沒有考慮到判定結(jié)果,因此有時(shí)候條件覆蓋并不能保證判定覆蓋。

【基本思想】:設(shè)計(jì)若干測試用例,執(zhí)行被測程序以后要使每個(gè)判斷中每個(gè)條件的可能取值至少滿足一次。

【優(yōu)點(diǎn)】:能夠檢查所有的條件錯(cuò)誤。

【缺點(diǎn)】:不能保證所有的分支(判定)都能覆蓋,仍是較弱的覆蓋方式。

4、判定/條件覆蓋(Decision/Condition Coverage)

判定/條件覆蓋,說白了就是我們設(shè)計(jì)的測試用例可以使得判斷中每個(gè)條件所有的可能取值至少執(zhí)行一次(條件覆蓋),同時(shí)每個(gè)判斷本身所有的結(jié)果也要至少執(zhí)行一次(判定覆蓋)。不難發(fā)現(xiàn)判定條件覆蓋同時(shí)滿足判定覆蓋和條件覆蓋,彌補(bǔ)了兩者各自的不足,但是判定條件覆蓋并未考慮條件的組合情況。

【基本思想】:設(shè)計(jì)足夠的測試用例,使得判斷條件中的所有條件可能至少執(zhí)行一次取值,同時(shí)所有判斷的可能結(jié)果至少執(zhí)行一次。

【優(yōu)點(diǎn)】:既考慮了每一個(gè)條件,又考慮了每一個(gè)分支,發(fā)現(xiàn)錯(cuò)誤的能力強(qiáng)于分支覆蓋和條件覆蓋

【缺點(diǎn)】:仍然不能覆蓋所有的路徑,有進(jìn)一步提升的空間

5、條件組合覆蓋(Branch Condition Combination Coverage)

條件組合覆蓋,測試用例應(yīng)該使得每個(gè)判定中的各個(gè)條件的各種可能組合都至少出現(xiàn)一次。顯然,滿足條件組合覆蓋的測試用例一定是滿足判定覆蓋、條件覆蓋和判定條件覆蓋的。

【基本思想】:設(shè)計(jì)足夠的測試用例,使得所有可能的條件取值組合至少執(zhí)行一次。

【優(yōu)點(diǎn)】:能夠檢查所有的條件錯(cuò)誤

【缺點(diǎn)】:不一定能使程序中的每條路徑都執(zhí)行到,用例數(shù)明顯增加

6、路徑覆蓋(Path Coverage)

路徑覆蓋,意思是說我們設(shè)計(jì)的測試用例可以覆蓋程序中所有可能的執(zhí)行路徑。這種覆蓋方法可以對程序進(jìn)行徹底的測試用例覆蓋,比前面講的五種方法覆蓋度都要高。

【基本思想】:要求設(shè)計(jì)足夠多的測試用例,使得程序中所有的路徑都至少執(zhí)行一次 。

【優(yōu)點(diǎn)】:這種測試方法可以對程序進(jìn)行徹底的測試,比前面五種的覆蓋面都廣。

【缺點(diǎn)】:需要設(shè)計(jì)大量、復(fù)雜的測試用例,使得工作量呈指數(shù)級增長,不一定把所有的條件組合都覆蓋。

總結(jié)一下:

在實(shí)際的操作中,要從代碼分析和代碼調(diào)研入手,可以選擇上述方法中的某一種,或者好幾種方法的結(jié)合,設(shè)計(jì)出高效的測試用例,盡可能全面地覆蓋到代碼中的每一個(gè)邏輯路徑。

白盒測試又很少能使用手工進(jìn)行,選擇一款不錯(cuò)的自動(dòng)化工具也是很重要的,之前工作中使用的testbed工具進(jìn)行這種覆蓋測試非常方便,而且提供一個(gè)MC/DC(修正條件/判定覆蓋)的方式,在能夠保證覆蓋效果的情況下,盡可能減少測試用例的數(shù)量

建議收藏加關(guān)注,這塊內(nèi)容需要持續(xù)驗(yàn)證才能在項(xiàng)目中熟練使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容