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