论文部分内容阅读
多线程编程模型和异步事件处理机制的引入使得安卓应用的执行行为具有不确定性。若两个事件以预期之外的顺序访问同一个共享对象时,则可发生顺序违背。顺序违背是一种常见的安卓应用并发缺陷,可导致安卓应用运行异常和崩溃等严重后果。现有的安卓应用并发缺陷探测工具大多采用静态或动态探测方法,但这些方法存在误报率高、代码覆盖率低等问题。针对上述问题,本文提出一种基于约束求解的安卓应用顺序违背探测方法。该方法首先通过静态分析待测应用获取该应用的共享变量及相关读写信息,得到潜在顺序违背语句对集;然后采用动态搜索技术生成待测应用的GUI模型,并使用符号执行工具生成该应用的符号摘要信息;再根据GUI模型和符号摘要信息,生成可执行事件序列覆盖相应潜在顺序违背的语句对所在代码;最后动态执行事件序列,并通过插桩执行获取其执行轨迹,在此基础上对潜在顺序违背事件及相关上下文进行约束编码,并使用约束求解器求解,将并发错误探测问题转化为约束求解的问题。该方法通过生成可执行序列和约束求解,降低误报率,来提高探测能力和探测效率。在上述工作的基础上,本文设计并实现了基于约束求解的安卓应用顺序违背并发错误探测工具ODecs Droid,与现有顺序违背探测工具n Android和SARD进行比较。实验结果表明,ODecs Droid可有效探测安卓应用顺序违背,在探测精度和探测效率方面达到了较好的折中。与n Android相比,ODecs Droid探测的真实顺序违背数量(平均为5.72个)高于n Android(平均为4.72个),并且ODecs Droid的误报率(21%)显著低于n Android(82%);与SARD相比,ODecs Droid探测的真实顺序违背数量与SARD(平均为5.61个)相近,但SARD的误报率(52%)仍高于ODecs Droid。ODecs Droid在运行时间上高于SARD,仅为n Android的44%。