首頁>技術>

1. 研究意義

近年來,隨著智慧裝置的普及,移動應用已成為人們日常生活中不可或缺的一部分。娛樂、購物、支付和其他型別應用不斷湧現,諸如 Google Play 和 App Store 的移動應用市場上有數百萬應用可供使用者下載。Android 應用因其靈活開源的特性和功能多樣的第三方庫備受開發者青睞,而其碎片化的生態也同樣影響著數十億使用者。不同移動裝置軟硬體環境存在差異,使得未經充分測試的應用暴露出許多潛在的 Bug,造成使用者流失,開發商聲譽受損,最終導致應用在競爭激烈的市場中被使用者拋棄。為保障應用品質,減少使用者損失,開發者需要及時地進行 Bug 修復,包含了詳細 Bug 描述資訊的應用 Bug 報告則是修復階段的重要參考。

但現有 Bug 報告無論是在其展現形式還是生成效率方面都存在一些不足,在 Bug 修復階段對開發者的幫助十分有限。常見的手工測試報告中通常包含了具備領域知識的眾包測試工人對 Bug 的理解和分析,但手工測試效率低,人工成本較高。現有自動化測試工具大幅提升了測試效率,降低了開銷,但其生成的 Bug 報告通常是對測試資料的簡單羅列和展示,缺乏對於 Bug 特性的洞察,如類別資訊、修復建議,導致其結果仍然需要消耗一定人工審查成本。雖然自動化測試可在多裝置上批量執行,以模擬應用真實執行場景,但在生成 Bug 報告時,應用在不同裝置上產生的重複 Bug 未被有效去除。此外,現有手工測試和自動化測試 Bug 報告均未考慮多裝置場景下引入的不一致性,即應用 GUI 特性和測試裝置碎片化導致相同應用在不同裝置上的行為和表現存在差異。因此,去除了多裝置上的重複 Bug,結合了不一致性資訊,包含對於 Bug 特性的洞察,具有良好可讀性,能夠提升開發者理解和修復 Bug 效率的易理解 Bug 報告顯得尤為必要。

2. 研究內容

為結合自動化測試和手工測試 Bug 報告的優點,填補現有易理解自動化測試 Bug 報告研究存在的空白,針對 Android 應用自動化測試結果,我們提出了一種基於不一致性分析的移動應用 Bug 報告生成技術—BREGAT(Bug Report Generation for Mobile App Testing)。我們首次對自動化測試結果中存在的不一致性進行了形式化定義,並討論了 Bug 和不一致性之間關係,如 GUI 不一致性相關 Bug 說明是應用自身問題所致,與裝置無關,這對提升最終 Bug 報告可理解性十分關鍵。通過對真實自動化測試結果中 Bug 的審查和分析,我們定義了一個可擴充套件的帶不一致性標籤的 Bug 分類法,各類別均標註了不一致性標籤,收集了產生原因和通用修復建議。BREGAT 實現了該分類法,用於對自動化測試結果中檢測到的結構化 Bug 進行分類、去重,並結合截圖、操作、裝置資訊等異構資料生成易理解 Bug 報告,加速 Bug 理解和修復。圖 2 為 BREGAT 工作流程。

Bug 檢測。相比於截圖和操作等 GUI 資料,測試裝置日誌詳細記錄了應用程式的真實執行狀態和生命週期,可以發現更多原始碼級別的 Bug,其中一些 Bug 使用者僅從 GUI 層級甚至無法感知。日誌也是開發者分析應用執行狀態,除錯應用功能的關鍵參考資訊。因此,對於應用測試過程中在 Android 裝置 AP(Application Processor)端 main,system,events,radio,crash 緩衝區列印的裝置日誌,BREGAT 通過“fatal”,“error”,“exception”和“ANR”等 Bug 關鍵字來定位裝置日誌中 Bug 相關報錯資訊。對於列印了異常堆疊的 Bug,即對應日誌中多行結構化輸出,通過相應的日誌模式匹配篩選出完整的 Bug 日誌。BREGAT 最終從裝置日誌中過濾出 UncaughtException,ANR(Application Not Response)以及包含了常見 Bug 關鍵字的開發者自定義日誌輸出,或疑似 Bug 的日誌片段。

結構化 Bug 生成。為結合自動化測試過程產生的截圖、操作、裝置資訊等異構資料來對 Bug 進行不一致性分析,同時也為提升現有研究中 Bug 描述單一,難以理解的短板,增加最終 Bug 報告的可讀性,我們定義了一個結構化 Bug 模型。BREGAT 在傳統工具僅基於日誌報錯資訊進行 Bug 描述的基礎上,通過解析測試操作序列,得到應用完整的測試路徑和頁面跳轉圖,結合截圖序列為日誌中檢測到的原始 Bug 片段繫結相應的截圖、操作和應用頁面路徑,並加入便於分析相容性 Bug 的裝置品牌、型號、系統版本等資訊,生成了完備的結構化 Bug。

