本文最初發表于 IEEE Software 雜志。IEEE Software雜志提供了有關當今戰略技術問題的可靠的、經過同行評審的信息。為了應對運營可靠而又靈活的企業的挑戰,IT經理和技術主管需要依靠IT專業人員提供最先進的解決方案。
機器人被廣泛應用于大量重復性任務。 那為什么不將它用于軟件測試?機器人測試向測試人員展現了一種新的測試形式,比以前所見過的都更接近黑盒測試。為此,我們開發了Axiz,用于移動應用的機器人測試生成器。在這篇文章中,我們將我們的方法與基于模擬的測試自動化進行比較,描述了一些能從使用機器人測試中獲益(甚至是必須使用機器人測試)的場景,并展示了我們如何將Axiz應用于Google計算器應用程序的測試。
基于機器人的測試可以解決從桌面到移動計算的巨大轉變所帶來的挑戰[1][2]。隨著人們的常用設備從桌面設備轉變為移動設備,這一轉變趨勢預計將會加速爆發[3]。在這個新興的移動世界中,我們比以往任何時候都需要自動化軟件測試。但是,我們可能需要重新考慮軟件測試的一些原則。
移動設備支持豐富的用戶交互輸入,比如通過觸摸屏進行手勢操作、通過傳感器(GPS、加速度計、氣壓計、NearId通信等)得到各種信號。它們為異構和動態環境中的大量用戶提供服務,例如地理位置和網絡基礎設施。為了全面地探索和發現缺陷,測試必須考慮在各種測試場景下與各種傳感器的復雜交互。一項關于移動應用程序開發的調查表明,目前移動應用測試實踐主要依賴手工測試,而手工測試本身是低效且存在偏差的[4]。諸如 Appium 、 Robotium 和 UIAutomator 等框架可以實現一定程度的測試自動化。然而,它們依賴人工來設計測試腳本,就會成為瓶頸。
幸運的是,Android測試自動化相關研究最近有了很多新進展[5][6][7][8]。然而,這些技術使用侵入式(部分或全部白盒)方法執行測試用例,并且假設測試工具享有開發者權限,而實際情況并不總是如此。
這些技術中很多需要修改應用程序代碼甚至操作系統,而最接近黑盒測試的方法仍需要通過測試套件與被測應用程序(AUT)通信。這不是真正的黑盒測試,因為它依賴于測試套件與被測應用程序之間的機器對機器接口。
真正的黑盒測試方法將不會作假設,而只依賴于人與應用之間的設備級網絡物理接口。在這個抽象級別進行測試能更好地模擬真實用戶的體驗,從而可以得到更接近真實場景的測試用例。此外,這種方法本質上是與設備無關的,在可能涉及2000多個不同待測設備的情況下可以帶來相當大的好處[9]。
手持設備的出現使我們需要重新考慮黑盒測試的真正含義。移動應用程序的用戶體驗與桌面應用程序截然不同,現有的機器對機器黑盒測試缺乏真實性、使用情況敏感度以及快速并廉價地生成可操作的測試用例所需的跨平臺靈活性。
本節列出了機器人測試的宣言,采用這套方法生成的測試用例能以真正的黑盒(完全非侵入式)方式執行。表1對手動測試、基于模擬的測試和機器人測試進行了比較。
對于Android測試,MonkeyLab基于應用使用數據生成測試用例[10]。研究人員還發布了幾種方法用于為Web系統提供真實的自動化測試輸入[11]。然而,這些基于自動化測試輸入的系統并不是針對移動平臺的,而在關于如何生成自動化測試輸入的文獻中對測試用例的真實性幾乎沒怎么提到。
如果開發人員認為測試集與真實情況不一致,他們就不會對出現崩潰的測試集采取任何行動。此外,由于缺乏領域知識,與真實情況不符的測試會讓自動測試數據的生成變得很困難。移動計算還引入了另外一個問題:人類可能無法執行測試。例如,測試可能需要使用超過五個手指同時點擊屏幕。
相比之下,機器人測試套件可以模擬人的手勢操作。雖然可能有一部分手勢是機器人無法模擬的(還有一些手勢可能機器人可以操作但人類無法重復),但至少機器人手勢同為身體手勢。因此,相比現在的非機器人測試環境模擬的虛擬手勢——只是簡單地在被測設備端生成一系列事件,機器人手勢更接近真實的人機交互。
目前已有的白盒自動化測試和(聲稱的)黑盒自動化測試都需要修改被測設備和操作平臺中的一個或兩者皆要修改。即使是所謂的黑盒技術也是通過模擬信號與應用程序通信,而不是通過移動設備上真實存在的傳感器(例如觸摸屏或重力傳感器)觸發的信號。
如前所述,機器人測試使用與人類用戶相同的網絡物理接口。它不太容易受到底層平臺、API接口和實現細節的變化的影響。在如今這個上市時間至關重要的世界,能夠在不同平臺上進行快速部署是一個相當大的優勢。
人工測試是相當昂貴的,雖然它有更好的真實性和設備獨立性。反之,目前的自動化測試數據生成則相對便宜,僅依賴于計算時間,但它缺乏真實性和設備獨立性。機器人測試則能達到最佳的成本效益比,它結合了人工測試和機器對機器自動測試的優點。
雖然從歷史上來看機器人技術曾經非常昂貴,但如今機器人技術的成本正在迅速下降。雖然眾包也可以降低人工測試的成本[12],但說到底還是不可能比機器人測試更便宜。
傳統的自動化測試對被測系統提出了許多假設,而人工測試生成測試數據時提出的假設較少。機器人測試在提出假設的數量上更接近人工測試,但是它能夠低成本地生成大量測試用例這一點則更接近現有的自動化測試。
圖1展示了Axiz的架構,包括兩個高級組件:機器人測試生成器和機器人測試執行器。
機器人測試生成器分析被測設備,并使用提取到的信息(包括應用程序類別、靜態字符串和API)來調整真實性模型。該模型使用之前收集的經驗數據,其中包括已知的真實場景測試用例。
表1:選擇手動測試、基于模擬的測試或機器人測試的參考標準
基于對用戶使用情況的觀察結果,我們得到了一個完整的屬性列表(例如兩個相鄰事件之間的延遲、事件類型和事件模式),其中涵蓋了潛在的真實場景測試用例的特征和屬性。我們希望這些特征能夠反應真實用戶環境中發生的情況,以便Axiz利用它們來指導和約束自動化測試數據生成。
圖1. Axiz機器人測試系統的架構。機器人測試生成器生成基于真實場景的測試用例。機器人測試執行器剔除無法執行的測試用例并執行其余的測試用例。
機器人測試生成器將真實性模型和被測設備信息傳遞給進化搜索組件,以生成和改進測試用例。這些測試用例的真實性來源于兩個方面。首先,我們通過重用和擴展基于真實場景的測試用例(例如Robotium或Appium測試腳本),改進應用程序測試人員以前手動編寫的測試。其次,通過搜索由真實性模型約束的解決方案空間,重點生成滿足早先由眾包測試確定的約束條件的測試用例。
我們基于測試用例的性能(如代碼覆蓋率和故障發現率)和由真實性模型評定的真實性來評估生成的測試用例的質量。
我們通過在真實設備上執行用例來進一步驗證候選的測試用例,使這些用例與用戶或手動測試人員操作的方式大致相同。機器人測試執行器將代碼形式的測試腳本轉換為機器可執行的命令,然后在機器人手臂上執行它們。
機器人手臂可以與移動設備進行非侵入式地交互,就像人類一樣。這個過程需要利用反向運動學和校準組件使操縱器的動作更準確。攝像頭監控移動設備的狀態。機器人測試執行器通過計算機視覺技術進一步處理來自攝像頭的圖像數據,包括執行對象檢測和預測點對照。
最后,機器人測試執行器將執行過程中記錄的所有過程數據發送到測試篩選器,以確定候選測試用例是否可以在真實場景中執行。如果無法執行,測試執行器會將其過濾掉。否則,Axiz將保存該測試用例以便后續再次使用。
我們開發了Axiz的原型來演示這套系統的可行性(見圖2)。我們使用一套廉價、適用性廣且通用的成品硬件組件來開發這個原型。我們使用3D視覺自校準功能[13]來校準和調整機器人的機械手,使系統得以可靠運行,并為預測點對照器提供輸入。
機械手是一個基于Arduino的四軸機器人手臂。它由重復定位精度為0.2 mm的步進電機驅動。每個軸的最大移動速度從115至210度/秒不等(這是負載為200克時的計算結果,這個最大移動速度對于大多數移動設備來說都已經足夠大了)。在機械手的末端是用于模擬手指手勢的觸控筆。
一個外置的CMOS 1080像素攝像頭監控測試執行。我們在配置有2.3GHz CPU和16GB RAM的MacBook Pro筆記本電腦上運行測試生成器和機器人控制器。
我們利用Python中的反向運動學組件控制機器人手臂。對象檢測器和預測點對照器則基于OpenCV庫實現。機器人測試生成器使用(目前最先進的)工具Sapienz[14]并應用NSGA-II(非支配排序遺傳算法II)——一種廣泛使用的多目標遺傳算法,進行基于多目標搜索的軟件測試。這個工具可以生成一系列測試事件,用最少的測試事件實現更高的測試覆蓋率和故障發現率。
Google計算器應用程序的安裝數已經達到了500萬到1000萬次[15]。雖然Google計算器的功能很簡單,但不失為一個非常重要的基于真實場景的應用程序,因此通過它能夠展示真正的黑盒機器人測試的潛力。
我們使用機器人測試生成器來生成與真實場景相符的測試用例,并用機械手臂執行測試。 被測設備是Nexus 7平板電腦,配置了普通的用戶權限和Android官方操作系統(無需修改)。作為對比,我們使用另一臺Nexus 7,并對它進行更傳統的侵入式測試。第二臺Nexus 7直接連接到MacBook上的機器人控制器。它對應的測試工具具有開發者權限,并且可以修改操作系統。
圖3展示了整個測試過程。MacBook的解釋器組件將事件指令轉換為機器人手臂控制器的運動規律。然后該控制器基于反向運動學將運動規律轉換為關節角度指令。如圖3所示,機器人手臂點擊第一臺Nexus 7上的按鈕執行測試。預測點對照器監控每一個測試事件。在執行每一個測試步驟之后,預測點對照器通過外置攝像頭捕獲圖像并驗證移動GUI的狀態。
Axiz準確地執行了生成的機器人測試用例中每一個測試事件,并通過了所需的預置檢查點,使Sapienz的能力得以發揮到極致。
圖2:用四軸機器人手臂測試移動應用程序。我們使用一套廉價、適用性廣且通用的成品硬件組件進行開發。
圖3:使用Axiz測試一個真實的計算器應用程序。Axiz準確地執行了生成的機器人測試用例中每一個測試事件,并且通過了所需的預置檢查點。
Axiz執行測試的視頻可以在這里查看。在這個視頻中,我們將Axiz與傳統的自動化測試工具并排展示,后者不使用機器人手臂,而只是產生一系列測試事件。該視頻表明,用廉價的成品硬件開發的機器人手臂可以產生一組相同的測試事件,但更接近真實的使用場景,從而實現更好的設備獨立性和真實性。
我們感謝Andreas Zeller在第36屆CREST(進化、搜索和測試研究中心)開放研討會[16]上所作的演講,在演講中他展示了一個有趣的視頻,視頻中一款人造手臂自動與移動設備進行交互。這成為了我們研究的靈感之一。
Ke Mao是倫敦大學學院進化、搜索與測試研究中心(CREST)的研究生。讀者可以通過k.mao@cs.ucl.ac.uk與他聯系。
Mark Harman是倫敦大學學院進化、搜索與測試研究中心(CREST)的主任。讀者可以通過mark.harman@ucl.ac.uk與他聯系。
Yue Jia是倫敦大學學院進化、搜索與測試研究中心(CREST)的軟件工程講師。讀者可以通過yue.jia@ucl.ac.uk與他聯系。
本文最初發表于 IEEE Software 雜志。IEEE Software雜志提供了有關當今戰略技術問題的可靠的、經過同行評審的信息。為了應對運營可靠而又靈活的企業的挑戰,IT經理和技術主管需要依靠IT專業人員提供最先進的解決方案。
查看英文原文: Robotic Testing of Mobile Apps for Truly Black-Box Automation
感謝薛命燈對本文的審校。
原文轉自:http://www.infoq.com/cn/articles/mobile-robotic-testing-automation