1. 程式人生 > >騰訊自動化測試的AI智慧

騰訊自動化測試的AI智慧

引子:

本文是林奕在騰訊 DevDays 2018 分享內容的脫敏整理,介紹了 CSIG 測試開發中心(前 SNG 測試開發中心)在自動化測試領域所做的智慧化嘗試。

大致分成下面幾部分:

  • 使用AI面對和解決的問題是什麼
  • AI帶來的曙光
  • 使用了哪些技術,效果是怎麼樣的
  • 未來展望

UI自動化測試的問題

從業務角度看自動化測試,看到的東西僅僅是冰山浮在水面上的一小部分,而在自動化測試深入的過程中,會發現有很多看不見的坑在冰山下面。

1 自動化測試的複雜度障礙

舉一個例子來說明, UI自動化測試工具首要要解決的是識別UI中的各個元素,因為安卓、iOS、Windows這樣的作業系統有非常不同的表現邏輯,導致測試工具要針對不同的平臺區分不同版本的工具,QTA測試工具也是按照這種結構去劃分的。這是在冰山之上很顯而易見的部分。

(冰山之上)

但是隨著新技術的發展,越來越多的研發框架引入,如網頁渲染、UI引擎甚至3D渲染引擎接連出現。這些數量繁多的開發框架,因為實現原理不同,在自動化測試過程中都會出現很多問題。

(冰山之下)

因為技術繁多,會讓負責自動化測試工具的同學很受挫折,每一項技術都需要針對性的方案去解決,又面對非常多的場景要考慮相容通用。

如下面的例子,一個軟體介面,在人眼中看到的是完整的樣子,但在UI自動化工具眼中,就要拆分成多個不同的模組使用不同技術來識別。

這是一個混合客戶端的例子,但在現實中往往會發現,在一個介面中,經常會混合很多種渲染技術。每當一個新的UI渲染技術出現,自動化工具都要進行適配,這樣下來不僅成本會非常高,也是一件很難做相容的事情。這樣就給自動化測試工具帶來了無盡的挑戰,是自動化工具開發遇到的困難點。

2 自動化測試同質元素識別障礙

第二個例子是一個鬧鐘應用的介面,但是在控制元件樹上看起來,卻因為區分不出內容,而只能把每一個時間元素同等對待。工具沒有好辦法來識別哪一個條目是北京的鬧鐘。

雖然通過無障礙化產品設計的方式,可以部分解決這一問題,但取決於產品的定位,並不是每一個產品都會支援到無障礙化。除了無障礙之外,出現了很多例如React之類的響應式佈局,開發在寫程式碼時,很難預料實際執行時的UI結構,更難在開發時提供給測試使用的UI資料結構。這樣一來,又給自動化測試增加了難度。

3 自動化測試成效問題

在談到自動化測試時,很多同學提到投入產出比。成效是推行自動化測試很重要的問題。

如上圖,縱座標是自動化測試的投入度,橫座標是隨著產品演進過程的投入時間。自動化測試有兩種投入方式,分別是指令碼式和錄製回放式。指令碼式在專案初期投入較高,而後會隨著產品的功能逐漸完善而逐漸降低維護成本。但業務往往由於指令碼式自動化測試初期投入過高,而選擇初期比較簡單上手的錄製回放式方案。而錄製回放式方法由於介面變動就需要重新錄製指令碼,導致後續版本要投入與之前相同的工作量,而無法最終收斂。

另外一種場景,業務選擇了指令碼式自動化測試方案。但是投入並不徹底,導致隨著功能開發迭代,自動化測試指令碼的維護工作量並不收斂。這代表這次自動化測試的實施是失敗的。如下圖:

這其中的原因,最可能是沒有做好自動化測試的變更管理——變化是影響UI自動化測試成效的關鍵因素。

控制元件識別和定位技術是自動化測試技術的關鍵難題

把以上三個問題做一下歸納,會發現自動化測試一個核心需要攻破的難點,那就是控制元件識別和定位。它是影響自動化測試成效的關鍵因素之一。

AI帶來的曙光

QTA所做的AI嘗試

QTA是在SNG跑了很多年的自動化測試平臺,已經接入了170個活躍的公司產品和專案。僅2018年Q1,就自動化執行了一百四十萬個測試任務、五千萬個用例,按成時間平均每秒就有3個用例被執行。這些資料基礎,為QTA引入AI技術提供了可靠的資料來源。

QTAMetis就是為了解決控制元件識別和定位技術這一關鍵難題,而引入AI優化能力。

(傳統自動化測試識別和定位)

(Metis AI自動化測試識別和定位)

應用成熟的目標檢測技術,可以看到Metis已經成功的把物件定位出來。而後通過分類器,把每一個元素分類和識別出來,例如哪些是可以點選的按鈕,哪些是一個圖片區域。然後通過OCR技術,把原件中對應的文字提取出來;如果是Logo,則通過圖片的分類器把對應的Logo型別分類出來,而對映為特定的文字。

可以看到,這一實現結果和人看到的是一樣的,與人類的認知相仿。已經基本脫離了APP本身的程式碼實現,也不需要再關注應用後面的UI實現技術,可以解決文章前面所述的幾個問題。

同時還有另一個好處,比如某一個控制元件在新版本換了位置,對自動化測試沒有任何影響。在成效方面,也減少了變更時增加的維護量。

在這種技術下,自動化測試指令碼變得簡單化:

(更接近自然語言的自動化測試指令碼)

(指令碼所實現的自動化測試效果,視訊速度減慢15倍)

實際測試的速度會比視訊快很多,雖然過程中出現一些誤報,但80%的情況下已經能夠滿足自動化的要求。

(傳統UI自動化測試與Metis的區別)

可以看到,AI已經可以使自動化測試實現一個質的飛躍。

但就像電動汽車尚未在馬路上普及一樣,在使用的時候還有若干個問題。

比如下圖的介面,聯絡人有兩個,容易導致AI混淆而進行誤操作。

我們人之所以知道用哪個聯絡人,是因為人類有先前的知識積累,但是AI並沒有類似的經驗,導致沒法分辨。

第二個問題,並不是全部的Logo都能識別出來,特別對於業務自定義的Logo和圖案,識別的成本非常高。例如下圖中使用者自定義的釐米秀按鈕:

為了解決這些問題,就像電動汽車很多車型採用混動技術一樣,QTA採用了傳統方式和Metis混用的方法,一定程度上補足了AI暫時性的不足。使用者可以任意搭配傳統和AI的方式。

第二種方式是把AI和演算法混合,例如釐米秀,通過維護一系列相近的圖片,使用模式匹配技術進行圖片識別和認定,還是有一定的工作量會影響到自動化測試指令碼編寫者的使用體驗。

小結一下QTA Metis所應用的主要技術:

第一是由海量指令碼UI邏輯資料進行的大資料;第二是AI物件識別技術,包含OCR以及影象的分類;第三是AI目標檢測技術,實時的檢測每一個物件,並對每個物件進行分類。經過如上技術,讓UI自動化測試“看得見”。

CSIG研發工具體系

QTA是 CSIG 的研發工具體系中的一部分,負責自動化測試,CSIG 體系中還有很多有用的工具,比如做程式碼掃描的CodeDog,以及致力於DevOps打通的持續整合流水線QCI等,也歡迎大家深入瞭解。

(CSIG 研發工具體系)

作者:林奕

騰訊 CSIG QTA 測試開發平臺負責人

負責 BG 業務自動化測試落地


本文轉自:https://cloud.tencent.com/developer/article/1354843