Bug 分類和去重。通過對來自 16 個類別的 50 個 Android 應用在 20 臺不同裝置(覆蓋 9 個主流品牌、5 個常用系統版本)上的自動化測試結果中 46002 個結構化 Bug 例項進行不一致性分析,人工審查並確認 Bug 和不一致性之間關係,從 Stack Overflow、GitHub 等問題討論區確認並收集 Bug 產生的根本原因和通用修復建議,我們定義了一個可擴充套件的帶不一致性標籤 Bug 分類法,共包含 67 個類別。分類法中每個 Bug 類別都具有唯一的類別特徵三元組(不一致性標籤、根本原因、通用日誌模式)。BREGAT 基於該分類法來指導 Bug 分類和去重,對於結構化 Bug 例項,用分類法 Bug 類別定義中的通用日誌模式嘗試匹配結構化 Bug 的裝置日誌片段,匹配成功則為 Bug 例項標註相應類別編號,失敗則歸為未分類 Bug,在最終 Bug 報告中交由開發者進一步審查。對於同類別下的多個 Bug 例項,BREGAT 基於 Bug 例項在該類別不一致性標籤上的取值對 Bug 進行分組,位於同類別、同分組下且日誌片段相同的 Bug 例項被識別為重複 Bug 進行剔除。按類別不一致性標籤取值對同類別下 Bug 進行分組,在去重的同時還保留了 Bug 和不一致性的關係。如同類別下兩個 Bug 例項分別產生於系統版本為 6.0 和 7.0 裝置上,所屬 Bug 類別不一致性標籤為系統版本不一致性,按不一致性標籤取值進行分組後這兩個 Bug 例項都被保留,這對保證 Bug 報告的完備性至關重要。

Bug 報告生成。BREGAT 從多個維度統計分類、去重後的結構化 Bug 分佈情況,從不同視角生成了可復現、易理解的 Bug 報告,圖 3 為報告示例。報告包含了應用 Bug 在裝置、機型、品牌、Bug 型別、Bug 嚴重等級上的分佈情況。同時從 Bug 視角為每個 Bug 展現了包含結構化資料的詳情頁,除復現步驟、截圖、Bug 日誌片段等基本資訊外,Bug 類別資訊、通用修復建議及我們首次引入的不一致性資訊使報告具備了對 Bug 特性的洞察。此外,還從裝置視角,展示了每個裝置在測試過程中的完整日誌、截圖序列,便於開發者快速理解、定位和修復 Bug。

3. 研究效益

移動應用測試需求方在雲測平臺上釋出自動化測試任務,測試結束後 BREGAT 自動對多裝置測試結果進行 Bug 檢測,生成結構化 Bug 集合,並對結構化 Bug 進行分類、去重,最終生成一份具有良好可讀性,可復現、易理解的 Bug 報告。開發者通過檢視報告可以掌握應用整體的 Bug 分佈情況,可針對主流機型或 Bug 嚴重等級優先修復相應 Bug。報告中每個 Bug 均提供了完整的復現步驟、類別資訊、日誌片段以及不一致性資訊,幫助開發者快速理解和修復 Bug。

圖 3 Bug 報告示例

為評估 BREGAT 對自動化測試結果中 Bug 的分類和去重能力,我們將其與自動化測試 Bug 報告融合工具 FuRong 進行了對比。在對 30 個應用在 20 臺裝置上的自動化測試結果進行 Bug 分類和去重時,BREGAT 覆蓋了結果中 83%的真實 Bug,且分類精確率為 86%,分類能力顯著優於 FuRong。BREGAT 去除了結果中 97%的重複 Bug,在去重準確率、召回率、精確率等指標上均優於 FuRong。在 16 名開發者代表參與,涉及 9 種不同類別的 Bug 復現實驗中,BREGAT 所生成 Bug 報告的平均復現速率為 17.4 秒/個,成功率為 100%。而作為對照的可理解崩潰報告生成工具—CrashScope,其平均復現速率為 78.4 秒/個,成功率為 85%。參與者在復現實驗後填寫了匿名報告調查問卷,其中 Bug 可讀性問題得分的 Friedman 檢驗結果表明,BREGAT 報告可讀性顯著優於 CrashScope 報告。

目前 BREGAT 已上線使用。作為自動化測試的下游服務,對應用自動化測試過程中在多臺裝置上產生的 Bug 進行精確地分類、高效地去重,最終生成可讀性高,可復現的易理解 Bug 報告,全面加速開發者 Bug 理解和修復過程。

感謝國家自然科學基金(61690201,61802171)支援!

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 淺談前端專案自動化測試的實現