實踐證明,盡管人們在開發軟件的過程中使用了許多保證軟件質量的方法和技術,但開發出的軟件中還會隱藏許多錯誤和缺陷。這對於規模大、復雜性高的軟件更是如此。所以,嚴格的軟件測試對於保證軟件質量具有重要作用。
測試的根本目的就是為了發現盡可能多的缺陷。這里的缺陷是一種泛稱,它可以指功能的錯誤,也可以指性能低 下,易用性差等等。因此,測試是一種“破壞性”行為。測試的目的是發現程序中的錯誤,是為了證明程序有錯,而不是證明程序無錯。即軟件測試是為了“證偽” 而非“證真”。把證明程序無錯當作測試目的不僅是不正確的, 完全做不到的,而且對做好測試沒有任何益處,甚至是十分有害的。軟件測試要設法使軟件發生故障,暴露軟件錯誤, 能夠發現錯誤的測試是成功的測試,否則是失敗的測試。
軟件測試的目的決定了如何去組織測試。如果測試的目的是為了盡可能多地找出錯誤,那么測試就應該直接針對軟件比較復雜的部分或是以前出錯比較多的位置。
測試階段的基本任務應該是根據軟件開發各階段的文檔資料和程序的內部結構,精心設計一組“高產”的測試用例(一組輸入數據和與之對應的預期的輸出結果,在設計測試用例時,應包括合理的輸入數據和不合理的輸入數據),利用這些用例執行程序,找出軟件潛在的缺陷一個好的測試用例很可能找到至今為止尚未發現的缺陷的用例;一個成功的測試則是指揭示了至今為止尚未發現的缺陷的測試。
主觀上由於開發人員思維的局限性,客觀上由於目前開發的軟件系統都由相當的復雜性,決定了在開發過程中出現軟件錯誤是不可避免的。若能及早排除 開發中的錯誤,就可以排除給后期工作帶來的麻煩,也就避免了付出高昂的代價,從而大大地提高了系統開發過程的效率,因此,軟件測試在整個軟件開發生命周期 各個環節中都是不可缺少的。
軟件測試總的目標是:確保軟件的質量,所以測試並不僅是個技術問題,更是個職業道德問題。