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