當前位置:
首頁 > 最新 > 人工智慧時代背景下的軟體測試

人工智慧時代背景下的軟體測試

1、人工智慧與機器學習

人工智慧(AI, Artificial Intelligence)與機器學習(ML, Machine Learning)是時下最火熱的技術方向之一。準確地講,人工智慧不等同於機器學習,機器學習只是人工智慧的一個子集。由於媒體的誤用,本文遵循媒體的叫法,文中提到的人工智慧,一般泛指機器學習。

人工智慧,顧名思義,就是希望創造出擁有像人類那樣智能的機器,這是人類的終極夢想之一。該詞早在1956年就提出了,當時的科學家曾樂觀地估計,二十年左右人類就可以將其實現。然而科學家也很快就發現其難度遠大於預估。在此之後的很長一段時間裡,人工智慧的研究陷入低谷。

通常我們將人工智慧分為弱人工智慧和強人工智慧,前者只專註於完成某個特定的任務,例如2016年戰勝圍棋世界冠軍李世石的Alpha Go,而強人工智慧,目前只存在於科幻電影之中。雖然強人工智慧仍然道路漫長,但是弱人工智慧卻有希望取得突破,至少從表現行為來看,它已經擁有了一些"智能"。那麼它是如何實現的呢?這主要歸功於一種實現人工智慧的方法--機器學習。

說到機器學習,我們先來回顧一下計算機程序解決問題的傳統模式:根據一套確定的規則編寫出計算機程序,接受收入然後獲得輸出:

圖1 - [1]

然而現實中,有很多問題無法用確定的規則來定義演算法,例如把手寫的數字圖片用計算機程序識別出來。因為每個人寫的都不一樣。但是,假如我們有大量的手寫數字圖片和實際結果數據的話,就可以通過這些數據的學習(訓練),使得計算機程序能夠自己找到其內在的方法,就好像是計算機程序學習了知識經驗一樣。這樣,下次再遇到手寫數字的時候,計算機程序就能夠自動識別了。這個過程就是機器學習。其解決問題的模式如下:

圖2 - [2]

機器學習的關鍵點在是找到訓練模型,利用大量的數據進行訓練,獲得最優模型,以用於對未來的問題進行預測與解決。機器學習當前在很多領域都有了迅速的發展,也有人將其引入軟體測試領域。

2、軟體測試

軟體測試的目的是為了發現軟體工程中存在的bug,從而提高軟體的質量。

早期軟體的規模小,複雜度低,那個時候基本沒有什麼軟體測試,軟體測試基本等同於開發人員的軟體調試。隨著軟體規模的擴大和軟體複雜度的提升,軟體測試變得越來越重要,軟體項目中也有了測試人員。

軟體測試發展到如今,基本可以分成兩類:

手工測試:

通過手工方式完成軟體的測試。這種方式費時費力,重複性的工作讓測試人員身心倍感疲倦。但是目前來講,軟體測試還不能完全杜絕手工測試,其原因主要在於有些手工測試轉換成自動化測試難度太大或者成本太高。

自動化測試:

藉助自動化測試工具或者測試人員自己編寫測試腳本完成軟體的測試。自動化測試極大的提高了軟體測試的效率,減輕了測試人員的負擔。理論上來說,重複性的測試工作都應該做到自動化。在有些人力資源不充足的團隊當中,開發人員本身就要負責單元測試(UT)的開發,這雖然違背軟體測試的某些原則,但是卻能實實在在地提高軟體開發的質量。

不管哪種測試,軟體測試的根本是利用預測的結果和實際測試時的結果進行比較來完成測試功能,所以軟體測試用例的預期結果在測試前就確定了。

隨著軟體規模的擴大,這種傳統的測試方法越來越難以應對日益增長的測試對測試人員的挑戰。

圖3- [3]

如上圖所示,隨著軟體開發時間的增長,功能點可能會按指數級增長,因為新的功能和狀態與現有的功能進行交互,而測試卻只能一次增加一個,只能線性增長,這中間存在測試無法覆蓋的空白。同時,因為確定的測試預期結果,當軟體功能發生變化的時候,測試用例也得做出修改,維護自動化測試用例也是軟體測試隱藏的成本。

3、人工智慧可能將給軟體測試帶來哪些變化?

人工智慧時代,軟體測試可能會發生巨大變化。

首先,測試變得更簡單了。機器學習擅長的就是通過數據訓練來完成新的情形的處理,這意味著測試人員將不需要再大量手工編寫自動化測試用例和執行測試,而是利用AI自動創建測試用例並執行!

測試人員的主要工作不再是執行測試,甚至也不是設計自動化測試用例,而是提供輸入輸出數據來訓練AI,最終可以讓AI自動生成測試用例並執行。對於某些通用測試,只需要一個被驗證過的模型,甚至連數據也無需提供。

這種能夠自動生成測試用例的系統叫bot,可以一次生成大量的組合測試用例,有效解決功能點和測試點的覆蓋空白問題。大約80%的測試工作到時候將由bot自動完成,而測試人員的主要精力將會被解放出來以放在更有創造性和探索性的測試任務上。

這不是幻想,而是已經變為現實,比如Appdiff是一個基於AI的移動app 自動化測試平台,能夠完成一個典型移動app 90%的界面測試,而且它比人手工測試做得更好。

其次,AI bot可以發現更多的軟體bug。AI bot一邊測試一邊時刻不停地新增數據輸入,測試能力會越來越好,因而能夠發現更多的bug。與此同時,對於迭代頻繁的軟體開發而言,當一個regression bug發現後,測試人員常常需要確定這個bug是什麼時候引入的,這往往需要耗費大量的精力和時間,而AI bot能夠持續地跟蹤軟體開發過程,找出其中bug被引入的時間,從而為開發人員提供有效信息。

最後,基於AI的測試也會讓測試人員感到困惑。測試人員可能會懷疑AI測試的有效性,要消除這種不信任,測試人員需要掌握不同於傳統測試人員所需的技能,他們需要更多聚焦在數據科學技能上,還需要了解一些機器學習的原理。

說到這裡,也許有人會問,測試人員的工作會被AI搶走嗎?

筆者總覺得答案是,也不是。說是,因為AI bot比較適合那些重複性較強的測試任務,如果測試人員的工作內容重複性較高,無創造性,那麼遲早會被AI取代。然而對於那些需要一些創造性和比較困難的測試任務,AI目前還無能為力。

"AI is the new electricity",這是Stanford教授Andrew.Ng對於AI的一個很好的觀點,對於軟體測試來說,AI是一個工具,一個聰明的助手。而對於測試人員來說,需要擁抱變化,提升能力,這樣才能更好地利用AI帶來的能量!

來源:51Testing軟體測試網


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Testin雲測 的精彩文章:

怎麼提交一個漂亮的Bug?

TAG:Testin雲測 |