王寅 黃河基 李佳芮



摘? 要:現有的GUI自動測試技術通常需要借助被測設備的底層界面框架來獲取信息,難以實現跨平臺。針對這種現象,文章提出了基于視覺的移動應用自動測試技術,使用YOLOv5模型檢測界面中可執行控件,對不同測試輸入下的狀態合并方法進行研究,采用交并比與平均表面距離相結合的方式識別界面中相似狀態。經過實驗證明,該方法狀態識別效果良好,為基于視覺特征的GUI自動化測試提供一定的參考。
關鍵詞:GUI測試;視覺特征;相似性度量;視覺化測試
中圖分類號:TP183;TP391.4 文獻標識碼:A 文章編號:2096-4706(2023)18-0106-05
Mobile Application Automatic Testing Based on YOLO
WANG Yin, HUANG Heji, LI Jiarui
(Nanjing University of Aeronautics and Astronautics, Nanjing? 211106, China)
Abstract: The existing GUI automatic testing technology usually relies on the underlying interface framework of the detected equipment to obtain information, which is hard to realize cross-platform. In response to the phenomenon, this paper proposes a vision-based mobile application automatic testing technology, uses YOLOv5 model to detect the executable widgets in the interface, researches the state merging method under different test inputs, and combines the average intersection union ratio with the average surface distance to identify similar states in the interface. Experiments prove that the method has a good effect on identifying status and provides a certain reference for the automatic GUI testing based on visual feature.
Keywords: GUI testing; visual feature; similarity measurement; visual testing
0? 引? 言
隨著互聯網技術的高速發展進步,移動應用軟件從數量、類型等方面都呈現爆炸式增長。圖形用戶界面(Graphics User Interface, GUI)在移動應用軟件中得到了廣泛應用,隨之而來的質量問題也越發突出。GUI測試時檢測移動應用質量的重要手段,其中GUI自動測試通過分析被測應用程序的界面,采用不同策略生成測試輸入來激發界面動作,實現了自動化測試應用,大大降低了測試成本。
基于模型的GUI測試技術(Model-based GUI Testing, MBGT)是一種對移動應用進行測試的重要方法,它通過構建模型來抽象GUI系統,結合模型對圖形界面進行測試,大大地提升了測試效率。基于模型的測試工具有Droidbot[1]、APE[2],通過在測試過程中對被測應用程序進行系統的探索將GUI與可執行操作相關聯,得到能夠記錄界面行為的有限狀態機等模型。Baek等人[3]提出了基于安卓平臺的多層次GUI比較方法,該方法在模型構建過程基于視覺方法的GUI界面模型抽取技術研究中提供多個模型抽象級別的選擇。然而這些GUI測試方法依賴被測設備提供的界面框架來獲取內部結構信息、生成輸入事件,所以無法應用于一些系統封閉的設備或底層訪問受限的應用程序,難以實現跨平臺測試。
針對跨平臺測試的問題,本文提出了基于視覺的MBGT方法,利用計算機視覺技術來識別界面進行測試。在視覺化的測試框架下,界面往往出現內部結構樹的信息相同但是GUI外觀(文本、圖像等)大相徑庭的情況,給相同功能的界面識別帶來了困難。一方面容易造成狀態空間爆炸,另一方面易于產生冗余的界面探索,降低測試效率。如何區分具有相同功能的界面,識別界面狀態是一個關鍵的問題。
在圖形用戶界面日益復雜的情況下,很多研究將深度學習與測試技術相結合,能夠更為精準的識別GUI控件元素。White等人[4]提出了一種改進GUI測試的技術,將深度學習技術在圖形界面控件識別中應用,用來引導隨機測試,顯著提高了分支覆蓋率。Moran[5]等人結合了機器學習和計算機視覺方法,通過KNN生成合適的分層GUI結構來實現GUI界面的原型化。
為了解決測試過程中狀態合并困難的問題,構建更為高效的基于視覺特征的GUI自動測試方法,本文采用YOLO模型識別界面控件并設計狀態合并策略,提出了一種基于YOLO的移動應用自動測試方法。
1? 基于YOLO的移動應用自動測試框架
為實現更為高效的基于視覺的MBGT測試方法,提出了一種基于YOLO的移動應用自動測試技術。首先對測試方法框架進行介紹,包括狀態遷移模型、測試框架;接著介紹了基于YOLOv5的控件識別方法;最后介紹了基于測試輸入的相似狀態合并方法。
該框架以運行時的設備屏幕圖像為基礎,使用視覺化方法對界面圖像進行分析,通過識別圖像的控件區域,觸發動作來實現界面探索測試,采用多種視覺方法對相似的界面狀態進行合并避免探索無效狀態,從而抽取能夠描述軟件行為的模型。
1.1? 狀態遷移模型
界面狀態遷移模型通過對當前狀態執行測試輸入實現狀態的轉換來進行構建,其本質上是一個有向圖,定義為G = (S,E),S表示狀態節點集合(S = {s1,s2,…,sn}), E表示觸發狀態轉換的事件集合(E = {e1,e2,…,en})。S中的一個狀態需要包含該狀態對應的屏幕圖像、識別出的控件組合和合并的狀態信息。E中的ei = {
1.2? 探索測試框架
界面模型的抽取主要包括控件識別、路徑探索、狀態合并和模型更新四個階段。如圖2所示,首先獲得GUI設備指定事件頻率下的屏幕截圖,使用特征提取方法對屏幕截圖進行控件識別,對當前狀態的可執行動作進行選擇,實現路徑探索,得到新的狀態;然后對新狀態進行狀態識別,檢索相似GUI狀態,選擇將其作為新狀態還是合并到已有的狀態中,最后動態更新到界面狀態模型中,得到該應用程序的狀態遷移模型,該框架最終在基于模型的測試工具cvrip中進行應用。
2? 基于YOLOv5的控件識別
移動應用界面的控件組成通常較為復雜,而不同的控件對應了不同的可執行操作,如單選框組件僅支持單擊操作。傳統的計算機視覺無法識別界面中的基本控件及其類型,因此在測試過程中,同一個控件需要進行多次路徑探索并對新狀態進行識別合并,這些冗余操作嚴重影響了測試的效率。
為了解決上述問題,本文采用YOLOv5模型實現對界面圖像中的控件識別,在大型數據集Rico[6]中進行訓練,其包括了6萬多個移動應用的GUI截圖,每個GUI對應了詳細的視圖層次結構(包括控件元組的屬性、位置等信息)。由于Rico數據集中控件元素的種類眾多,篩選后的控件識別范圍主要為圖像、圖像按鈕、單選框、多選框、編輯框、列表選擇框、狀態開關按鈕、拖動條這些UI基本組件。將篩選后的有效屏幕截圖和對應層次結構信息作為模型輸入并進行訓練驗證后,得到的模型輸出包括每個候選框的坐標(x,y,w,h)、置信度、條件類別的概率以及識別的控件類型。其中x和y表示候選框的中心坐標,w和h表示候選框的寬和高,識別效果如圖3所示。
3? 界面狀態合并
在當前狀態中識別出的空間進行動作觸發得到新的狀態后,該狀態可能與狀態空間中的已有狀態相同,因此需要將其與已有狀態進行比較,判斷其是否屬于已有狀態再進行合并。在GUI測試過程中,狀態與狀態之間存在不同程度的相似與差異,導致了界面結構相同,但是由于顏色、界面中ImageView等干擾使得界面狀態合并存在一定的困難。
為了解決以上問題,本文提出了基于測試輸入的相似狀態合并方法。GUI測試輸入主要分為兩類,即點擊、長按、滑動等對控件本身的屬性進行探索的事件輸入以及輸入賬號密碼、計算器這類非固定的文本輸入。事件輸入觸發的新狀態通過檢索已有的相似狀態來進行合并。文本輸入觸發的新狀態存在兩種情況,一種是仍處于當前狀態界面中,這時的新狀態觸發鍵盤輸入,與之前狀態仍屬于相同狀態,應該合并到同一狀態中;另一種是觸發搜索界面,這時界面狀態與原始狀態界面結構完全不一致。對于文本輸入,通過將屏幕圖像與鍵盤模板采用SIFT特征匹配來進行識別,裁剪識別出的鍵盤區域后,對剩余界面進行識別并與前一狀態比較,如設定相似度閾值為0.8,若相似度高于0.8則合并狀態;若不相似則查詢已有的相似狀態,已有狀態集合中也不存在相似狀態時則將其列為新狀態,流程圖如圖4所示。
采用YOLO方法對界面狀態進行控件識別后,得到了形式如[(x,y,w,h),conf,pred,classi]的模型輸出,下文介紹本文采取的相似狀態識別步驟。
3.1? 計算交并比
IoU算法全稱為交并比算法,計算的是“預測的邊框”和“真實的邊框”的交集和并集的比值,本文表示兩個狀態的邊框的交并比。設屏幕圖像P識別到m個控件,屏幕圖像Q識別到n個控件,針對P中第i個控件和Q中第j個控件的邊界框計算交集面積,計算方式如下:
式中:S(i, j)為控件i與j的邊界框交集的面積,(x +w)min,(i, j)為控件i與j的邊界框交集的右上角橫坐標,xmax,(i, j)為控件i與j的邊界框交集的左下角橫坐標,( y+h)min,(i, j)為控件i與j的邊界框交集的右上角縱坐標,ymax,(i, j)為控件i與j的邊界框交集的左下角縱坐標。
當兩個狀態存在相似時,其控件不僅位置相同,類型也一定相同,因此當獲取到交并比后,需要對其類型進行判斷。若類型不相同則交并比為0,若類型相同則交并比不變,越接近于1,則兩個特征之間越相似,計算方式如下:
式中:R(i, j)為控件i與控件j的類型結合交并比,S(i, j)為控件i與控件j的邊界框交集的面積,D(i, j)為控件i與控件j的類型判斷函數,w和h分別為邊界框的寬和高,ci為控件i的控件類型,cj為控件j的控件類型。
3.2? 計算平均表面距離
以結合控件類型計算后的交并比作為距離度量,尋找對應圖像P中的每個控件距離最近的圖像Q中的控件,并統計所有距離后取均值,得到圖像P和圖像Q的狀態相似度,計算方式為:
式中:LP為圖像P中每個控件對應的最近距離集合,WP為圖像P中檢測到的控件集合,Rmin, (i, j)為控件i與控件j的類型結合交并比,EASD為圖像P與Q的狀態相似度。
4? 實驗與分析
為檢驗提出基于YOLO的移動應用自動測試方法的狀態合并效果,本文通過設計實驗回答如下問題。
RQ:提出的基于視覺的狀態合并方法在GUI內部結構樹的不同層次上識別效果如何?
GUI內部結構樹的標準由Baek[3]等人提出,用于為模型的生成提供多個抽象級別的選擇來緩解基于模型的測試過程中狀態爆炸的問題。因此在基于視覺的MBGT技術過程中,在不同層次結構均能實現較高的狀態合并率,則說明在實際應用該探索策略造成的狀態空間爆炸的可能性越低。
實驗選取了6個商業應用,通過內部結構樹對應的activity、layout、widget、content層次分別對其分類準確率進行實驗,并選擇均值哈希方法進行對比驗證。
由表1結果可知,基于YOLO的移動應用自動測試方法在6個商業應用中均能實現良好的狀態相似性判斷,且在不同層次結構上的整體表現優于均值哈希方法。
5? 結? 論
本文提出了一個基于YOLO的移動應用自動測試方法,解決了基于模型的GUI測試在跨平臺方面的不足,幫助構建更為高效的基于視覺特征的GUI自動測試方法,避免狀態冗余探索。本文提出的方法實現了對相似狀態的識別與合并,但是并沒有避免不同控件觸發的新狀態結構相似的情況,這些控件在界面中也具備某些相似特征。因此在后續工作中,可以通過對界面中相似控件的識別與合并進一步避免重復探索,提高模型構建效率。
參考文獻:
[1] LI Y,YANG Z,GUO Y,et al. DroidBot:a lightweight UI-Guided test input generator for android [C]//2017 IEEE/ACM 39th International Conference on Software Engineering Companion (ICSE-C).Buenos:IEEE,2017:23-26.
[2] CAI T Q. Fastbot-Android Open Source Handbook [M].Washington:Bytedance Inc.,2023.
[3] BAEK Y M,BAE D H. Automated model-based Android GUI testing using multi-level GUI comparison criteria [C]//2016 31st IEEE/ACM International Conference on Automated Software Engineering (ASE).Singapore:IEEE,2016:238-249.
[4] WHITE T D,FRASER G,BROWN G J. Improving random GUI testing with image-based widget detection [C]//ISSTA 2019:Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis.New York:ACM,2019:307-317.
[5] MORAN K,BERNAL-C?RDENAS C,CURCIO M,et al. Machine Learning-Based Prototyping of Graphical User Interfaces for Mobile Apps [J].IEEE Transactions on Software Engineering,2020,46(2):196-221.
[6] DEKA B,HUANG Z,FRANZEN C. Rico:A Mobile App Dataset for Building Data-Driven Design Applications [C]//UIST '17:Proceedings of the 30th Annual ACM Symposium on User Interface Software and Technology.New York,2017:845-854.
[7] REDMON J,DIVVALA S,GRISHICK R. You Only Look Once:Unified,Real-Time Object Detection [C]//2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR).Las Vegas:IEEE,2016:779-788.
[8] JIANG B,ZHANG Y,CHAN W K,et al. A Systematic Study on Factors Impacting GUI Traversal-Based Test Case Generation Techniques for Android Applications [J]. IEEE Transactions on Reliability,2019,68(3):913–926.
[9] GU T,SUN C,MA X,et al. Practical GUI Testing of Android Applications Via Model Abstraction and Refinement [C]//2019 IEEE/ACM 41st International Conference on Software Engineering (ICSE).Montreal:IEEE,2019:269–280.
[10] YAN J,WU T,YAN J. Widget-Sensitive and Back-Stack-Aware GUI Exploration for Testing Android Apps [C]//2017 IEEE International Conference on Software Quality,Reliability and Security (QRS).PRAGUE:IEEE,2017:42-53.
作者簡介:王寅(1999—),女,漢族,江蘇鹽城人,碩士在讀,研究方向:軟件測試。