论文部分内容阅读
近年来,Android应用市场迅速扩大,应用程序功能激增,越来越多有趣且多样化的功能被用户所喜爱。然而,Android手机电池续航时间短,应用程序耗能太快,逐渐成为消费者对Android手机不满的主要原因。如何平衡应用的多样化与手机耗能的增加,成为一项亟待解决的问题。 研究人员已经探索了多种技术来改善Android手机的性能,如提升硬件质量、改善操作系统设计等。但仅仅基于平台层或硬件级别的改进往往不够,一个编码很差的应用程序将快速地耗尽手机电池的寿命,如频繁使用大量重复计算、调用硬件资源却不释放。因此,如何有效地评估Android应用程序自身的能耗也是非常关键的。 软件测试在软件工程领域占据着非常重要的地位,从是否执行程序的角度,可以分为静态测试和动态执行。静态测试不运行程序本身,仅通过分析源程序的语法、结构等来检查正确性。然而Android应用通常不开源,且耗电量与程序运行时的诸多因素有关,仅通过静态方法来估计应用程序的能耗不一定可靠。而动态执行能够将以人为驱动的测试转换为机器执行,耗电量估计需要庞大的测试数据作为支撑,所以自动化的动态执行在本课题中尤为重要。 本文结合统计建模和基于软件的测量方法,提出了一种轻量级且自动化的Android应用程序函数级能耗的估计方法。相对于基于硬件的能耗测量,基于软件的测量方法能够在一定程度上减小背景噪音,尽可能的减小测量误差。为了获得应用程序执行时的函数调用信息,本文提出了一种基于Dalvik字节码的插桩技术来标记所有执行过的函数。当在Android设备上运行插桩后的应用程序时,同时通过能耗测量软件的监控,就可以获得执行过的路径信息以及相对应的能耗数据。接下来,本文采用线性回归分析来建立能耗模型,使得事件序列的能耗测量值能够映射到函数级别,并通过反馈机制来改善模型的精确度。本文设计了一套完整的流程用于以上的函数级能耗估计,并对一些广泛使用的应用程序进行了实验,实验结果显示本文提出的方法可以有效地估计并预测一条给定的伪随机事件序列的能耗值。