以前上軟件測(cè)試課時(shí),看到老師演示的一個(gè)統(tǒng)計(jì)C語言的測(cè)試覆蓋率的工具,當(dāng)時(shí)想不知道.NET下是否有同樣的工具。碰巧昨天發(fā)現(xiàn)了clover.net,它能幫你分析那些代碼已經(jīng)經(jīng)過了測(cè)試。
下面是我們上的軟件測(cè)試課中關(guān)于覆蓋分析的一些資料:
覆蓋分析是對(duì)需求的實(shí)現(xiàn)程度或?qū)Τ绦虻膱?zhí)行程度的分析。
覆蓋分析包括兩部分,即基于需求的覆蓋分析和基于結(jié)構(gòu)的覆蓋分析;谛枨蟮母采w分析是分析測(cè)試用例對(duì)軟件需求的覆蓋程度,以證實(shí)所選的測(cè)試用例滿足指定的需求覆蓋準(zhǔn)則 ;诮Y(jié)構(gòu)的覆蓋分析是分析測(cè)試用例 對(duì)被測(cè)程序的覆蓋程度,以證實(shí)所選的測(cè)試用例滿足指定的結(jié)構(gòu)覆蓋準(zhǔn) 則 。
語句覆蓋是起 碼 的 結(jié) 構(gòu)覆蓋要求。 語句覆蓋要求 設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每條語句至少被執(zhí)行一次。
一個(gè)程序模塊的測(cè)試獨(dú)立路徑數(shù)等于該模塊的McCabe 圈復(fù)雜度 。
考慮上圖所示流程圖 ,要使其達(dá)到語句覆蓋,只需選取:
A=2 , B=0 , X=3 。
但是這個(gè)測(cè)試還不徹底,如果AND誤寫成了OR ,上面的語句覆蓋測(cè)試發(fā)現(xiàn)不了。
判定覆蓋又稱為分支覆蓋,它要求設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每個(gè)判定至少有一次 為真值 ,有一次為假值 ,即:程序中的每個(gè)分支至少執(zhí)行一次。
判定覆蓋測(cè)試用例
測(cè)試用例 A B X 路徑
1 3 0 1 acd
2 2 1 3 abe
對(duì)上圖來說 ,設(shè)計(jì)兩組測(cè)試輸入可以通過路徑ace和abd或路徑acd和abe達(dá)到判定覆蓋。
判定覆蓋也不完全,例如上面兩個(gè)測(cè)試用例未能檢查沿著路徑abd 執(zhí)行時(shí) , 值是否保持不 變 。
條件覆蓋要求設(shè)計(jì)足夠多的測(cè)試用例,使得判定中的每個(gè)條件獲得各種可能的結(jié)果,即每個(gè)條件至少有一次為真值 ,有一次為假值 。
條件覆蓋測(cè)試用例
測(cè)試用例 A B X 路徑
1 1 0 3 abd
2 2 1 1 abd
對(duì)上圖來說 ,要達(dá)到條件覆蓋,需要足夠多的測(cè)試用例,使得在 A 點(diǎn)有 A>1 , A ≤ 1 , B=0 , B ≠ 0 ,在 B 點(diǎn)有 A=2 , A ≠ 2 , X>1 , X ≤ 1 。
條件覆蓋也不完全,由上例可以看出,條件覆蓋并不能保證判定覆蓋。
設(shè)計(jì)足夠多的測(cè)試用例,使得判定中每個(gè)條件的所有可能結(jié)果至少出現(xiàn)一次, 每個(gè)判定本身所有可能結(jié)果也至少出現(xiàn)一次。
判定 / 條件覆蓋測(cè)試用例
測(cè)試用例 A B X 路徑
1 2 0 4 ace
2 1 1 1 abd
判定 / 條件覆蓋準(zhǔn)則滿足判定覆蓋準(zhǔn)則和條件覆蓋準(zhǔn)則 。判定 / 條件覆蓋準(zhǔn)則的缺點(diǎn)是未考慮條件的組合情況。
要求設(shè)計(jì)足夠多的測(cè)試用例,使得每個(gè)判定中條件結(jié)果的所有可能組合至少出現(xiàn)一次。
多重條件覆蓋測(cè)試用例
測(cè)試用例 A B X 路徑
1 2 0 4 ace
2 2 1 1 abd
3 1 0 2 abd
4 1 1 1 abd
多重條件覆蓋準(zhǔn)則滿足判定覆蓋、條件覆蓋和判定 / 條件覆蓋準(zhǔn)則 。
更改的判定 / 條件覆蓋要求設(shè)計(jì)足夠多的測(cè)試用例,使得判定中每個(gè)條件的所有可能結(jié)果至少出現(xiàn)一次,每個(gè)判定本身的所有可能結(jié)果也至少出現(xiàn)一次。并且每個(gè)條件都顯示能單獨(dú)影響判定結(jié)果。
if ( A and B ) ... , 測(cè)試用例1和3說明條件A獨(dú)立地影響測(cè)試結(jié)果, 測(cè)試用例1和2說 明條件B獨(dú)立地影響測(cè)試結(jié)果,所以測(cè)試用例 1 , 2 , 3 是必須的。