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

2470                                                       软件学报  2026  年第  37  卷第  6  期


                 溃报告, 即使不借用     LLM, ReCDroid 也能准确提取标题中的具体操作使得崩溃复现成功. 然而, 当报告包含很少或
                 缺失步骤时, 该方法的探索算法需要很长时间才能匹配到正确的                   UI 事件. 例如, 在  ID  为  C-11 的  NordicSemiconductor-
                 Android-nRF-Mesh-Library-495  崩溃报告中, 标题仅缺乏一个操作步骤, 而由于        UI 页面数量较多, ReCDroid    耗时
                 近  40 min  来成功复现崩溃. ReproBot 在缺少步骤的报告中表现更优, 能够重现更多崩溃. 例如, 在                  ID  为  C-4  的
                 Anki-10584  崩溃报告中, 即使  ReproBot 无法从标题中提取有效的指导信息, 但其结合强化学习来优化                   UI 事件搜
                 索, 使得在匹配    UI 事件时更具优势.
                    ● Monkey  和  APE. 这两种工具不依赖于崩溃报告中提供的信息, 能够触发某些特定类型的崩溃. 例如,
                 Monkey  和  APE  均能复现其他工具不能触发的        ID  为  C-6  的  GrowTracker-89  崩溃报告, 触发崩溃需在  settings 页
                 面进行滑动选择目标控件. Monkey        将几乎所有的测试预算用于事件生成, 在短路径崩溃的触发上具有优势. 在其
                 复现的   4  个  APE  无法复现的独特崩溃中, 有     3  个的复现步骤均不超过       5. 相比之下, APE  通过动态   GUI 模型对应
                 用进行更系统的探索, 能够局部穷尽性地执行应用的某些部分, 并发现比其他工具更多的活动. 例如, 在                              ID  为  A-3
                 的  citiususc-134  崩溃报告中, 触发崩溃需要深入创建药物页面, 拨动          Stock  控件并与新出现的控件进行交互. APE
                 通过更深层次地遍历       GUI 层级成功复现了该崩溃, 而大多数其他工具未能完成该操作.
                    针对  RQ2  的结论: 这些最先进的技术在崩溃复现方面具有互补性, 且适用于不同的场景. CReDroid                      在结合堆
                 栈跟踪和标题信息的情况下复现能力最强; CrashTranslator 在堆栈信息明确的情况下表现优越; 在利用文本复现
                 步骤时, ReCDroid  在报告标题明确包含操作信息时复现效果较好, ReproBot 在处理缺少部分步骤的报告时具备更
                 强的探索能力; Monkey    和  APE  则能够触发其他工具难以复现的特定类型崩溃.
                    RQ3: 自适应控件评分模块是否能够提高            CReDroid  崩溃复现的效果?
                    我们通过崩溃复现的成功率和复现时间来评估自适应控件评分模块的有效性, 具体包括融合                                CTG  的页面可
                 达分数、基于崩溃报告标题关键操作的语义相似度分数, 以及自适应评分策略对复现性能的影响. 表                                 3  中列出的
                 CD wc 、CD w 和 t  CD w 分别展示了  CReDroid  在未使用  CTG  构造、未考虑报告标题关键操作以及未设置自适应评
                                 a
                 分策略时的崩溃复现结果.
                    表  3  中显示, CD w 成功复现了   56  个崩溃报告, 比   CReDroid  少复现  1  个, 具体为  ID  为  R-13  的  LibreNews-23
                                  c
                 崩溃报告未能成功复现. 分析发现, 崩溃堆栈中涉及的关键                    API 为  app.librenews.io.librenews.views.Settings
                 ActivityFragment.onSharedPreferenceChanged, 其关联的崩溃组件为  app.librenews.io.librenews.views.Settings
                 ActivityFragment, 这是一个  Fragment 粒度的组件. 然而, Librenews 应用的  APK  文件中  AndroidManifest.xml 主要
                 声明  Activity  粒度的信息, 单纯依赖   XML  分析无法准确定位崩溃组件. 在未使用             CTG  构造的情况下, CReDroid
                 无法有效识别崩溃发生的具体组件, 缺乏组件间转换路径的指导, 动态探索难以准确导航至崩溃组件, 导致崩溃复
                 现失败. 此外, CD w 在复现相同崩溃报告时的平均复现时间比                 CReDroid  慢  72.03% (127.46 s vs. 74.09 s). 我们发
                               c
                 现, 尽管对于部分触发崩溃的探索序列较短的报告, 仅依赖语义相似度就能找到目标                           GUI 控件, CTG  对复现时间
                 影响较小. 然而, 考虑    CTG  的  CReDroid  能够通过当前页面到崩溃组件的可达路径, 帮助快速导航至崩溃发生的页
                 面, 从而提升探索效率. 例如, 对于        ID  为  R-6  的  AnyMemo-18  崩溃报告, 尽管从应用主页仅需两个测试步骤即可
                 触发崩溃, 但页面中存在大量候选          GUI 控件, 给动态探索带来难度. 在这种情况下, CTG           提供的路径信息能够逐步
                 指导控件选择, 避免探索多余的路径, 从而节约测试资源. 由此可见, CTG                  的构造对于准确定位崩溃组件并提高复
                 现成功率至关重要.
                    当未考虑崩溃报告标题信息时, CD w 成功复现了              51  个崩溃报告, 比  CReDroid  少复现  6  个. 崩溃报告的标题
                                                t
                 通常包含触发崩溃的关键操作信息. 例如, ID            为  A-3  的  citiususc-134  崩溃报告的标题为“Can’t open the add/remove
                 medicine stock dialog”, 尽管定位到崩溃组件  MedicineCreateOrEditFragment 提供了指导信息, 但该  Fragment 页面
                 包含多个创建药物的       GUI 控件. 复现崩溃需要拨动“Stock”开关控件以触发添加或移除药物库存的操作, 最终导致
                 崩溃. 缺乏标题信息的指导时, 动态探索难以聚焦于特定操作, 导致复现失败. 在复现相同崩溃报告时, CD w 的平
                                                                                                    t
                 均复现时间比     CReDroid  慢  50.9% (106.90 s vs. 70.84 s). 这是因为缺乏标题信息的辅助, 虽然可以通过遍历页面触
   146   147   148   149   150   151   152   153   154   155   156