1979年,Glenford Myers在《The Art of Software Testing》一書中提出“測試的目的是證偽”這一概念,推翻了過去“為表明軟件正確而進行測試”的錯誤認識,為軟件測試的發展指出了方向,軟件測試的理論、方法在之后得到了長足的發展。
測試不是挑毛病
然而,對測試領域先行者Glenford Myers先生“測試的目的是證偽”這一概念理解也不能過于片面。在很多軟件工程學、軟件測試方面的書籍中都提到一個概念“測試的目的是尋找錯誤,并且是盡最大可能找出最多的錯誤”。這很容易讓人們認為測試人員就是“挑毛病”的,而由此帶來諸多問題。
我們可以假想在一個軟件開發公司內,軟件測試人員專注于“挑毛病”,開發人員和公司管理層每天會得到這樣“簡潔”的測試報告“在今天的測試過程中,系統出現10次宕機現象”。
從“挑毛病”的角度看,測試人員已經很好的完成了自己的工作,但其工作成果對開發人員和公司管理層幾乎沒有任何幫助。開發人員面對這樣的測試報告是無法對軟件進行任何修改的;而公司管理層也會疑惑軟件質量到底如何,系統能否如期發布。
長此以往,必然會造成開發人員和測試人員之間無法調和的矛盾;而公司管理層也會認為,測試團隊只是“帶來壞消息的人”,對公司產品沒有提供任何幫助,不如取消為好。
這樣的例子看似比較極端,業內普遍認為類似的問題僅出現在一個初創測試團隊的公司內,但實際的情況遠沒有這樣樂觀,這類現象甚至還蔓延到近年來蓬勃興起的部分第三方測試機構之中。
一個軟件開發公司的管理者,拿到一份剛由某第三方測試機構完成的測試報告,報告結論是該公司開發的軟件無法完成預定的需求,在500個用戶并發交易的情況下會發生大量交易失敗。應該說這樣的報告確實挑出了軟件的“毛病”,但報告中并未提及造成交易失敗的原因,是硬件資源不足、支撐軟件參數設置錯誤還是應用開發問題。這樣的報告會使得委托測試單位置疑自己投資進行第三方測試的是否有實際幫助。
造成這些問題的原因歸根結底就是對“測試的目的是證偽”這一概念的片面理解。那么,一次成功的測試是如何對問題進行闡述的呢?質量工程學中軟件失效的機理給出了很好的答案。
軟件錯誤是人為錯誤
質量工程學中對于軟件失效是這樣分析的由于軟件內部邏輯復雜,運行環境動態變化,且不同的軟件差異可能很大,因而軟件失效機理可能有不同的表現形式。
譬如有的失效過程比較簡單,易于追蹤分析,而有的失效過程可能非常復雜,難于甚至不可能加以詳盡描述和分析,尤其是運行于高度復雜實時環境中的大型軟件。
但總的說來,軟件失效機理可描述為軟件錯誤,軟件缺陷,軟件故障,軟件失效。
軟件錯誤 軟件錯誤是指在軟件生存期內的不希望或不可接受的人為錯誤,其結果是導致軟件缺陷的產生??梢娷浖e誤是一種人為過程,相對于軟件本身,是一種外部行為。
軟件缺陷 軟件缺陷是存在于軟件(文檔、數據、程序)之中的那些不希望或不可接受的偏差,如少一逗點、多一語句等。其結果是軟件運行于某一特定條件時出現軟件故障,這時稱軟件缺陷被激活。
軟件故障 軟件故障是指軟件運行過程中出現的一種不希望或不可接受的內部狀態。譬如軟件處于執行一個多余循環過程時,我們說軟件出現故障。此時若無適當措施(容錯)加以及時處理,便產生軟件失效。顯然,軟件故障是一種動態行為。
軟件失效 軟件失效是指軟件運行時產生的一種不希望或不可接受的外部行為結果。
因此,軟件錯誤是一種人為錯誤。