這就是物理實驗嗎?
從事科研工作的人對這種“實驗”嗤之以鼻。這樣做除了應付一下教育部一點價值都沒有。
科學研究是要探索未知的世界,并沒有一個先知可以斷言某件事情,而我們不經證實就奉為真理。出發點不同,行為的效果便大相徑庭。要探索未知的世界,除了試驗既定的路線外,還須廣歷不同的路線,獲得大量的信息來了解世界的真相;反之僅僅是重復的話,只需要走固定的步驟,如果結果不同還要想方設法為預期結果辯護,實在是南轅北轍。
有人會問,科學家重復同行的實驗又作何論?那時實驗結論尚未成為公論,需要重復已有實驗,并輔以新的實驗來證實懷疑;也有挑戰現有理論,改變條件試圖證明新的理論。這些都是為了探索證實未知的世界,出發點大不一樣。
那么,軟件測試是為了探索世界還是重復檢驗呢?
有人認為,程序員寫的代碼,設計目的是明確的,所用技術是清晰的。只要有領域內的專家,所有軟件行為都是可預期的,軟件測試就是例行公事再確認一下。
早期的計算機工作者的確是這樣的,他們都是領域內的專家,根據代碼能夠準確指出程序的行為。如果說他們是上帝,程序就是他們完美的伊甸園,什么都在計劃之內。
然而時過境遷,現在的軟件團隊里面不可能所有人都是專家,也不是所有領域都有專家。除了火箭控制之類要求高可靠性的系統,大多數的軟件都是由非專家編寫出來的。所以程序員不一定知道哪里有死鎖和餓死,不一定知道哪里有資源泄漏,不一定知道哪里有兼容性問題。他們可能還是上帝,只是做出來的不再是伊甸園了。以今天軟件系統的復雜度而言,每個團隊都維護一大堆上帝成本太高。
因此,程序員很多對他們作品的假設,未經證實之前不一定正確:
“這個列表會列出所有結果” -- 沒有或者很多結果的時候呢?
“這個列表不會有重復的對象” -- 刪除A之后添加A,且異步的刪除失敗的時候呢?
“這個列表的輸出不會錯的“ -- 多個數據源同時對其輸入大量的數據呢?
這個結論會導致軟件測試的一個可怕悖論:測試用例不少是來自程序員的假設,不正確的假設使得這些用例可能是不正確或無意義的。
這正是很多測試書籍介紹的邊界、性能、壓力、可擴展和安全測試的由來:正是需要檢驗那些假設的真實性。
但是事情還沒完。
測試員也不是上帝,他們做出來的也不是伊甸園。
如果程序員的產出是代碼和bug修復,測試員的產出就是測試用例和bug報告。
我們剛才忽略了bug報告。
bug報告有兩個最重要的部分,重現步驟和錯誤細節。而其中出現的不正確的假設和推理主要有三種:
延伸閱讀
文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/