首页 / 专利库 / 人工智能 / 树形结构 / 一种基于强化学习的Android应用自动测试方法及系统

一种基于强化学习的Android应用自动测试方法及系统

阅读:617发布:2020-05-11

专利汇可以提供一种基于强化学习的Android应用自动测试方法及系统专利检索,专利查询,专利分析的服务。并且本 发明 公开一种基于 强化学习 的Android应用自动测试方法及系统,在测试过程中,自动测试工具自动运行Android APK,获取当前界面控件布局情况并推测出可执行交互事件,采用Q-learning 算法 ,交互事件第一次被探索到时会有一个初始价值,自动测试工具依据交互事件价值选择并执行交互事件。每次执行交互事件后都会产生一个奖赏对交互事件的价值进行更新。奖赏给定主要以新状态与过往状态的差异为判定标准。本发明引入神经网络对状态进行比较,可以判定两状态是否处在同一功能场景。基于该神经网络判定结果给定的奖赏,可以引导自动测试工具优先对Android应用中的各个场景进行探索,以此提升测试效率,同时发现更多代码中存在的 缺陷 。,下面是一种基于强化学习的Android应用自动测试方法及系统专利的具体信息内容。

1.一种基于强化学习的Android应用自动测试方法,其特征在于,包括以下步骤:
S1:在Android虚拟机或者物理机上自动运行APK;
S2:获取Android应用当前的控件布局情况;
S3:推测可执行的用户交互事件;
S4:选择当前状态下价值最高的动作进行执行;
S5:采用神经网络将新状态与过往的部分状态进行比较,并以此给定奖赏;
S6:对被执行事件的价值进行更新;
S7:判定当前界面是否跳转到被测应用以外的状态;
S8:重复执行S2~S7,直到达到设定的测试时长;
S9:得到覆盖度文件、缺陷相关信息文件并计算得到覆盖度随时间变化的曲线。
2.根据权利要求1所述的基于强化学习的Android应用自动测试方法,其特征在于:所述S2中,使用UIAutomator工具获取Android应用当前的控件布局情况,以树形结构的形式描述各类控件的包含关系,同时记录了各个控件当前的属性值,包括位置、可见性和可点击性。
3.根据权利要求1所述的基于强化学习的Android应用自动测试方法,其特征在于:所述S3中,采用Q-learning算法,且采用表格结构记录各个事件的价值,如果交互事件第一次被探索到,则会以状态动作对为关键字将其记录到表格中,并给定一个较大的初始值,引导自动测试工具优先触发未执行事件。
4.根据权利要求1所述的基于强化学习的Android应用自动测试方法,其特征在于:所述S4中,根据上一步中推断得到的当前可执行事件,在动作价值表中查询得到各动作的价值,选择价值最高的动作进行执行。
5.根据权利要求1所述的基于强化学习的Android应用自动测试方法,其特征在于,所述S5:上一步执行相关事件后,Android应用界面发生变化,采用神经网络将新状态与已探索到的部分状态进行比较,该神经网络通过大量样本对的训练,能够准确地判断两个状态是否属于同一个功能场景,基于神经网络的判定结果,给定执行动作应该获得的奖赏;如果新状态与过去探索到的状态都不在同一场景,即来到了新的场景,那么就给定一个较大的奖赏,并将该状态记录下来用于与接下来探索到的状态进行场景比较;否则给定一个较少的奖赏,并不记录该状态。
6.根据权利要求1所述的基于强化学习的Android应用自动测试方法,其特征在于,所述S6:通过上述步骤给定奖赏后,采用Q-learning算法的动作价值更新公式对被执行动作的价值进行更新,所述公式通过动作的当前价值、新状态下最优动作的价值和神经网络的判定结果计算得到被执行动作新的价值,并保存到表格结构中。
7.根据权利要求1所述的基于强化学习的Android应用自动测试方法,其特征在于,所述S7:判定当前界面状态是否在被测应用范围内;如果不在,表明已经跳转到其他应用,不应该继续在此应用中进行测试,执行重启操作,回到S2;否则继续执行S8。
8.根据权利要求1所述的基于强化学习的Android应用自动测试方法,其特征在于:所述S8中的测试时长为测试开始前人为设定的测试时间,此外,如果测试前对Android应用进行了插桩,可以实时获取当前的代码覆盖度,如果一定时间内代码覆盖度没有提升且也没有发现新的缺陷,那么测试自动结束。
9.根据权利要求1所述的基于强化学习的Android应用自动测试方法,其特征在于,所述S9具体为:测试结束后可以获得两个文件,一个文件记录了代码覆盖度信息;另一个记录了测试过程中发现的缺陷信息,包括异常的栈追踪信息及相关的执行动作,方便进行缺陷定位,同时自动测试工具会根据测试过程中定时收集的代码覆盖度相关文件,计算得到每一段时间内的总体代码覆盖度情况,进而得到代码覆盖度随时间变化的曲线。
10.一种用于基于强化学习的Android应用自动测试方法的测试系统,其特征在于,包括以下模
M1,用于:在Android虚拟机或者物理机上自动运行被测试Android应用的APK;
M2,用于:获取Android应用当前的控件布局情况;
M3,用于:推测出当前可执行的用户交互事件;根据控件树结构、控件类型及控件的相关属性可以推断得出控件当前的可执行事件;
M4,用于:选择当前状态下价值最高的动作进行执行;根据上一步中推断得到的当前可执行事件,在动作价值表中查询得到各动作的价值,选择价值最高的动作进行执行;
M5,用于:执行动作后界面状态会发生变化,采用神经网络将新状态与过往的部分状态进行比较,如果判定新状态为一个新的场景,则将该状态记录下来用于后续的状态比较,并给定一个较大的奖赏;否则不保存状态,并给定一个较小的奖赏;
M6,用于:采用Q-learning算法对被执行事件的价值进行更新,并将结果保存到表格结构中;
M7,用于:判定当前界面状态是否在被测应用范围内;如果不在,表明已经跳转到其他应用,不应该继续在此应用中进行测试,执行重启操作,回到M2步骤;否则继续执行M8动作;
M8,用于:重复执行上述步骤,直到达到设定的测试时长;
M9,用于:得到覆盖度文件、缺陷相关信息文件并计算得到覆盖度随时间变化的曲线。

