search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

黑盒測試自動化:用機器人測試移動App

關鍵摘要
  • 測試機器人 Axiz 的原型使用成品硬體組件搭建而成,包括基於 3D 視覺的自校準系統和基於 Arduino 的四軸機器人手臂。它通過外置的 CMOS 1080 像素的攝像頭監控測試執行。

  • 基於機器人的測試可以解決從桌面到移動計算的巨大轉變所帶來的挑戰,並且可以更輕鬆地對 UI 手勢和感測器輸入等特性進行測試。

  • 諸如 Appium、Robotium 和 UIAutomator 之類的框架可以實現一定程度的自動測試執行。 然而,它們依賴人工來設計測試腳本,就會成為瓶頸。

  • 手持設備的出現使我們需要重新考慮黑盒測試的真正含義,這涉及到增強真實性、設備獨立性、成本效益比和減少對假設的依賴等諸多因素。

  • 實驗證明,Axiz 準確地執行了機器人測試生成的用例中包含的每個測試事件,並通過了所需的預置檢查點。

本文最初發表於 IEEE Software 雜誌。IEEE Software 雜誌提供了有關當今戰略技術問題的可靠的、經過同行評審的信息。為了應對運營可靠而又靈活的企業的挑戰,IT 經理和技術主管需要依靠 IT 專業人員提供最先進的解決方案。

機器人被廣泛應用於大量重複性任務。 那為什麼不將它用於軟體測試?機器人測試向測試人員展現了一種新的測試形式,比以前所見過的都更接近黑盒測試。為此,我們開發了 Axiz,用於移動應用的機器人測試生成器。在這篇文章中,我們將我們的方法與基於模擬的測試自動化進行比較,描述了一些能從使用機器人測試中獲益(甚至是必須使用機器人測試)的場景,並展示了我們如何將 Axiz 應用於 Google 計算器應用程序的測試。

為什麼要使用機器人測試?

基於機器人的測試可以解決從桌面到移動計算的巨大轉變所帶來的挑戰 [1][2]。隨著人們的常用設備從桌面設備轉變為移動設備,這一轉變趨勢預計將會加速爆發 [3]。在這個新興的移動世界中,我們比以往任何時候都需要自動化軟體測試。但是,我們可能需要重新考慮軟體測試的一些原則。

移動設備支持豐富的用戶交互輸入,比如通過觸摸屏進行手勢操作、通過感測器(GPS、加速度計、氣壓計、NearId 通信等)得到各種信號。它們為異構和動態環境中的大量用戶提供服務,例如地理位置和網路基礎設施。為了全面地探索和發現缺陷,測試必須考慮在各種測試場景下與各種感測器的複雜交互。一項關於移動應用程序開發的調查表明,目前移動應用測試實踐主要依賴手工測試,而手工測試本身是低效且存在偏差的 [4]。諸如 AppiumRobotiumUIAutomator 等框架可以實現一定程度的測試自動化。然而,它們依賴人工來設計測試腳本,就會成為瓶頸。

幸運的是,Android 測試自動化相關研究最近有了很多新進展 [5][6][7][8]。然而,這些技術使用侵入式(部分或全部白盒)方法執行測試用例,並且假設測試工具享有開發者許可權,而實際情況並不總是如此。

這些技術中很多需要修改應用程序代碼甚至操作系統,而最接近黑盒測試的方法仍需要通過測試套件與被測應用程序(AUT)通信。這不是真正的黑盒測試,因為它依賴於測試套件與被測應用程序之間的機器對機器介面。

真正的黑盒測試方法將不會作假設,而只依賴於人與應用之間的設備級網路物理介面。在這個抽象級別進行測試能更好地模擬真實用戶的體驗,從而可以得到更接近真實場景的測試用例。此外,這種方法本質上是與設備無關的,在可能涉及 2000 多個不同待測設備的情況下可以帶來相當大的好處 [9]。

機器人測試宣言

手持設備的出現使我們需要重新考慮黑盒測試的真正含義。移動應用程序的用戶體驗與桌面應用程序截然不同,現有的機器對機器黑盒測試缺乏真實性、使用情況敏感度以及快速並廉價地生成可操作的測試用例所需的跨平台靈活性。

本節列出了機器人測試的宣言,採用這套方法生成的測試用例能以真正的黑盒(完全非侵入式)方式執行。表 1 對手動測試、基於模擬的測試和機器人測試進行了比較。

增強真實性

