论文部分内容阅读
智能手机在人们的生活中成为了不可或缺的一部分。智能手机的计算能力变得越来越强,搭载的传感器越来越繁多。智能手机应用会采用并发编程技术以提高CPU的利用效率,利用传感器获取用户的物理环境的一些参数。但是,这里相应的出现了两个严重的问题——能耗和并发缺陷,从而降低了应用的质量,最终导致较差的用户体验。感知操作是一个十分消耗能源的操作,从中获取到的传感器数据应当被有效地利用。但是,已有的研究表明应用市场中的智能手机应用的传感器数据利用率通常较低,从而导致了严重的能耗浪费。为了解决这个问题,最新的技术GreenDroid能够自动地生成传感器数据,记录它们的传播以及分析它们在应用中的使用情况。然而GreenDroid的传感器数据生成方式是随机的,而这会使诊断结果不稳定和降低其有效性。众所周知,并发程序比较难以编写、测试和调试。安卓官方提供了一系列约束以避免出现并发缺陷,比如只能在Main Thread进行GUI更新。随着应用的复杂度不断增加,开发者越来越难以正确地理解应用的行为,从而导致出现难以察觉的并发缺陷。部分已有的工作通过利用已有的输入事件序列构建happens-before图,从而检测潜在的数据竞争。但是,它们严重地依赖于这些输入事件序列,从而造成较高的假阳性。针对能耗和并发缺陷,本文采用了测试用例生成技术,即利用应用的历史执行和当前状态生成新的测试用例。为了实现更加有效的能耗低效性诊断,本文提出了一个创新的方法以系统地生成多维的传感器数据,同时用更细粒度的方式定义了应用的状态。本文实现了一个原型工具CyanDroid,并且用了真实的应用以及它们的变异体对CyanDroid进行了评估。结果表明CyanDroid在诊断由传感器数据低利用率所导致的能耗缺陷时更加稳定、有效。另一方面,基于能够同时生成输入事件及其调度这样的事实,本文提出了一个触发安卓应用中并发缺陷的方法。本文实现了动静结合的混合分析以找到应用中潜在的冲突资源访问,然后通过导向型的事件和调度生成自动地运行被测应用。本文实现了相应的原型工具AATT,并用真实的应用对其进行了评估,结果表明了AATT的有效性和高效性。