软件测试-白盒测试:逻辑覆盖
邏輯覆蓋
參考文獻:
軟件測試第4章白盒測試一
軟件測試——白盒測試
白盒測試-覆蓋測試(六種覆蓋方法)
幾種常用的邏輯覆蓋測試方法
目的:結構測試是依據被測程序的邏輯結構設計測試用例,驅動被測程序運行完成的測試。邏輯覆蓋能夠給出結構測試的覆蓋準則,即可以結束測試的條件。
- 語句覆蓋
首先設計若干個測試用例,使程序中的每個可執(zhí)行語句至少執(zhí)行一次。這里所謂“若干個”,自然是越少越好。
Case1:A=2, B=0, X=3。便可以達到語句覆蓋,路徑為ace。
為什么達到了?不是b和d沒走嗎?再想想,b和d上有語句嗎?(圖中有語句的線走一遍)
如果第一個判斷的AND寫成OR,或者第二個的OR寫成AND,仍然使用第一個參數(shù)用例,仍然做到語句覆蓋,可是發(fā)現(xiàn)不了錯誤。 - 判定覆蓋(分支)
設計若干測試用例,使得程序中每個判斷的取真分支和取假分支至少經歷一次,即判斷的真假值均曾被滿足。
Case2:A=1, B=0, X=1,路徑為abd。Case1和Case2一起可以實現(xiàn)判定覆蓋。可是第二個判斷X>1錯寫成X<1,不能發(fā)現(xiàn)錯誤。
什么是判斷?菱形中的語句if語句就是判斷語句。如本題中,就有2個判斷,當2個判斷都執(zhí)行過T和F時(4種情況),就完成了判定覆蓋。 - 條件覆蓋
設計若干測試用例,使每個判斷中每個條件的可能取值至少滿足一次。
Case3:A=2, B=1, X=1,路徑為abe。Case1、Case2和Case3一起可以實現(xiàn)條件覆蓋。
什么是條件?通過邏輯運算符進行分割,每一個結果就是一個條件。如本題中,就有4個條件,當4個條件都執(zhí)行過T和F時,就完成了條件覆蓋。
- 判定-條件覆蓋
設計足夠的測試用例,使得判斷中每個條件的所有可能至少出現(xiàn)一次,并且每個判斷本身的判定結果也至少出現(xiàn)一次。
Case1、Case2和Case3一起可以實現(xiàn)判定-條件覆蓋。
為什么符合?因為覆蓋了每條線,也覆蓋了所有條件。(此處和部分PPT不同,因為它們沒有考慮條件組合覆蓋) - 條件組合覆蓋
設計足夠的測試用例,使得判斷中每個條件的所有可能至少出現(xiàn)一次,并且每個判斷本身的判定結果也至少出現(xiàn)一次。它與條件覆蓋的差別是它不是簡單的要求每個條件都出現(xiàn)“真”與“假”兩種結果,而是讓這些結果的所有可能組合都出現(xiàn)一次。
條件組合只針對同一個判斷語句內存在多個條件的情況。讓這些添加的取值進行笛卡爾乘積組合。 - 路徑覆蓋
設計足夠的測試用例,要求覆蓋程序中所有可能的路徑。
Case3:A=3, B=0, X=1,路徑為acd。Case1、Case2、Case3和Case4一起可以實現(xiàn)路徑覆蓋。
最少測試用例數(shù)計算
結構化程序是由順序型、選擇型、重復型3種基本控制結構組成。為了把問題化簡,避免出現(xiàn)測試用例極多的組合爆炸,把構成循環(huán)操作的重復型結構用選擇結構代替。
如何計算最少測試用例數(shù)呢?我們先看一道簡單的題。
至少提供4個測試用例才能做到邏輯覆蓋,這里的4是圖中第1個分支謂詞引出的兩個操作及第2個分支謂詞引出的兩個操作組合起來而得到的即2 × 2 = 4,并且,這里的2是由于兩個并列的操作1 + 1 = 2而得到的。
總結:并聯(lián)相加,串聯(lián)相乘。
計算公式:(5*3+1)*3=48
步驟:((5,4,3,2)(7,6),(1))(9,8)
核心:一層一層剝開。不斷劃分串聯(lián)和并聯(lián),直到只有Y和N,然后開始逆向計算。
邏輯覆蓋的出發(fā)點是合理的、完善的。所謂“覆蓋,就是想要做到全面而無遺漏,但邏輯覆蓋并不能真正做到無遺漏。
if(x>3&&z<10) 若不小心寫成了if(x>=3&&z<10),按照前面設計的測試用例(x取2或4),邏輯覆蓋對這樣的問題是無能為力的,而原因就在于:錯誤區(qū)域僅僅在x=3這個點上,即僅當x的值取3時,測試才能發(fā)現(xiàn)錯誤。而這里就用到了測試覆蓋中需要遵循的兩條準則:ESTCA準則、LCSAJ準則。
FOSTER的ESTCA覆蓋準則:
- 對于A rel B(rel可以是<、 = 和>)型的分支謂詞,應適當?shù)剡x擇A與B的值,使得測試執(zhí)行到該分支語句時,A<B、A = B和A>B的情況分別出現(xiàn)一次。
- 對于A rel1 C(rel1可以是<或是>,A是變量,C是常量)型的分支謂詞,當rel1為<時,應適當?shù)剡x擇A的值,使A = C ? M,當rel1為>時,應適當?shù)剡x擇A,使A = C + M。(M是距C最小的機器容許正數(shù),若A和C均為整型時,M = 1)
- 對外部輸入變量賦值,使其在每一測試用例中均有不同的值與符號,并與同一組測試用例中其他變量的值與符號不一致。
LCSAJ是指一組順序執(zhí)行的代碼,以控制流跳轉為結束點。它可產生以下4層覆蓋:
- 第一層:語句覆蓋。
- 第二層:分支覆蓋。
- 第三層:LCSAJ覆蓋。
- 第四層:兩層LCSAJ覆蓋,直到N個LCSAJ。
總結
以上是生活随笔為你收集整理的软件测试-白盒测试:逻辑覆盖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: filter hid_HID调试工具
- 下一篇: CorelDRAW X4中文版高清实例视