基于版本比较技术的安卓老化检测方法研究毕业论文
2020-02-19 18:15:49
摘 要
软件老化通常指的是软件在运行过程中,由于系统资源泄漏等原因引起的软件性能逐渐下降并最终可能导致软件运行异常的现象。在各种各样的系统中都存在着软件老化问题,包括移动终端系统。随着科技的不断发展进步,移动设备的功能越来越多,也变得越来越复杂,不可避免的会受到软件老化问题的影响。而在各种移动设备中,安卓系统占了绝大部分。因此,研究安卓系统中软件老化问题是很有意义的。
传统检测软件老化问题的方法需要耗费很多人力和物力,主要原因有两个:一是需要设计复杂的测试用例,使老化问题造成的指标异常现象更加明显;二是需要进行长时间的测试运行,收集大量指标数据用于分析。版本比较技术能够有效降低传统方法的复杂度。首先,这种方法具有负载无关性,在收集数据的过程中即使不采用复杂的测试用例也能通过不同版本之间指标数据的比较得出明显的老化现象。其次这种方法可以重用软件系统测试阶段得到的测试数据,减少数据收集的时间。但是该方法也存在明显的缺陷:在实际的开发过程,发布的新版本除了解决之前的Bug外,还会对代码做其他的修改,在这个过程中可能会引入新的内存泄漏的问题;此外,如果进行比较的版本中还含有未被发现的软件老化问题,也会对实验造成很大的影响。因此版本比较技术无法适用于所有的软件系统中。
在本文中首先介绍了软件老化以及安卓系统相关的背景知识,便于后续实验的进行。然后对版本比较技术进行了理论上的评估,说明了其可行性。接着讨论了实验中安卓系统版本的选择以及数据指标的选择,尽可能的选择出合适的实验版本和有效的对比指标。最终通过实验证实版本比较技术无法有效检测出安卓系统中软件老化问题。
关键词:软件老化;安卓;软件开发;版本比较
Abstract
Software aging usually refers to the phenomenon that software performance gradually declines due to system resource leakage and other reasons in the process of software operation and may eventually lead to abnormal software state. There are software aging problems in a variety of systems, including mobile terminal systems. With the continuous development and progress of science and technology, the functions of mobile devices become more and more complex, which will inevitably be affected by software aging. Android makes up the vast majority of mobile devices. Therefore, it is meaningful to study the software aging problem in android system.
Traditional methods for detecting software aging problems require a lot of manpower and material resources, and there are two main reasons: One is the need to design complex test cases, in order to be able to make the indicators caused by aging problems more obvious; Second, it needs to run for a long time and collect a lot of metric data for analysis. Version comparison technique can effectively reduce the complexity of traditional methods. First of all, the required comparisons are workload-independent. In the process of data collection, even without complex test cases, obvious aging phenomenon can be obtained by comparing metric data between different versions. Secondly, this method can reuse the test data obtained in the test phase of the software system and reduce the time of data collection. However, this method also has obvious defects: in the actual development process, the new release will not only solve the previous bugs, but also make other changes to the code, which may introduce new memory leaks in the process; In addition, if the comparison version also contains undiscovered software aging problems, it will also have a great impact on the experiment. Therefore, version comparison technique cannot be applied to all software systems.
In this paper, the software aging and android system related background knowledge is first introduced to facilitate the follow-up experiments. Then the feasibility of the version comparison technique is proved by theoretical evaluation. Then it discusses the choice of android system version and running index in the experiment, and tries to choose the suitable experiment version and effective comparison index. Finally, the experiment proves that version comparison technology cannot effectively detect the aging problem in android system.
Key Words:Software aging;Android;Software development;Version comparison
目录
第1章 绪论 1
1.1 研究背景和意义 1
1.2 国内外研究现状 3
1.3 论文的研究内容及主要工作 4
1.4 论文的内容组织 5
第2章 安卓源码编译及相关工具使用 6
2.1 安卓源码编译 6
2.1.1 源码下载 6
2.1.2 构建编译环境 7
2.1.3 编译源码 8
2.1.4 运行 9
2.2 ADB工具 9
2.3 本章小结 10
第3章 基于版本比较技术的安卓软件老化检测方法 11
3.1 版本比较技术的理论依据 11
3.2 安卓版本的选择 11
3.3 指标的选择 14
3.4 实验设置 16
3.5 本章小结 16
第4章 实验结果分析 17
4.1 运行指标相关系数分析 17
4.2 指标分析 17
4.2.1 安卓可用内存及空闲内存分析 17
4.2.2 模拟器占用内存 20
4.2.3 其他指标 21
4.3 本章小结 23
第5章 总结与展望 24
5.1 研究总结 24
5.2 研究展望 25
参考文献 26
致谢 28
绪论
研究背景和意义
在如今的互联网时代,几乎各行各业都会开发属于自己的互联系统。除了日常生活中接触较多的购物系统、论坛系统外,还有一些保密程度较高的银行、贸易甚至军事系统。在这些系统中,几乎所有的服务器软件都要求能够长期稳定的运行,为用户提供无间断的服务,例如DNS服务器、文件服务器、Web服务器、Email服务器等。但是,随着现代服务器软件提供的功能越来越多,必定会造成服务器软件的代码量提升,从而导致这些软件越来越复杂,埋下了失效的隐患,因此提供长期稳定的服务实际上是非常困难的。造成软件系统失效主要有两个方面的原因,硬件方面和软件方面。在硬件方面,各种线路、元件可能由于长期运行或其他人为以及自然原因导致失效。通常来说,合格的物理硬件满足了出厂要求,是能够保持长时间使用的。但是随着使用时间越来越长,这些硬件由于高负载或者其他原因出现老化的概率就会提升,最终会出现故障。通常来说,硬件何时发生故障是无法预测的,有很大的随机性。在软件方面,主要是由于日渐复杂的需求导致软件系统在设计、开发、测试和维护阶段会产生很多的不确定因素。越是庞大的项目,越是复杂的逻辑,在进行测试时就越难发现其中的问题所在[1]。即使是已经上线运行的系统,也无法确保完全排除了代码缺陷的影响。由于这些问题的存在导致软件系统长期稳定的运行成为一个十分困难的目标,而软件老化是其中最主要的原因。
软件老化通常是指在一些长期运行的系统中,由于系统资源耗尽而使得系统的性能逐渐下降并最终导致系统运行异常的现象。造成系统资源耗尽的主要原因有内存泄漏、未释放锁、僵死线程、磁盘碎片化等。而计算机软件的性能主要表现在系统响应时间、应用延时时间、资源利用率、并发用户数以及吞吐量等方面[2]。自从软件老化这一概念在20多年前被提出以来[3],受到了众多的关注。随着软件的规模变得越来越大,软件的逻辑也越来越复杂,几乎在各种各样的长期运行的软件系统中都存在着软件老化的问题,例如云计算平台[4],通信系统[5],Linux操作系统[6],Web服务器[7],安卓操作系统[8]。由此可见,软件老化是软件系统中不可忽视的问题。
软件老化现象造成的后果通常是非常严重的。对于普通的软件系统可能会造成用户无法使用的问题,对于要求高可靠性的软件可能会导致经济损失,而对于安全性有极高要求的系统可能导致人员受伤甚至生命损失。针对这种现象,提出了一种叫做“软件重生(Software Rejuvenation)”的方法[9],也就是通过定期的重启软件系统或整个计算机设备,对服务器内部进行初始化操作,以此来释放由于软件老化问题而减少的系统资源,恢复软件系统的性能和状态,避免由于软件老化问题带来更大的损失。作为一种预先行动式的预防手段,在老化问题造成严重后果之前对系统进行重启更具有可控制性,避免了由于资源不断泄漏造成系统突然宕机等情况,减少了软件系统的停机时间,提高了软件系统的可用性和可靠性。在使用软件重生方法时,一个比较关键的问题是重生时间间隔的确定。过短的时间间隔会使得系统重启频率过高,影响系统的可用性;过长的时间间隔又有可能无法避免软件系统的失效。为了估算重生时间间隔,确定软件系统的寿命分布,通常有两种方法[10]:一种是基于模型的方法,通过提取系统的特征数据并做出一定的假设对系统进行抽象,利用马尔科夫模型[11],半马尔科夫模型,Petri网等模型对系统进行建模,利用模型估算软件老化发生的时间。这些模型能够适用于很多不同的系统中,因此使用基于模型的方法能够得到更加综合的结果,并且也更适用于跨平台的系统;另一种是基于测量的方法,通过采用线性时间分析[12],机器学习[13]等方法,对软件系统运行时收集到的相关数据进行分析从而预测软件老化的发生。这种方法更倾向于通过直接收集到的数据来预测老化现象的发生。
随着科技的进步发展,移动设备(包括手机,平板电脑,可穿戴设备等)越来越智能化,包含的功能也越来越多,在人们的日常生活中占的地位也越来越高。各种即时通讯工具支持随时随地与他人进行沟通交流,移动支付平台取代了钱包,娱乐软件更是数不胜数,可以说人们的生活已经离不开各种移动设备了。因此这些设备必须是可靠的,能够为用户提供稳定的服务。但是随着这些设备功能越来越多的同时,其复杂性也随之攀升,而且各个厂商为了使自己的产品更具有竞争力也会对自己的产品进行高度的定制化,这些都可能降低移动设备的可靠性。
安卓是基于Linux操作系统开发出来的一个免费开源的操作系统。主要用于移动设备,比如手机和平板电脑。2017年Gartner研究机构的一份调查报告数据显示,在全球出售的智能设备中,有99.9%的比例使用的是Android或IOS系统,其中安卓系统在全球市场占比达到了85.9%。由此可见,安卓系统的使用者是非常多的。为了避免如此众多用户的损失,研究安卓系统中软件老化问题是很有必要的。通常,在检测安卓系统老化问题的过程中主要存在两个难点,其一,软件老化问题不像其他软件缺陷一样会产生明显的异常,通常需要对各种指标进行一段时间的观测才可能通过某指标异常变化表现出来,这就导致在安卓系统开发过程中很难找出软件老化的问题。其二,安卓源码非常庞大,在进行开发测试时几乎不可能做到代码全覆盖,为软件老化问题埋下了隐患,同时也使得定位其中的软件老化问题更加困难。
在本文中使用的版本比较技术,能够在开发或测试阶段检测软件系统中的软件老化问题。版本比较技术是Felix等人提出的一种检测软件老化问题的方法[14]。该方法有两个特点,一是可以重用软件测试阶段得到的各种数据,在传统的软件开发和测试过程中不需要做过多改变就能采用该方法。二是这种方法进行的比较是负载无关的,也就是实验中采取不同强度的压力测试对结果影响不大。如果能够证实版本比较技术确实可以检测出安卓系统中的软件老化问题,那么就可以减少软件老化测试过程中进行压力测试所带来的成本及其不便性,对于安卓的开发和测试是非常有帮助的。
国内外研究现状
软件老化通常是指软件系统中由于错误的积累或者资源的耗尽,比如说物理内存,而造成的系统的失效率上升或者性能下降的现象。这种现象在很久以前就被人们所熟知。早在1960年就有证据表明软件老化的存在:在某军事安全系统中,一旦错误报告缓存区满了,系统就会出现异常[15]。在1993年,Lawrence研究通信系统时[16]发现了许多这样的问题:在被触发时并不会立刻导致软件失效,但是会造成类似内存泄漏,未释放文件锁等问题,随着积累的错误越来越多,会导致系统的性能下降并最终导致系统失效。可以看出,他所发现的这些问题其实就是所谓的软件老化问题。1994年,来自加拿大Parnas正式提出了软件老化这一概念[3]。随着这一概念的提出,人们对于软件老化有了进一步的认识,且由于软件老化的普遍存在和严重后果,国内外学者对软件老化进行了很多研究,提出了很多检测软件老化的方法。
对于软件老化的检测,大多数研究是对软件运行时收集到的数据进行分析,根据得到的数据建立合适模型等对老化现象做进一步的预测。Weng等人通过实验证实了安卓系统中确实存在软件老化问题[17],并且通过实验证实了热启动对安卓系统软件老化问题的恢复几乎是没有用的。同时还根据已有数据建立马尔科夫模型对安卓系统中软件老化做了预测,估算出了软件老化出现的时间点。杜小智等人针对视频点播系统[18],采用Mann-Kendall方法对收集到的视频点播服务器的实时参数进行分析,并以此检测老化趋势以判断系统是否存在软件老化现象,同时还通过Sen的斜率估计方法对老化衰退速率进行了估算。范新媛等人以Apache服务器为研究目标[19],同时采用回归分析以及自回归差分移动平均模型研究负载以泊松流变化时剩余内存随时间变化的情况。实验结果表明该模型可以很好的拟合出剩余内存的变化趋势,并能通过该方法对剩余内存等系统资源进行预测。
由于存在老化问题的代码在整个软件项目只占很小的一部分,因此在检测软件老化问题时往往需要收集大量的测试数据,可能会存在没有足够的数据用于建立预测模型的情况。在这种情况下,Qin等人提出了TLAP(transfer learning based aging related bug prediction approach)方法[20],这种方法基于迁移学习实现了跨项目的软件老化检测。一般来说,软件中存在的老化问题都是由于资源泄漏引起的,因此不同项目中的老化问题会有比较相似的特性。迁移学习能够减少不同项目之间分布的差异,找到训练项目和测试项目中共同的特征并以此提升预测老化问题的效果。实验中以MySQL和Linux为研究对象,通过使用TLAP方法提升了老化问题预测的性能。
版本比较技术的思想在很多方法中都有所体现,例如Felix等人提出了比较软件不同版本在字节码层面的内存分配行为检测软件老化的方法[21];而Mohammadreza等人是比较不同版本之间对象分配行为[22];Matias等人则比较各个版本计算出的资源占用差分图[23]。以上方法是非常相似的,主要的区别是比较对象的不同。上述前两种方法在收集数据时都会涉及源码层面,如果源码量非常大,在统计相关信息时是非常不便的,因此并不适用于像安卓系统这样庞大的项目。而第三种方法则需要通过其他手段计算出差分图,也是比较复杂的。本文所采取的版本比较技术主要是比较安卓系统在运行时各种资源指标的变化,如果存在软件老化问题,理论上相应的指标数据会出现异常变化,比如占用内存增加的更快,空闲内存减少的更快等,并不需要其他复杂的计算。本文采用三个不同的版本进行比较,尽可能体现出缺陷版本和无缺陷版本之间的异常。
论文的研究内容及主要工作
由于软件老化问题的特殊性,在软件开发过程中很难发现软件老化问题,这些问题通常在实际生产过程中才暴露出来,会带来很多的麻烦。传统的检测软件老化的方法费时费力,而且得到的效果也不理想,尤其是对于安卓系统这种庞大的项目来说。Felix提出的版本比较技术,通过收集同一软件不同版本运行得到的各种指标信息,筛选出有用的指标进行比较从而判断该软件某版本是否存在软件老化问题。这种方法有两个特点:一是版本比较技术可以重用在软件测试阶段收集到的数据,能够提升收集数据的效率,可以在软件开发测试阶段就对软件进行老化测试,解决了传统软件老化检测手段无法应用于软件开发测试阶段的问题;二是版本比较技术是负载无关的,即在收集数据过程中,对软件施加的负载大小对于最终的分析结果的影响比较小,因此不用在软件老化问题检测阶段设计复杂的测试环境,减轻了测试压力。
本文主要研究版本比较技术对安卓系统中软件老化问题检测的适用性。为了在安卓系统的老化问题研究中使用该技术,首先需要搭建版本比较技术的应用环境。根据原文,需要选择三个不同的开发版本,其中一个版本中含有软件老化的问题,另一个版本修复该老化问题,然后参照修复版本对剩余的一个版本做同样的修复。这样得到了一个有缺陷版本,两个没有缺陷版本。其次选择收集的运行指标。结合已有软件老化问题的研究成果[6][9],本文一共选择了六个运行指标,可以分为两类:一类为安卓系统相关参数,包括空闲内存,可用内存;另一类为模拟器相关参数,包括常驻内存,文件打开数,线程数以及CPU占用率。接着分别编译并运行这三个版本的安卓系统,通过脚本模拟人为操作使用系统,同时收集这些指标数据。为了减小数据误差,每个版本重复三次实验,将收集到的三组数据的平均值作为最终数据,最后根据所得的数据进行绘图并进行分析。
论文的内容组织
全文共分为五章:
以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。
相关图片展示: