前言
軟件測試是爲了評估軟件應用程序的功能,以肯定開發的軟件是否知足指定的要求,並肯定缺陷,以確保產品完好陷,從而生產出高質量的產品。而軟件測試分爲手工測試和自動化測試兩大類。手工測試和自動化測試都有各自的優勢和缺點,並且咱們知道項目都有很關鍵的要素:質量、成本和時間,任何項目的目標都是得到高質量的產出,同時控制完成項目所需的成本和時間,因此瞭解手工測試和自動化測試以及什麼時候使用手工測試和什麼時候使用自動化測試之間的區別是很是必要的。web

手動測試
對軟件進行手工測試以發現缺陷的過程。測試人員是站在用戶的視角,並確保全部功能都按照需求文檔中那樣工做。在這個過程當中,測試人員執行測試用例並在不使用任何自動化工具的狀況下手動生成報告。編程
手動測試類型
- 黑盒測試:黑盒測試是一種軟件測試方法,測試人員在測試中測試被測軟件的功能,而不查看內部代碼結構。這能夠應用於軟件測試的各個層次,如單元、集成、系統和驗收測試。
- 白盒測試:它是基於應用程序內部的代碼結構的測試。在白盒測試中,系統的內部視角以及編程技巧被用來設計測試用例。這種測試一般在單元級別進行。
- 單元測試:也稱模塊測試或組件測試。這樣作是爲了檢查源代碼的單個單元或模塊是否正常工做。一般它是由開發人員在開發人員的環境中完成的。
- 系統測試:測試完整的應用程序,以評估系統是否符合其客戶的需求,咱們稱之爲系統測試,也稱爲端到端測試。目標是已完成的系統,以確保軟件是否按預期工做。
- 集成測試:集成測試是測試兩個軟件單元之間接口的過程。集成測試有三種方式。大爆炸法,自上而下法,自下而上法。
- 驗收測試:一般它由最終用戶和測試人員一塊兒完成的,以驗證軟件的功能是否按照用戶需求來實現。進行測試後,客戶能夠接受或拒絕所提供的軟件功能。驗收測試的類型有Alpha、Beta和Gamma測試。
固然還有許多的手動測試種類,請查考《軟件測試筆記(三)多種多樣的測試類型》。segmentfault
什麼時候適用手動測試
- 探索性測試:由行業專家進行探索性測試。他們經過探索應用程序的功能來執行測試,而不瞭解詳細的需求。
- 可用性測試:驗證軟件是否用戶友好,是否被最終用戶溫馨地使用。主要重點是檢查最終用戶是否可以輕鬆理解和操做軟件。一個好的軟件應該是自我探索的,具備引導性的,而且不須要太多的培訓來操做它。
- 隨機測試:測試人員在不遵循任何文檔和測試設計技術的狀況下隨機測試軟件。若是試人員的知識很是豐富,則主要執行此類測試,測試人員在沒有任何測試用例或業務需求文檔的狀況下隨機測試應用程序。
什麼時候使用手動測試,而非自動化測試
- 當項目處於初始開發階段時,測試框架搭建完成前。
- 當測試用戶界面。
- 當須要進行探索性或隨機性測試。
- 若是項目是短時間的,與手動測試相比,編寫腳本和搭建測試框架很是耗時的時候。
- 若是測試用例不能自動執行驗證碼示例。
手動測試的優劣
優:
- 適用範圍廣,能夠在各類軟件上進行手動測試。
- 對於短生命週期產品更可取。
- 新設計的測試用例應該手動執行,以確保用例的正確性。
- 應用程序在自動化以前必須手動測試。
- 在需求頻繁變化的項目和GUI不斷變化的產品。
- 與自動化測試相比,它的初始投資更便宜。
- 開始手動測試所需的時間和費用更少。
- 它容許測試人員執行隨機測試。
- 測試人員沒有必要了解自動化工具和框架。
劣:
- 手工測試主要是在作迴歸測試時耗時,並且重複性很大。
- 與自動化測試相比,手動測試不太可靠,由於有人的影響。因此總會有人爲因素致使的一些錯誤。
- 從長遠來看,相比於自動化測試代價更高。
- 沒法重用,由於沒法記錄整個測試過程。
自動化測試
自動化測試是使用自動化工具來發現軟件缺陷的測試過程。在這個過程當中,自動化工具會自動執行測試腳本並生成結果。一些最流行的自動化測試工具是QTP、Selenium Webdriver,Jmeter, TC等。windows
經常使用的自動化工具:併發
- HP QTP
- Selenium
- LoadRunner
- SilkTest
- TestComplete
- WinRunner
- Jmeter
什麼時候適用自動化測試
- 迴歸測試:對一個已經測試過的缺陷,在修改後進行的重複測試,目的是用於發現因爲軟件或其餘相關或不相關的軟件組件的變化而引入的任何缺陷。迴歸測試很是適合作自動化測試,由於軟件常常更改代碼,並且須要進行及時的測試。
- 性能測試:測試軟件的速度、可伸縮性和穩定性。性能是指實現知足項目或產品性能目標的響應時間、吞吐量和資源利用率級別。它很是適合自動化測試。
能夠同時進行手動和自動化測試的測試類型:框架
- 系統測試:測試軟件是否符合其指定的要求實現,也稱端到端測試。目標是驗證已完成的系統,以確保應用程序是否按預期工做。
- 單元測試:單元測試也稱爲模塊測試或組件測試。爲了檢查代碼的單元或模塊是否正常工做。一般由開發人員在開發人員的環境中完成的。
- 驗收測試:一般它由最終用戶和測試人員一塊兒完成的,以驗證軟件的功能是否按照用戶需求來實現。進行測試後,客戶能夠接受或拒絕所提供的軟件功能。驗收測試的類型有Alpha、Beta和Gamma測試。
哪些場景不適合自動化測試
什麼時候使用自動化測試,而非手動測試
- 處理重複和耗時的任務
- 併發測試
- 非功能性測試,如負載、性能、壓力測試
- 避免人爲錯誤
自動化測試的優劣
優:
- 自動化測試的執行速度更快。
- 從長遠來看,它比手工測試便宜。
- 自動化測試更可靠。
- 自動化測試可擴展性好和更通用。
- 用於迴歸測試。
- 可重用,由於自動化過程能夠被記錄。
- 它不須要人爲干預。測試腳本能夠在無人蔘與的狀況下運行。
- 它有助於提升測試覆蓋率。
劣:
- 僅推薦用於大型,穩定的產品。
- 自動化測試最初費用很昂貴。
- 大多數自動化工具都很昂貴,固然除開源軟件外。
- 它會有有一些限制,例如處理驗證碼,獲取ui的視覺方面的信息。
- 需求反覆變化時。
- 不是全部的工具都支持各類測試如windows、web、移動性、性能/負載測試。
總結
自動化測試 |
手動測試 |
自動化測試更可靠。每次執行相同的操做。它消除了人爲犯錯誤的風險。 |
手動測試相對不太可靠因爲可能會出現人爲失誤,人工檢測也有可能不許確。 |
自動化測試初期投資較高。測試工具須要投資從長遠來看,它比手動的便宜。與手工測試相比,從長遠來看,性價比更高。 |
手工測試的初始投資小於自動化。人力資源須要投資。從長遠來看,與自動化測試相比,性價比更低。 |
當咱們進行迴歸測試時,自動化測試則是很是有意義的。 |
若是測試只須要運行一次或兩次,那麼手動測試是實用的選擇,在這種狀況下,測試用例不會重複運行。 |
執行是經過軟件工具完成的,所以它比手動測試更快,而且與手動測試相比須要更少的人力資源。 |
測試用例的執行很是耗時,須要更多的人力資源 |
不可能進行探索性測試 |
能夠進行探索性測試 |
性能測試如負載測試、壓力測試等是自動化測試的選擇。 |
手動化的性能測試不是一個好的選擇 |
自動化測試能夠並行完成,減小測試執行時間。 |
在手動測試中並行執行測試用例不是一件容易的事情。咱們須要更多的人力資源來作到這一點,而且變得更加昂貴。 |
它能夠並行完成,減小測試執行時間。 |
在手動測試中並行執行測試用例不是一件容易的事情。咱們須要更多的人力資源來作到這一點,而且變得更加昂貴。 |
須要一些腳本方面的知識 |
一般不須要腳本知識 |
集成到CI/CD(持續部署/發佈)很方便 |
沒法集成到CI/CD(持續部署/發佈) |
人工干預很少,因此作用戶界面測試效果很差 |
它涉及到人工干預,因此進行用戶界面測試是很是有效的 |
無論黑貓白貓,抓到老鼠的就是好貓。在測試中也是一樣,無論自動化測試和手動測試,能發現缺陷,最合適的就是好的測試方法。但願上面手動測試和自動化測試的區別和適用範圍能夠幫助你們找到合適的測試方法。若是你們有感興趣的話題和相關感覺,也請回復到評論中和你們一塊兒分享。工具