英语原文共 15 页,剩余内容已隐藏,支付完成后下载完整资料
摘要
背景:由于Android设备的广泛使用,Android应用程序(应用程序)的发布量、购买量和下载量比其他任何移动设备的应用程序更多。这些应用程序中的大量代码对软件的质量产生了很大的顾虑。然而,测试Android应用程序不同于测试传统的Java程序,由于独特的程序结构和应用程序的新功能。简单的测试覆盖标准,如语句覆盖,无法确保Android应用程序的高质量。尽管研究人员对寻找更好的Android测试方法表现出极大的兴趣,但是仍然缺乏有效和可用的技术来评估他们提出的测试选择策略,并确保有效的测试数量合理。
目标:由于突变分析被发现是在其他软件领域设计测试的有效方法,我们假设它也是Android应用程序的可行解决方案。
方法:本文提出一种创新的突变分析方法,专门针对Android应用程序。我们定义了特定于Android应用程序特性的变异操作符,例如广泛使用XML文件来指定布局和行为,固有的事件驱动性质和独特的活动生命周期结构。我们还报告了一个实证研究来评估这些突变算子。
结果:我们构建了一个工具,使用新颖的Android变体运算符来变更Android应用程序的源代码,然后生成可以在Android设备上安装和运行的突变体。我们通过对现实世界中的应用程序的实证研究评估了Android突变测试的有效性。本文介绍了基于Android应用程序故障研究的几个新颖的变异算子,提出了一个重要的实证研究与现实世界的应用程序,并基于结果的分析结论。
结论:结果表明,Android的新颖的Android突变运算符为Android应用提供了全面的测试。此外,由于应用Android应用程序的突变测试仍处于初步阶段,我们确定了挑战,可能性和未来的研究方向,使移动应用程序的突变分析更有效和高效。
1.介绍
移动应用是在诸如智能电话或平板电脑的移动设备上运行的软件程序。移动应用程序(应用程序)的数量越来越多,越来越多的平台可用,更多的应用程序上市,价格下降,更多的用户获得更多的设备。 Android操作系统目前主导市场,2014年第三季度的销售额为83.1%(iOS为第二,12.7%)。Android用户在Google Play商店中可以使用超过一百万个应用,这是应用最广泛的Android应用商店[1],每天都有成千上万的应用。
毫不奇怪,质量是一个严重和日益严重的问题。许多应用程序到达包含重大故障的市场,这常常导致在使用期间的故障。为了研究Android应用中软件故障的普遍性,在24个广泛使用的开源Android应用程序中分析了29,233个错误报告,发现超过8500个错误报告被确认为故障,并由开发人员修复[2]。他们分析的Android应用程序都无故障。虽然部分问题是缺乏软件工程(包括很少或没有测试),但也存在显着的技术问题。 Android应用程序涉及几个新的编程功能,我们很少有关于如何测试他们的知识。这导致弱和无效的测试。事实上,即使在尝试测试他们的应用程序的开发人员中,随机值生成是相当普遍的[3]。虽然几个研究人员提出了改进的测试技术,但这些都没有达到实践。
我们的整体研究项目的目标是开发测试技术,可以允许开发人员在发布之前发现Android应用中的缺陷,特别是在使用新的编程功能的代码部分(如第2节所述)。具体来说,我们建议使用突变分析,一种高端测试技术,已知帮助工程师设计强大的测试。
我们首先分析Android应用程序的独特技术特性,并为这些功能设计新的变异操作符。杀死那些突变体的测试可以预期揭示在使用特征中的许多错误。我们构建了一个概念验证变异分析工具,实现了新的Android变异操作符以及更传统的变异操作符。
我们的Android突变分析工具可以使用三种不同的方式。作为测试案例设计的一种方法,突变分析是已知的最强大的测试标准之一。因此,突变可用于设计非常强大的测试。第二,一旦完成,抛光,并提供给其他研究人员,突变分析工具可用于评估Android应用程序的其他测试技术。第三,如果测试器具有大量预先存在的测试,则很多测试器可能是冗余的。这对于Android测试者来说尤其麻烦,因为由于各种技术原因,测试执行往往很慢。然而,确定要保留哪些测试和要处置哪些测试是一个具有挑战性的问题。突变分析允许通过仅保留增加突变分数的测试来过滤测试。
本文作出以下贡献:
bull;它定义了针对Android应用程序的新型突变操作符。
bull;它在八个Android应用程序上评估这些变异运算符。
bull;它确定了An-droid应用程序的突变分析的未来研究领域。
本文扩展了我们在2015年突变研讨会上发表的工作[9]。之前的实验揭示了一些缺陷,因此我们设计了基于Android应用中常见故障的新的Android变异算子,对新的真实应用程序进行了额外的实证研究,收集结果并进行了彻底的分析,并比较了仿真器和实际设备,以及不同的运行时系统。本文还研究了8个应用程序,相比之前的论文只有一个[9]。
本文组织如下。第2节描述了Android应用程序是如何编程的,包括框架中编程的一些独特方面,并介绍了突变分析的工作原理。第3节定义了十一个新的突变操作,突变新的编程功能,如Intent和事件处理程序。第4节概述了如何在Android框架中应用变异分析,这与传统语言(如Java)非常不同。第5节介绍我们研究的Android应用程序,显示如何使用突变分析来测试它们,并描述实验研究的结果。本文最后总结了第6章中的相关研究,以及第7节中对我们计划的未来工作的讨论。
2背景
Android应用程序与传统软件不同,它使用新的结构和新的控制和数据连接。这个重新搜索项目正在应用现有的测试技术,突变测试,到一种新型的软件,移动应用程序。因此,在进入我们的研究之前,我们需要简要概述Android应用程序的工作原理,接下来是突变测试的概述。
2.1编程Android应用程序
Android有一个称为Android应用开发框架(ADF)的开发环境。 Android ADF提供了一个API来帮助构建应用程序,创建GUI和访问设备上的数据。 Android包括基于Linux的操作系统,包括中间件,预安装的应用程序和系统工具。 Android使用Dalvik虚拟机[10]在版本4.4(KitKat)之前执行Java程序。最重要的版本,Android 5.0(Lollipop),取代Dalvik与Android运行时(ART)。然而,正如谷歌所说,Dalvik开发的大多数应用程序应该在ART下没有任何变化[11]。此更改不会影响Android应用程序的一般结构或编程方法。 Android应用程式也可以发布自己的功能,让其他应用程式使用,但有一定的限制。
Android应用程序根据具有强制的清单文件和四种类型的组件的新颖结构构建。清单文件以可扩展标记语言(XML)编写,并向ADF提供有关应用程序的信息,包括配置信息和应用程序组件的描述。
Android应用有四种类型的组件:活动,服务,广播接收器和内容提供商(Activities, Services, Broadcast Receivers, and Content Providers.)。活动基于一个或多个布局设计向用户呈现屏幕。这些布局可以包括用于不同尺寸的屏幕的不同构造。布局定义视图小部件,它们是GUI控件。 XML中的配置文件描述了控件及其如何使用每个小部件的唯一标识符进行布局。服务组件在后台在设备上运行。它们执行不需要与用户交互的任务,例如计数步骤,监视设置闹钟和播放音乐。服务不与屏幕交互,尽管它们可以与活动交互,然后活动又与屏幕交互。内容提供商存储并提供对存储在文件系统中的结构化数据的访问,包括cal-endar,照片,联系人和存储的音乐。最后,广播接收器处理在系统范围内通知的消息,例如低电量。
Android组件通过使用Intent消息(包括组件应执行的操作)和组件需要的数据来激活。 Android支持Intent消息的运行时绑定。这是通过调用通过Android消息服务,而不是显式地存在于应用程序中启用。
Android要求所有主要组件(如服务和活动)根据预先指定的生命周期运行[12]。 ADF管理这些行为。图。图1示出了作为事件和状态的集合的活动的生命周期。状态为正在运行,已暂停和已停止。在Create(),onStart()和onResume()上的事件后达到运行状态。 onPause()将Activity发送到Paused状态,然后onStop()将其发送到Stopped,onResume()将其发送回Running。从停止,活动可以转到使用onRestart(),onStart()或onResume()运行,或者它可以使用onDestroy()事件退出。ADF调用生命周期事件处理程序,并且与我们的研究一致,如稍后解释的。
图1. Android应用程序中的活动生命周期。
2.2突变分析
本文提出使用突变为Android应用程序组件设计有效的测试。突变测试修改软件工件,如程序,需求规范或配置文件,以创建称为突变体的新版本[13]。突变体通常旨在是有缺陷的版本,并且通过应用用于改变软件工件的语法的规则来创建。这些规则称为变异运算符。测试者然后创建测试,使原始和每个突变版本表现出不同的行为,称为杀死突变体。例如,传统编程语言的ROR运算符将所有其他关系运算符(lt;,==,gt;,gt; =,!=)加上trueOp的每个关系运算符的每个实例(例如,lt;= falseOp,将条件设置为true和false [14]。变异运算符有时会创建类似的更改程序员错误,有时引入更改,迫使测试人员设计可能发现故障的测试输入。
每个突变体在测试套件中针对测试运行以测量测试杀死的突变体的百分比。这称为突变充分性分数。突变测试一直被发现通常比其他测试标准更强。这种力量的一个来源是它不仅仅应用本地要求,例如达到语句或在控制流图中访问子路径(可达性),但它还要求变异的语句导致程序执行中的错误状态(感染),错误的状态传播到不正确的外部行为的突变程序(传播)。
一些突变体在每个输入上具有与原始程序相同的行为,因此不能被杀死。这些突变体称为等价的。从突变检测中识别和消除等同突变体是突变检测的主要成本。一些突变体不会编译并成为死产物,因为改变使得程序在语法上不正确。虽然这些死产突变体通常可以避免,如果突变运算符设计良好并适当实施,一些确实发生。必须准备突变系统以识别死产突变体并将其从考虑中重新移除。
为许多不同的语言创建了变异运算符,包括C,Java和Fortran。 Android应用程式的变数操作符专注于Android的新颖功能,包括清单档案,活动和服务。
3.Android变异算子
突变分析依赖于突变运算符,突变运算符是用于改变程序或伪像的合成规则。良好的突变操作者可以导致非常有效的测试,但是不良突变操作者可能导致无效测试或大量重复测试。变异运算符通常使用两者之一来定义方法。当可用时,从故障模型定义变异算子,其中每种类型的故障用于设计产生那些故障实例的变异算子。muJava类级运算符基于亚历山大以前的故障模型。另一种方法是分析被突变的语言的每个语法元素,并且设计突变体以修改语法,典型的程序员可能会误解。
我们定义了五个类别的变异操作符,其中四个基于它们覆盖的Android应用程序元素(Intent,Activity生命周期,事件处理程序和XML)。第五个是基于应用程序员所犯的常见错误。每个Android应用程序必须至少有一个Activity [27],这对测试至关重要。
Google的“活动测试:测试内容”[28]文档列举了内存和生命周期事件作为测试的两个基本要素。 Android应用程序是事件驱动的GUI程序[8,29,30],因此我们设计了突变事件处理程序的运算符。由于Android应用程序的各个方面都是在XML配置文件中定义的,我们还设计了操作符来变更XML文件。
Android应用程序通常基于空值和屏幕的定向出现故障[31]。因此,我们设计了基于这些故障的两个变异算子。
我们在这五个类别中设计了11个变异算子。以下子部分依次定义每个运算符,按类别组织。
3.1意图变异算子
如第2节所述,Intent是在Android组件中执行的操作的抽象[32]。它们通常用于启动活动或在活动之间传输数据或消息。
3.1.1意图有效载荷替换(IPR)
Intent可以携带不同类型的数据(称为有效载荷)作为键值对。putExtra()方法将键名称作为第一个参数,并将该值作为第二个参数。 IPR运算符将第二个参数转换为在底层数据类型上删除的默认值。这些默认值在表1中列出。具有原始数值类型(例如int,short,long等)的对象由值零替换,布尔变量由true和false替换。字符串对象被空字符串和空值替换。数组和其他类型的对象将被空值替换为适当的类型。
String对象消息将替换为空字符串(原始和突变状态以粗体显示)。 IPR突变体挑战
试者设计测试用例,以确保Intent对象传递的值是正确的。
原始类型 |
默认值 |
nt,short,long,float,double,char |
0 |
boolean |
<p 全文共8189字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[142623],资料为PDF文档或Word文档,PDF文档可免费转换为Word </p |
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。