说明书全文

一种基于强化学习的Android应用自动测试方法及系统

技术领域

[0001] 本发明涉及Android应用自动测试,具体涉及一种基于强化学习的Android应用自动测试方法及系统。

背景技术

[0002] 随着智能手机的普及,移动应用给我们的生活带来了巨大的变化。然而,由于状态空间大等问题,对移动应用进行较完善测试需要耗费大量的人和时间,这种需求在如今各大互联网公司快速推出应用快速版本迭代的情况下难以被满足。因此,针对移动的自动测试工具,尤其是高效的自动测试工具具有重要价值。其中Android系统在移动端操作系统中占比达到70%以上,因此,针对Android应用进行自动测试显得尤为重要。
[0003] 目前已有一些面向Android应用的自动测试方法,但实践证明它们的效果仍然有待提升。以Monkey等为代表的随机自动测试工具采用伪随机数的方式生成交互事件,随机点击屏幕上的区域进行测试。这种方式会产生大量冗余的无用数据,影响测试效率。同时因为缺少有效探索策略或者探索策略过于简单,导致测试不均匀,一些较容易到达的界面被过度测试,而另外一些界面测试不充分。
[0004] 以Stoat等为代表的基于模型的自动测试工具首先利用静态或者动态分析的方式构建模型对Android应用的行为进行描述。然后基于模型生成测试用例对应用进行自动测试。因为Android应用的行为十分灵活,静态或动态分析得到的模型往往不能完全准确地描述应用的行为,如果模型与应用的真实行为存在偏差,生成的测试用例就不能对应用进行有效测试。
[0005] 以Sapienz、ACTEve等为代表的系统测试工具利用符号执行和进化算法生成特定的测试用例对Android应用进行测试。这类方法受限于符号执行等技术,在对特定代码进行覆盖的场景中表现良好,不适用于要求整体代码覆盖率的场景。

