论文部分内容阅读
近年来,安卓生态系统迎来了飞速的发展,安卓应用和安卓设备也呈现了爆发式增长。由于设备间的差异性,安卓应用难以保证在不同设备上功能的一致性,兼容性问题由此而生。针对这一现状,安卓开发者普遍使用软件测试的手段对应用的兼容性问题进行排查。学术界现有的方法主要关注于辅助开发者进行动态检测,以实现减少测试开销的目标。然而,如何识别、定位以及修复安卓应用代码中的兼容性问题,仍然是悬而未决的问题。因此,亟需一种全新的兼容性问题应对方案,可以在保证效率的前提下自动化的解决兼容性问题。针对此挑战,本文围绕如何解决安卓应用的兼容性问题,开展了以下研究工作:1.提出了一种基于多模态分析的安卓兼容性问题疑似应用识别方法。本研究致力于帮助相关人员快速识别会带来兼容性问题的安卓应用,进而能够针对性地对应用进行检测,并解决应用功能难以在不同设备上保持一致性的现状。本研究的挑战在于,安卓应用中信息语义复杂,无法保证抽取信息的有效性。为了解决这一挑战,本研究基于对兼容性问题成因的洞察,对应用信息进行了细粒度多模态的抽取,同时手动构建了能反映兼容性疑似与否的数据集,并使用统计检验方法,实现对应用多模态信息有效性的分析,并选取了有效的模态信息以实现对目标应用的识别。实验结果表明,该方法可适用于兼容性问题疑似应用的检测。2.提出了一种基于分布偏差的兼容性缺陷API自动识别的方法。本研究致力于帮助开发者识别代码层中会导致兼容性问题的API,进而能够针对性的对应用代码层进行修改,以大大减少应对兼容性问题的开发成本。本研究的挑战在于,API的数量级导致的分析成本巨大;且兼容性缺陷API包含不同成因,现有自动化方案都只能识别一类特定的目标API。为了解决这一挑战,本研究采用动静态分析相结合的手段,对应用中API的控制依赖关系进行分析,进而对兼容性相关代码段进行了识别,构建了目标API的候选集,以缩小搜索空间;之后依靠兼容性缺陷API在不同代码段中的分布偏差,对候选集中的目标API进行细粒度的精确识别。在真实的安卓应用数据集上的实验结果表明,该方法能够有效的识别不同成因的兼容性缺陷 API。3.提出了一种针对安卓应用兼容性问题的自动代码修复方案。本研究内容旨在进一步减少开发者在解决兼容性问题上的开销,为开发者自动化地改良存在兼容性缺陷的代码段。本研究的挑战在于,如何判断代码是否存在问题,以及如何对问题代码进行修复。为了解决这一挑战,本研究先对应用中的兼容性缺陷API进行定位,并通过后向分析确定目标API是否会造成兼容性问题;之后通过先前对该API兼容性成因的条件捕获,结合静态代码插桩技术,补全应有的条件判断,进而修复兼容性问题。实验结果证明,该方法能有效的修复代码中潜在的兼容性问题,同时时间消耗较少。