如何將人工智慧技術應用到自動化測試上?

新夢想IT發表於2019-07-31

人工智慧一直科技最高階的地域,將程式程式碼、資料分析進行自動視覺化,依託軟體和硬體一體去模仿人類一些或繁瑣或簡單的工作。


此文也是關於人工智慧技術的探討,主題為:如何將人工智慧技術應用到自動化測試上?


在測試中加入AI,自動測試也變為可能。將無聊、重複的工作交給AI,這樣測試人員就可以用更多時間做其他測試方面的思考。


佈道師、Applitools的高階架構師Gil Tayar為我們介紹瞭如何將AI技術應用到自動化測試的內容。


InfoQ採訪了Tayar,諮詢了他有關現如今測試面臨的主要挑戰,自動化測試分為哪六個層次,軟體產業在這六個層次中取得了什麼樣的進展,如何實現自動視覺化測試,我們在測試中如何應用機器學習技術,以及AI給測試人員的工作會帶來什麼影響。


現如今測試面臨的主要挑戰是什麼?


Tayar:很遺憾的是,測試還沒有成為主流。我還記得在80年代、90年代的時候,整個行業都沒有把QA這個職業和手動測試軟體當一回事。不只是說沒有自動化測試,而是根本沒有測試!好在現在時代已經不一樣了,在交付產品之前測試人員都會定期測試軟體,而且很多人開始使用自動化測試。


如何將人工智慧技術應用到自動化測試上?


但在如今的“網際網路時代”,這還不夠。由於使用了敏捷方法,我們需要部署得越來越快,這其實是一件好事。因為越來越多開發人員會自己測試自己的軟體,而不是慢悠悠地等待專門的測試人員來測試他們的軟體。


但是,開發人員測試自己的軟體還沒有成為主流。大多數開發人員不會自己寫測試來檢查程式碼,他們選擇手動測試,或者等待測試人員進行測試,保證他們的軟體正常運作。


這正是測試面臨的主要挑戰,怎麼讓開發人員編寫自己的測試。而不幸的是,AI在這方面起不到什麼作用,AI只是測試時使用的工具,但如果你自己不測試,AI就沒用了。事實就是這樣,AI從現在到未來都只能作為測試的輔助,如果你自己不想測試,AI不可能自動幫你完成測試。


開發人員必須要有測試的想法,這就是我們在測試方面面臨的主要挑戰。


自動化測試的六個層次。它們分別是什麼?


Tayar:這個概念來源於自動駕駛的五個層次。它們描述了AI如何幫助我們進行測試。


完全沒有自動,你需要自己寫測試!


駕駛輔助:AI可以檢視到頁面,幫助你寫出斷言。你還是要自己寫“驅動”應用程式的程式碼,但是AI可以檢查頁面,並確保頁面中的期望值是正確的。


部分自動化:雖然能分辨實際頁面和期望值的區別這一點已經很好了,但是第二層次的AI需要有更深層的理解。比如說,如果所有頁面都有相同的變更,AI需要認識到這是相同的頁面,並向我們展示出這些變更。進一步來說,AI需要檢視頁面的佈局和內容,將每個變更分類為內容變更或是佈局變更。如果我們要測試響應式web網站,這會非常有幫助,即使佈局有細微變更,內容也應該是相同的。這是Applitools Eyes這樣的工具所處的層次。


如何將人工智慧技術應用到自動化測試上?


條件自動化:在第二層,軟體中檢測的問題和變更仍然需要人來審查。第二層的AI可以幫助我們分析變更,但不能僅僅透過檢視頁面判斷頁面是否正確,需要和期望值進行對比才能判斷。但是第三層的AI可以做到這一方面,甚至更多其他方面,因為它會使用到機器學習的技術。比如說,第三層的AI可以從視覺化角度檢視頁面,根據標準設計規則,例如對齊、空格、顏色和字型使用以及佈局規則,判斷設計是否過關。AI也能檢視頁面的內容,基於相同頁面之前的檢視,在沒有人工干預的情況下,判斷內容是否合理。我們還不能達到這一層次,但我們正在向這個方面努力。


高度自動化:直到現在,所有AI都只是在自動化地進行檢查。人類儘管使用自動化軟體,還是需要手動啟動測試,需要點選連結,而第四層的AI可以自動啟動測試本身。AI將透過觀察啟動應用程式的真實使用者的行為,理解如何自己啟動測試。這層的AI可以編寫測試,可以透過檢查點來測試頁面。但這不是終點,它還需觀察人的行為,偶爾需要聽從測試人員的指令。

完全自動化:我必須承認,這個層次有點恐怖。這個層次的AI可以和產品經理“交流”,理解產品的標準,自己寫測試,不需要人的幫助。


軟體產業在這六個層次中取得了什麼樣的進展?


Tayar:大多數公司肯定在第二層,目標向第三層努力。我相信要達到第四層需要一段時間,但我們終有一天是可以達到的。至於是否能達到第五層,我非常懷疑,但未來不可估量!(原文中引用了古猶太人毀壞第二聖殿的典故,比喻未來不可估量。)


