英语原文共 12 页,剩余内容已隐藏,支付完成后下载完整资料
移动应用软件测试技术的比较分析
Samah W.G. AbuSalim1 , Rosziati Ibrahim1 , Jahari Abdul Wahab2
1软件工程系,University Tun Hussein Onn Malaysia,Parit Raja, Johor, 86400, Malaysia
2 Engineering Ramp;D Department, Sena Traffic Systems Sdn. Bhd., Kuala Lumpur, 57000, Malaysia
摘要:软件测试是调查过程需要充分的信息的质量程序和符合规范,已确定由客户和他们之前发现问题和错误发现当系统或用户程序运行。它在软件工程中扮演着重要的角色,是软件质量保证(SQA)的基础。由于移动应用程序用户数量的增加,移动应用程序的测试是开发任何应用程序的一个重要阶段,以确保软件零缺陷。为此,开发了许多软件测试技术和工具,每一种都有自己的特性来测试软件。本文介绍和概述了移动应用中常见的检测错误的软件测试技术的不同策略,即:白盒测试、黑盒测试、灰盒测试、变异测试、回归测试和模糊测试。本文的主要目的是提出有效的移动应用程序测试技术。由于研究的结果,目前在移动测试中使用的测试技术主要有变异测试、回归测试和模糊测试。白盒测试和黑盒测试技术很少被使用。移动应用程序测试的最新研究也集中在移动应用程序的GUI测试上。
- 介绍
随着科技时代的速度和现代电子营销技术的出现,移动应用程序得到了强有力的传播,随着一些著名的系统出现,它们已经成为互联网上大量的应用程序,如Android应用程序和iPhone应用程序,并已成为各种领域的广泛需求,如教育和卫生领域。移动应用程序(Mobile apps)是在智能手机、平板电脑、智能电视和智能手表等移动设备上安装和实现的软件程序。如今,智能手机平台的大规模发展和移动应用程序的使用变得显著增加。根据Digital 2019 Reports[1],过去一年的手机用户总数为51.1亿,预计在不久的将来这一数字将大幅增长。因此,移动应用程序测试在确保应用程序质量方面起着战略作用。根据高et al。[2]移动应用测试通过实现一系列的活动中,特定测试技术和工具的功能是用来确保质量,性能和服务质量,除了功能包括流动性、可用性、互操作性、连通性、安全和隐私。这些基本活动包含了测试系统最重要的阶段:计划、设计、实施和测试分析[3][4]。
许多软件测试技术都是为了这个目的而提出和实现的。每种技术都有优点和缺点。为此,本文介绍了几种软件测试技术,并对它们进行了详细的比较。目的是评估这些技术在测试移动应用程序中的有效性。其余部分如下:第2节概述了软件测试和一些软件测试技术及其优缺点。第3节总结了以往有关软件测试技术的研究。第4节包括分析和讨论。结论和未来的工作将在第5节中提到。
- 软件测试概述
软件测试是软件开发生命周期(SDLC)的一个重要阶段,影响着软件和硬件的流行。测试的主要目的是测量软件的质量和识别错误。根据IEEE标准(1990),软件测试被定义为“分析软件项目以检测现有条件和所需条件(即bug)之间的差异,并评估软件项目的特征的过程”[6]。虽然软件测试很重要,但它是昂贵的,因为许多软件公司花费高达40%的资源来测试[7]。
图1显示了测试成本和发现的bug之间的关系。如图1所示,在两种类型的测试(功能性和非功能性)中,成本都显著上升。关于需要测试或减少哪些内容的决策可能会导致许多错误。有效测试的目的是执行最佳测试,以便减少额外的测试工作量[8]。
图1所示。测试成本和bug发现之间的关系
软件的测试过程被划分为几个不同的级别,所有基本的测试活动都要经过这些级别。程序的每个组成部分都在每个层次上进行测试,以确保程序测试的质量和性能。软件测试级别包括四个基本级别:单元测试、集成测试、系统测试和验收测试。单元测试级别是测试或测试级别的一个阶段。它是作为第一个阶段执行的,在这个阶段中,由该软件组成的“单元”在每个部分上分别进行测试,这包括在代码中编写的方法、对象和类。它检查所有可能的输入都输出了预期的输出。单元是应用程序中可以测试的最小的部分。这个测试级别的目的是确保每个基本单元都能正常工作,没有错误,这样当转移到其他阶段时,错误就不会累积和出现。测试级别的下一个阶段是集成测试。当系统的模块组合在一起,并作为一个组进行测试,以确保集成的单元正确地一起工作时,这个测试级别就完成了。在单元测试中,软件可以单独正确地工作,但是当链接到另一个部分时,错误就会发生,并且这个阶段先于整个系统测试阶段,以揭示集成模块之间的接口和交互的缺陷。以下级别是系统测试。经过验证,应用程序满足了客户的实际需求,这种类型的测试不需要了解应用程序的逻辑或其内部构造,而是从外部执行,而不涉及内部细节。执行此测试以确保系统满足指定的需求。最后一个级别是验收测试,基本上由系统的用户执行。此级别测试应用程序是否满足客户需求和预期规范。测试可以手动执行,也可以自动执行。手动测试是一种测试类型,测试人员为代码的不同部分制作测试用例,并在不使用任何类型的测试自动化工具的情况下执行这些测试用例。一种不使用任何称为手动测试的工具来执行的测试。测试人员手动执行这个测试,因为它检查软件接口和它们之间的交互,通过在它们之间移动,检查输入和输出,通过输入不同的值,记录出现的结果,并将它们与测试过程的预期结果进行比较[9]。与手动测试不同,测试人员使用良好的自动化测试工具执行自动化测试,测试人员编写的测试用例通过自动化测试工具执行。自动化是用来添加额外的测试,这些测试很难手动执行。该测试旨在减少时间、人力和成本[10]。
软件测试的方法分为白盒、黑盒、灰盒、变异、模糊和回归测试技术。在本节中,我们将展示这些软件测试技术。
白盒技术:称为结构测试、清晰盒测试或类盒测试[11]。在白盒测试中,测试人员应该对应用程序的内部结构有深入的了解。在白盒测试的测试用例设计过程中,编程技能对于测试用例的设计是必不可少的。使用白盒测试最多的测试人员是代码开发人员,它可以应用于SDLC[12]的所有测试级别。白盒测试的优点包括完整的代码覆盖,这意味着测试尽可能多的代码。这种想法使得白盒测试比其他传统测试更加彻底。开发人员经常可以看到程序错误,并大致了解问题是什么,以及解决问题的方法。此外,白盒测试允许开发人员对实现提供仔细的推理。白盒测试更加全面,因为它涵盖了所有的代码路径。尽管白盒测试有很多优点,但它需要有经验的编程测试人员。测试白盒可能非常复杂和昂贵。此外,白盒测试测试程序中现有的功能,如果功能部分实现或缺少某些东西,就不能使用。
黑盒技术:它被称为行为测试,或功能测试[13],这种类型的软件测试基于软件系统的输入和输出,而不需要知道产品的内部系统设计。只测试系统的基本方面,这意味着它基于需求和功能。确保输入正确地被接受,输出正确地被接受。这种技术可以应用于SDLC的每个级别。Laurie Williams将黑盒测试定义为:“黑盒测试忽略了系统或组件的内部机制,只关注于响应选定的输入和执行条件而产生的输出。”[14]。黑盒测试的优点包括测试人员不需要知道任何编程语言以及软件是如何实现的。黑盒测试总是从用户的角度来进行,因为它有助于揭示不一致性。然而,缺乏编程知识是很好的,可能会有一些实例忽略需要测试的场景的所有有效和可能的条件。同样,对于复杂和大型的项目,黑盒测试中的完整测试覆盖通常是不可能的。
灰盒技术:也被称为半透明测试,它结合了白盒测试和后台测试来发现应用程序[13]的不正确结构和/或不正确使用。在灰盒测试中,测试人员对应用程序的内部结构知之甚少。如果将其与白盒测试和黑盒测试相比较,那么在白盒测试中,项目的内部结构是已知的,而在黑盒测试中,测试人员是未知的。通过黑盒和白盒测试很难跟踪端到端数据流的问题,但通过灰盒测试可以很容易地完成。它可以结合每种白盒和黑盒测试的优点和特点。灰盒测试人员并不依赖源代码,而是依赖界面描述和功能规范。此外,该测试是从用户的角度而不是从设计者的角度执行的。由于在此测试中无法访问源代码/二进制文件,所以不可能进行完整的白盒测试。此外,在对分布式系统执行灰盒测试时,很难将缺陷关联起来。灰盒测试不能用于算法的测试,在这种测试中测试用例的设计更加困难。
突变技术:它是一种结构化的测试方法,用于评估测试套件的充分性和有效性,以及评估被测系统中的缺陷数量。事实上,突变测试可以通过修改或简单的语法改变软件工件,如程序来创建新的版本,称为突变;每个包含一个更改。突变测试提供了一个名为“突变充分性评分”的测试标准,该标准用于基于测试用例检测失败的能力来评估其有效性。这意味着,如果突变版本产生不同于原始程序的结果,那么突变被杀死,测试用例被认为是高效的,不需要生成其他测试用例。否则,如果突变版本从原始程序产生等价的结果,则突变保持存活,测试用例是低效的[15]。变异测试旨在评估或提高测试组在检测缺陷方面的有效性,并在比较原始代码的输出和针对相同测试用例的变异代码的输出时发现所有开发人员的错误。突变测试的优点是能够检测出源代码中所有的错误,并且对源代码有很高的覆盖率,从而提高了软件程序的质量。这种测试的缺点是有些突变很难实现,测试人员需要有编程知识才能进行突变测试。此外,突变测试是一种昂贵的测试技术,有几种方法可以降低成本。一种方法是优化产生突变体的过程;通过改变字节码而不是源代码,将消除对每个突变重新编译程序的需要。
模糊技术:Fuzz概念是由wisconsin - madison大学创造的术语“fuzzer”[16]发展而来的。模糊测试是通过使用变异操作符(例如,位翻转、边界值替换、块删除和复制)重复和随机地修改程序输入来执行的,以便在将新的测试用例引入目标程序之前创建新的测试用例。然后执行目标程序并监视其以检测异常行为,包括应用程序崩溃[17]。此测试的特点是模糊测试有助于发现系统中与安全相关的弱点和异常。探究那些不可见的、专家测试人员无法探究的严重缺陷,即使测试用例已经设计和准备好了。它确保了所有可能的负面场景都覆盖了软件产品。除了看到这种测试的各种好处之外,模糊也带来了一些缺点,这需要承认。这些缺点是:缺乏适当的准备,以及没有确定的具体标准。为了有效执行,它需要大量的时间。此外,它不能单独使用,因为它不能覆盖软件产品中所有可能的安全漏洞和缺陷。
回归技术:IEEE将其定义为:“回归测试是对系统或组件进行选择性的重新测试,以验证修改没有引起意外的影响,并且系统或组件仍然符合其指定的需求。”[18]。回归测试是在系统发生变化时,测试已经测试过的系统部分。执行此测试是为了验证最近的程序或代码更改对系统的另一部分没有意外的影响。该测试适用于所有SDLC级别[19]。回归测试的优点是它提高了软件的质量,并有助于确保相同的缺陷不会再次发生。此外,它确保现有的功能工作良好,不影响软件的任何部分。这个测试可以使用自动化工具来完成。另一方面,这种测试很难用较少的测试用例实现最大的测试覆盖率。这需要大量的手工工作和时间,并成为一个乏味的过程。此外,每次都需要进行回归测试。
3.相关工作
Zhauniarovich等人设计并实现了一个名为BB-OXTESTER的框架。它用于分析代码覆盖率度量,并生成代码覆盖率报告,而不需要应用程序的源代码。它有一个异常日志记录机制,因此可以用于检测Android应用程序测试中的错误。他们的工具允许测试人员确定何时应该开始和结束覆盖率信息的收集。他们在13个应用程序上的实验证明,他们的工具能够检测错误。
Zein et al.[21]对79项不同的研究进行了全面的映射分析,整理了移动应用测试领域已发表的证据和研究结果,并确定了测试者在该领域面临的挑战。他们发现了许多差距和特定的测试问题,如对移动应用程序的安全性和可用性测试进行比较分析;测试需求需要在开发过程的早期进行,并提供具体的测试技术,重点关注移动服务测试和应用程序生命周期一致性。
Do等人介绍了一种为Android应用选择回归测试的新方法。他们的方法指定了一组要重新执行的测试,以测试新版本的Android,并验证修改版本的操作(可能与原始版本不同)。使用静态影响分析和在运行时动态创建的覆盖率信息的组合。结果表明,该方法可以显著减少修改Android应用后的重复执行测试次数。
Bernaschina等人介绍了一个框架,通过使用黑盒回归测试技术来测试户外移动应用程序,如游戏和环境监测。该框架通过使用多个传感器来跟踪回归误差,这些传感器实时记录数据流并将其重新发送到实验室并计算质量指标。他们的框架表明,它对增强现实应用的开发具有有效的影响。
Kumar amp; Saxena[24]提出了一种基于模糊测试的android应用程序内存泄漏测试方法。他们指定了五种模式,用于理解负责Android的特定对象、内存分配位置和预测内存释放位置的内存泄漏。测试用例基于这五种模式生成,通过应用程序、资源和API模糊检测内存泄漏。在10个开源android应用程序上的实验表明,该方法可以有效地检测出android应用程序中的内存泄漏漏洞。
Saqib amp; Shahzad[25]分析了当前用于测试Android GUI的技术,并描述了与这些技术相关的挑战。他们引入了一种名为TriTest的方法,基于基于模型的测试(MBT)来执行移动应用程序的自动化功能、兼容性和性能测试。开发者可以使用TriTest来测试现有和新开发的应用程序,以确定应用程序的一致性和用户接受度。
Choi等人提出了一个名为DetReduce的工具,用于Android GUI测试。它从自动化GUI测试工具生成的大型测试套件中创建了一个小型的回归GUI测试套件。他们的算法通过定义和消除当前自动化GUI测试工具引入的一些常见形式
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[262965],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。