发明内容

[0006] 为解决现有技术中存在的不足,本发明的目的是:提供一种基于强化学习的Android应用自动测试方法和系统,结合了随机测试和基于模型测试的优点。通过记录Android应用的部分行为信息来更好地指导测试,同时不完全依赖于模型,避免了模型与应用真实行为不一致带来的问题。
[0007] 为了实现上述目的,本发明采用的技术方案为:一种基于强化学习的Android应用自动测试方法,包括以下步骤:
[0008] S1:在Android虚拟机或者物理机上自动运行APK;
[0009] S2:获取Android应用当前的控件布局情况;
[0010] S3:推测可执行的用户交互事件;
[0011] S4:选择当前状态下价值最高的动作进行执行;
[0012] S5:采用神经网络将新状态与过往的部分状态进行比较,并以此给定奖赏;
[0013] S6:对被执行事件的价值进行更新;
[0014] S7:判定当前界面是否跳转到被测应用以外的状态;
[0015] S8:重复执行S2~S7,直到达到设定的测试时长;
[0016] S9:得到覆盖度文件、缺陷相关信息文件并计算得到覆盖度随时间变化的曲线。
[0017] 优选的是,上述S2中,使用UIAutomator工具获取Android应用当前的控件布局情况,以树形结构的形式描述各类控件的包含关系,同时记录了各个控件当前的属性值,包括位置、可见性和可点击性。
[0018] 优选的是,上述S3中,采用Q-learning算法,且采用表格结构记录各个事件的价值,如果交互事件第一次被探索到,则会以状态动作对为关键字将其记录到表格中,并给定一个较大的初始值,引导自动测试工具优先触发未执行事件。
[0019] 优选的是,上述S4中,根据上一步中推断得到的当前可执行事件,在动作价值表中查询得到各动作的价值,选择价值最高的动作进行执行。
[0020] 优选的是,上述S5:上一步执行相关事件后,Android应用界面发生变化,采用神经网络将新状态与已探索到的部分状态进行比较,该神经网络通过大量样本对的训练,能够准确地判断两个状态是否属于同一个功能场景,基于神经网络的判定结果,给定执行动作应该获得的奖赏;如果新状态与过去探索到的状态都不在同一场景,即来到了新的场景,那么就给定一个较大的奖赏,并将该状态记录下来用于与接下来探索到的状态进行场景比较;否则给定一个较少的奖赏,并不记录该状态。
[0021] 优选的是,上述S6:通过上述步骤给定奖赏后,采用Q-learning算法的动作价值更新公式对被执行动作的价值进行更新,所述公式通过动作的当前价值、新状态下最优动作的价值和神经网络的判定结果计算得到被执行动作新的价值,并保存到表格结构中。
[0022] 优选的是,上述S7:判定当前界面状态是否在被测应用范围内;如果不在,表明已经跳转到其他应用,不应该继续在此应用中进行测试,执行重启操作,回到S2;否则继续执行S8。
[0023] 优选的是,上述S8中的测试时长为测试开始前人为设定的测试时间,此外,如果测试前对Android应用进行了插桩,可以实时获取当前的代码覆盖度,如果一定时间内代码覆盖度没有提升且也没有发现新的缺陷,那么测试自动结束。
[0024] 优选的是,上述S9具体为:测试结束后可以获得两个文件,一个文件记录了代码覆盖度信息;另一个记录了测试过程中发现的缺陷信息,包括异常的栈追踪信息及相关的执行动作,方便进行缺陷定位,同时自动测试工具会根据测试过程中定时收集的代码覆盖度相关文件,计算得到每一段时间内的总体代码覆盖度情况,进而得到代码覆盖度随时间变化的曲线。
[0025] 本发明的目的还可以进一步由一种用于基于强化学习的Android应用自动测试方法的测试系统来实现,该系统包括以下模
[0026] M1,用于:在Android虚拟机或者物理机上自动运行被测试Android应用的APK;
[0027] M2,用于:获取Android应用当前的控件布局情况;
[0028] M3,用于:推测出当前可执行的用户交互事件;根据控件树结构、控件类型及控件的相关属性可以推断得出控件当前的可执行事件;
[0029] M4,用于:选择当前状态下价值最高的动作进行执行;根据上一步中推断得到的当前可执行事件,在动作价值表中查询得到各动作的价值,选择价值最高的动作进行执行;
[0030] M5,用于:执行动作后界面状态会发生变化,采用神经网络将新状态与过往的部分状态进行比较,如果判定新状态为一个新的场景,则将该状态记录下来用于后续的状态比较,并给定一个较大的奖赏;否则不保存状态,并给定一个较小的奖赏;
[0031] M6,用于:采用Q-learning算法对被执行事件的价值进行更新,并将结果保存到表格结构中;
[0032] M7,用于:判定当前界面状态是否在被测应用范围内;如果不在,表明已经跳转到其他应用,不应该继续在此应用中进行测试,执行重启操作,回到M2步骤;否则继续执行M8动作;
[0033] M8,用于:重复执行上述步骤,直到达到设定的测试时长;
[0034] M9,用于:得到覆盖度文件、缺陷相关信息文件并计算得到覆盖度随时间变化的曲线。
[0035] 本发明所能实现的有益效果是:
[0036] 1、通过样本训练得到神经网络,可以高效、准确地判定两个Android应用状态是否属于同一功能场景。
[0037] 2、本发明结合了随机测试和基于模型测试的优点,通过记录Android应用的部分行为信息来更好地指导测试,同时不完全依赖于模型,避免了模型与应用真实行为不一致带来的问题。附图说明
[0038] 图1为本实施例的自动测试的方法中强化学习过程的简单示意图。
[0039] 图2为本实施例的自动测试的方法中Q-leaning算法动作价值更新公式示意图。
[0040] 图3为本实施例的基于强化学习的Android应用自动测试方法流程示意图。