如何實現自動視覺化測試?


Tayar:其實在幾年前,即使是開發人員都不能自動進行視覺化測試,更不要說使用AI了!由於基於畫素的演算法誤報率過高,截圖應用程式,根據預期進行檢查是不可能的。


但是隨著計算機視覺演算法和現代人工智慧(AI)技術的應用的發展,編寫視覺化測試已經成為現實。人們發現測試中缺少視覺化測試。由於視覺化測試的存在,現在我們可以測試到軟體的方方面面。


那我們如何使用AI技術避免誤報,AI是否能比單純比較畫素的演算法做得更好?答案不僅僅牽涉到一個技術,需要將不同演算法結合在一起,一個演算法解決一個準確度的問題,透過決策樹結合不同演算法的結果(有時候將一個演算法的結果應用到另一個演算法中)來確定最後的結果。但要使用什麼演算法呢?分割演算法就是一個例子,這個演算法試圖確定圖片的文字和影像部分。這不是一個簡單的問題,因為我們需要弄清,表情符號其實是文字,而影像中的文字是影像的一部分,並不是新的文字。這就是深度學習的魅力所在,由於我們程式碼中使用了深度學習技術,我們的準確率從88%提高到了96%。


所以要做到自動視覺化測試,你需要使用現代的資料化測試工具,比如Applitools Eyes。這些工具有一些簡單的高階AI技術,因此你不需要理解並實現。看看這個例子:


如何將人工智慧技術應用到自動化測試上?

在這個例子中,我們驗證了一個部落格應用程式。在常規的、非視覺化、非AI的測試裡面,我們需要驗證主頁和特定的博文,對於頁面中的每個元素進行幾十次檢查(即使這樣我們還是會遺漏一些)。但是在這個例子裡面,我們只是“checkWindow”,截圖上傳到伺服器,伺服器使用AI技術檢驗截圖。


我一直覺得,測試是為開發過程服務的,它避免了在程式碼中新增新功能的煩惱,更重要的是,避免了程式碼重構的煩惱。但為什麼這隻能運用在業務邏輯上?為什麼我們的視覺化程式碼(在CSS、HTML和JS檔案中)不能測試,我們還要再為它們擔憂?AI可以幫助我們實現這一目標。


Appraise是另外一款可以用於視覺化測試的工具。早先,InfoQ採訪了Gojko Adzic有關使用Appraise進行自動視覺化測試的內容:


Adzic:Appraise採用例項化需求的方式,但將其運用於視覺化內容。我們採用具體的例子,讓其從自動化層面建立可執行的例項化需求,用headless Chrome截圖,與預期的結果進行對比。和普通的例項化需求工具(期望結果和實際結果不同就認為是錯誤的)不一樣,Appraise採用確證測試方法。它將所有的不同展現給人來評估,讓人決定差別是否正確,如果是的話就進行確認。


我們在測試中如何運用機器學習?


Tayar:我最近看到了一個講座,講的是如何使用機器學習測試Candy Crush遊戲。由於Candy Crush是高隨機的遊戲,任何情況都可能發生,標準的測試技術很難實現。King的目標是想要了解是否這局遊戲可以成功完成,要完成有多複雜。他們一開始使用蠻力法嘗試所有路徑,計算其中有多少可以成功。這個方法確實有用,但需要花好幾個小時,因為組合可能太多了(使用去除無效路徑組合的演算法)。要解決這個問題,他們使用了Genetic Algorithms,使用一些最基本的演算法(如只使用粉色糖果,一直消除障礙等),在一局遊戲中進行試驗。之後他們使用最佳演算法(基於如何勝利完成一局遊戲的演算法),再結合兩者,“建立”一個新的演算法。不斷重複,最後得到一個最佳演算法。


再舉一個例子,卷積神經網路幫助我們分析影像,並從中提取語義資訊。在生成影像的應用程式中是非常實用的。視覺化測試工具使用它來理解頁面的不同部分,以及相互之間的聯絡,正如我上文所述一樣提取不同的文字和影像塊。

如何將人工智慧技術應用到自動化測試上?


AI會對測試人員的工作產生什麼影響?


Tayar:請問拖拉機會給農民的工作帶來什麼影響?當然是巨大的影響!農民不再需要做枯燥、乏味的體力勞動工作,只要交給機器來做就可以了。我相信AI也會給測試人員帶來相同的影響。乏味、重複的工作交給AI,測試人員就可以用更多時間來思考。


大多數測試人員已經習慣思考測試相關的方方面面:思考產品,思考怎麼測試,思考邊界情況等等,他們也需要工具來完成無聊、重複的工作。一些測試人員需要學會怎麼思考更高層次的問題,確實會有一部分測試人員無法適應,但我相信他們只是少數。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940641/viewspace-2652347/,如需轉載,請註明出處,否則將追究法律責任。

相關文章