對於 Android 測試,MonkeyLab 基於應用使用數據生成測試用例 [10]。研究人員還發布了幾種方法用於為 Web 系統提供真實的自動化測試輸入 [11]。然而,這些基於自動化測試輸入的系統並不是針對移動平台的,而在關於如何生成自動化測試輸入的文獻中對測試用例的真實性幾乎沒怎麼提到。

如果開發人員認為測試集與真實情況不一致,他們就不會對出現崩潰的測試集採取任何行動。此外,由於缺乏領域知識,與真實情況不符的測試會讓自動測試數據的生成變得很困難。移動計算還引入了另外一個問題:人類可能無法執行測試。例如,測試可能需要使用超過五個手指同時點擊屏幕。

相比之下,機器人測試套件可以模擬人的手勢操作。雖然可能有一部分手勢是機器人無法模擬的(還有一些手勢可能機器人可以操作但人類無法重複),但至少機器人手勢同為身體手勢。因此,相比現在的非機器人測試環境模擬的虛擬手勢——只是簡單地在被測設備端生成一系列事件,機器人手勢更接近真實的人機交互。

設備獨立性

目前已有的白盒自動化測試和(聲稱的)黑盒自動化測試都需要修改被測設備和操作平台中的一個或兩者皆要修改。即使是所謂的黑盒技術也是通過模擬信號與應用程序通信,而不是通過移動設備上真實存在的感測器(例如觸摸屏或重力感測器)觸發的信號。

如前所述,機器人測試使用與人類用戶相同的網路物理介面。它不太容易受到底層平台、API 介面和實現細節的變化的影響。在如今這個上市時間至關重要的世界,能夠在不同平台上進行快速部署是一個相當大的優勢。

更好的成本效益比

人工測試是相當昂貴的,雖然它有更好的真實性和設備獨立性。反之,目前的自動化測試數據生成則相對便宜,僅依賴於計算時間,但它缺乏真實性和設備獨立性。機器人測試則能達到最佳的成本效益比,它結合了人工測試和機器對機器自動測試的優點。

雖然從歷史上來看機器人技術曾經非常昂貴,但如今機器人技術的成本正在迅速下降。雖然眾包也可以降低人工測試的成本 [12],但說到底還是不可能比機器人測試更便宜。

減少對假設的依賴

傳統的自動化測試對被測系統提出了許多假設,而人工測試生成測試數據時提出的假設較少。機器人測試在提出假設的數量上更接近人工測試,但是它能夠低成本地生成大量測試用例這一點則更接近現有的自動化測試。

Axiz

圖 1 展示了 Axiz 的架構,包括兩個高級組件:機器人測試生成器和機器人測試執行器。

機器人測試生成器

機器人測試生成器分析被測設備,並使用提取到的信息(包括應用程序類別、靜態字元串和 API)來調整真實性模型。該模型使用之前收集的經驗數據,其中包括已知的真實場景測試用例。

表 1:選擇手動測試、基於模擬的測試或機器人測試的參考標準

基於對用戶使用情況的觀察結果,我們得到了一個完整的屬性列表(例如兩個相鄰事件之間的延遲、事件類型和事件模式),其中涵蓋了潛在的真實場景測試用例的特徵和屬性。我們希望這些特徵能夠反應真實用戶環境中發生的情況,以便 Axiz 利用它們來指導和約束自動化測試數據生成。

圖 1. Axiz 機器人測試系統的架構。機器人測試生成器生成基於真實場景的測試用例。機器人測試執行器剔除無法執行的測試用例並執行其餘的測試用例。

機器人測試生成器將真實性模型和被測設備信息傳遞給進化搜索組件,以生成和改進測試用例。這些測試用例的真實性來源於兩個方面。首先,我們通過重用和擴展基於真實場景的測試用例(例如 Robotium 或 Appium 測試腳本),改進應用程序測試人員以前手動編寫的測試。其次,通過搜索由真實性模型約束的解決方案空間,重點生成滿足早先由眾包測試確定的約束條件的測試用例。

我們基於測試用例的性能(如代碼覆蓋率和故障發現率)和由真實性模型評定的真實性來評估生成的測試用例的質量。

機器人測試執行器

我們通過在真實設備上執行用例來進一步驗證候選的測試用例,使這些用例與用戶或手動測試人員操作的方式大致相同。機器人測試執行器將代碼形式的測試腳本轉換為機器可執行的命令,然後在機器人手臂上執行它們。

機器人手臂可以與移動設備進行非侵入式地交互,就像人類一樣。這個過程需要利用反向運動學和校準組件使操縱器的動作更準確。攝像頭監控移動設備的狀態。機器人測試執行器通過計算機視覺技術進一步處理來自攝像頭的圖像數據,包括執行對象檢測和預測點對照。

