上個(gè)月參加的網(wǎng)易游戲部QA組的黑盒測試培訓(xùn),覺得挺有意思的,不過最讓我感興趣的是,能和真正專業(yè)的測試人員做了一點(diǎn)討論,發(fā)現(xiàn)站在開發(fā)人員的角度看待測試和站在測試人員看待測試時(shí)完全不同的一種東西.
程序員和測試人員的心理差別
程序員和測試人員的心理差別可以簡單的歸納為以下幾種
成功 / 不成功
什么才是一次成功的測試,大多數(shù)的開發(fā)人員對自己的程序測試完沒發(fā)現(xiàn)錯(cuò)誤,就會說"這是一個(gè)成功的測試",如果發(fā)現(xiàn)某些新的錯(cuò)誤則稱"這是不成功的測試";而測試人員剛好相反,當(dāng)然這也是因?yàn)殡p方的職責(zé)不同而引起的
維護(hù) / 破壞,施虐
開發(fā)人員對測試往往是一種維護(hù)性的測試,目標(biāo)在于證明自己開發(fā)的程序沒有錯(cuò)誤,可能跟我們開發(fā)人員經(jīng)常做建設(shè)性工作,更傾向創(chuàng)造事物,而不是將事物破壞有關(guān);而測試人員在測試更多是一種破壞的過程,甚至是一種施虐,擺出一種把雞蛋打碎攪黃來挑骨頭的姿態(tài)
做了應(yīng)該做的 / 做了不該做的
開發(fā)人員在做測試更多傾向于對實(shí)現(xiàn)的功能進(jìn)行檢查,當(dāng)測試證明了該完成的功能全部通過時(shí)就認(rèn)為測試完畢了,但程序即使能夠完成預(yù)定的功能,也可能隱藏了錯(cuò)誤,如做了應(yīng)該做的東西,同時(shí)也做了不應(yīng)該做的東西
建立一種信心 / 必須做
測試這個(gè)東西對于開發(fā)人員來說,更多的是建立一種信心的保證,例如我們盡可能多的單元測試,很多時(shí)候就是讓我們確信程序的正確性,并讓我們建立信心,而對于測試人員來說,測試是他們的職責(zé)所在,只有盡可能多的把系統(tǒng)挖出錯(cuò)誤來才證明他們的存在價(jià)值
測試的態(tài)度
測試是一項(xiàng)技術(shù)性的工作,但同時(shí)也涉及到了心里學(xué)的一些重要的因素.
作為程序員的我們也經(jīng)常會對我們的程序進(jìn)行相關(guān)的測試,但你想想我們?yōu)槭裁匆獙ξ覀兊南到y(tǒng)做測試,原因大概有以下的幾種
1.測試就是為了證明我們的系統(tǒng)是不存在錯(cuò)誤的.
2.測試的目的是想證明系統(tǒng)能夠正確完成預(yù)定的功能.
3.測試是保證一個(gè)系統(tǒng)強(qiáng)壯性的信心過程.
4.測試是上級規(guī)定要做的.
站在測試人員的角度來看,除了最后一點(diǎn),其他的都是本末倒置(難怪他們會抱怨我們做的測試很差)
"測試就是為了證明我們的系統(tǒng)是不存在錯(cuò)誤的",試想一下,如果我們的目標(biāo)是證明程序中不存在錯(cuò)誤,那么我們的潛意識就會傾向于這個(gè)目標(biāo),我們會傾向選擇可能較少導(dǎo)致出現(xiàn)程序失效的測試數(shù)據(jù),如果我們的測試目標(biāo)證明程序中存在錯(cuò)誤,我們設(shè)計(jì)的測試數(shù)據(jù)就可能更多的發(fā)現(xiàn)問題.于前一種方法相比,后一種方法會更多地增加程序的價(jià)值.
每當(dāng)測試一個(gè)程序,都是想為程序增加多一些的價(jià)值,通過測試發(fā)現(xiàn)系統(tǒng)的更多錯(cuò)誤來增加程序的可靠性質(zhì)量,提高了程序的可靠性,是指出并最終修改程序的錯(cuò)誤.與"測試就是為了證明我們的系統(tǒng)是不存在錯(cuò)誤的"比較,更適合的定義是
測試時(shí)為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行的過程
"測試的目的是想證明系統(tǒng)能夠正確完成預(yù)定的功能",這個(gè)定義又會帶來另一個(gè)問題,程序即使能夠完成預(yù)定的功能,也依然可能隱藏錯(cuò)誤,也就是說,當(dāng)程序沒有實(shí)現(xiàn)預(yù)期的功能,錯(cuò)誤時(shí)能夠清晰顯示出來,但程序做了不應(yīng)該做的呢,這同樣也是一個(gè)錯(cuò)誤,如我們程序?qū)崿F(xiàn)了一個(gè)除法計(jì)算器,即使我們通過各種數(shù)據(jù)正確的完成了計(jì)算任務(wù),但在完成了不應(yīng)執(zhí)行的任務(wù)(除數(shù)為0),程序依然是錯(cuò)誤的,如果我們將軟件測試作為發(fā)現(xiàn)錯(cuò)誤的過程,而不是只是證明"系統(tǒng)能夠正確完成預(yù)定的功能",我們發(fā)現(xiàn)這類的錯(cuò)誤可能性會打很多,所以更好的定義是
測試就是建立程序即使能完成預(yù)定功能,也發(fā)現(xiàn)存在完成非預(yù)定功能
ps:當(dāng)然了,測試更多是跟軟件成本方面相關(guān),這里就不細(xì)想了,附上講座的ppt<實(shí)用的黑盒測試方法>
----------------------------------------
程序員和測試人員的心理差別
程序員和測試人員的心理差別可以簡單的歸納為以下幾種
成功 / 不成功
什么才是一次成功的測試,大多數(shù)的開發(fā)人員對自己的程序測試完沒發(fā)現(xiàn)錯(cuò)誤,就會說"這是一個(gè)成功的測試",如果發(fā)現(xiàn)某些新的錯(cuò)誤則稱"這是不成功的測試";而測試人員剛好相反,當(dāng)然這也是因?yàn)殡p方的職責(zé)不同而引起的
維護(hù) / 破壞,施虐
開發(fā)人員對測試往往是一種維護(hù)性的測試,目標(biāo)在于證明自己開發(fā)的程序沒有錯(cuò)誤,可能跟我們開發(fā)人員經(jīng)常做建設(shè)性工作,更傾向創(chuàng)造事物,而不是將事物破壞有關(guān);而測試人員在測試更多是一種破壞的過程,甚至是一種施虐,擺出一種把雞蛋打碎攪黃來挑骨頭的姿態(tài)
做了應(yīng)該做的 / 做了不該做的
開發(fā)人員在做測試更多傾向于對實(shí)現(xiàn)的功能進(jìn)行檢查,當(dāng)測試證明了該完成的功能全部通過時(shí)就認(rèn)為測試完畢了,但程序即使能夠完成預(yù)定的功能,也可能隱藏了錯(cuò)誤,如做了應(yīng)該做的東西,同時(shí)也做了不應(yīng)該做的東西
建立一種信心 / 必須做
測試這個(gè)東西對于開發(fā)人員來說,更多的是建立一種信心的保證,例如我們盡可能多的單元測試,很多時(shí)候就是讓我們確信程序的正確性,并讓我們建立信心,而對于測試人員來說,測試是他們的職責(zé)所在,只有盡可能多的把系統(tǒng)挖出錯(cuò)誤來才證明他們的存在價(jià)值
測試的態(tài)度
測試是一項(xiàng)技術(shù)性的工作,但同時(shí)也涉及到了心里學(xué)的一些重要的因素.
作為程序員的我們也經(jīng)常會對我們的程序進(jìn)行相關(guān)的測試,但你想想我們?yōu)槭裁匆獙ξ覀兊南到y(tǒng)做測試,原因大概有以下的幾種
1.測試就是為了證明我們的系統(tǒng)是不存在錯(cuò)誤的.
2.測試的目的是想證明系統(tǒng)能夠正確完成預(yù)定的功能.
3.測試是保證一個(gè)系統(tǒng)強(qiáng)壯性的信心過程.
4.測試是上級規(guī)定要做的.
站在測試人員的角度來看,除了最后一點(diǎn),其他的都是本末倒置(難怪他們會抱怨我們做的測試很差)
"測試就是為了證明我們的系統(tǒng)是不存在錯(cuò)誤的",試想一下,如果我們的目標(biāo)是證明程序中不存在錯(cuò)誤,那么我們的潛意識就會傾向于這個(gè)目標(biāo),我們會傾向選擇可能較少導(dǎo)致出現(xiàn)程序失效的測試數(shù)據(jù),如果我們的測試目標(biāo)證明程序中存在錯(cuò)誤,我們設(shè)計(jì)的測試數(shù)據(jù)就可能更多的發(fā)現(xiàn)問題.于前一種方法相比,后一種方法會更多地增加程序的價(jià)值.
每當(dāng)測試一個(gè)程序,都是想為程序增加多一些的價(jià)值,通過測試發(fā)現(xiàn)系統(tǒng)的更多錯(cuò)誤來增加程序的可靠性質(zhì)量,提高了程序的可靠性,是指出并最終修改程序的錯(cuò)誤.與"測試就是為了證明我們的系統(tǒng)是不存在錯(cuò)誤的"比較,更適合的定義是
測試時(shí)為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行的過程
"測試的目的是想證明系統(tǒng)能夠正確完成預(yù)定的功能",這個(gè)定義又會帶來另一個(gè)問題,程序即使能夠完成預(yù)定的功能,也依然可能隱藏錯(cuò)誤,也就是說,當(dāng)程序沒有實(shí)現(xiàn)預(yù)期的功能,錯(cuò)誤時(shí)能夠清晰顯示出來,但程序做了不應(yīng)該做的呢,這同樣也是一個(gè)錯(cuò)誤,如我們程序?qū)崿F(xiàn)了一個(gè)除法計(jì)算器,即使我們通過各種數(shù)據(jù)正確的完成了計(jì)算任務(wù),但在完成了不應(yīng)執(zhí)行的任務(wù)(除數(shù)為0),程序依然是錯(cuò)誤的,如果我們將軟件測試作為發(fā)現(xiàn)錯(cuò)誤的過程,而不是只是證明"系統(tǒng)能夠正確完成預(yù)定的功能",我們發(fā)現(xiàn)這類的錯(cuò)誤可能性會打很多,所以更好的定義是
測試就是建立程序即使能完成預(yù)定功能,也發(fā)現(xiàn)存在完成非預(yù)定功能
ps:當(dāng)然了,測試更多是跟軟件成本方面相關(guān),這里就不細(xì)想了,附上講座的ppt<實(shí)用的黑盒測試方法>
----------------------------------------