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

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


                 发目标   GUI 控件, 但无法利用标题中隐含的操作信息到达崩溃状态, 从而导致探索效率下降.
                    在为当前页面的      GUI 控件评分时, 如果不采用自适应策略, CD w 成功复现了              55  个崩溃报告, 比   CReDroid  少
                                                                      a
                 复现  2  个. 标题通常包含最接近崩溃页面的操作信息, 因此自适应策略根据当前页面所在组件与崩溃页面的关系,
                 动态调整评分重点, 从启动应用时侧重            GUI 组件逐步过渡到关注标题信息. 在不考虑自适应策略的情况下, 当应
                 用启动页面包含大量可操作           GUI 控件时, 评分机制的效果可能受到限制. 例如, 针对               ID  为  A-12  的  gnucash-
                 android-633  崩溃报告, 由于标题未总结崩溃页面触发崩溃的具体操作, 同时从应用主页到崩溃组件的路径较多, 且
                 不同组件间的转换较为灵活, 动态探索可能被引导至错误方向, 无法快速导航到崩溃组件并触发目标控件, 导致无
                 法在有限的时间内成功复现崩溃. 另一种情况是, 当无法明确检索到从主页到达崩溃组件的路径, 同时标题中的关
                 键操作在多个页面中均可匹配时, 复现效率会降低. 例如, ID                为  C-3  的  Anki-9914  崩溃报告, 其标题“v2.16alpha33
                 crashes when changing Decks in Card Browser and Statistics”中的关键词“decks”与多个页面的  GUI 控件相关联, 评
                 分机制可能因此受到误导, 导致额外的探索时间. 统计结果表明, 在复现相同崩溃报告时, CD w 的平均复现时间
                                                                                          a
                 比  CReDroid  慢  160.96% (189.22 s vs. 72.51 s), 显著降低了复现效率.
                    针对  RQ3  的结论: 自适应控件评分模块的设计显著提升了               CReDroid  的崩溃复现性能, 不仅提高了复现成功
                 率, 还显著优化了复现时间. CTG        的构造帮助准确定位崩溃组件, 其提供的路径信息逐步指导控件选择, 避免探索
                 多余的路径; 崩溃报告标题信息中隐含的操作信息帮助动态探索聚焦于特定操作, 快速到达崩溃状态; GUI 控件自
                 适应评分策略根据当前页面所在组件与崩溃页面的关系, 动态调整评分重点, 从启动应用时侧重                               GUI 组件, 逐步
                 过渡到关注标题信息, 显著提升复现效率.
                    RQ4: CReDroid  生成的复现步骤是否能够正确触发崩溃?
                    表  3  中的  P t+ 和 t  P s+ 两列分别展示了参与者基于堆栈跟踪和      CReDroid  生成的复现步骤, 以及参考崩溃标题
                                    t
                 进行手动复现崩溃的结果. 该结果被记录为平均时间 (成功复现崩溃的参与者数量), 其中 CReDroid                        不能成功复现
                 的崩溃报告未在实验评估范围内, 记录为“-”. 从表              3  可以看出, 基于   CReDroid  生成的复现步骤以及崩溃标题的
                 指引, 100%  的崩溃报告能够至少被两名参与者成功复现. 相较之下, 基于堆栈跟踪和崩溃标题进行崩溃复现时, 在
                 所有  57  个崩溃报告中, 有   10  个未能被至少两名参与者成功复现, 成功复现比例下降了                 17.54%. 此外, 即使有崩溃
                 标题提供的操作信息作为参考, 仍有          6 个崩溃报告未能被任何参与者成功复现. 在成功复现时间方面, 基于                   CReDroid
                 生成的复现步骤复现相同崩溃的效率显著更高, 平均时间比堆栈跟踪复现减少了                           58.13% (106.15 s vs. 44.45 s). 这
                 表明, CReDroid  生成的复现步骤可以有效辅助崩溃标题进行探索指导, 能够显著提升复现效率. 在成功复现的相
                 同崩溃中, 有   70.59% (36/51) 的案例表明, CReDroid  的复现步骤比基于堆栈跟踪的复现方式更有效, 进一步验证
                 了  CReDroid  能够比手动复现更快地定位崩溃, 提升开发者的效率.
                    在实验结束后, 我们对参与者进行了非结构访谈, 了解他们在两种复现方式中遇到的挑战. 大多数参与者表
                 示, 在崩溃复现过程中, 报告标题相较于崩溃堆栈更易于理解, 因此他们主要参考报告标题来指导崩溃复现. 然而,
                 当崩溃报告缺乏关键操作信息时, 由于堆栈跟踪中与崩溃相关的信息有限, 难以推断出具体的复现步骤, 从而无法
                 成功复现崩溃. 即使报告标题中包含了操作信息, 若触发崩溃需要特定额外的事件序列, 也可能导致复现失败. 例
                 如, 在  ID  为  C-8  的  WhereYouGo-368  崩溃报告中, 参与者根据标题信息找到对应的       GUI 控件并触发后, 应用仍正
                 常运行, 重复操作也无法触发崩溃. 通过进一步查看崩溃报告的文本复现步骤发现, 在触发相应                             GUI 控件后, 需要
                 关闭并重启应用才能触发崩溃. 这种复杂的操作序列使得参与者在多次尝试后失去兴趣, 认为崩溃不可复现.
                    尽管在部分案例中, CReDroid      复现崩溃所需时间略长于手动方式, 但考虑到其通过动态探索自动完成额外的
                 操作以发现崩溃触发路径, 避免了繁琐的人工干预, 整体表现优于手动复现.
                    针对  RQ4  的结论: CReDroid  生成的复现步骤能够有效触发崩溃, 并显著提升复现效率. 在参考崩溃标题的情
                 况下, 与基于堆栈跟踪的复现方式相比, 基于             CReDroid  生成的复现步骤展现了更高的成功率, 且复现时间减少了
                 58.13%. 尽管在部分案例中复现时间略长, CReDroid         通过动态探索能够自动完成额外操作, 整体上优于手动复现,
                 提升了开发者的效率.
   147   148   149   150   151   152   153   154   155   156   157