MacHiry A[5]和 L。 Gome[6]等人的工作属于黑盒测试的方式。Dynodroid 的工作目标是提供 一个原型系统 Dynodroid 生成 apps 的相关输入。他们对 App 采用观察—选择[7]—执行的方式 来生成测用例,指定需要探索的次数 n,观察当前状态下,有哪些可执行的 events,选择其中
的一个 event,执行该 event,此时将到达一个新状态,重复执行该操作直到执行了 n 次操作。 该方法的优点是黑盒测试,无需了解 App 内部的功能实现,通过界面的触发式来探索所有的 活动界面以及活动视图。但这种方法在观察阶段采用点触的方式判断当前活动界面有多少事 件,而非代码方式,这不能保证事件的完整性。而 L。 Gome 等人提出一种 Record&Replay 技 术来减少 App 测试中重复地输入。Record&Replay 技术的基本思想是:在 Record 阶段,用户 操作一个待测试的视图 view,Android 框架会自动记录这次操作的步骤,在 Replay 阶段,对 于与这个视图类似的视图,修改上述执行步骤中的 GUI 对象信息,执行 Replay 操作。他们较 于传统方法的优势在于能够进行对手势及其他传感器进行 Replay 操作。Record&Replay 测试 技术使用于大规模地系统测试,可以大量减少人力成本,不适用单个 App 的功能性测试。
S。 Anand[8]和 Atanas Rountev[9]和 Fuchs A。P[10]等人的工作属于白盒测试的方式。S。Anand 等人采用混合执行技术对 App 进行静态分析,将源码中的变量以及约束条件都用符号化表示, Android 事件的触发即屏幕上相应区域被操作,因而最终将 Android 事件转换为操作屏幕的相 应区域,以坐标的形式表示。该文使用了混合执行技术能生成高效的测试用例集,并在一定 程度上解决了路径的爆炸问题。他们工作的不足之处是不能测试除了点击操作以外的其他操 作。Atanas Rountev 等人提出了一种 Android GUI[11]对象的静态引用(指针)分析,其目的是 建立活动与 GUI 对象,GUI 对象与 GUI 对象之间的联系,重在刻画一个活动上所有 GUI 对 象之间的嵌套关系,直观表示活动的所有 GUI 对象信息。他们工作未涉及活动之间的联系。 Fuchs A。P 等人的 SCanDroid 工具分析的是语义方面的问题,执行控制流分析来对 App 的安全 权限进行分析。他们工作分析的是活动与其他 Android 组件之间的关系(如,后台服务,广 播等)。这些组件之间通过 intents 交流,intents 是描述一个事件执行的对象。而程序的分析 是由基于这些 intents 以及与 intents 有关的组件建立的。他们的工作未考虑 GUI 对象,事件以 及出发这些过程内组件控制流处理器等。例如,从当前 MainActivity 跳转到 ConsoleActivity, 两个活动之间的跳转是由 GUI 对象、事件及事件处理器(Listener)触发的。因而若完整地构 造过程内控制流,需要实现以下三点内容:1。 建立活动与 GUI 对象之间的联系2。事件与 GUI 对象之间的对应关系3。指出事件跳转所指向的活动。
Azim T, Neamtiu I[12]等人的工作是刻画 Android App 的活动之间的跳转关系图,并在此图 的基础上,提出两种探索方式对 Android App 进行探索:Targeted Exploration(深度优先)和 Depth-first Exploration(广度优先)。两种方式各有优点,Targeted Exploration 能够快速从当 前活动到达指定活动,检测路径是否存在,而 Depth-first Exploration 则是对 App 进行系统探 索,检测所有活动是否可达。他们的工作无论在路径覆盖或是活动覆盖方面都有非常好的效
果,唯一的不足是无法验证一个活动 view 是否是 active。
在现有的研究中,Azim T, Neamtiu I[12]提出了通过静态分析获得活动转换图,他们采用污 点分析[19][20]的方式对目标信息进行追踪,确定两个活动之间是否具有联系,从而刻画一幅静 态活动转换图。该图能够直观显示两个活动之间是否存在跳转关系,但未指出两个活动之间 的活动跳转事件以及通过何种 GUI 对象进行转换。