最後,機器人測試執行器將執行過程中記錄的所有過程數據發送到測試篩選器,以確定候選測試用例是否可以在真實場景中執行。如果無法執行,測試執行器會將其過濾掉。否則,Axiz 將保存該測試用例以便後續再次使用。

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)——一種廣泛使用的多目標遺傳演算法,進行基於多目標搜索的軟體測試。這個工具可以生成一系列測試事件,用最少的測試事件實現更高的測試覆蓋率和故障發現率。

Axiz 與 Google 計算器應用程序

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 與傳統的自動化測試工具並排展示,後者不使用機器人手臂,而只是產生一系列測試事件。該視頻表明,用廉價的成品硬體開發的機器人手臂可以產生一組相同的測試事件,但更接近真實的使用場景,從而實現更好的設備獨立性和真實性。

致謝

我們感謝 Andreas Zeller 在第 36 屆 CREST(進化、搜索和測試研究中心)開放研討會 [16] 上所作的演講,在演講中他展示了一個有趣的視頻,視頻中一款人造手臂自動與移動設備進行交互。這成為了我們研究的靈感之一。

參考資料

  • F. Richter, 「Global PC Sales Fall to Eight-Year Low,」 14 Jan. 2016.

  • 「Global Smartphone Shipments Forcast from 2010 to 2019(in Million Units)

  • 「Worldwide Device Shipments to Grow 1.9 Percent in 2016, While End-User Spending to Decline for the First Time,」 Gartner, 20 Jan. 2016.

  • M.E. Joorabchi, A. Mesbah, and P. Kruchten, 「Real Challenges in Mobile App Development,」 Proc. 2013 ACM/IEEE Int』l Symp. Empirical Software Eng. and Measurement (ESEM 13), 2013, pp. 15–24.

  • A. Machiry, R. Tahiliani, and M. Naik, 「Dynodroid: An Input Generation System for Android Apps,」Proc. 9th Joint Meeting Foundations of Software Eng. (ESEC/FSE 13), 2013, pp. 224–234.

  • D. Amalfitano et al., 「Using GUI Ripping for Automated Testing of Android Applications,」 Proc. 27th IEEE/ACM Int』l Conf. Automated Software Eng. (ASE 12), 2012, pp.258–261. 10.

  • W. Choi, G. Necula, and K. Sen, 「Guided GUI Testing of Android Apps with Minimal Restart and Approximate Learning,」 Proc. 2013 ACM SIGPLAN Int』l Conf. Object Oriented Programming Systems Languages & Applications (OOPSLA 13), 2013, pp. 623–640.

  • K. Mao, M. Harman, and Y. Jia, 「Sapienz: Multi-objective Automated Testing for Android Applications,」Proc. 25th Int』l Symp. Software Testing and Analysis (ISSTA 16), 2016, pp. 94 –105.

  • A. Reversat, 「The Mobile Device Lab at the Prineville Data Center,」 Facebook, 13 July 2016.

  • M. Linares-Vasquez et al., 「Mining Android App Usages for Generating Actionable GUI-Based Execution Scenarios,」 Proc. 12th Working Conf. Mining Software Repositories (MSR 15), 2015, pp. 111–122.

  • M. Bozkurt and M. Harman, 「Automatically Generating Realistic Test Input from Web Services,」 Proc. IEEE 6th Int』l Symp. Service Oriented System Eng. (SOSE 11), 2011, pp. 13 –24.

  • K. Mao et al., 「A Survey of the Use of Crowdsourcing in Software Engineering,」 J. Systems and Software, 2016.

  • J.M.S. Motta, G.C. de Carvalho, and R. McMaster, 「Robot Calibration Using a 3D Vision-Based Measurement System with a Single Camera,」 Robotics and Computer-Integrated Manufacturing, vol. 17, no. 6, 2001, pp. 487–497.

  • 「Calculator,」 Google, 2016.

  • A. Zeller, 「Where Does My Sensitive Data Go? Mining Apps for Abnormal Information Flow,」 presentation at 36th CREST Open Workshop (COW 36), 2014.

關於作者

Ke Mao 是倫敦大學學院進化、搜索與測試研究中心(CREST)的研究所。讀者可以通過 [email protected] 與他聯繫。

Mark Harman 是倫敦大學學院進化、搜索與測試研究中心(CREST)的主任。讀者可以通過 [email protected] 與他聯繫。

Yue Jia 是倫敦大學學院進化、搜索與測試研究中心(CREST)的軟體工程講師。讀者可以通過 [email protected] 與他聯繫。



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