具体实施方式

[0041] 下面结合附图和具体实施例对本发明做进一步详细说明。
[0042] 如图3所示,本实施例的基于强化学习的Android应用自动测试方法流程示意图,包括以下步骤:
[0043] S1:在Android虚拟机或者物理机上自动运行APK;
[0044] S2:获取Android应用当前的控件布局情况;
[0045] S3:推测可执行的用户交互事件;
[0046] S4:选择当前状态下价值最高的动作进行执行;
[0047] S5:采用神经网络将新状态与过往的部分状态进行比较,并以此给定奖赏;
[0048] S6:采用Q-learning算法对被执行事件的价值进行更新;
[0049] S7:判定当前界面是否跳转到被测应用以外的状态;
[0050] S8:重复执行S2~S7,直到达到设定的测试时长;
[0051] S9:得到覆盖度文件、缺陷相关信息文件并计算得到覆盖度随时间变化的曲线;
[0052] 步骤S1在Android虚拟机或者物理机上自动运行APK。首先需要获取被测Android应用的APK文件。如果需要获取覆盖度信息,还需要使用Jacoco等工具对Android应用进行字节码插桩,如果测试的目的只是发现应用中的缺陷,则直接使用APK文件即可。在正式开始自动测试前,可以通过参数设定测试时间。完成准备工作之后,就可以开始自动测试过程,这里可以通过参数配置指定Android应用运行在Android虚拟机还是物理机上。
[0053] 步骤S2获取Android应用当前的控件布局情况。在运行被测Android应用的过程中,可以通过UIAutomator获取Android虚拟机或者实体机当前屏幕的控件布局情况。该布局文件为xml格式,每一个元素表示一个控件,其中可能包含许多子控件,表示子控件被包含在父控件中,布局文件整体上可以看作一棵控件树。每一个元素还有相应的属性(包括bounds、checkable、package、resource-id等),它们表明了控件当前的状态(包括在屏幕上的位置、当前是否可点击、控件所属的项目包、控件id等)。
[0054] 步骤S3推测出当前可执行的用户交互事件。自动测试工具首先遍历整棵控件树,然后主要针对叶子节点的控件进行可执行事件的推断。可执行事件推断综合考虑了控件的属性、其父节点的属性等信息。如果当前状态不是第一次被探索到,那么可以直接通过当前的状态信息在表格中查询得到当前的可执行事件,省去推断步骤。推断得到当前的可执行事件后,会判断它们在测试过程中是否是第一次推断得到,如果是(例如刚启动测试过程时的应用启动界面),会将该动作保存到表格结构中,且会给每一个动作赋一个较大的初始价值,目的是让自动测试工具优先执行那些从未被执行过的动作。
[0055] 步骤S4选择当前状态下价值最高的动作进行执行。如果存在价值相同的时间,会随机选择其中一个进行执行。自动测试工具还有一定概率执行随机动作或者注入系统事件。随机执行动作符合Q-learning算法要求,在算法中引入随机性可以让探索过程更加发散。引入系统事件可以提升代码的覆盖度。部分代码和缺陷只有在执行特定的系统事件后才能覆盖和触发,通过随机注入一些常见的系统事件,可以提升测试效果。除此之外自动测试工具还会获取当前运行应用的包信息,以此判断是否跳转到被测应用以外的应用中,如果检测到已经跳转到其他应用中,会自动重新启动被测应用。通过这种方式可以避免浪费时间在对其他应用的测试上。
[0056] 步骤S5执行动作后界面状态会发生变化,采用神经网络将新状态与过往的部分状态进行比较,如果判定新状态为一个新的场景,则将该状态记录下来用于后续的状态比较,并给定一个较大的奖赏;否则不保存状态,并给定一个较小的奖赏。这里神经网络是通过大量样本训练得到的。这里的输入是两个状态的控件布局文件,首先通过人工特征抽取的方式得到两个向量,然后将两个向量输入神经网络,通过神经网络进一步进行特征抽取、距离度量后,输出两个状态属于统一场景的概率,如果概率大于人为设定的阈值,那么就可以判定两个状态属于同一场景。这里场景没有十分明确的定义,主要通过状态所属的功能模块进行判定,Android应用常见的功能模块包括登陆注册、导航界面、信息浏览、详情查看、设置界面等。
[0057] 如图2所示,本实施例的自动测试的方法中Q-leaning算法动作价值更新公式示意图,步骤S6采用公式对被执行事件的价值进行更新。通过上述步骤给定奖赏后,采用Q-learning算法的动作价值更新公式对被执行动作的价值进行更新。公式通过动作的当前价值、新状态下最优动作的价值、神经网络的判定结果计算得到被执行动作新的价值,并保存到表格结构中。
[0058] 步骤S7判定当前界面状态是否在被测应用范围内;如果不在,表明已经跳转到其他应用,不应该继续在此应用中进行测试,执行重启操作,回到S2;否则继续执行S8。
[0059] 步骤S8重复执行S2~S7,直到达到设定的测试时长。这里的测试时长即为测试开始前人为设定的测试时间。除此之外,如果测试前对Android应用进行了插桩,可以实时获取当前的代码覆盖度,如果一定时间内代码覆盖度没有提升且也没有发现新的缺陷,那么测试也可以自动结束。
[0060] 步骤S9得到覆盖度文件、缺陷相关信息文件并计算得到覆盖度随时间变化的曲线。测试结束后可以获得两个文件,一个文件记录了代码覆盖度信息;另一个记录了测试过程中发现的缺陷信息,包括异常的栈追踪信息及相关的执行动作,方便进行缺陷定位。同时自动测试工具会根据测试过程中定时收集的代码覆盖度相关文件,计算得到每一段时间内的总体代码覆盖度情况,进而得到代码覆盖度随时间变化的曲线。
[0061] 本发明还提供了一种用于基于强化学习的Android应用自动测试方法的测试系统,包括以下模块:
[0062] M1,用于:在Android虚拟机或者物理机上自动运行被测试Android应用的APK;
[0063] M2,用于:获取Android应用当前的控件布局情况;使用UIAutomator工具获取Android应用当前的控件布局情况。相关布局文件为XML格式,以树形结构的形式描述了各类控件的包含关系,同时记录了各个控件当前的属性值,包括位置、可见性、可点击性等;
[0064] M3,用于:推测出当前可执行的用户交互事件;根据控件树结构、控件类型及控件的相关属性可以推断得出控件当前的可执行事件。方法采用Q-learning算法,且采用表格结构记录各个事件的价值,如果交互事件第一次被探索到,则会以状态动作对为关键字将其记录到表格中,并给定一个较大的初始值,引导自动测试工具优先触发未执行事件;
[0065] M4,用于:选择当前状态下价值最高的动作进行执行;根据上一步中推断得到的当前可执行事件,在动作价值表中查询得到各动作的价值,选择价值最高的动作进行执行。自动测试工具还有一定概率执行随机事件或者注入系统事件,以此覆盖部分特殊代码,提升测试效率;
[0066] M5,用于:执行动作后界面状态会发生变化,采用神经网络将新状态与过往的部分状态进行比较,如果判定新状态为一个新的场景,则将该状态记录下来用于后续的状态比较,并给定一个较大的奖赏;否则不保存状态,并给定一个较小的奖赏;上一步执行相关事件后,Android应用界面通常会发生变化,采用神经网络将新状态与已探索到的部分状态进行比较。该神经网络通过大量样本对的训练,能够较准确地判断两个状态是否属于同一个功能场景(如登陆、浏览条目、查看详情等)。基于神经网络的判定结果,给定执行动作应该获得的奖赏。如果新状态与过去探索到的状态都不在同一场景,即来到了新的场景,那么就给定一个较大的奖赏,并将该状态记录下来用于与接下来探索到的状态进行场景比较;否则给定一个较少的奖赏,并不记录该状态;
[0067] M6,用于:采用Q-learning算法对被执行事件的价值进行更新;通过上述步骤给定奖赏后,采用Q-learning算法的动作价值更新公式对被执行动作的价值进行更新。公式通过动作的当前价值、新状态下最优动作的价值、神经网络的判定结果计算得到被执行动作新的价值,并保存到表格结构中;
[0068] M7,用于:判定当前界面状态是否在被测应用范围内;如果不在,表明已经跳转到其他应用,不应该继续在此应用中进行测试,执行重启操作,回到M2步骤;否则继续执行M8动作;
[0069] M8,用于:重复执行上述步骤,直到达到设定的测试时长;这里的测试时长即为测试开始前人为设定的测试时间。除此之外,如果测试前对Android应用进行了插桩,可以实时获取当前的代码覆盖度,如果一定时间内代码覆盖度没有提升且也没有发现新的缺陷,那么测试也可以自动结束;
[0070] M9,用于:得到覆盖度文件、缺陷相关信息文件并计算得到覆盖度随时间变化的曲线;测试结束后可以获得两个文件,一个文件记录了代码覆盖度信息;另一个记录了测试过程中发现的缺陷信息,包括异常的栈追踪信息及相关的执行动作,方便进行缺陷定位。同时自动测试工具会根据测试过程中定时收集的代码覆盖度相关文件,计算得到每一段时间内的总体代码覆盖度情况,进而得到代码覆盖度随时间变化的曲线。
[0071] 尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用。它完全可以被适用于各种适合本发明的领域。对于熟悉本领域的人员而言,可容易地实现另外的修改。因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