軟件測試的目的應(yīng)該是驗(yàn)證需求

字號(hào):

測試的目的是什么呢?這是一個(gè)看起來很簡單、不太值得討論的問題,但往往這樣的問題其實(shí)是很難回答的,比如人生的意義是什么?好,現(xiàn)在我們就來,列舉一下我們經(jīng)常聽到的對(duì)這個(gè)問題的回答:
    “軟件測試的目的是盡可能發(fā)現(xiàn)并改正被測試軟件中的錯(cuò)誤,提高軟件的可靠性?!?,這個(gè)定義聽起來很正確,但用它來指導(dǎo)測試會(huì)帶來很多問題。比如有的組織用發(fā)現(xiàn)的bug數(shù)來衡量測試人員的業(yè)績,其實(shí)這就是這種測試目的論在后面作祟,其結(jié)果如何呢:其一,有一些不夠敬業(yè)的測試人員會(huì)找來一些無關(guān)痛癢的bug來充數(shù),結(jié)果許多時(shí)間會(huì)被浪費(fèi)在這些無關(guān)痛癢的bug上(其實(shí)應(yīng)該修復(fù),何時(shí)修復(fù),嚴(yán)重程度是什么,優(yōu)先級(jí)是什么,等等);其二,測試人員會(huì)花很大力氣設(shè)計(jì)一些復(fù)雜的測試用例去發(fā)現(xiàn)一些迄今尚未發(fā)現(xiàn)的缺陷,而不關(guān)心這些缺陷是否在實(shí)際用戶的使用過程當(dāng)中是否會(huì)發(fā)生,從而浪費(fèi)了大量的寶貴時(shí)間。究其根源,就是因?yàn)閷?duì)測試目的的這種錯(cuò)誤理解造成的,為什么這么說呢?因?yàn)檐浖颾ug的數(shù)量是無從估計(jì)的,那么如果測試的目的是為了找bug,那么測試工作將變成一項(xiàng)無法完成也無法衡量進(jìn)度而且部分無效的工作(因?yàn)橛行゜ug在實(shí)際的運(yùn)行過程當(dāng)中根本不會(huì)發(fā)生)。
    “測試的目的就是為了保證軟件質(zhì)量”,這個(gè)定義也是看似正確,但實(shí)際上,混淆了測試和質(zhì)量保證工作的邊界。軟件質(zhì)量要素有很多,包括:Understandability、Conciseness、Portability、Consistency、Maintainability、 Testability、Usability、Structures、Efficiency、Security等等,所以,軟件質(zhì)量保證和測試其實(shí)關(guān)注的方向是不同的。
    那么測試的目的應(yīng)該是什么呢?IEEE在1983年提出了軟件測試的定義:
    “使用人工或自動(dòng)手段來運(yùn)行或測定某個(gè)系統(tǒng)的過程,其目的在于檢驗(yàn)它是否滿足規(guī)定的需求或是弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別?!?BR>    所以,簡言之,測試的目的應(yīng)該是驗(yàn)證需求,bug(預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別)是這個(gè)過程中的產(chǎn)品而非目標(biāo)。測試人員應(yīng)該象工兵一樣,在大部隊(duì)(客戶)預(yù)期前進(jìn)的方向上探雷、掃雷(bug),而不需要去關(guān)心那些根本沒有人會(huì)去碰的地雷。衡量一個(gè)測試人員應(yīng)該去衡量他/她測試了多少需求(測試工作量),漏過了多少bug(測試有效性)。(在后面的博文里我們會(huì)進(jìn)一步談測試后評(píng)估的重要性)
    因此,我們可以看到有好的需求文檔/體系對(duì)測試工作的必要性,我們看到許多測試團(tuán)隊(duì)在業(yè)務(wù)需求/軟件需求不完備的情況下,往往或重新編寫測試需求。在未來的博文里,我們會(huì)在介紹為什么用例(Use Case)技術(shù)會(huì)有助于開發(fā)人員和測試人員的溝通。