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

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


                 ReproBot 只从标题中识别出了动词关系, 即“add”动作作用于“picture”, 而上下文信息“from camera on Android 7”
                 未包含可直接转化为具体操作的内容. 同时, 由于标题中缺乏时序连接词, 现有解析结果无法推导出具体的操作流
                 程, 因而未能生成可复现的步骤. 尽管采用强化学习优化事件选择, 但复杂的                      UI 事件组合仍使得其难以找到正确
                 的触发路径; CrashTranslator 根据堆栈跟踪中提取崩溃位置, 但在该示例中仅能从应用级别的崩溃语句中检索到
                 崩溃相关类    com.ichi2.anki.multimediacard.fields.BasicImageFieldontroller, 无法定位具体崩溃组件. 为引导崩溃路径
                 探索, CrashTranslator 需向  LLM  提供当前页面和目标崩溃页面, 尝试预测应跳转至的下一个页面, 并生成可能触
                 发该跳转的控件操作. 然而, 由于缺乏准确的目标指引, LLM                生成的跳转操作偏向不相关的页面, 导致动态探索路
                 径偏离目标崩溃. 尽管      ReCDroid  成功复现了该崩溃, 但其高度依赖于复现步骤, 若标题不包含具体的操作信息, 则
                 会大大增加触发崩溃的难度.
                    当崩溃报告缺乏逐步指导的复现步骤且堆栈跟踪信息不足时, 充分利用多源信息来触发崩溃尤为重要. 对
                 AnkiDroid  的#4586  崩溃的分析表明, 崩溃发生在通过隐式相机          Intent 启动相机应用捕获图片的过程中, 其中意图
                 发送的信息可用于辅助定位崩溃组件. 结合意图发送信息与堆栈跟踪的动态异常信息, 可以有效定位崩溃实际发
                 生的组件. 另外, 图    2(a) 中的事件触发了多个活动的交互, 而图          1  中崩溃报告标题“Crash on add picture from camera
                 on Android 7”中包含的关键操作“add picture from camera”分别对应活动     NoteEditor 和崩溃活动  multimediacard.
                 activity.MultimediaEditFieldActivity  中的步骤  4  和步骤  5  操作. 这表明, 应用组件的交互信息与崩溃报告标题中的
                 关键操作对于指导崩溃探索具有重要意义.
                    因此, 准确定位被测应用的崩溃组件, 并结合目标组件的上下文信息调整探索方向, 是实现高效崩溃复现的关
                 键. 在此过程中, 融合基于复现步骤与基于堆栈跟踪的两类方法以设计崩溃路径的探索策略显得尤为必要. 基于这
                 一思路, 我们对被测应用构建         CTG, 结合组件转换中的意图发送信息和堆栈跟踪中的动态异常信息来定位崩溃组
                 件. 然后, 通过分析应用当前状态与崩溃组件的上下文关系, 自适应地结合                      CTG  中到崩溃组件的可达路径和崩溃
                 报告标题中的关键操作信息计算当前             GUI 控件的优先级分数, 从而动态调整探索方向来触发崩溃.
                  2   组件感知的安卓应用崩溃自动复现方法

                    本文所提组件感知的安卓应用崩溃自动复现方法                  CReDroid  框架如图  3  所示. 首先, 分析崩溃报告的标题和堆
                 栈跟踪, 分别提取标题中的关键操作信息和崩溃相关                 API; 其次, 对被测应用构建      CTG, 结合崩溃相关    API 定位崩
                 溃组件; 最后, 基于标题中的关键操作与           CTG  中崩溃组件的可达路径, 设计自适应评分策略, 通过分析当前页面组
                 件与崩溃组件的上下文关系, 为          GUI 控件分配选择优先级分数, 并引入强化学习设计探索优化分数来实现全局优
                 化, 最终输出自动重放脚本及人类可读的复现步骤.

                                  报告分析
                                                       自适应控件评分                       强化学习驱动的崩溃探索
                           标题          关键操作            语义相似分数
                                                                         探索
                           堆栈跟踪     崩溃相关 API           页面可达分数            优化
                 崩溃报告                               可达路径                 分数
                                                      排序      目标组件             控件选择     探索历史
                            CTG 构造
                                                                                 是否   是          重放脚本
                                       崩溃组件                                      崩溃     序列约简
                          意图发送   交互
                 被测应用       摘要   路径                 当前页面    可交互控件        奖励        否
                                                                                                  复现步骤
                               崩溃组件定位
                                        图 3 组件感知的安卓应用崩溃自动复现方法框架图

                  2.1   报告分析
                    CReDroid  首先对崩溃报告进行分析, 通过对标题和堆栈跟踪的预处理, 为崩溃复现准备必要的信息. 具体来
                 说, 崩溃复现中将使用报告的两类关键信息.
   135   136   137   138   139   140   141   142   143   144   145