作為測試人員,熱衷于“技術”討論和交流是一件可喜可賀的事。從中可以感覺到軟件測試在中國迅速發展的開端和潛力。但是作為企業的管理決策者,是否也應該以同樣的熱情來思考“方法”問題呢?特別是當一個軟件企業的軟件測試從無到有,或者當企業已有一定的軟件測試的投入,但發現其實效并不顯著,甚至由于測試的引入而帶來了新的管理上的混亂。
這個時候方法論的思考,更有利于發現問題的根源。
即便是一個基層的測試人員,當積累了一定的技術經驗后,也應該不時從日常的具體工作中走出來,在一個較高層次上進行回顧總結和借鑒,并試著提出一些優化和改進的措施,這無論對專業上還是對事業上的成長都是非常有意義的。微軟在軟件測試方面有很多值得一提的經驗,在此我想以我個人的體會和思考,同大家一同進行一些探討。
這里有一點須要特別說明,盡管微軟的方法已被微軟的實踐多次證明是成功的,非常有效的,但這并不意味著這些方法在中國的軟件企業中有廣泛的可行性。一種方法是否可行還受到很多其他因素的影響,比如企業類型(微軟是生產平臺軟件和通用軟件產品的企業),企業管理體制,企業文化等等。所以我的目的只是給大家一些思路和借鑒。
兩類經典的軟件測試方法
在具體介紹微軟的軟件測試方法之前,我想首先從概念,或理念的層面上來理解究竟甚么是軟件測試,目的是從中導出微軟測試方法的理論根源。
傳統上認為軟件測試方法從總體上分為兩類。
第一類軟件測試方法是試圖驗證軟件是“工作的”,所謂“工作的”就是指軟件的功能是按照預先的設計執行的;而第二類測試方法則是設法證明軟件是“不工作的 ”。
提出第一類方法的代表人物是軟件測試領域的先驅Dr. Bill Hetzel(代表論著《The Complete Guide to Software Testing》),他曾于1972年6月在美國的北卡羅來納大學組織了歷史上第一次正式的關于軟件測試的論壇。他首先在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. ”在他的定義中的“設想”和“預期的結果”其實就是我們現在所說的用戶需求或功能設計。他還把軟件的質量定義為“符合要求 ”。
第一類測試可以簡單抽象地描述為這樣的過程:在設計規定的環境下運行軟件的功能,將其結果與用戶需求或設計結果相比較,如果相符則測試通過,如果不相符則視為Bug。這一過程的終極目標是將軟件的所有功能在所有設計規定的環境全部運行,并通過。
在軟件行業中一般把第一類方法奉為主流和行業標準。1990年的IEEE/ANSI標準將軟件測試進行了這樣的定義:“就是在既定的狀況條件下,運行一個系統或組建,觀察記錄結果,并對其某些方面進行評價的過程。The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component (IEEE/ANSI, 1990 [Std 610.12-1990]”這里所謂“既定的狀況”也可理解為需求或設計。
盡管如此,這一方法還是受到很多業界權威的質疑和挑戰。代表人物是Glenford J. Myers(代表論著《The Art of Software Testing》)。他認為測試不應該著眼于驗證軟件是工作的,相反應該首先認定軟件是有錯誤的,然后去發現盡可能多的錯誤。他還從人的心理學的角度論證,將 “驗證軟件是工作的”作為測試的目的,非常不利于測試人員發現軟件的錯誤。于是他于1979年提出了他對軟件測試的定義:“就是以發現錯誤為目的而運行程序的過程。The process of executing a program or system with the intent of finding errors.”
這就是軟件測試的第二類方法,簡單地說就是驗證軟件是“不工作的”,或者說是有錯誤的。他甚至極端地認為,一個成功的測試必須是發現Bug的測試,不然就沒有價值。這就如同一個病人(假定此人確有。,到醫院做一項醫療檢查,結果各項指標都正常,那說明該項醫療檢查對于診斷該病人的病情是沒有價值的,是失敗的。
我并不完全同意這一看法。第二類軟件測試方法在業界也很流行,受到很多學術界專家的支持。大家熟悉的Ron Patton在《軟件測試》(中文版由機械工業出版社出版,具說此書是目前國內測試新手入門的經典教材)一書的第10頁,有一個明確而簡潔的定義:“軟件測試員的目標是找到軟件缺陷,盡可能早一些,并確保其得以修復!庇行┸浖髽I以Bug數量來作為考核測試人員業績的一項指標,其實就是接受了這樣的方法。
兩類方法的優劣對比
雖然軟件測試總的目的是為了軟件產品的質量,但很明顯這兩類測試方法在具體目標、或指導思想上截然相反。由此也決定了它們在思路、過程和測重點上有很大的差別,并各有利弊的。
第一類測試方法以需求和設計為本,因此有利于界定測試工作的范疇,更便于部署測試的側重點,加強針對性。這一點對于大型軟件的測試,尤其是在有限的時間和人力資源情況下顯得格外重要。而第二類測試方法與需求和設計沒有必然的關聯,如果計劃管理不當,測試活動很容易丟失重點,走入歧途。
文章來源于領測軟件測試網 http://www.kjueaiud.com/