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

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



                 13.   scores w  = getPageReachScore(w cans , next_com, after_com, CTG, scores w )
                 14. RETURN TR com
                    以图  2(a) 为例, 当进入被测应用主页时, 当前组件为           DeckPicker, 目标崩溃组件为   MultimediaEditFieldActivity.
                 通过  CTG  检索, 从当前组件    DeckPicker 到崩溃组件  MultimediaEditFieldActivity 的多条可达路径包括“DeckPicker→
                 NoteEditor→MultimediaEditFieldActivity”“DeckPicker→CardBrowser→NoteEditor→MultimediaEditFieldActivity”和
                 “DeckPicker→Reviewer→NoteEditor→MultimediaEditFieldActivity”等. 基于标题关键操作和路径距离, 选取
                 “DeckPicker→NoteEditor→MultimediaEditFieldActivity”为最佳路径, 如图  5  所示的可达路径. 根据此路径, 由于下
                 一个可达页面     NoteEditor 不是崩溃组件, 计算    GUI 控件与  NoteEditor 及  MultimediaEditFieldActivity  组件的语义
                 相似度, 并结合    GUI 控件与崩溃组件前驱组件          NoteEditor 的语义相似度, 得到页面可达分数作为最终控件分数.
                 根据分数, 选择控件“Add”进行操作. 以此类推, 当点击“Add image”后, 被测应用转换为目标组件                       Multimedia-
                 EditFieldActivity, CReDroid  仅计算当前页面所有候选控件与标题关键操作的语义相似度, 以确定控件分数. 考虑
                 在自然语言理解任务中表现出卓越的语义建模能力, 本文采用预训练的                       BERT  模型  [25] 计算语义相似度分数.


                                                       ① GUI 组件
                                   可达路径: DeckPicker → NoteEditor →  MultimediaEditFieldActivity  ③ 标题

                                                      ② 类依赖+标题
                                               图 5 自适应计算控件得分的示例

                  2.3.2    探索优化分数
                    自适应控件评分可能存在一定的不准确性, 影响崩溃复现的有效性. 为了解决这一问题, 我们将强化学习引入
                 全局驱动的场景中, 将崩溃复现建模为一个马尔可夫决策过程                    (Markov decision process, MDP). 通过引入  Q-learning
                 方法  [26] 优化探索得分, 从而提升整体探索规划的准确性, 弥补预测              GUI 控件触发崩溃的不足.
                    具体而言, 探索过程被定义为一个           MDP  实例, 形式化为一个四元组<S, A, P, R>, 其各部分定义如下.
                    S: 状态集  (states). 被测应用的每个  GUI 页面被定义为一个独立的状态, 其中布局着可供操作的                  GUI 控件, 用
                 于实现特定功能.
                    A: 动作集  (actions). 每个状态下可执行的事件构成动作集. CReDroid        在每个页面中提取布局层次并分析             GUI
                 控件属性获取所有可交互控件, 与控件的交互               (如单击、长按或输入文本) 构成可执行事件集. 每个事件被记录为
                 Q-table 中的状态-动作对    (s, a), 其中  a  表示为状态  s 的一个可执行事件. 为了在崩溃探索的过程中打破局部最优
                 陷阱, CReDroid  采纳  ϵ-贪婪策略  [27] 选择下一个动作, 这是  Q-learning  的标准方法. 具体而言, CReDroid  以概率  1− ϵ
                 选择  Q  值最高的动作, 或以剩下的 ϵ 概率随机选择一个            Q  值较低的动作进行探索. 根据先前的经验           [8,28] , 在初始阶
                 段, 为了专注于当前最优       GUI 控件的探索, ϵ 被设置为一个接近         0  的数值. 然而, 在崩溃探索的过程中, 错误选择某
                 个最优   GUI 控件可能导致探索陷入重复. 在这种情况下, CReDroid            将会动态调整 ϵ 接近      1  的数值, 从而提升较低
                 得分动作的探索机会, 避免局部最优.
                    P: 转换函数   (transition function). 转换函数描述动作执行后被测应用状态的转换. 当执行一个动作              a t  后, 被测
                                                                 s t a t s t+1  >, 并存储在转换函数
                 应用将从当前状态       s t  转换为新状态  s t+1 . 该转换记录为三元组< ,  ,                     P  中.
                    R: 奖励函数   (reward function). 当执行一个动作  a t  之后, 奖励函数  R  将生成一个数值用于评估所执行动作           a t
                 的质量. 例如, 所交互的     GUI 控件是否与崩溃或者崩溃报告标题相关. 为了有效地优化崩溃探索的过程, CReDroid
                 为每个动作设计了奖励和惩罚策略. 奖励函数被定义为以下几个方面奖励的总和.
                    ● 触发崩溃奖励. 当某动作触发崩溃时, 通过崩溃日志验证该动作是否覆盖目标崩溃组件或涉及崩溃                                 API、
                 类以及异常语句. 验证通过时, 该动作将获得极大正向奖励, 这表明该动作很可能与目标崩溃相关联. 当被测应用
                 再次到达该状态时, CReDroid     会优先选择该动作执行, 从而进一步提高触发目标崩溃的可能性.
   139   140   141   142   143   144   145   146   147   148   149