使用眾包監控重現移動應用程序的上下文敏感的崩潰

使用眾包監控重現移動應用程序的上下文敏感的崩潰

論文摘要

App商店中發佈的移動應用數量不斷增加的同時,這些應用程序的質量呈現巨大的差異。然而對於許多應用程序,一旦在用戶的移動設備上安裝了,這些應用程序就會相繼發生錯誤和崩潰。為了解決這些煩人的崩潰,開發人員首先需要重現這些崩潰,這樣才能夠找到問題的根源。然而由於移動設備、移動平臺的差異性以及使用版本和用戶類型的不同,崩潰的復現是應用程序開發人員面臨的主要挑戰之一。

本文介紹了MoTiF,這是一種眾包方法,可以幫助應用程序開發人員自動復現用戶面臨的上下文敏感崩潰。特別地,通過分析崩潰數據中的重複模式,導出再現崩潰的最短事件序列,並且最後轉變為一個測試用例集。通過測試用例集,MoTiF可以有效的重現崩潰。

研究問題:

無論是全新安裝或是在更新後,應用程序的投訴除了是功能上的卻是,大多數問題都是與應用程序崩潰有關。移動應用開發者雖然可以使用各種測試工具進行檢測,但是一旦用戶安裝到設備上,許多錯誤依然可能出現。舉一個真實的例子,在使用維基百科移動App,當用戶按下菜單按鈕,該應用程序就會崩潰。但是,這次崩潰只是在運行Android 4.1的LG設備上出現。 因此,應用程序開發人員需要了解用戶的交互行為和執行上下文(即軟件和硬件配置),才可以真實的再現這個崩潰。

為了解決這個問題,我們提出了MoTiF,通過真實的設備和用戶,使用機器學習技術學習眾包的數據,幫助開發人員的再現用戶面臨的移動應用上下文敏感崩潰。本文關鍵的想法是對於眾包測試中大規模出現的崩潰,該工具能夠以自動有效以自動有效的方式去協助開發人員隔離和複製此類崩潰。

解決方案:

一、MoTiF的四個關鍵階段:

1、從設備收集執行跟蹤

MoTiF收集用戶交互事件和上下文,如果應用程序崩潰,收集的數據將提交給MoTiF服務器。

2、識別移動應用程序的崩潰模式

首先,MoTiF在應用程序執行過程中,收集並識別跟蹤到的崩潰模式。這些模式將用於自動提取重現和表徵崩潰的最小步驟序列

3、合成崩潰測試用例集。基於在執行上下文中收集的崩潰模式,合成崩潰測試用例集。

此測試用例集能夠重現一系列導致崩潰的用戶交互

4、評估重現崩潰的執行上下文。

關察到並確定是否可以推廣到其他應用環境。在驗證這一系列的測試用例集合後,MoTiF會通知應用程序開發人員。

使用眾包監控重現移動應用程序的上下文敏感的崩潰

二、收集數據

啟用後,MoTiF會跟蹤輸入事件(例如,用戶交互事件)和在Activity執行期間拋出的未處理異常。為了將事件情境化,MoTiF記錄以下內容

  • 事件元數據:時間戳,方法名稱,實現類,線程ID和視圖Id(唯一)
  • 異常元數據:時間戳,位置和異常跟蹤,
  • 上下文數據:與執行相關的信息

Android應用程序是以UI為中心的,View是基類。要攔截用戶交互事件,只需要攔截這些控件的事件處理程序即可。例如,當一個按鈕被點擊的時候,會在該對象上調用onTouchEvent方法。MoTiF攔截這些事件處理程序的執行,同時記錄事件元數據和上下文數據。

三、異常處理

執行應用程序期間,MoTiF會將觀察到的事件保存在內存中。 只有當應用程序崩潰時,MoTiF才將事件的跟蹤記錄保存在設備的日誌文件中。我們將崩潰跟蹤(ct)定義為執行的一系列事件。在崩潰發生之前的應用程序中,即ct = {e

1,e2,...,en}。

事件可以有兩種類型:交互和異常。該記錄跟蹤的最後一個事件(en)始終是異常事件。

靜態上下文僅在異常事件中報告,因為它在整個應用程序執行期間保持不變。相反,報告每個事件的動態上下文。圖2的示例代表兩個交互事件e1,e2,並導致了crash1的跟蹤情況。

使用眾包監控重現移動應用程序的上下文敏感的崩潰

四、Crowd Crash Graph

論文定義了一個數據結構:Crowd Crash Graph,它是一個有向圖(下文簡稱CCG):CCG = {G1,G2,...,Gn},其中每個Gi是一個崩潰圖,表示不同類型的崩潰。這樣的崩潰圖的聚合結果就是導致某個相同異常的所有崩潰路徑。它基於馬爾可夫鏈(一階馬爾可夫模型),這是一種被廣泛接受的用來捕捉順序依賴的形式。在我們的崩潰圖中,節點代表事件和邊表示事件之間的順序流,節點和邊緣具有分別描述事件元數據和轉移概率的屬性。我們將基於這個圖合成最有可能的重現崩潰的步驟序列。

使用眾包監控重現移動應用程序的上下文敏感的崩潰

五、重現崩潰

這一階段的目標是最大化遍歷的馬爾可夫概率,尋找從起始節點(S)到異常節點(e)的最短路徑。為此,MoTiF實現了Dijkstra的算法[12],這是一種眾所周知的在圖表中的節點之間尋找最短路徑的算法,Dijkstra的目標是儘量減少路徑上的權重,我們的目標是找到最大化S-e路徑上的轉換概率的路徑。

MoTiF會自動生成黑盒UI測試。我們使用Robotium,一個用於Android應用程序的自動黑盒UI測試的測試自動化框架,在設備上執行對應的用戶交互,來重現找到的上下文敏感崩潰。

總結:

移動生態系統激烈競爭,為了避免失去客戶和信用,開發人員面臨著快速識別以及修復應用程序中的崩潰的挑戰。本文介紹了MoTiF,一種眾包監控的方法,可以幫助開發人員在移動應用程序部署之後檢測和重現移動應用程序中的上下文敏感崩潰。MoTiF以智能方式利用崩潰和設備反饋去快速檢測一群設備的崩潰模式。通過使用這些崩潰模式,MoTiF可以合成測試用例集去重現崩潰。然後,MoTiF利用眾包測試中的各種移動設備來檢查測試是否可以暴露崩潰以及是否存在可以重現相同崩潰的異常。

致謝

此文由南京大學軟件學院2018級碩士韋志賓翻譯轉述。


分享到:


相關文章: