一种基于上下文的移动应用执行序列约减方法技术

技术编号:32551829 阅读:20 留言:0更新日期:2022-03-05 11:51
本发明专利技术涉及一种基于上下文的移动应用执行序列约减方法。该方法针对安卓应用出现故障的输入事件序列,使用静态分析技术,针对指定包,对其中所有的方法调用,通过soot插桩插入log输出语句,生成新的应用程序;通过数据流分析提取日志信息与原始执行序列进行匹配,用UI的变化特征辅助构建过滤无用事件的reduce算法,对执行序列进行第一步的过滤;在此基础上应用程序切片技术,实现切片依赖关系的提取,对crash相应序列进行切片分析,从而生成必要事件的序列,在第二步缩减的生成树算法的基础上,利用必要事件去优化缩减序列的长度和顺序,最终生成最小执行序列。本发明专利技术目的在于解决目前存在的移动应用上执行序列缩减的精度和时间的优化问题,进而帮助移动测试人员在有限的时间内得到有效的最简序列结果,帮助移动测试人员制订合理的解决异常的方案和策略,最终起到提高软件测试效率、保障软件质量的目的。的。的。

【技术实现步骤摘要】
一种基于上下文的移动应用执行序列约减方法


[0001]本专利技术属于软件测试与程序分析领域,尤其适用于移动测试中的测试程序的安全性和可靠性领域,其目的在于为移动测试人员在应用开发环境下开展异常测试提供指导,是一种帮助移动测试人员在有限时间内确定应用软件的缺陷和定位问题代码的方法。

技术介绍

[0002]近年来,移动互联网行业呈现爆发式增长。 移动应用程序的数量和复杂性都在迅速增加。 根据数据统计,Android OS 在2016年第三季度占据了智能手机市场份额的87.8%。在Google Play中,Android 应用程序超过260万个。为了提高最终用户的满意度,移动应用程序开发人员必须提高其应用程序的质量,移动测试是实现这一目标的一项重要措施。 现在已经提出了不同种类的测试技术来测试Android应用程序,包括模糊测试、基于GUI遍历的测试和基于搜索的测试。模糊测试以Monkey工具家族为代表,包括Android OS内置的Monkey工具及其第三方改进版本。由于其简单、有效和广泛适用性的特点,改进的Monkey工具被基于云的移动测试平台广泛采用。
[0003]现有的Android测试工具(例如Monkey)会生成大量种类繁多的用户事件,以暴露 Android 应用程序中的潜在的异常和错误。但是即使发现了一个crash,由此产生的大多数事件往往是多余的,或者说是和crash无关的。 另外,如果给定一个长度很大的事件序列(script),开发人员想要去做定位和重现crash也是有困难的。
[0004]这些模糊测试技术的一个主要限制是它们通常在触发故障之前生成大量输入事件,这使得后续调试任务难以应用。 在这种情况下,需要简化触发相同故障的输入事件序列,为了保证Android应用程序的质量,已经提出了许多自动测试用例生成技术。其中,Monkey fuzz测试工具及其变种简单、有效、适用范围广。然而,这些 Monkey 工具的一个主要缺点是它们经常在引发故障的输入跟踪中生成许多事件,这使得后续调试活动难以应用。因此,在对产生crash的执行序列进行简化是必要的。
[0005]在此之前,已经有一些团队和个人在从事模糊测试技术这方面的研究,在执行序列约减的过程中,由测试工具生成的可能不同,需要开发良好的标准来区分事件的副作用,以消除由触发的错误驱动的冗余事件,Simplydroid工具的缺陷在于,在序列选择上具有随机性,导致迭代次数过多,缩减花费的时间过长。Echo工具的缺陷在于,所检结果crash重现率不高,部分执行序列不能达到最简的缩减序列。
[0006]对此,本专利技术提出一种基于上下文的移动应用执行序列约减方法。本专利技术的基本思想为:针对安卓应用出现故障的输入事件序列,首先,使用静态分析技术,针对指定包,对其中所有的方法调用,通过soot插桩插入log输出语句,包含资源行号、类名、方法名、Jimple语句、方法回调字段,生成新的应用程序;通过数据流分析提取日志信息与原始执行序列进行匹配,用UI的变化特征辅助构建过滤无用事件的reduce算法,对执行序列进行第一步的过滤;在此基础上应用程序切片技术,实现切片依赖关系的提取,对crash相应序列进行切片分析,从而生成必要事件的序列,在第二步缩减的生成树算法的基础上,利用必要
事件去优化缩减序列的长度和顺序,最终生成最小执行序列。
[0007]通过该方法,可以帮助移动测试人员在短时间内缩小触发crash的执行事件数量,进而确定缺陷产生的原因,定位错误代码位置,减少测试人员的决策时间,帮助开发人员和维护人员指明方向,从而有效提高移动测试、软件研发效率。

技术实现思路

