自動化測試能否取代手工測試
手工測試和自動化測試都是軟件質量保障的重要途徑,也是很多測試人員爭相討論的兩種測試方法。如何正確的看待這兩種測試方式,更好的使兩者相互結合是我們現在所要討論的話題。本文總結了自動化測試和手工測試的優點和缺點,列舉了各自的適用范圍,并分析了自動化測試無法最終取代手工測試的原因。
1. 自動化測試是靈丹妙藥嗎?
自動化測試有眾多的優點,例如:快速、全面、可靠、可編程、可重復使用、可重用。自動化測試產品和解決方案的潛在客戶經常會以下面的思考方式設想自動化測試:
快速:顯然測試腳本執行比人工執行要快得多,而且和手工測試相比,計算機可以不知疲憊的執行測試,一天24小時不休息的工作
全面:所有的測試都能夠實現自動化,你可以構建一個覆蓋應用程序每一個功能的測試包
可靠:每次測試腳本在運行時執行相同的操作,因此減少了人為的錯誤,排除了人測試的不確定性,使測試結果更加客觀。
可編程:你可以編寫復雜的測試腳本來找出應用程序中隱藏的信息
可重復:對于重復執行相同操作,計算機軟件可以輕松完成
可重用:你可以重復使用測試腳本來測試應用程序的不同版本,即使用戶界面發生了變更
如此看來,完全可以用自動化測試取代手工測試嗎?答案是否定的。無庸質疑,自動化測試具有上述優點,但這些優點是在一定的約束條件下存在的。盡管人們對自動化測試有美好的愿望,但自動化測試并非我們夢寐以求的神兵利器。
Frederick P. Brooks, Jr. 曾在1986年寫過一篇題為《沒有銀彈:軟件工程的根本和次要問題》的文章(No Silver Bullet – Essence and Accidents of Software Engineering)。這篇文章列舉了人們對于軟件工程技術發展的一些期望,并與現實進行了對比。他的論點歸納如下:沒有一種單純的技術或管理上的進步,能夠獨立地承諾在10年內大幅度地提高軟件的生產率、可靠性和簡潔性。Brooks鼓勵我們將技術和方法視作一種演進手段,而并非革命。
我完全同意Brooks的觀點,這有助于我們對理解自動化測試的真正含意,,自動化測試或者說自動化測試策略及工具的實現,毫無疑問具有強大功能、高效等使我們獲益匪淺,但只是測試人員工具箱里的一件利器,它無法取代測試人員的地位。
自動測試生來就是用腳本寫成的,而不是探索性的,它需要我們設定上下文后才能在一定的范圍內為特定的目的而執行。即便我們使用的是一個引入了所有可能情況的自動測試組合,我們的測試也只能在它們覆蓋的地方游刃有余,但對于其它沒有涵蓋到的地方,它們就鞭長莫及了。如果出現了哪些沒有預料到的情況,那么它們很可能就失效了,而且即使它們能夠從這些情況中恢復過來,它們還是無法停止正在處理的任務并檢查沒有預料到的情況。很顯而易見將所有測試都自動化是不切實際的。
2. 手工測試會被自動化測試替代嗎?
也許有人認為“手工測試沒有技術含量,總有一天會被自動化測試所替代”,實際上這種認識是不全面的。測試是依靠知識和智慧作為生產資料的一項工作,這要求測試人員具備較強的業務知識、較高的計算機操作能力和深厚的測試理論基礎。通過設計科學合理的測試用例,正確的執行用例、準確的分析測試結果,才可能得到客觀的測試結論。
手工測試的***特點是具有探索性,可以依據測試工作的進展適時調整測試策略,尤其是在需要進行人為主觀判斷和主觀感覺來對被測試對象做出評價時,則手工測試將是最理想的選擇,例如:在進行用戶體驗測試時,測試者基于用戶的使用習慣和思維模式出發,結合實際的業務場景,對軟件產品的外觀、操作方式等方面進行檢查。從而體驗軟件產品的使用者對產品的印象、感覺,測試既有的軟件使用習慣和業務思維模型的綜合反映。提出軟件產品在方便、易用、符合思維習慣方面的修改意見。
手工測試有其不可替代的地方,因為人具有很強的判斷能力,而工具沒有。手工測試不可替代的地方至少包括以下幾點。
測試用例的設計:測試人員的經驗和對錯誤的判斷能力是工具不可替代的。
界面和用戶體驗測試:人類的審美觀和心理體驗是工具不可模擬的。
正確性的檢查:人們對是非的判斷、邏輯推理能力是工具不具備的。
3. 什么時候該用自動化測試?
對于一些基本的、邏輯性不強的操作,可以使用自動化測試工具。應該說,現在性能測試、壓力測試等方面,自動化測試有其不可替代的優勢。它可以用簡單的腳本,實現大量的重復的操作。從而通過對測試結果的分析,得出結論,這樣不僅節省了大量的人力和物力,而且使測試的結果更準確。對于一些邏輯性很強的操作,如果自動化測試不是很健全的話,不建議使用。因為這需要比較復雜的腳本語言,不可避免的增加了由于測試腳本的缺陷所造成測試結果錯誤的誤差。這時就需要手動測試了。
采用手工回歸測試,不但代價昂貴,而且容易出錯。自動化測試可以減少但不能消除這種工作的工作量。測試者可以有更多的時間去從事更有意義的測試,例如在應用程序在復雜的場景下的不同處理等,盡管測試就是要花費更長的時間找到錯誤,但比不意味著因此而要付出更高的代價。所以選擇正確的測試方法是尤為重要的。
總結起來自動化測試適用的情況如下:
回歸測試。這可能是自動化測試最主要的任務,特別是在程序修改比較頻繁時,效果是非常明顯的。由于回歸測試的動作和用例是完全設計好的,測試期望的結果也是完全可以預料的,將回歸測試自動運行,可以極大提高測試效率,縮短回歸測試時間。
可以運行更多更繁瑣的測試。自動化的一個明顯的好處是可以在較少的時間內運行更多的測試。
可以執行一些手工測試困難或不可能進行的測試。比如,對于大量用戶的測試,不可能同時讓足夠多的測試人員同時進行測試,但是卻可以通過自動化測試模擬同時有許多用戶,從而達到測試的目的。
更好地利用資源。將繁瑣的任務自動化,可以提高準確性和測試人員的積極性,將測試技術人員解脫出來投入更多精力設計更好的測試用例。有些測試不適合于自動測試,僅適合于手工測試,將可自動測試的測試自動化后,可以讓測試人員專注于手工測試部分,提高手工測試的效率。
測試具有一致性和可重復性。由于測試是自動執行的,每次測試的結果和執行的內容的一致性是可以得到保障的,從而達到測試的可重復的效果。
測試的復用性。由于自動測試通常采用腳本技術,這樣就有可能只需要做少量的甚至不做修改,實現在不同的測試過程中使用相同的用例。
增加軟件信任度。由于測試是自動執行的,所以不存在執行過程中的疏忽和錯誤,完全取決于測試的設計質量。一旦軟件通過了強有力的自動測試后,軟件的信任度自然會增加。
4. 什么時候該用手工測試?
手工測試更適合測試業務邏輯,因為測試人員學習業務后執行測試要比交給自動化容易得多。手工測試者最適合成為領域專家,依據他們自身對業務的理解去評價復雜的業務邏輯實現的正誤,通過觀察分析細微的邏輯問題找到問題的癥結。
另外,從經濟性的解度考慮,執行自動化測試需要事先花費大量的時間和精力來初始化腳本,完善自動化測試的上下文。這對于某些情況是不適合的,比如說在某些有時間要求的項目中,初始化自動化測試腳本所需時間是不可接受的。在這樣的情況下手工測試具有更強的靈活性。
總結起來手工測試適用的情況如下:
界面測試
用戶體驗測試
探索性測試
周期短并且一次性的項目
進度非常緊張的項目
需求非常不穩定的項目
界面尚未確寫
使用了很多第三方或自定義控件的項目
5. 結論
手工測試和自動化測試也是很多測試人員爭相討論的兩種測試方法。有人對自動化測試趨之若鶩,也有人對自動化測試嗤之以鼻。在做出如何看待自動化測試的決定之前,首先要對自動化測試有一個清晰的認識。
自動化測試是對手工測試的一種補充,自動化測試不可能完全替代手工測試,因為很多數據的正確性、界面是否美觀、業務邏輯的滿足程度等都離不開測試人員的人工判斷。而僅僅依賴手工測試的話,則會讓測試過于低效,尤其是回歸測試的重復工作量對測試人員造成了巨大的壓力。
因此,自動化測試僅僅是某些條件下手工測試的一種補充,而無法全面取代手工測試。