軟件測(cè)試是抽樣的活動(dòng)
我想你一定聽(tīng)過(guò)很多人說(shuō), 測(cè)試應(yīng)該要涵蓋所有狀況, 或是抱怨未甚么連簡(jiǎn)單的東西都沒(méi)有測(cè)試到, 或者測(cè)試為什么需要這么多時(shí)間....
這是因?yàn)樗麄儗?duì)測(cè)試這個(gè)活動(dòng)的本質(zhì)有點(diǎn)誤解, 他們不知道軟件測(cè)試是sampling的活動(dòng). 即然是取樣, 自然不會(huì)涵蓋所有狀況; 有可能你選樣不好, 導(dǎo)致某些狀況漏掉; 或者是隨著你取樣的多寡, 自然需要花的時(shí)間也就不同.
這時(shí)候你會(huì)問(wèn), 為什么軟件測(cè)試是sampling的活動(dòng)?
這個(gè)問(wèn)題的答案是, 因?yàn)榭梢詼y(cè)試的組合是無(wú)限多種, 你不可能有無(wú)限的時(shí)間去做測(cè)試, 因此你必須挑選一些有代表性的來(lái)測(cè)試, 希望他能夠涵蓋大部分的狀況, 讓你投資較小的資源, 得到最大的效益.
這時(shí)候你又問(wèn)到, 為什么測(cè)試的組合是無(wú)限多種呢?
這是我們?cè)囅胗幸粋€(gè)程序, 當(dāng)你按空格鍵時(shí), 會(huì)顯示圖案在屏幕上, 按其他按鍵則不會(huì)顯示任何東西.
當(dāng)你使用黑箱測(cè)試的方法, 也就是在不知道程序內(nèi)容狀況下測(cè)試, 你會(huì)如何進(jìn)行一個(gè)完整的測(cè)試?
把所有按鍵都按一次, 看看是否照預(yù)期的結(jié)果運(yùn)作. 這樣就好了嗎?
程序設(shè)計(jì)師若是設(shè)定連按八次return鍵也出現(xiàn)同樣的效果, 你怎么會(huì)知道呢? 若是要防止這樣的事情, 你要試多少種組合才能發(fā)現(xiàn)? 答案可能無(wú)限次.
你會(huì)說(shuō)不可能有能寫這樣的程序, 那你說(shuō)微軟復(fù)活節(jié)彩蛋的程序是怎么出來(lái)的? 那些銀行后門程序又是怎么來(lái)的?
那你會(huì)說(shuō)如果可以做白箱測(cè)試就可以避免這樣的狀況. 是嗎? 事實(shí)上是不可能的
第一, 通常程序的行數(shù)都是很龐大的, 第二, 即使程序不長(zhǎng), 但是程序讀入的data, 它的值域是很龐大的, 若是32 bits的 integer, 范圍是2147483647~-2147483648(大約是這樣, 我沒(méi)有記太清楚), 你如何確保每個(gè)數(shù)字進(jìn)去都正確, 而且你可能是不只一個(gè)data. 所以二者組合起來(lái), 應(yīng)該也是一個(gè)天文數(shù)字吧!!
所以到這里你可以知道要測(cè)試的狀況是無(wú)限的, 你不可能有完整測(cè)試. 因此你必須要sampling.
我想可以從測(cè)試方法中, 來(lái)印證測(cè)試真的是sampling. 你知道為什么會(huì)有statement coverage, branch coverage 或是decision coverage嗎?
當(dāng)初科學(xué)家在想有這么多組合, 那要怎么挑選test case呢? 那找會(huì)經(jīng)所有statements的test cases, 這樣會(huì)把所有 statement都測(cè)過(guò). 可是后來(lái)有人想, 即使測(cè)過(guò)所有statements, 還是會(huì)漏掉一些branch不會(huì)經(jīng)過(guò), 所以這樣的取樣不夠好, 因此改成取樣會(huì)經(jīng)過(guò)所有branch的test cases. 可是后來(lái)又想經(jīng)過(guò)所有branch, 還是不足, 因?yàn)橛行ヾecision 不會(huì)包含.
因此你會(huì)發(fā)現(xiàn)到, 每種測(cè)試方法都是在取樣, 只是取樣方法不同, 嚴(yán)謹(jǐn)度不同, 因此會(huì)有不同種類或數(shù)量的test case出來(lái).
看到這里, 你會(huì)知道測(cè)試是測(cè)不完的, 因?yàn)榻M合真的太多了. 我們可以做的, 是加強(qiáng)取樣的能力. 不過(guò)要小心的是, 不要選太多沒(méi)有價(jià)值也就是沒(méi)有代表性的test cases, 那不會(huì)有什么幫助的.
posted on 2014-11-18 09:46 順其自然EVO 閱讀(211) 評(píng)論(0) 編輯 收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