英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料
基于模型测试的Java GUI建模
引言
用于GUI软件开发的高级方法和工具允许快速和迭代的原型设计和可用性测试。遗憾的是,即使有自动化测试工具的支持,GUI软件的测试也需要大量的手动工作,尤其是当被测试应用程序快速变化时。在本文中,我们以基于模型测试(MBT)为目的,为Java GUI应用程序自动化测试建模提供了改进的方法和工具支持。实现的GUI驱动工具生成结构模型,结合GUI状态模型,展示GUI应用程序自动执行和监听行为。GUI驱动程序工具和开源工具MBT相结合,形成一个工具链,以支持Java GUI应用程序的自动化测试。GUI驱动程序生成的模型用于和MBT工具生成测试序列,然后使用GUI驱动程序执行测试序列来生成测试报告。
关键字:自动化建模,GUI状态模型,GUI测试,基于模型测试,工具链
- 简介
图形用户界面(GUI)软件通常庞大而复杂,GUI代码的正确性对于正确执行整个软件至关重要[1]。尽管高级开发方法和工具有助于缩减构建软件产品的时间,但测试产品所需的时间和经历并未显著降低[2]。
实际上,今天所有的GUI应用程序都是用工具包构建的。界面构建器能够支持大量的原型交互过程和可用性测试对事项高质量的用户界面非常重要[3]。由于迭代开发过程,GUI软件的需求,设计,和实现经常变化,增建了测试所需要的时间和资源。
一种尝试提高测试效率的方法是基于模型的测试(MBT)。MBT的一般思想是创建一个描述被测试系统(SUT)的预期行为的抽象测试模型,并使用一些工具从该模型生成测试[4]。MBT的目标是通过自动化测试过程来提高软件测试的效率和质量,从而减少测试工作并避免人工错误[5]。
理想状况下,可以通过复杂的模型转换从设计模型中获得测试模型。但是目前还没有这样的工具,这种方法也依赖于设计模型的可用性。目前,自动化测试模型需要使用一些可视化建模工具按照SUT规范手工制作[6]。由于GUI开发的迭代过程,以MBT为目的的手动设计和模型维护需要花费太多的精力,否定了使用自动化测试所带来的效果。相反,应该从源代码或通过执行和监听GUI应用程序来自动生成模型。目前可用的自动化GUI测试方法并不是最优的,向需要有更有效的方法。
我们工作的出发点是GUITAR工具[7],它是最先进的开源或其他免费工具,可用于基于现有Java GUI应用程序的执行和逆向工程自动创建MBT模型。它支持创建结构模型,以及为Java GUI应用程序生成和执行测试用例。然而,在使用GUITAR工具时,我们在生成复杂Java GUI应用程序时遇到了大问题。于是,我们对自动化GUI测试采用了略微不同的方法,并实现了GUI驱动程序工具来支持我们的方法。本文介绍了我们自动创建Java GUI应用程序模型的方法。同时介绍了它的MBT行为,我们为支持我们方法而实现的GUI驱动程序工具,以及通过将GUI驱动与一个开源MBT工具结合来支持Java GUI应用程序的工具链。我们的目标是减少创建和维护测试模型所需的工作,并提高Java GUI应用程序自动化测试的效率。
本文的其余部分安排如下:第二章介绍了背景信息和相关工作。第三章介绍了我们的自动化建模方法,GUI驱动程序工具和自动化Java GUI测试的工具链。第四章得出结论并解决未来的工作。
- 背景和相关工作
本章在2.1章简要概述了GUI测试,在2.2章简述了基于模型的测试,在2.3章中重点介绍了基于模型的GUI测试领域的相关工作。
2.1 GUI测试
GUI测试对质量的保证至关重要,因为GUI测试是从应用程序的最终用户的角度执行的。很多时候,应用程序的所有功能都可以通过GUI调用,因此GUI测试可以覆盖整个应用程序[8]。
因为GUI软件的手动测试既繁琐又费力,因此非常需要通过自动化GUI测试来降低高成本。用于测试GUI的最流行的工具是捕获/重放工具。一些工具将用户操作的鼠标坐标记录为测试用例。这些工具的问题在于,即使GUI中的微小修改也会破坏相应的测试用例。克服此问题的一种方法是捕获GUI小部件而不是鼠标坐标。尽管重放是自动化的,但是需要付出巨大的代价来创建测试用例并检测故障。另一种流行的方法是调用调用底层代码的方法,就像由GUI启动一样[9]。
由于GUI软件通常使用快速原型创建,因此GUI在开发过程中不断变化,使得捕获/重放或测试脚本的维护非常昂贵[10]。因此,当前实际使用的GUI测试技术是不完整的,并且测试设计者需要大量的手动工作[11]。许多研究结果表明,MBT是一种有前途的解决方案,可以客服捕获和重放工具的维护弱点[12]。
2.2 基于模型测试
基于模型测试(MBT)已经存在了相当长的时间,但最近才开始引起人们对软件测试领域的浓厚兴趣。通常在MBT中,SUT由一个模型表示,这个模型描述了它在更高抽象级别的预期行为,并且一组选择算法用于从这个模型中生成测试[4]。预计MBT将允许更加充分的软件测试,因为它根植于自动程序,避免里手动容易出现错误的活动[5]。
MBT流程可分为五个主要步骤:1)对SUIT和/或其环境进行建模,2)从模型中生成抽象测试用例或序列,3)将抽象测试具体化为可执行测试,4)在SUT上执行测试并分配判决,5)分析测试结果。许多MBT工具允许测试工程师控制测试用例的焦点和数量,并且将抽象测试转换为可执行的测试脚本通常需要测试工程师的一些输入[12]。
尽管MBT有用且有效,但在将其应用于工业软件开发方面存在一些挑战。一个通用的障碍是其复杂性,需要在形式方法方面拥有深厚的专业知识,所以MBT并不能在任何情况下都能应用,例如在使用没有行为模型或适当规范的传统或第三方系统时[13]。
另一个原因是需要大量的手动工作来创建测试模型。为测试目的提供模型创建的自动化辅助的一种方法是基于观察的建模,它颠覆了从规范到实现再到从实现到规范的传统MBT方法。不幸的是,目前没有基于观察的GUI建模的工具支持。
2.3 基于模型的GUI测试
有几种方法可以对GUI进行建模来自动化测试GUI的某些方面。在MBT中使用UML已经得到了广泛的研究。然而,最常用的GUI测试用例生成模型是不同类型的状态机模型,例如有限状态机(FSM)[11]。
关键思想是测试设计者将GUI的行为表示为状态机,其中每个输入事件可以触发机器中的抽象状态转换。状态机中的路径表示测试用例,并且状态机的抽象状态可用于在测试用例执行期间验证GUI的具体状态。由于有限状态机(FSM)被认为存在大型GUI的扩展问题,因此开发了FSM的各种扩展,例如向模型添加变量或将状态空间划分为多个状态机,以减少抽象的数量。状态。然而,所有这些技术都需要大量的手工操作,并且它们都不是业内常用的[11]。为了减少手动建模工作,有一些方法可以自动创建用于测试目的的GUI模型,例如[11],[14]和[15]。
在[11]中,GUITAR工具[7]用于执行和反向工程Java GUI应用程序以生成用于测试目的的模型。首先,GUITAR工具会破坏Java GUI应用程序并创建一个XML文件,其中包含所有窗口,窗口小部件,其属性和GUI用户事件的结构信息。然后将创建的XML文件转换为事件流图(EFG)。 EFG用于生成事件交互图(EIG)以及EFG和EIG之间的映射。然后,这些用于生成GUI测试用例,这些GUI测试用例是GUI事件的序列。 GUITAR工具还支持在Java GUI应用程序上执行生成的测试用例。这种方法和GUITAR工具的缺点之一是检索到的信息的一部分可能不完整或不正确,因此所创建的模型中可能缺少被测应用程序(AUT)的主要部分。当创建的模型不完整时,可能无法执行生成的测试用例。此外,不支持手动优化生成的模型。
[14]使用GUISurfer工具解析Java或Haskell应用程序的源代码,以生成抽象语法树(AST)。然后使用策略编程和程序切片技术的组合从AST中提取GUI片段。基于对AST的分析,GUISurfer能够生成可视化模型,例如状态机和行为图。这种方法的一个缺点是需要GUI应用程序的源代码。此外,由于该方法基于源代码而不是执行GUI应用程序,因此不处理诸如时序和布局的运行时方面。
[15]介绍了REGUI工具和半自动方法,从Windows GUI应用程序生成Spec#模型。在创建模型期间需要用户操作来指导工具,并且必须手动完成生成的模型。该方法解决了与执行GUI应用程序时缺少有效输入值相关的一些问题,并支持手动详细说明生成的模型。然而,与其他呈现的方法相比,在创建模型时需要更多的努力。
我们的方法在第3章中介绍,旨在减少创建模型所需的工作量,提供可手动改进的人类可读图形模型,并为MBT Java GUI应用程序提供工具支持。此外,创建的AUT图形模型允许根据系统要求检查实现。
- Java GUI的自动建模和测试
本章介绍了我们的方法,我们作为概念验证实现的GUI驱动程序工具以及用于Java GUI应用程序的自动建模和测试的工具链。我们的目标是通过提供工具支持来自动生成适合MBT的模型,从而减少创建GUI测试模型所需的手动工作量。
在我们的方法中,模型是在自动执行和观察AUT时生成的。生成的模型包括呈现GUI组件及其属性的结构树模型,以及呈现GUI行为并将结构模型映射到抽象状态的GUI状态模型。为GUI应用程序的每个状态生成结构模型并将其保存到XML文件中。通过比较两个连续的结构模型,可以在自动与GUI应用程序交互的同时观察GUI中发生的变化。 GUI状态模型表示GUI应用程序作为状态机的行为,将GUI状态呈现为节点,并将状态之间的交互呈现为边缘。结构模型自动映射到GUI状态模型的抽象状态。
对于GUI状态模型,我们还提供人类可读的图形表示,以允许根据系统的要求检查实现。通常,MBT是基于需求手动建模SUT并基于该模型自动生成测试套件以检查SUT是否满足要求。在我们的方法中,生成的模型基于实际实现,因此生成的GUI状态模型应该与系统的要求进行比较。图形建模的另一个目标是允许手动详细说明模型,例如为GUI的文本字段添加有效和无效的输入值。此外,如果缺少适当的系统模型,自动生成的图形模型可以帮助开发人员理解和分析现有实现。 GUI状态模型的一个示例如图1所示,并且使用图2中的yEd图编辑器[16]打开相同的模型。
3.1 GUI驱动工具
作为概念验证,我们已经实现了GUI驱动程序工具来支持我们的方法。它是一种用于以编程方式驱动Java GUI应用程序并生成表示GUI的状态和行为的模型的工具。然后将创建的模型用于MBT目的。
在GUI驱动程序的高级体系结构中,如图3所示,该工具的主要部分是GUI驱动程序,模型生成器和测试执行程序。
启动AUT后,GUI驱动程序识别Java GUI应用程序的可访问且专注的GUI窗口,创建窗口的结构模型,包括GUI组件及其属性,并将模型保存在XML文件中。然后,它识别启用和可见的交互,选择并执行一个可用的GUI操作,并在每个执行的GUI操作后创建新的结构模型。如果在执行期间选择退出或关闭操作,则重新启动AUT。
模型生成器观察GUI的行为,检查特定GUI状态是新状态还是旧状态之一,并创建适合于MBT的GUI应用程序的状态模型。此外,生成的结构模型被映射到GUI状态模型的抽象状态。目前,GUI状态模型以GraphML格式保存,适用于使用开源MBT工具生成测试序列[17]。
Test Executor能够解析MBT工具生成的测试序列[17],在AUT上执行测试序列,验证在执行指定的GUI操作后是否达到预期状态,并创建包含有关已执行GUI的信息的测试报告操作,达到GUI状态,以及未处理异常等异常行为。
3.1.1自动选择GUI动作。GUI驱动程序使用某些规则和首选项来选择AUT提供的GUI操作之一。默认方式是选择之前未在该GUI状态中选择的GUI操作之一。如果先前选择了状态的所有动作,则由开源Java库JUNG [18]提供的Dijkstra算法用于查找导致具有未选择动作的状态的动作。
比较连续状态的启用操作,并且新GUI操作优先于先前状态中可用的操作。这样,在打开下拉菜单后,可能会选择该菜单的其中一个操作。如果有许多均匀优选的动作,则随机选择一个动作。
3.1.2识别访问的GUI状态。在生成AUT的结构模型之后,GUI驱动程序将所达到的GUI状态与先前访问的状态进行比较,以检查状态是新状态还是已访问的GUI状态之一。将GUI状态视为与已访问状态之一相同的第一个标准是两个状态必须具有相同的启用GUI操作。二次检查是比较各州的结构模型。可以在设置中指定类似GUI状态所允许的结构更改的数量。
3.2用于自动Java GUI测试的工具链
为了形成一个工具链来覆盖从自动建模到执行生成的测试用例的Java GUI应用程序的MBT,我们将GUI驱动程序工具与开源MBT工具[17]和自由图形编辑器工具yEd [16]结合起来。
第一步是在AUT上运行GUI驱动程序并生成GUI应用程序的模型。要运行GUI驱动程序,必须在属性文件中设置某些设置,例如AUT的路径和主类。 GUI驱动程序在不知道输入字段的有效数据值的情况下探索和建模尽可能多的GUI状态,并以GraphML格式保存GUI状态模型
全文共9941字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[1825]
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。