论文部分内容阅读
在移动互联网飞速发展的过程中,安卓操作系统以简单易用、系统开源、方便深度定制等优势,迅速地在移动智能终端操作系统的竞争中占据了绝大部分市场份额,安卓应用的数目也快速突破了70万款之多。然而,由于安卓系统是一个新兴的操作系统,开发人员对其系统机制的熟悉程度还有待加深,并且应用市场的繁荣吸引来的开发人员能力也是层次不齐,这些原因都导致了安卓应用的健壮性普遍不高,用户频繁地遭遇应用无响应甚至是崩溃的情形。因为安卓应用常常会对用户的重要数据进行操作,其健壮性较低的问题对用户数据甚至是经济上的安全性造成了严重的威胁。因此,研究安卓应用的自动化测试方法以提高安卓应用的健壮性成为一个重要的课题。目前,对安卓应用进行自动化测试的研究大部分都集中在针对应用界面操作功能的测试上,即对用户的动作输入进行测试,而忽略了对用户另一块输入——外部数据输入的测试。外部数据输入,指的是安卓应用声明的、能够在应用中处理的外部数据。安卓系统提供了一套机制以方便应用接收外部数据输入。众所周知,外部数据输入作为不可控的外界输入,经常会触发应用软件中的缺陷。因此本文提出了一种针对安卓应用外部数据进行模糊变异的方法,对安卓应用进行自动化测试。该方法首先分析应用的配置文件,获取应用能够处理的外部数据输入的相关信息;然后对数据进行解构并采用有针对性的变异方法对数据进行模糊变异,以生成测试用例;最后将该测试用例发送到应用,并动态监测应用的运行过程,记录应用程序发生错误的状态,得到测试结果。最终的测试结果可以供手工分析以确定应用程序缺陷的原因,或者以此为基础进一步挖掘应用程序漏洞。基于该方法,本文实现了一个安卓应用外部数据输入的模糊测试系统。该测试系统无需获得待测应用的源代码,并且测试过程无需人工干预,因此能够为第三方人员提供有效的测试支持。同时因为该测试系统重点针对通常常被忽略的应用程序的数据输入进行测试,因此其发掘出的软件缺陷是其他自动化测试工具通常无法发现的。通过对市场上常见应用进行实验的结果表明,该测试系统能够有效的检测出应用程序中的软件缺陷,并能为挖掘应用程序漏洞提供一定的帮助。