軟件測試的概念與定義
軟件測試是伴隨著軟件的產生而產生的。早期的軟件開發過程中,那時軟件規模都很小、復雜程度低,軟件開發的過程混亂無序、相當隨意,測試的含義比較狹窄,開發人員將測試等同于“調試”,目的是糾正軟件中已經知道的故障,常常由開發人員自己完成這部分的工作。對測試的投入極少,測試介入也晚,常常是等到形成代碼,產品已經基本完成時才進行測試。
直到1957年,軟件測試才開始與調試區別開來,作為一種發現軟件缺陷的活動。由于一直存在著“為了讓我們看到產品在工作,就得將測試工作往后推一點”的思想,潛意識里對測試的目的就理解為“使自己確信產品能工作”。測試活動始終后于開發的活動,測試通常被做為軟件生命周期中最后一項活動而進行。當時也缺乏有效的測試方法,主要依靠“錯誤推測 Error Guessing”來尋找軟件中的缺陷。因此,大量軟件交付后,仍存在很多問題,軟件產品的質量無法保證。
到了20世紀70年代,這個階段開發的軟件仍然不復雜,但人們已開始思考軟件開發流程的問題,盡管對“軟件測試”的真正含義還缺乏共識,但這一詞條已經頻繁出現,一些軟件測試的探索者們建議在軟件生命周期的開始階段就根據需求制訂測試計劃,這時也涌現出一批軟件測試的宗師,Bill Hetzel 博士就是其中的領導者。1972年,軟件測試領域的先驅Bill Hetzel博士(代表論著《The Complete Guide to Software Testing》),在美國的北卡羅來納大學組織了歷史上第一次正式的關于軟件測試的會議。在1973年,他首先給軟件測試一個這樣的定義:“就是建立一種信心,認為程序能夠按預期的設想運行。Establish confidence that a program does what it is supposed to do. ”后來在1983年他又將定義修訂為:“評價一個程序和系統的特性或能力,并確定它是否達到預期的結果。軟件測試就是以此為目的的任何行為。Any activities aimed at evaluating an attribute or capability of a program or system. ”在他的定義中的“設想”和“預期的結果”其實就是我們現在所說的用戶需求或功能設計。他還把軟件的質量定義為“符合要求”。他的思想的核心觀點是:測試方法是試圖驗證軟件是“工作的”,所謂“工作的”就是指軟件的功能是按照預先的設計執行的,以正向思維,針對軟件系統的所有功能點,逐個驗證其正確性。軟件測試業界把這種方法看作是的軟件測試的第一類方法。
盡管如此,這一方法還是受到很多業界權威的質疑和挑戰。代表人物是Glenford J. Myers(代表論著《The Art of Software Testing》)。他認為測試不應該著眼于驗證軟件是工作的,相反應該首先認定軟件是有錯誤的,然后用逆向思維去發現盡可能多的錯誤。他還從人的心理學的角度論證,如果將 “驗證軟件是工作的”作為測試的目的,非常不利于測試人員發現軟件的錯誤。于是他于1979年提出了他對軟件測試的定義:“測試是為發現錯誤而執行的一個程序或者系統的過程。The process of executing a program or system with the intent of finding errors.”這個定義,也被業界所認可,經常被引用。除此之外, Myers還給出了與測試相關的三個重要觀點,那就是:
1、 測試是為了證明程序有錯,而不是證明程序無錯誤;
2、 一個好的測試用例是在于它能發現至今未發現的錯誤;
3、 一個成功的測試是發現了至今未發現的錯誤的測試;
這就是軟件測試的第二類方法,簡單地說就是驗證軟件是“不工作的”,或者說是有錯誤的。Myers認為,一個成功的測試必須是發現Bug的測試,不然就沒有價值。這就如同一個病人(假定此人確有。,到醫院做一項醫療檢查,結果各項指標都正常,那說明該項醫療檢查對于診斷該病人的病情是沒有價值的,是失敗的。Myers提出的“測試的目的是證偽”這一概念,推翻了過去“為表明軟件正確而進行測試”的錯誤認識,為軟件測試的發展指出了方向,軟件測試的理論、方法在之后得到了長足的發展。第二類軟件測試方法在業界也很流行,受到很多學術界專家的支持。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/