王寅 黃河基 李佳芮
摘? 要:現(xiàn)有的GUI自動測試技術(shù)通常需要借助被測設(shè)備的底層界面框架來獲取信息,難以實現(xiàn)跨平臺。針對這種現(xiàn)象,文章提出了基于視覺的移動應(yīng)用自動測試技術(shù),使用YOLOv5模型檢測界面中可執(zhí)行控件,對不同測試輸入下的狀態(tài)合并方法進(jìn)行研究,采用交并比與平均表面距離相結(jié)合的方式識別界面中相似狀態(tài)。經(jīng)過實驗證明,該方法狀態(tài)識別效果良好,為基于視覺特征的GUI自動化測試提供一定的參考。
關(guān)鍵詞:GUI測試;視覺特征;相似性度量;視覺化測試
中圖分類號:TP183;TP391.4 文獻(xiàn)標(biāo)識碼: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? 引? 言
隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展進(jìn)步,移動應(yīng)用軟件從數(shù)量、類型等方面都呈現(xiàn)爆炸式增長。圖形用戶界面(Graphics User Interface, GUI)在移動應(yīng)用軟件中得到了廣泛應(yīng)用,隨之而來的質(zhì)量問題也越發(fā)突出。GUI測試時檢測移動應(yīng)用質(zhì)量的重要手段,其中GUI自動測試通過分析被測應(yīng)用程序的界面,采用不同策略生成測試輸入來激發(fā)界面動作,實現(xiàn)了自動化測試應(yīng)用,大大降低了測試成本。
基于模型的GUI測試技術(shù)(Model-based GUI Testing, MBGT)是一種對移動應(yīng)用進(jìn)行測試的重要方法,它通過構(gòu)建模型來抽象GUI系統(tǒng),結(jié)合模型對圖形界面進(jìn)行測試,大大地提升了測試效率?;谀P偷臏y試工具有Droidbot[1]、APE[2],通過在測試過程中對被測應(yīng)用程序進(jìn)行系統(tǒng)的探索將GUI與可執(zhí)行操作相關(guān)聯(lián),得到能夠記錄界面行為的有限狀態(tài)機(jī)等模型。Baek等人[3]提出了基于安卓平臺的多層次GUI比較方法,該方法在模型構(gòu)建過程基于視覺方法的GUI界面模型抽取技術(shù)研究中提供多個模型抽象級別的選擇。然而這些GUI測試方法依賴被測設(shè)備提供的界面框架來獲取內(nèi)部結(jié)構(gòu)信息、生成輸入事件,所以無法應(yīng)用于一些系統(tǒng)封閉的設(shè)備或底層訪問受限的應(yīng)用程序,難以實現(xiàn)跨平臺測試。
針對跨平臺測試的問題,本文提出了基于視覺的MBGT方法,利用計算機(jī)視覺技術(shù)來識別界面進(jìn)行測試。在視覺化的測試框架下,界面往往出現(xiàn)內(nèi)部結(jié)構(gòu)樹的信息相同但是GUI外觀(文本、圖像等)大相徑庭的情況,給相同功能的界面識別帶來了困難。一方面容易造成狀態(tài)空間爆炸,另一方面易于產(chǎn)生冗余的界面探索,降低測試效率。如何區(qū)分具有相同功能的界面,識別界面狀態(tài)是一個關(guān)鍵的問題。
在圖形用戶界面日益復(fù)雜的情況下,很多研究將深度學(xué)習(xí)與測試技術(shù)相結(jié)合,能夠更為精準(zhǔn)的識別GUI控件元素。White等人[4]提出了一種改進(jìn)GUI測試的技術(shù),將深度學(xué)習(xí)技術(shù)在圖形界面控件識別中應(yīng)用,用來引導(dǎo)隨機(jī)測試,顯著提高了分支覆蓋率。Moran[5]等人結(jié)合了機(jī)器學(xué)習(xí)和計算機(jī)視覺方法,通過KNN生成合適的分層GUI結(jié)構(gòu)來實現(xiàn)GUI界面的原型化。
為了解決測試過程中狀態(tài)合并困難的問題,構(gòu)建更為高效的基于視覺特征的GUI自動測試方法,本文采用YOLO模型識別界面控件并設(shè)計狀態(tài)合并策略,提出了一種基于YOLO的移動應(yīng)用自動測試方法。
1? 基于YOLO的移動應(yīng)用自動測試框架
為實現(xiàn)更為高效的基于視覺的MBGT測試方法,提出了一種基于YOLO的移動應(yīng)用自動測試技術(shù)。首先對測試方法框架進(jìn)行介紹,包括狀態(tài)遷移模型、測試框架;接著介紹了基于YOLOv5的控件識別方法;最后介紹了基于測試輸入的相似狀態(tài)合并方法。
該框架以運行時的設(shè)備屏幕圖像為基礎(chǔ),使用視覺化方法對界面圖像進(jìn)行分析,通過識別圖像的控件區(qū)域,觸發(fā)動作來實現(xiàn)界面探索測試,采用多種視覺方法對相似的界面狀態(tài)進(jìn)行合并避免探索無效狀態(tài),從而抽取能夠描述軟件行為的模型。
1.1? 狀態(tài)遷移模型
界面狀態(tài)遷移模型通過對當(dāng)前狀態(tài)執(zhí)行測試輸入實現(xiàn)狀態(tài)的轉(zhuǎn)換來進(jìn)行構(gòu)建,其本質(zhì)上是一個有向圖,定義為G = (S,E),S表示狀態(tài)節(jié)點集合(S = {s1,s2,…,sn}), E表示觸發(fā)狀態(tài)轉(zhuǎn)換的事件集合(E = {e1,e2,…,en})。S中的一個狀態(tài)需要包含該狀態(tài)對應(yīng)的屏幕圖像、識別出的控件組合和合并的狀態(tài)信息。E中的ei = {
1.2? 探索測試框架
界面模型的抽取主要包括控件識別、路徑探索、狀態(tài)合并和模型更新四個階段。如圖2所示,首先獲得GUI設(shè)備指定事件頻率下的屏幕截圖,使用特征提取方法對屏幕截圖進(jìn)行控件識別,對當(dāng)前狀態(tài)的可執(zhí)行動作進(jìn)行選擇,實現(xiàn)路徑探索,得到新的狀態(tài);然后對新狀態(tài)進(jìn)行狀態(tài)識別,檢索相似GUI狀態(tài),選擇將其作為新狀態(tài)還是合并到已有的狀態(tài)中,最后動態(tài)更新到界面狀態(tài)模型中,得到該應(yīng)用程序的狀態(tài)遷移模型,該框架最終在基于模型的測試工具cvrip中進(jìn)行應(yīng)用。
2? 基于YOLOv5的控件識別
移動應(yīng)用界面的控件組成通常較為復(fù)雜,而不同的控件對應(yīng)了不同的可執(zhí)行操作,如單選框組件僅支持單擊操作。傳統(tǒng)的計算機(jī)視覺無法識別界面中的基本控件及其類型,因此在測試過程中,同一個控件需要進(jìn)行多次路徑探索并對新狀態(tài)進(jìn)行識別合并,這些冗余操作嚴(yán)重影響了測試的效率。
為了解決上述問題,本文采用YOLOv5模型實現(xiàn)對界面圖像中的控件識別,在大型數(shù)據(jù)集Rico[6]中進(jìn)行訓(xùn)練,其包括了6萬多個移動應(yīng)用的GUI截圖,每個GUI對應(yīng)了詳細(xì)的視圖層次結(jié)構(gòu)(包括控件元組的屬性、位置等信息)。由于Rico數(shù)據(jù)集中控件元素的種類眾多,篩選后的控件識別范圍主要為圖像、圖像按鈕、單選框、多選框、編輯框、列表選擇框、狀態(tài)開關(guān)按鈕、拖動條這些UI基本組件。將篩選后的有效屏幕截圖和對應(yīng)層次結(jié)構(gòu)信息作為模型輸入并進(jìn)行訓(xùn)練驗證后,得到的模型輸出包括每個候選框的坐標(biāo)(x,y,w,h)、置信度、條件類別的概率以及識別的控件類型。其中x和y表示候選框的中心坐標(biāo),w和h表示候選框的寬和高,識別效果如圖3所示。
3? 界面狀態(tài)合并
在當(dāng)前狀態(tài)中識別出的空間進(jìn)行動作觸發(fā)得到新的狀態(tài)后,該狀態(tài)可能與狀態(tài)空間中的已有狀態(tài)相同,因此需要將其與已有狀態(tài)進(jìn)行比較,判斷其是否屬于已有狀態(tài)再進(jìn)行合并。在GUI測試過程中,狀態(tài)與狀態(tài)之間存在不同程度的相似與差異,導(dǎo)致了界面結(jié)構(gòu)相同,但是由于顏色、界面中ImageView等干擾使得界面狀態(tài)合并存在一定的困難。
為了解決以上問題,本文提出了基于測試輸入的相似狀態(tài)合并方法。GUI測試輸入主要分為兩類,即點擊、長按、滑動等對控件本身的屬性進(jìn)行探索的事件輸入以及輸入賬號密碼、計算器這類非固定的文本輸入。事件輸入觸發(fā)的新狀態(tài)通過檢索已有的相似狀態(tài)來進(jìn)行合并。文本輸入觸發(fā)的新狀態(tài)存在兩種情況,一種是仍處于當(dāng)前狀態(tài)界面中,這時的新狀態(tài)觸發(fā)鍵盤輸入,與之前狀態(tài)仍屬于相同狀態(tài),應(yīng)該合并到同一狀態(tài)中;另一種是觸發(fā)搜索界面,這時界面狀態(tài)與原始狀態(tài)界面結(jié)構(gòu)完全不一致。對于文本輸入,通過將屏幕圖像與鍵盤模板采用SIFT特征匹配來進(jìn)行識別,裁剪識別出的鍵盤區(qū)域后,對剩余界面進(jìn)行識別并與前一狀態(tài)比較,如設(shè)定相似度閾值為0.8,若相似度高于0.8則合并狀態(tài);若不相似則查詢已有的相似狀態(tài),已有狀態(tài)集合中也不存在相似狀態(tài)時則將其列為新狀態(tài),流程圖如圖4所示。
采用YOLO方法對界面狀態(tài)進(jìn)行控件識別后,得到了形式如[(x,y,w,h),conf,pred,classi]的模型輸出,下文介紹本文采取的相似狀態(tài)識別步驟。
3.1? 計算交并比
IoU算法全稱為交并比算法,計算的是“預(yù)測的邊框”和“真實的邊框”的交集和并集的比值,本文表示兩個狀態(tài)的邊框的交并比。設(shè)屏幕圖像P識別到m個控件,屏幕圖像Q識別到n個控件,針對P中第i個控件和Q中第j個控件的邊界框計算交集面積,計算方式如下:
式中:S(i, j)為控件i與j的邊界框交集的面積,(x +w)min,(i, j)為控件i與j的邊界框交集的右上角橫坐標(biāo),xmax,(i, j)為控件i與j的邊界框交集的左下角橫坐標(biāo),( y+h)min,(i, j)為控件i與j的邊界框交集的右上角縱坐標(biāo),ymax,(i, j)為控件i與j的邊界框交集的左下角縱坐標(biāo)。
當(dāng)兩個狀態(tài)存在相似時,其控件不僅位置相同,類型也一定相同,因此當(dāng)獲取到交并比后,需要對其類型進(jìn)行判斷。若類型不相同則交并比為0,若類型相同則交并比不變,越接近于1,則兩個特征之間越相似,計算方式如下:
式中:R(i, j)為控件i與控件j的類型結(jié)合交并比,S(i, j)為控件i與控件j的邊界框交集的面積,D(i, j)為控件i與控件j的類型判斷函數(shù),w和h分別為邊界框的寬和高,ci為控件i的控件類型,cj為控件j的控件類型。
3.2? 計算平均表面距離
以結(jié)合控件類型計算后的交并比作為距離度量,尋找對應(yīng)圖像P中的每個控件距離最近的圖像Q中的控件,并統(tǒng)計所有距離后取均值,得到圖像P和圖像Q的狀態(tài)相似度,計算方式為:
式中:LP為圖像P中每個控件對應(yīng)的最近距離集合,WP為圖像P中檢測到的控件集合,Rmin, (i, j)為控件i與控件j的類型結(jié)合交并比,EASD為圖像P與Q的狀態(tài)相似度。
4? 實驗與分析
為檢驗提出基于YOLO的移動應(yīng)用自動測試方法的狀態(tài)合并效果,本文通過設(shè)計實驗回答如下問題。
RQ:提出的基于視覺的狀態(tài)合并方法在GUI內(nèi)部結(jié)構(gòu)樹的不同層次上識別效果如何?
GUI內(nèi)部結(jié)構(gòu)樹的標(biāo)準(zhǔn)由Baek[3]等人提出,用于為模型的生成提供多個抽象級別的選擇來緩解基于模型的測試過程中狀態(tài)爆炸的問題。因此在基于視覺的MBGT技術(shù)過程中,在不同層次結(jié)構(gòu)均能實現(xiàn)較高的狀態(tài)合并率,則說明在實際應(yīng)用該探索策略造成的狀態(tài)空間爆炸的可能性越低。
實驗選取了6個商業(yè)應(yīng)用,通過內(nèi)部結(jié)構(gòu)樹對應(yīng)的activity、layout、widget、content層次分別對其分類準(zhǔn)確率進(jìn)行實驗,并選擇均值哈希方法進(jìn)行對比驗證。
由表1結(jié)果可知,基于YOLO的移動應(yīng)用自動測試方法在6個商業(yè)應(yīng)用中均能實現(xiàn)良好的狀態(tài)相似性判斷,且在不同層次結(jié)構(gòu)上的整體表現(xiàn)優(yōu)于均值哈希方法。
5? 結(jié)? 論
本文提出了一個基于YOLO的移動應(yīng)用自動測試方法,解決了基于模型的GUI測試在跨平臺方面的不足,幫助構(gòu)建更為高效的基于視覺特征的GUI自動測試方法,避免狀態(tài)冗余探索。本文提出的方法實現(xiàn)了對相似狀態(tài)的識別與合并,但是并沒有避免不同控件觸發(fā)的新狀態(tài)結(jié)構(gòu)相似的情況,這些控件在界面中也具備某些相似特征。因此在后續(xù)工作中,可以通過對界面中相似控件的識別與合并進(jìn)一步避免重復(fù)探索,提高模型構(gòu)建效率。
參考文獻(xiàn):
[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,F(xiàn)RASER 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,F(xiàn)RANZEN 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—),女,漢族,江蘇鹽城人,碩士在讀,研究方向:軟件測試。