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

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


                 在仅包含堆栈跟踪的        9  个崩溃报告上, CReDroid、CrashTranslator、ReCDroid、ReproBot、Monkey  和  APE  分别
                 成功复现了    9、8、7、8、4    和  7  个崩溃报告, 对应复现成功率为       100%、89%、78%、89%、44%     和  78%. 在其余
                 65  个同时包含标题和堆栈跟踪的崩溃报告上, 这些工具分别成功复现了                     48、36、25、22、23   和  33  个崩溃报告,
                 复现成功率分别为       74%、55%、38%、34%、35%     和  51%. 结果表明, CReDroid  和  CrashTranslator 在两类崩溃报
                 告上的复现能力表现较强. 其中, 如图          7(b) 所示, 在同时包含标题和堆栈跟踪的崩溃报告上, CReDroid            通过额外考
                 虑标题信息, 相较于仅依赖堆栈跟踪的            CrashTranslator, 复现成功率更高. 图  7(a) 显示, 在仅包含堆栈跟踪信息的
                 报告上, 尽管   ReCDroid  和  ReproBot 主要依赖复现步骤中的具体操作信息, 但由于堆栈跟踪中包含的崩溃                   API 可
                 能涉及   GUI 控件信息, 它们仍能够一定程度上复现这些崩溃. 然而, 由于标题缺少完整的操作步骤, 它们的复现能
                 力仍然受限, 成功率相对较低, 如图         7(b) 所示. 此外, 在没有崩溃报告信息作为指导的情况下, Monkey             复现成功率
                 最低, 这表明随机测试策略难以有效触发特定崩溃; 而                APE  通过构建   GUI 模型, 能够更系统地覆盖应用状态, 提
                 高测试覆盖率. 为了进一步分析不同工具的互补性, 我们比较了                   6  种最先进的技术在这些崩溃报告上的具体表现,
                 并在图   8  中展示了相同类别工具复现崩溃的共同和独特部分. 结合表                  3  的复现结果, 我们发现各工具在崩溃复现
                 方面能补充其他工具, 并适用于不同的应用场景.

                         100                                    100
                              0    11
                          90            22   11         22       90  26
                          80                       56            80       45   62   66   65    49
                          70
                                                                 70
                         成功率 (%)  60  100  89  78  89   78      成功率 (%)  60  74
                          50
                                                                 50
                                                                 40
                          40
                          30
                          20                       44            30       55   38   34   35    51
                                                                 20
                          10                                     10
                           0                                      0
                              CR   CT   RD   RB   MK   APE          CR    CT   RD   RB   MK   APE
                                          方法                                     方法
                                     成功复现    失败复现                           成功复现    失败复现
                                  (a) 仅包含堆栈跟踪的崩溃报告                     (b) 包含标题和堆栈跟踪的崩溃报告
                                              图 7 在两类崩溃报告上的复现结果


                                      CD       CT          RD       RB     MK        APE
                                       14  43  1            9   23  7        4  23  17
                                  (a) CReDroid 和 CrashTranslator  (b) ReCDroid 和 ReproBot  (c) Monkey 和 APE
                                              图 8 同类工具成功复现崩溃的比较

                    ● CReDroid  和  CrashTranslator. CReDroid  和  CrashTranslator 均能处理堆栈跟踪信息, 并推导出到达目标崩溃
                 页面的路径, 两者复现了       4  个其他所有工具均无法复现的崩溃. 这些崩溃报告的标题中虽包含具体的操作信息, 但
                 步骤不完整. CReDroid   额外结合标题中操作的指引, 提高了崩溃复现成功率, 相比                  CrashTranslator 额外复现了  14
                 个独特的崩溃报告, 其中       13  个属于同时包含标题和堆栈跟踪的报告. CrashTranslator 在处理堆栈跟踪中带有明显
                 活动信息的报告时表现较好, 尤其是用户经常操作的功能场景. 例如, 对于                      CReDroid  失败崩溃复现的    ID  为  R-26
                 的  K-9Mail-2612  崩溃报告, 触发崩溃需要用户在删除邮件前先选中目标邮件, CrashTranslator 依赖             LLM  预测操
                 作, 能正确推荐选中邮件这一关键操作, 从而成功复现崩溃. 然而, CrashTranslator 难以处理堆栈跟踪中应用级别
                 崩溃信息不足的报告, 例如在         ID  为  R-28  的  Anki-4586  崩溃报告中, 由于缺乏显示的目标崩溃活动信息, Crash-
                 Translator 无法有效推导触发崩溃的操作序列.
                    ● ReCDroid  和  ReproBot. ReCDroid  和  ReproBot 能够处理崩溃报告的文本复现步骤、标题以及堆栈跟踪应用
                 级崩溃语句. ReCDroid   采用预定义的语法模式提取具体操作, 适用性较强. 例如, 对于                 ID  为  R-28  的  Anki-4586  崩
   145   146   147   148   149   150   151   152   153   154   155