自動化軟體測試與人工測試比較

  • 2019 年 12 月 12 日
  • 筆記

來源:http://www.51testing.com

 既然現在有了自動化測試,甚至現在許多團隊在使用人工智慧的方法,逐漸讓機器來取代人的測試。那麼作為測試工程師的人未來會不會消失?這是一個擺在許多人面前的一個嚴肅的問題。去年剛剛過世的著名的天體物理學家斯蒂芬·威廉·霍金(Stephen William Hawking)先生曾經警告世人:未來人工智慧也許會是人類的終結者!是否會有這麼嚴重嗎?在回答這個問題前,先來看一下自動化測試優勢和劣勢。

  (1)自動化測試的優勢

  ● 自動化測試可以執行手工測試相當困難或根本做不到的測試

  對於軟體性能測試中的並發測試、疲勞性測試和強度測試,如果單純使用人工測試是不可能完成的。記得在作者剛剛從事軟體測試那個時候(2002年左右),中國軟體性能測試工具少之又少,但是在工作中客戶又提出了性能需求,經理竟然讓五個工程師打開同一個產品的商品模糊查詢介面,輸入查詢內容,然後經理喊口號:「1、2、3、點」,接下來五個工程師點擊【查詢】按鈕,試圖來進行性能並發測試。現在想起來真是覺得可笑。

  還有一種手工測試相當困難的測試是Jams Batch在他的著名的《探索式軟體測試》一書中提到的「強迫症測試法」。如果執行用戶登錄-登出的操作1000次,試圖發現程式會不會出現空指針異常或者記憶體泄漏的問題。如果讓一個工程師採用人工的方法來完成,其難度可想而知。

  ● 自動化測試具有一致性和可重複性

  在手工測試的時候,往往會出現測試人員在測試時候發現了缺陷,可是由於時間過得太長,或者缺陷報告中操作步驟描述不清楚,或者其他因素,在給開發人員定位問題的時候不能重現。在排除一些偶發性問題的情況下,採用自動化測試可以有效地防止此類問題的發生。

  ● 自動化腳本完全可復用

  初期採用錄製回放的工具進行自動化測試,比如早起的QTP、基於Firefox的Selenium1插件。最主要的原因是由於這些工具對於一些公用的模組難於復用。比如對於登錄才可以使用的功能每次開始的時候都要執行登錄操作,測試完畢為了讓其他測試用例可以繼續執行必須執行登出操作。由於早期的工具不具有復用性,相同的操作集中在各個不同的地方,這給軟體測試腳本的維護帶來的麻煩,而現在的自動化測試腳本均採用類似JAVA、Python這些面向對象的語言來完成,程式碼的復用發生了很大的改善。目前面向頁面的封裝、面向業務流的封裝成為了自動化測試腳本的「寵兒」。

  ● 自動化測試使軟體更有信任度

  由於自動化測試具有一致性和可重複性,所以自動化測試一旦發現問題,在排除測試程式碼、測試數據、對需求誤解的錯誤外,其結果還是可以信任的,因為它裡面沒有人的主觀意識的參與。

  ● 自動化測試適合做兼容性測試

  如果沒有自動化測試,比如做基於WEB軟體兼容性測試往往採用每個測試工程師的機器上安裝不同的作業系統和瀏覽器,運行同一版本。這樣操作,如果測試工程師比較多的情況下可能還可行,但是一旦測試工程師比較少的情況下可能就將成為問題。如果有了自動化測試,只要把測試環境搭建起來,使用同一腳本在不同環境下自動運行,就可以做到有效的兼容性測試了。

  ● 自動化測試使回歸測試更方便、可靠

  天下武功,唯快不破。現在移動互聯網時代,講究的一個字「快」。中國外許多大型的互聯網公司平均一天發布的軟體發布版本的次數高達2到4次。特別現在興起的Agile、DevOps中特別關注自動化測試。因為自動化測試使回歸測試變得更方便、更可靠。

  接下來談談自動化測試的劣勢。

  (2)自動化測試的劣勢

  ● 手工發現的缺陷遠遠比自動化測試得多

  在目前如果不採用基於AI的自動化測試下,有機構做過統計,估計80%的缺陷是由人工測試發現的,自動化測試發現的缺陷僅佔20%。在ISTQB初級大綱中,軟體測試目的被概括為四點,其兩點為「發現程式缺陷」和「對程式樹立品質信心」。所以手工測試主要針對於新開發出來的特性,其目的主要在於「發現程式缺陷」;而自動化測試化測試主要在於對老特性的回歸測試,其目的主要在於「對程式樹立品質信心」。在作者提出的純軟體測試理念中,把軟體測試分為「測」與「試」兩部分:「測」即驗證軟體是否滿足用戶提出的需求,主要通過自動化測試來實現;而「試」即試圖找出軟體中存在的缺陷,主要通過手工測試來實現。所以自動化測試與手工測試缺一不可,互為補充。見下圖

  ● 自動化測試對測試人員的技術要求較高

  自動化測試工程師首先要會使用自動化測試工具,其次由於現在基於腳本開發的自動化測試越來越受到了青睞,所以要求自動化測試工程師需要掌握至少一門程式語言,且對應這門語言的測試架構框架、對資料庫操作能力等有一定的要求。所以採用自動化測試技術對人的要求是非常高的。這也使進入軟體測試的門檻變高了。

  ● 自動化測試成本投入高、風險大

  使用自動化測試工具是否可以提高研發本產品的品質?現有的工程師是否具有使用自動化測試的能力?公司是否有能力去購買一些商用的自動化工具?培養工程師學習自動化是否可行?是否被培養起來的工程師存在離職,另求高薪的可能?這些問題都是作為決策層應該考慮的問題。事實也很多次得證明,自動化測試是個好東西,但不是銀彈,關鍵看企業的產品是否適用以及企業如何去使用。

  ● 自動化測試是死的,不具有情感

  電腦畢竟是機器,不具有人的抽象能力、想像能力等情感,所以類似於一些UI/UX、需要具有發散式思維的測試是不能完全依賴自動化測試。即使是同一份基於文字的自動化測試用例,讓多個人去執行,或者讓同一個人在不同時刻去執行,往往會發現不同的缺陷。另外在自動化測試優勢中提到的兼容性測試,對於產品的解析度適應性,文字會不會超出控制項等問題,自動化測試可能也是無能為力的。

  ● 自動化測試完全不可能取代手工測試

  如上所述,自動化測試完全不可能取代手工測試。現在有些書籍、論壇、社群把自動化測試談得神乎其神,無所不能、無所不可,這是對自動化測試的曲解,是一種不負責任的表現。正如敏捷、DevOps一樣,是否適用,要根據自身產品特性、組織架構能力等各個方面來考慮。「世界上沒有銀彈!!!」

星雲測試

http://www.teststars.cc

奇林軟體

http://www.kylinpet.com

聯合通測

http://www.quicktesting.net

Tags: