Page 154 - 《软件学报》2026年第6期
P. 154

刘姝琪 等: 组件感知的安卓应用崩溃自动复现方法                                                        2473


                    一些研究    [8−13] 致力于通过崩溃报告中逐步指导的复现步骤来复现崩溃, 主要聚焦于基于文本描述和视觉记录
                 的复现步骤分析. 文本描述的复现步骤通常记录着崩溃发生涉及的控件名称和事件类型. 这类研究通过从复现步
                 骤中提取有用信息, 并匹配相应的          UI 操作, 探索触发崩溃的事件序列. 例如, ReCDroid 和      [9]  ReCDroid+ [10] 基于预定
                 义的语法模式从复现步骤中提取操作控件及输入值, 并利用贪婪策略的动态探索确定触发崩溃的事件序列.
                 ScopeDroid [11] 则通过构建应用的状态转换图, 设计多模态神经匹配网络来推导候选事件与复现步骤之间的模糊匹
                 配矩阵, 并基于此进行路径规划以指导探索. 然而, 复现步骤可能通过连接多个句子的长句形式来描述崩溃. 为此,
                        [8]
                 ReproBot 利用时间标准规范化句子中的操作执行顺序来细化复现步骤, 从而能处理更广泛的崩溃报告. 同时,
                 ReproBot 结合动态探索中的     Q-learning  技术, 通过触发  GUI 控件查找复现崩溃所需的缺失步骤. 然而, 当崩溃报
                 告缺失部分描述步骤时, 这些方法在实际应用页面中往往难以找到正确的匹配. 针对这一问题, ROAM                             [12] 通过对应
                 用进行   UI 建模, 并基于动态规划技术在模型中执行全局搜索, 识别最优路径以找到最可能的匹配. 另一类崩溃复
                                                                     [13]
                 现方法专注于视觉记录的分析, 如屏幕截图或录制的视频. GIFDroid                  试图复现视频中记录的崩溃, 其通过图像处
                 理技术将视频的关键帧映射到           GUI 状态, 并基于   UI 转换图进行静态搜索以补全视频中可能缺失的步骤, 生成完
                 整的复现轨迹.
                    另一类工作聚焦于分析堆栈跟踪中记录的应用异常信息, 以帮助开发者定位问题和修复崩溃. 一些研究, 例
                 如, 通过定位错误函数生成测试用例           [42−46] , 或计算堆栈跟踪之间的相似性以识别重复的崩溃报告              [47−50] . 近年来, 一
                 些工作尝试直接从堆栈跟踪中进行崩溃复现. CrashTranslator            [14] 通过利用预训练   LLM  来预测触发崩溃的探索步
                 骤. 然而, 堆栈跟踪中记录的类信息可能无法直接指向崩溃发生的具体页面, 缺乏明确的指导信息使得探索过程更
                 加困难. Mole [15] 通过对被测应用进行静态分析, 跟踪         GUI 控件的属性状态, 并在通往崩溃点的可达路径中关注相
                 关  GUI 控件. 该方法依赖调用图定位崩溃点, 可能会出现偏差. CrPDroid            [51] 则结合堆栈跟踪与复现步骤, 利用应用
                 项目文件构建控件层次图, 分析缺陷报告与项目文件以定位可能触发崩溃的可疑控件, 通过适应度函数来指导探
                 索过程, 以提升复现效率. 另外, CrashDroid       [52] 基于应用启动到崩溃过程中的所有堆栈跟踪方法调用生成复现
                 步骤.
                    目前针对安卓应用崩溃复现的研究大多依赖崩溃报告中的复现步骤和堆栈信息等进行分析. 那些基于堆栈信
                 息展开分析的工作对标题或摘要等高层次文本信息的利用尚显不足. 事实上, 标题中往往包含对崩溃问题的高度
                 概括, 这些语义信息能够帮助更精准地推断崩溃的上下文及潜在原因. 此外, 现有方法在动态探索过程中未充分考
                 虑组件转换关系, 导致探索路径缺乏明确导向性. CReDroid              融合了基于复现步骤与基于堆栈跟踪的两类主流崩溃
                 复现方法的策略. 一方面, 该方法结合堆栈跟踪中的动态异常信息与静态分析组件转换信息来定位崩溃组件; 另一
                 方面, 借助崩溃报告标题中的关键操作信息与当前页面到崩溃组件的可达路径, 引导最有可能触发崩溃的                                   UI 操
                 作, 从而提升崩溃复现的准确性.
                  7   总结与展望


                    本文提出了一种组件感知的安卓应用崩溃自动复现方法                     CReDroid, 能够结合崩溃报告的标题信息和堆栈跟
                 踪有效地复现崩溃. 该方法通过动态构建被测应用的                 CTG, 结合组件转换的意图发送信息和堆栈跟踪的动态异常
                 信息定位目标崩溃组件. 基于当前应用页面与崩溃组件的上下文关系, CReDroid                      设计自适应评分策略, 根据到崩
                 溃组件的可达路径和报告标题的关键信息为               GUI 控件分配优先级分数. 另外, CReDroid      通过强化学习技术全局优
                 化动态探索过程, 减少预测过程中的不准确性. 实验结果表明, CReDroid                 在复现崩溃的有效性和效率上均优于最
                 先进的崩溃复现工具       CrashTranslator、ReCDroid、ReproBot 以及广泛使用的自动化测试工具        Monkey  和  APE.
                    目前, CReDroid  仅依赖  LLM  来提取崩溃报告标题的关键操作, 未来的研究将进一步将该技术融入崩溃复现
                 过程. 另外, 我们计划使     CReDroid 支持滑动操作以及与系统操作的交互, 以增强其在更复杂崩溃场景中的适应能力.


                 References
                  [1]   Ceci L. Number of APPs available in leading APP stores. 2024. https://www.statista.com/statistics/276623/number-of-apps-available-in-
   149   150   151   152   153   154   155   156   157   158   159