1.為什么要測試
測試有什么用?花那么多的人力物力和金錢做的測試到底是為了什么?很多所謂的專業書籍對此講了很多讓人眼花繚亂的理論。
其實很簡單,測試就是為了讓產品在交付給最終用戶以后,在產品生存周期(或提供有效服務的期限以內),不讓最終用戶發現其所不能接受的現象。
良好的測試,可以有效的降低維護的成本。用戶如果滿意你的產品,就不會一而再、再而三的要求改進,維護的成本自然會下降。
當然,測試本身的成本也是不低的,所以為了讓我們為測試付出的代價物有所值(大概還沒有人會說自己的產品從未經過測試吧),我們很有必要去認真的了解一下關于測試的一些東西。
2.什么是測試
軟件測試是在有限的時間內提供高質量軟件的保證,是一個完整正規的軟件開發過程中非常重要的一個部分。(《微軟是怎樣做測試的》——ATC ( Advanced Technology Center,微軟亞洲工程院 ) 測試組相關負責人)
Any activities aimed at evaluating an attribute or capability of a program or system. ( Bill Hetzel 1983年對測試的定義 )
The process of executing a program or system with the intent of finding errors. ( Glenford J. Myers 對測試的定義 )
使用人工或自動的手段來運行或測定某個軟件系統的過程,其目的在于檢驗它是否滿足規定的需求或弄清預期結果與實際結果之間的差別。( IEEE 1983年對測試的定義 )
測試是以評價一個程序或者系統屬性為目標的任何一種活動。測試是對軟件質量的度量。( Bill Hetzel 《軟件測試完全指南》)
我個人對測試的理解是,我們編寫的代碼應該通過全部的測試,使之完成所有需求。即測試就是讓我們的產品符合客戶要求的過程。這里的理解有些狹隘,的確??蛻舨⒉粚I,客戶未必能了解我們的產品中存在的Bug,而且客戶并不關心這些,只要他們看到了他們想要的東西,他們就愿意付錢。所以,以商業為目的的軟件產品,大多時候沒有必要深究一些無法帶來經濟利益的問題,例如為一個運行時間為2秒的任務提高50%的效率,數字上很誘人,但這幾乎毫無意義,而且會浪費很多資源。
3. 測試的目的
測試是為了證明程序有錯,而不是證明程序無錯誤。
一個好的測試用例是在于它能發現至今未發現的錯誤。
一個成功的測試是發現了至今未發現的錯誤的測試。
(Grenford J. Myers《The Art of Software Testing》)
上面的定義是一個關于測試目的的經典說明,但是容易讓人產生誤解——測試 = 發現Bug。我并不贊同這樣的觀點。
通常,測試作為一種質量保證的手段,作為項目后期自我檢查的一部分。既是說,大量的缺陷和Bug等堆積到一定數量后,我們才開始去發現他們。
讓我們來看看編譯器報錯的目的,很容易我們就可以看出它是用來保證我們編出正確的代碼的,當然這僅僅是正確的語法。它并不保證代碼的功能。編譯器對代碼的測試,就很有效的提高了我們的工作效率。
我們也許應該嘗試考慮這樣的一個測試計劃,用它來保證生產出正確的軟件,而非僅僅是查找Bug。Bug或者說缺陷,通常的理解就是干擾程序正常運行的因素。很顯然,如果程序正確,那么,Bug就不應該存在。這是一個理想狀態,一個合理的測試過程,應該讓我們更加接近這個狀態。
合理的測試,會使軟件產品趨于正確和完善。同時,測試也是驗證這一結果的過程。對于用戶而言,他期望的是符合他需求的產品,測試的目的就是使產品不會偏離用戶需求,并且達到一個合理的質量水平。并且當場品對于客戶的標準有所偏離時,測試能夠為我們指明改正的方向。
原文轉自:http://www.anti-gravitydesign.com