原文作者:Yan Zheng, Yi Liu, Xiaofei Xie, Yepang Liu, Lei Ma, Jianye Hao, and Yang Liu
原文标题:Automatic Web Testing Using Curiosity-Driven Reinforcement Learning
原文链接:https://arxiv.org/pdf/2103.06018.pdf
笔记作者:nerd@SecQuan
简介
该文为发表于ICSE 2021的Automatic Web Testing Using Curiosity-Driven Reinforcement Learning。其研究主要在于端到端对web应用程序进行自适应地测试。针对Web应用的测试一直被认为是一项困难的任务。即使在今天,web测试仍然严重依赖于人工操作,而自动化web测试远未达到人工的水平。在篇论文中,作者使用好奇心驱动的强化学习方法以生成满足时序逻辑关系的高质量测试用例,并测试过程中逐步构建了一个自动机,以提高测试效率。
方法
作者为他提出的web应用测试框架命名为WebExplor,其目的是自动化生成不同的操作序列,让测试覆盖到web应用的更多行为。为了实现这一目标,WebExplor主要采用好奇心驱动的强化学习(RL)来不断优化策略,并更够在线学习,不像传统的AI方案那样需要先训练好模型才能部署。如下图所示,WebExplor主要包括三大组件,分别是Web应用抽象化、基于强化学习的测试用例生成和有限自动机。
-
状态提取
首先,需要从Web程序中抽象出用于强化学习的状态集合,如果直接用网页来代表状态,那么由于现代web应用的动态特性,会得到一个巨大的状态集合,这在强化学习中是无法接受的。为了解决状态爆炸问题,WebExplor将相同业务逻辑的页面归结于同一个状态。举例来讲,如果一个页面中用表格来展示用户的购物车信息,尽管可以通过增添或减少商品来创建近乎无穷多个不同的页面,但是由于其业务逻辑相同,所以认为属于同一个状态。具体来讲,如果两个页面的URL相同且HTML内容相似,那么它们很可能属于同一业务逻辑。实际操作中,每遇到一个新页面,WebExplor会过滤部分页面内容,只保留可操作元素(按钮、输入框、选择器等),然后将该页面与之前以保存的所有状态进行匹配,如果URL不相同或页面元素相似度低于设定的阈值,则作为一个新的状态添加到状态集合中。 -
好奇心驱动的强化学习
之后,为了通过强化学习的方法训练一种生成不同测试用例的探索策略,需要定义一个有效的奖励函数来确定最优策略。在针对web应用的测试中,其目标为尽可能多地探索web应用程序的不同行为。由于目标模糊(相对与有明确奖励目标的任务,如电子游戏),WebExplor引入好奇心机制,这一机制是为了解决强化学习中中的粗略奖励问题而提出的。作者设计了一个好奇心驱动的奖励函数,它采用了一种通用的适应性机制来指导探索,从而可以达到不同的状态。基于好奇心机制的驱动,使用Q-Learning算法学习用例生成策略。 -
有穷自动机宏观指导
最后,对于一个较大的状态空间进行探索,强化学习可能会无法到达某一状态的问题。如下图所示,例如某办公系审核流程中,状态S0到状态Sm+1之间虽然每一步跳转的概率都是0.9,但是到达Sm+1的概率只有0.95。为了应对这一问题,WebExplor利用有穷自动机在宏观层面对web应用的探索过程进行指导。当探索一定次数仍未发现新的状态时,则使用有穷自动机找到一个好奇心度最高的目标状态,然后让强化学习的智能体直接过度到这一状态继续探索。
实验
在实验阶段,作者主要通过实验结果说明一下四个问题:
-
WebExplor的代码覆盖率如何? -
WebExplor的故障探测率如何? -
有限自动机是否有效指导了针对web应用的探测过程? -
WebExplor在真实环境下效果如何?
如下表所示,作者针对多个GIthub上多个流行项目(高于50 stars)进行测试,实验就过表明其代码覆盖率和故障探测率指标普遍优于其他无导航模型方法(Crawljax, Random)和基于导航模型的方法(DIG, SUBWEB),无论其导航模型时自动生成(APO)还是需要人工辅助(MPO)。
此外,如下图所示,使用有穷自动机对WebExplor的探测过程进行宏观指导时,可以更早得获得更高的指标,以提高探测效率,并且最终结果也普遍由于不使用有穷自动机的WebExplor。
安全学术圈招募队友-ing, 有兴趣加入学术圈的请联系secdr#qq.com
本文始发于微信公众号(安全学术圈):使用基于注意力的强化学习方法进行WEB应用测试
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论