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 通过动态探索能够自动完成额外操作, 整体上优于手动复现,
提升了开发者的效率.

