基於不同的立場,存在着兩種完全不同的測試目的。從用戶的角度出發,普遍希望通過軟件測試暴露出軟件中陷藏的錯誤和缺陷,以考慮是否可以接受該產品。而從軟件開發者的角度出發,則希望測試成爲表明軟件產品中不存在錯誤的過程,驗證該軟件已正確地實現了用戶的要求,確立用戶對軟件質量的信心。
因爲在程序中往往存在着許多預料不到的問題,可能會被疏漏,許多隱藏的錯誤只有在特定的環境下才可能暴露出來。如果不把着眼點放在儘可能查找錯誤這樣一個基礎上,這些隱藏的錯誤和缺陷就查不出來,會遺留到運行階段中去。如果站在用戶的角度替他們設想,就應當把測試活動的目標對準揭露程序中存在的錯誤。在選取測試用例時,考慮那些易於發現程序錯誤的數據。
下面這些規則也可以看作是測試的目的或定義:
- 測試是爲了發現程序中的錯誤而執行程序的過程;
- 好的測試方案是極可能發現迄今爲止尚未發現的錯誤的測試方案;
- 成功的測試是發現了至今爲止尚未發現的錯誤的測試。
從上述規則可以看出,測試的正確定義是“爲了發現程序中的錯誤而執行程序的過程”。這和某些人通常想象的“測試是爲了表明程序是正確的”,“成功的測試是沒有發現錯誤的測試”等等是完全相反的。正確認識測試的目標是十分重要的,測試目標決定了測試方案的設計。如果爲了表明程序是正確的而進行測試,就會設計一些不易暴露錯誤的測試方案;相反,如果測試是爲了發現程序中的錯誤,就會力求設計出最能暴露錯誤的測試方案。
由於測試的目標是暴露程序中的錯誤,從心理學角度看,由程序的編寫者自己進行測試是不恰當的。因此,在綜合測試階段通常由其他人員組成測試小組來完成測試工作。此外,應該認識到測試決不能證明程序是正確的。即使經過了最嚴格的測試之後,仍然可能還有沒被發現的錯誤潛藏在程序中。測試只能查找出程序中的錯誤,不能證明程序中沒有錯誤。