论文:http://youngwei.com/pdf/Vet.pdf
code:https://github.com/VET-UI-Testing/main
一、背景
在APP遍历测试的过程中,存在许多探索陷阱,比如下图C中APP点击登出按钮后,就跳到了图D,难以再跳回图A、B、C中的任何一个页面。论文提出一种方法能够找到类似于图C的容易进入陷阱的界面。
二、 论文方案
变量定义
S_i —— 第i个截图
t_i —— S_i 被观察到的时间(时间戳)
S_t,l —— 从l到r的截图域
{S_t,l} —— 消除重复截图的集合,l到r之间
|S^s_l,r| —— 从l到r过程中s是否发生,发生记为1
t_min —— 从l到r的最小时间
E_p —— 优化过程中认为定义的n的上界
算法解析
探索空间分区
作者用上面公式计算最优的S_n, S_n代表着最容易让测试工具进入陷阱的那个页面。
第一项:最小化 [n+1, N] 中出现在s属于{S_1, n}的元素的个数。这一项的物理意义是如果 {S_1, n}中的页面越少出现在S_n之后的页面中,说明S_n越符合要求。第一项的范围是[0,1]
第一项用到以下放缩进行推导:
第二项:我们需要人为定义E_p作为优化上界,第二项表示优化Sn+1到S_N的页面的集合元素,让它趋近于E_p到N的元素数量。这样一来,经过2倍的sogmoid再-1后,第二项就趋近于0了。
代码讲解
笔者看作者开源的检测陷阱的代码,发现这个方案是离线的,论文作者还写了一个trace预处理程序工具,处理收集到的页面轨迹。
遍历轨迹中的每一个页面i,计算它的score,寻找使得score最小的页面,定义为容易陷入陷阱的页面S_n。
开源代码中作者采用时间界定优化上界EP,认为任务开始EP时间后APP陷入陷阱中。
局部过度探索
在解决局部过度探索问题中作者提出一种页面合并的算法。
计算页面r到l之间出现的页面集合的元素个数,尽量收敛到一个最小的集合。
MERGE算法流程:
判断页面是否相似的算法:
个人理解此过程更像是更像是一个聚类的过程,将相似的UI聚成一个簇。
代码讲解
局部探索过程中的核心就是检查页面是否相似,作者将UI的层次结构记录,每个页面对应树中的一个节点,节点序列为历史任务的属性的拼接。最终判断node1中是否是node2的子序列从而判断两个页面是否相似。
三、总结
本论文所述的方法是用于解决UI测试过程中页面陷阱探索以及检测局部过度探索的问题,笔者近期实习的时候学习到这篇文章想要分享一下,目前聚焦的方向是自动化质量检测以及和强化学习相关的东西,大家有好的想法可以在评论区分享~