论文部分内容阅读
Android应用在人们的日常生活中被普遍使用。为了保证Android应用的质量,通过自动化遍历应用的GUI的测试技术成为研究热点。然而,主流商业Android应用的Activity数量以及每个Activity内部的GUI复杂度越来越高,这给现有的自动化测试技术在GUI状态建模和基于模型的探索方面都造成了更大的困难。在主流商业应用的场景下,现有的测试技术的覆盖率都较低。主流商业应用的Activity内部会存在多种状态,如果我们构建粒度较粗的GUI模型,则会忽略掉Activity状态的内部细节;同时,状态内部的组件(Widget)会动态地加载,如果我们构建细粒度的GUI模型,在面对复杂多变的GUI时则会面临状态空间爆炸,无法遍历每一个GUI状态下的所有Widget,在主流商业应用上没有良好的通用性。因此,我们提出了一种基于GUI内Widget动态分组模型的优化技术。该技术能在复杂GUI场景中构建一种粒度合理的GUI模型,并且根据该模型提出了启发式的混合探索策略。在测试过程中,通过不断收集事件触发之后的行为反馈对分组模型进行动态调整,既能加快对GUI新状态的探索,又能对探索到的GUI状态进行充分测试,弥补了现有测试技术的不足。具体而言,本文工作主要包括:1.针对Android应用GUI Widget的特点,提出了在Activity内部对具有结构等价性的Widget进行分组的方法,并且基于分组的粒度构建GUI状态模型,从而避免了基于模型的测试技术通常遇到的状态空间爆炸或者不能充分描述内部细节的问题。2.基于Widget分组模型,提出厂以分组为单位的混合探索策略。采用贪心策略,优先选择每一个测试不充分的分组,收集分组内代表成员的Activity和GUI状态跳转作为行为反馈,进行模型调整;采用强化学习指导,目标是最大化地对每个分组内Widget能探索到的后续GUI状态进行更充分测试。3.基于Monkey源码和Android框架,使用上述的Widget分组的GUI模型和混合探索策略,设计和实现了Android GUI自动化测试系统-WGDroid。4.将WGDroid与AimDroid,Monkey和Sapienz测试工具在主流商业应用上进行了实验评估,WGDroid在覆盖率和发现bug的能力上均有优势,证明了该技术的有效性和高效性。面对主流商业应用自动化GUI测试场景的复杂性,通过我们工作中提出的Widget分组模型和启发式的混合探索策略,能解决现有工作在这方面的不足。