[0008]本专利技术通过提供一种基于上下文的移动应用执行序列约减方法,来有效解决目前存在的移动应用上执行序列缩减的精度和时间问题,进而帮助移动测试人员在有限的时间内得到有效的最简序列结果,帮助移动测试人员制订合理的解决异常的方案和策略。
[0009]为达成上述目标,本专利技术提出一种基于上下文的移动应用执行序列约减方法,该方法针对安卓应用出现异常或报错的执行序列,首先,使用静态分析技术,通过soot插桩生成可输出log的应用程序,通过数据流分析提取日志信息与原始执行序列进行匹配,用UI的变化特征辅助构建过滤无用事件的reduce算法,对执行序列进行第一步的过滤,在此基础上应用程序切片技术,实现切片依赖关系的提取,对crash相应序列进行切片分析,从而生成必要事件的序列,在第二步缩减的生成树算法的基础上,利用必要事件去优化缩减序列的长度和顺序,最终生成最小执行序列。具体而言,该方法包括下列步骤。
[0010]1)soot插桩,对应用程序进行静态分析,指定特定的主包来消除一些其他类的方法调用的影响,对于所有的方法调用行InvokeStmt,在代码行中添加log语句,其中tag为output,value包含java资源行号Java source line number、类名、方法名、Jimple的语句表示,若为方法回调则添加CALLBACK字段,插桩之后使用cmd命令自动签名应用程序;本步骤的目的是在应用程序内添加输出语句,保存该方法的基本信息和方法间的依赖信息,为后续的第一步过滤提供数据支持,使得运行执行序列的时候完成与序列的对应关系,无用事件即在执行序列的运行中不会对最后异常的状态产生影响的事件,通过数据流的分析对无用事件的判定产生帮助。
[0011]2)序列过滤,在插桩后的应用程序上运行原始的执行序列,通过线程抓取日志信息,与执行序列同步输出,若事件后跟随没有方法调用,且执行事件前后页面的xml信息未变化,则判定为无用事件,从而判定执行序列包含哪些无用事件,保存数据usefulScripts,对无用事件进行过滤,生成新的scripts日志和execute日志,在应用程序上对新序列进行执行,若可以重现crash则表明第一步过滤成功。
[0012]3)程序切片,对程序进行soot插桩之后,收集运行时产生的具有特定标签的日志信息,构建一个有效的PDG(程序依赖图),该图的构建需要执行一个运行后的按需静态分析,将范围缩小到只在运行期间执行过的应用程序部分,然后根据crash信息找到导致crash产生的程序语句,将该语句的执行日志作为切片标准,之后分析应用程序的日志信息并根据切片标准来生成特定的执行PDG,PDG是通过向后探索依赖关系,逐步添加节点和边逐步构建的,其中PDG的依赖包括四个部分:同步和异步数据依赖、同步和异步控制依赖,最后根据脚本事件和PDG中的执行语句日志的对应关系来获取对产生crash有影响的脚本序列。
[0013]4)生成树约减,该步骤使用的是HDD算法(Hierarchical Delta Debugging),使用该算法之前需要根据GUI信息来构成GUI状态层次树,该树使用GUI状态的层次关系来表示
它们对应的事件的层次关系,其中,节点由当前的GUI状态和需要执行的事件构成,边则表示两个GUI状态之间的父子关系,之后使用HDD算法对层次本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于上下文的移动应用执行序列约减方法,其特征在于,针对安卓应用出现异常或报错的执行序列,首先,使用静态分析技术,通过soot插桩生成可输出log的应用程序,通过数据流分析提取日志信息与原始执行序列进行匹配,用UI的变化特征辅助构建过滤无用事件的reduce算法,对执行序列进行第一步的过滤,在此基础上应用程序切片技术,实现切片依赖关系的提取,对crash相应序列进行切片分析,从而生成必要事件的序列,在第二步缩减的生成树算法的基础上,利用必要事件去优化缩减序列的长度和顺序,最终生成最小执行序列;该方法包括下列步骤:1)soot插桩,对应用程序进行静态分析,指定特定的主包来消除一些其他类的方法调用的影响,对于所有的方法调用行InvokeStmt,在代码行中添加log语句,其中tag为output,value包含java资源行号Java source line number、类名、方法名、Jimple的语句表示,若为方法回调则添加CALLBACK字段,插桩之后使用cmd命令自动签名应用程序;本步骤的目的是在应用程序内添加输出语句,保存该方法的基本信息和方法间的依赖信息,为后续的第一步过滤提供数据支持,使得运行执行序列的时候完成与序列的对应关系,无用事件即在执行序列的运行中不会对最后异常的状态产生影响的事件,通过数据流的分析对无用事件的判定产生帮助;2)序列过滤,在插桩后的应用程序上运行原始的执行序列,通过线程抓取日志信息,与执行序列同步输出,若事件后跟随没有方法调用,且执行事件前后页面的xml信息未变化,则判定为无用事件,从而判定执行序列包含哪些无用事件,保存数据usefulScripts,对无用事件进行过滤,生成新的scripts日志和execute日志,在应用程序上对新序列进行执行,若可以重现crash则表明第一步过滤成功;3)程序切片,对程序进行soot插桩之后,收集运行时产生的具有特定标签的日志信息,构建一个有效的PDG(程序依赖图),该图的构建需要执行一个运行后的按需静态分析,将范围缩小到只在运行期间执行过的应用程序部分,然后根据crash信息找到导致crash产生的程序语句,将该语句的执行日志作为切片标准,之后分析应用程序的日志信息并根据切片标准来生成特定的执行PDG,PDG是通过向后探索依赖关系,逐步添加节点和边逐步构建的,其中PDG的依赖包括四个部分:同步和异步数据依赖、同步和异步控制依赖,最后根据脚本事件和PDG中的执行语句日志的对应关系来获取对产生crash有影响的脚本序列;4)生成树约减,该步骤使用的是HDD算法(Hierarchical Delta Debugging),使用该算法之前需要根据GUI信息来构成GUI状态层次树,该树使用GUI状态的层次关系来表示它们对应的事件的层次关系,其中,节点由当前的GUI状态和需要执行的事件...

【专利技术属性】
技术研发人员:冯洋郝蕊周孟博陈伟黄澴
申请(专利权)人:南京慕测信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1