基于模型的图形用户界面功能测试生成方法研究Word文件下载.docx
《基于模型的图形用户界面功能测试生成方法研究Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于模型的图形用户界面功能测试生成方法研究Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
第五章基于状态机模型辅助的图形用户界面测试用例生成算法26
5.1基于有限状态机模型的测试覆盖准则26
5.2满足不同测试覆盖准则的测试用例生成算法27
总结与展望31
参考文献32
致谢34
摘要:
现有的大多数自动化测试工具都是基于录制与回放机制(例如QTP等测试工具),但是自动化测试工具在发现缺陷的数量以及有效性方面存在着缺陷。
为了提高图形用户界面程序(GUI)的质量,可以选择利用状态机模型来辅助图形用户界面测试用例自动化生成,对GUI进行行为建模。
本文阐述了基于模型的图形用户界面测试方法,该方法通过状态机模型的辅助可提高GUI程序的可扩展性和可靠性。
关键词:
图形用户界面;
软件技术;
软件测试;
模型;
测试工具
Graphicaluserinterfacefunctionstestgenerationmethodbasedonmodelstudies
Abstract:
Mostexistingautomatictestingtoolsarebasedontherecordingandplaybackmechanisms(suchasQTPtestingtools),butitstillhassomedefectsinfindingproblemsandvalidity.Inordertoimprovethequalityofthegraphicaluserinterfaceprogram,canchoosetousethestatemachinemodeltoassistinthegraphicaluserinterfaceautomaticgenerationtestcase,behaviormodelingwascarriedoutontheGUI.ThisarticleexpoundstheGUItestingmethodbasedonthemodel,themethodthroughthestatemachinemodelcanimprovethescalabilityandthereliabilityoftheGUIprogram.
Keywords:
GUI;
softwaretechnology;
softwaretesting;
model;
testtool
第一章绪论
1.1课题背景
在现在这个计算机科学技术高速发展的年代,GUI(GraphicalUserInterface)即图形用户界面,已经占据人们的主要操作行为,它使人们和计算机之间的交互变得越来越容易,是人机交互的主流方式。
GUI软件的友好性,直观性以及易用性已使它完全深入到人们的日常工作以及生活中。
GUI软件操作简便,直观,并且能在有限的范围内显示出更加丰富的信息,还能避免很多没有意义的或者不正确的用户输入。
根据一些有相关的统计,得出了一个结论,那就是在所有的软件的代码量中,图形用户界面的代码已经占到了49%左右。
在一个应用程序中,大概有47%的代码被用于图形用户界面,而在执行一个程序时,大约有55%的时间被用在执行图形用户界面上。
所以我们应该对图形用户界面进行一系列的测试,并且改进它的不足之处,从而使软件系统可以更安全,更稳定,更加易于用户使用,更具有鲁棒性。
由此可见,图形用户界面的质量保证直接影响着软件的质量保证,可以说,把握图形用户界面的质量关系到整个软件项目的成功。
再加上软件用户们对软件功能(尤其是图形界面)的要求越来越高,很多软件刚开发出来没多久就已跟不上用户的需求,用户的使用态度不断提升,对图形界面的要求不仅仅停留在可以使用就行,而是上升到了布局合理,图像美观,操作没有任何延时的层次上。
近几年来,许多GUI测试模型被不断地提出,一些GUI建模工具也层出不穷。
可见,对图形用户界面的功能以及性能进行不断地测试已经刻不容缓,我们应该不时地对它进行测试,并且进行一些必要的修正。
1.2主要内容
本文将阐述软件测试的相关理论知识,简单介绍基于模型的软件测试方法,了解用于GUI测试的基于录制与回放机制的测试工具,对状态机模型进行了解并用以辅助GUI测试用例自动化生成,对面向测试的GUI建模技术进行研究及改进。
1.3论文结构
第1章绪论,阐述了本文所研究问题的背景情况,简述本论文要探讨的内容,对文章结构作了初步的概括。
第2章对软件测试的相关技术,软件测试的测试过程以及软件测试的一些抽象模型等进行了一些比较详细的介绍,让人们对软件测试有了一定层面上的了解。
第3章比较粗浅的介绍了图形用户界面的含义,并且给出了图形用户界面的测试的一些主要特点,引导人们更加深入地对相关知识进行探索。
第4章几种常用的用于测试的录制与回放工具介绍。
第5章基于模型的软件测试方法,浅层次地探讨了基于模型的软件测试技术,使人们可以稍微对这个概念有点了解,后面介绍了软件模型的分类情况,为论文后段部分打下基础。
第6章图形用户界面测试的建模方法,通过对一些专业知识的学习,充分理解之后并对它进行了一定的总结,最后得出结论,并粗略地分析了图形用户界面模型以及测试模型。
第7章基于状态机模型辅助的图形用户界面测试用例生成算法,利用状态机的辅助,对一些浅层次面上的测试用例生成算法进行了一些简单介绍。
第8章总结与展望。
第二章软件测试概述
软件测试是软件工程的一个重要组成部分,也是保证软件质量的重要手段。
随着软件行业的竞争日益激烈,软件的质量越来越受到关注。
软件测试行业的发展也因此面临着更大的挑战,这也使得越来越多的注意力转向了软件测试,软件测试的重要性不言而喻。
曾有专家预言:
“在测试平台上,下一次大变革就是软件。
”本章概括地介绍了软件测试的基本知识,从而为论文的进行打造理论基础。
2.1软件测试知识
2.1.1软件测试的定义
软件测试是指理解产品的功能要求,并对其进行测试,检查软件有没有错误以及软件是否稳定,并写出相应的测试规范和测试用例。
简单地说,软件测试就是为了发现错误而执行程序的这么一个过程。
由此我们可知软件测试就是检验软件是否满足需求。
2.1.2软件测试的目的和原则
在《软件测试技巧》这本书中,G.j.Mayers陈述了以下观点:
1.测试就是为了寻找错误而运行程序的过程;
2.一个好的测试用例很可能会发现至今尚未发现的错误;
3.一个成功的测试可以定义为通过这个测试,发现了到现在为止从来没有发现过的错误。
其实软件测试的目的很单纯,就是为了保证软件的质量,但又追求只花费少量的人力,物力和时间。
为了更好地进行软件测试,保证软件产品的质量,软件测试人员应遵循以下几个原则:
一是测试应该尽早进行,不断进行,最好在需求阶段就开始;
二是测试应该由独立的第三方来负责;
三是设计测试用例的时候,应该对各种有效的输入或者无效的输入以及各种边界条件等进行测试;
四是要注意错误的群集现象和应用Pareto原则;
五是对错误结果要进行一个确认过程;
六是制定严格的测试计划;
七是保存好测试用例、出错统计等重要信息,以便维护。
2.1.3软件测试的模型
软件开发有过程模型,当然,软件测试也有自己的测试过程模型。
软件测试是一个过程,在测试之前,我们应该先明确要做什么,怎么做,需要什么,会有什么结果等。
此时,将这些东西抽象一下,那么过程模型就应运而生。
通过模型,我们可以对整个测试过程有一个比较完整的认识。
通常的测试模型有以下几种:
1.V模型
V模是目前最为人们所深知的一款模型。
它的顺序从左到右,比较详细地描述了软件的基本开发过程,也是最被人们所熟知的一个模型。
忽略了之前的验证活动,比如需求分析等,它把测试的代码放在了最后的阶段。
图2.1为软件测试V模型图
图2.1软件测试V模型
2.W模型
W模型对V模型中忽略的东西进行了一定层次上的填充,它在功能上使得测试与开发可以平行进行,但是W模型也有自己的缺陷,它没有详细地说明软件测试的具体流程是怎么执行的。
图2.2为软件测试W模型图
图2.2软件测试W模型
3.H模型
H模型将测试活动独立了出来,形成了一个独立的流程。
不同的测试活动可以按照某一个次序先后进行,也可能是反复的,但是只要测试达到了准备就绪点,测试执行就可开始。
图2.3为软件测试H模型图
图2.3软件测试H模型
2.1.4软件测试的流程
软件测试是一个极为复杂的过程:
需求分析阶段,测试计划阶段,测试设计阶段,测试执行阶段,测试总结阶段。
需求分析是系统开发中最重要,最基础的部分。
软件测试用例是根据软件系统用户的需求,针对软件系统的各个功能进行测试的描述,测试用例的质量直接决定软件的质量。
软件测试用例的内容一般包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。
测试用例的设计和执行是测试工作的核心,工作量极大,编写测试用例需要耗费大量精力和时间,一个好的用例测试管理应设计测试用例数据库,实现测试用例管理模块中测试用例导入、录入、修改、查询、新增、审核(测试管理人员具备审核权限)等功能(注意回归测试),实现测试用例导出成EXCEL表和WORD文档,缺陷跟踪及管理和实现测试用例版本管理等。
2.2软件测试基本技术
2.2.1黑盒测试技术
黑盒测试又称功能测试、数据驱动测试。
望文生义,黑盒就是一个看不见里面东西的盒子,所以也就不需要了解它里面的东西。
对它进行测试,测试人员只能知道它的运行结果,但无法了解它的内部具体运作。
黑盒测试主要有以下几种方法:
等价分类法、边值分析法、猜错法和因果图法。
2.2.2白盒测试技术
白盒测试是一种以程序的内部逻辑结构为依据而设计测试用例的方法。
白盒可以看成是一个玻璃盒子,里面的具体结构,所有细节都看的清清楚楚,所以白盒测试的针对性很强,测试效率也比较高。
白盒测试就是要选取足够多的测试用例,对源代码实行比较充分的覆盖,以便尽可能多地发现程序中的错误。
主要有两种方法:
逻辑覆盖法和路径覆盖法。
2.2.3灰盒测试技术
灰盒测试是一种介于黑盒测试和白盒测试之间的软件测试方法。
模糊地看,灰盒测试可以理解成在黑盒测试中参杂着白盒测试,或是白盒测试中参杂着黑盒测试。
灰盒是一个半透明的黑盒。
这就要求灰盒测试在关注输出结果对于输入的正确性的同时,还要注意内部结构。
2.2.4静态测试技术
静态测试的主要点是这个“静”字,通常的静态测试都是在软件运行之前来进行的。
静态测试的主要内容就是利用编译器来找出代码的语法错误部分,生成错误报告。
此外,有一些非语法方面的错误则必须由测试人员来手工测试。
人工测试的主要方法有代码检查法和静态结构分析法。
2.2.5动态测试技术
动态测试,就是通过运行被测试程序来检验软件是否合格的一个过程。
也就是说,动态测试需运行程序,输入测试数据,然后检验程序的输出与预期的结果是否相同。
所以动态测试的进行需要两个基本元素:
被测程序和测试数据。
因此,动态测试只存在于编码阶段之后。
2.3软件测试过程
2.3.1单元测试
单元测试是软件设计中最小的一个单元,它是动态测试的最开始步骤。
单元测试可以说是软件测试的基础,也是程序中最小的独立编译单位。
单元测试虽小,但如果不认真对待,它造成的后果是不堪设想的。
它一般结合白盒测试技术和黑盒测试技术来进行测试。
单元测试的重点内容主要有以下几个:
模块的接口测试,模块局部数据的结构测试,重要的独立执行路径的测试,错误处理的测试,影响模块的边界条件的测试。
2.3.2集成测试
集成测试,又可叫做组装测试,综合测试。
它所要做的工作就是把已经经过单元测试的模块按照概要设计的要求拼接起来。
很多集成测试都会出现以下这种情况,在组合之前,所有的单元模块都能正常地独立运行,但是当把这些模块拼接到一起的时候,却会经常出现不能正常运行的情况。
这是为什么呢?
概括起来说,主要是因为各个模块在相互调用时,在经过接口的时候出现了错误,比如数据丢失等。
因此,集成测试有以下几个工作要做:
在将单元模块组装到整个结构中时,需要对各个接口进行测试,以防数据丢失;
将各个模块组装时对它们的整体功能性进行测试;
检测各个模块之间的功能会不会相互导致影响;
对所有数据结构相关的内容进行测试,防止被异常修改;
检测程序在边界条件下的性能程度。
2.3.3系统测试
系统测试是对已经通过集成测试的软件系统进行测试,以此来验证软件系统的正确性和性能能否达到所指定的要求。
系统测试不仅仅只是测试软件本身的性能和功能,它还要测试软件系统的可靠性和健壮性,软件与硬件之间的兼容性以及软件本身对非法入侵的防范能力。
2.3.4验收测试
验收测试实际上是为软件用户演示的一个过程,这也是对成功软件产品的最后一次检验。
这是一次全方位的演示过程,从软件产品的安装到使用,再到成功运行,需要做的工作很多。
验收测试需要完成的内容有以下几点:
安装测试;
确认软件产品能完成产品说明书中所阐述的所有的功能;
对软件的吞吐量以及响应时间,安全性等进行测试;
强度测试以及一些不规范操作的测试,配置复审,保证软件的配置齐全,分类有序。
软件验收测试应该提前制定相应的测试种类,测试步骤以及具体的测试用例。
2.3.5回归测试
回归测试是指软件系统为了保证软件被修改或扩充后没有引入新的错误而重复进行的一个测试。
回归测试的主要目的是验证会不会出现之前出现过的并且已被修复好的缺陷。
经验表明,修改一个程序比编写一个程序更容易出错。
因此,回归测试的进行是非常有必要的。
回归测试在整个软件测试过程中占有很大的比重,所以需要一个好的回归测试策略,以此来提高回归测试的效率。
2.4常用的软件测试工具介绍
软件测试可分为人工测试和自动化测试。
人工测试非常耗费时间,金钱和人力资源,并且测试的结果也容易出错,对于一些应用程序的性能测试或者抗压测试来说,人工测试可能要花费更长的时间来找到错误,并且会为此付出更大的代价。
在这方面,自动化测试则有着明显的优势。
自动化测试可以用简单的脚本来反复地进行测试,得出结论。
自动化测试可以在程序修改频率较快的情况下仍轻松地进行回归测试,在较短的时间内,自动化测试可以运行许多复杂的测试,并且能保持结果的一致性和正确性。
这些都是人工测试所无法达到的。
但是自动化测试也存在着一些不足,经过长期的探索,人们发现自动化测试对测试质量的依赖性很大,并且有可能会制约软件的开发。
自动化测试工具比较死板,本身不具备想象力,所以能发现的缺陷也没有手工测试多。
在某种程度上,自动化测试是无法取代手工测试的。
随着软件技术的不断发展,自动化测试工具也层出不穷,比较主流的测试工具有QuickTest
Professional,WinRunner,Jmeter,Loadrunner等等。
2.4.1QuickTest
Professional
QuickTest
Professional简称QTP,是一种主流的自动化测试工具,应用广泛。
QTP支持录制和回放的功能,录制产生的脚本采用VBScript语言。
QTP的主要工作流程:
录制测试脚本,在脚本中加入检查点,从而加强测试脚本,调试测试脚本,使得修改过的测试脚本可以正常执行,执行完测试脚本后分析测试测试结果,总结问题以及经验。
图4.1为QTP主界面
图4.1QTP主界面
QTP具有录制和回放的功能。
以WEB为例,我们可以利用QTP的地功能,将我们浏览网站时的操作步骤进行录制,并产生测试脚本。
现在我们可以简单地举个例子,就以登入XX然后进行搜索为例,我们可以使用使用QTP的录制功能录制一小段脚本.首先打开QTP的主界面,我们可以新建一个test,建立好test之后点击record按钮,将出现以下的录制和运行设置界面,如图4.2所示
图4.2录制和运行设置界面
由于QTP默认的是系统自带的IE浏览器,但本人又喜欢使用360浏览器,所以本人选中的是Recordandruntestonanyopenbrower这一项,设置完这些东西,我们就可以证实开始脚本的录制。
从桌面打开360浏览器,输入XX的网站地址,再在搜索框内输入qtp,点击搜索。
当信息出来时,点击浏览,然后关闭浏览器。
点击QTP主界面的stop按钮。
此时一个小的脚本已经录制完成。
在录制过程中,QTP会对用户的每一步操作进行记录,脚本也同时生成。
如图4.3所示
图4.3录制画面
在这里,我们可以清楚地看到每一步,总共分为了4列。
第1列Item表示所测试的操作步骤所用的构件。
第2列Operation表示的是在这个构件上产生的操作,比如输入,移动等。
第3列Value表示执行动作的参数。
第4列Documentation表示的是描述操作步骤的说明。
点击ExpertView,我们可见页面的代码。
从图4.4中我们可以看出用户的具体操作,比如窗口的移动,数据的输入,鼠标的点击,滚动条的拖拉等。
图4.4页面代码图
录制完脚本之后,我们可以将它进行保存。
当我们运行录制好的测试脚本时,QTP会打开被测试程序,执行刚刚操作的每一个动作。
执行过程中,我们也可以插入检测点,一步一步来完成。
如果脚本在执行过程中出现错误的话,也会有错误信息显示。
如图4.5所示
图4.5结果分析图
从图中可以看出此次脚本的运行存在着错误。
主要原因是一些对象与实际应用程序中的对象属性不匹配,或者是找不到对话框的父对象,或是检测到有些属性相匹配的对象已在应用程序中存在。
这图中看,这些问题都存在于在录制我们计划的内容之前,解决方法如下:
可以先对比一下到底是哪些属性不一致,然后去对象库中修改一下等。
如果深入到细节问题,我们可以建立检测点,对脚本的网页,文字,等进行检查。
还可以对测试脚本,执行步骤以及检查点中的值进行参数化。
2.4.2WinRunner
WinRunner是一个企业级别的功能测试工具,通常用来检验应用程序是否可以正常运行以及能否达到预期的功能。
WinRunner具有录制和回放功能,它能检测用户的应用操作,在测试一些复杂的应用程序时,它能帮助测试人员提高测试效率,保证应用程序的正确性。
使用WinRunner录制脚本的操作过程及其简单,在录制过程中,也可插入检测点。
除了这些,WinRunner还具有检测数据库数值的能力,这个能力可以确保一些业务交易的准确性。
WinRunner还可以将业务流程测试转换成数据驱动测试,这样使得测试过程中能更加了解用户的实际行为。
与QTP相比,WinRunner既具有优势也有不足之处。
两者的适用范围都很广,但各自都有自己的专属领。
WinRunner有4种验证点,QTP有9种验证点。
WinRunner的多种验证类型保证了WinRunner可以为GUI、文本以及数据库等提供检查点,方便实际输出和预期输出的对比,这也使得测试人员可以实现采用许多GUI对象和它所带的功能来检验应用程序潜在的一些故障。
WinRunner采用的是TSL脚本,从脚本的难度来看,显然QTP的VBScript脚本更容易让人上手。
如果要对脚本进行开发,那么QTP占有绝对的优势,但这也不是说WinRunner完全没有脚本开发能力,只是WinRunner要想进行脚本开发,它必须多绕几个弯路。
WinRunner的工作流程有以下几个方面:
第一,对应用程序的图形用户界面进行识别。
进行识别后,WinRunner会将所识别的数据先存到GUIMAPFILE里面去。
第二,测试脚本的生成。
首先利用录制工具先录制一段测试脚本,有必要的话,可以用TSL对脚本进行修改或者添加。
第三,测试脚本的错误处理。
利用DebugToolbar对脚本中的一些错误内容进行处理,可以保证脚本的正确运行。
第四,测试脚本在新版应用程序中的执行。
当应用程序的版本发生了变化时,我们又必须对它的新功能进行测试。
此时只需用Call命令加载测试脚本,并用TSL对脚本进行增加修改。
第五,测试结果分析。
从测试报告中对实际结果和预期结果进行对比,分析应用程序的潜在性或者已经出现的问题。
第六,回报缺陷。
在测试完成以后,根据测试报告回报应用程序存在的各种缺陷及问题,以便对应用程序的改进和维护。
2.4.3LoadRunner
LoadRunner是一款成熟的性能测试工具,它可以预测系统行为并能对性能的负载进行测试。
LoadRunner涉及许多性能测试流程以及性能测试技术,支持很多协议和技术,通过模拟用户的的操作,可以快速发现应用程序所存在的缺陷。
LoadRunner的VirtualUserGenerator为测试人员提供了录制回放功能,在建立完测试脚本后,还可以对它进行参数化。
LoadRunner的测试流程有以下几个:
第一,创建脚本。
第二,调度虚拟用户。
第三,脚本运行。
第四,结果分析。
LoadRunner有许多其他软件所没有的,LoadRunner可以进行负载/压力测试,在录制完测试脚本之后,可以通过插入检查点或者对其进行参数化来使脚本更加完美。
LoadRunner的功能强大,具有三大模块,如图4.6所示
图4.6三大模块
这3个模块既能独立工作,又可以彼此融合,共同完成性能的整体测试。
其主要功能有以下几个:
第一,创建虚拟用户。
VirtualUserGenerator的存在让脚本的生成变得轻而易举。
第二,建立真实的负载。
Controller中的Rendezvous功能为我们创造了一个可以互动的环境,我们可以在这个环境中可以建立一个持续、循环的负载,并且还能驱动负载测试。
第三,定位性能问题。
LoadRunner中含有实时监测器,这些监测器可以帮助我们在任何时候对检测应用程序的性能以及网络数据包等。
在测试完成之后,LoadRunner会自动收集相关的测试数据,并提供高级的分析以及报告工具,使得可以快速寻找到存在的性能缺陷。
Analysis的Web交易细节监测器在这方面发挥着重要的作用。
第五,重复测试。
负载测试是一个重复过程。
为了检测应用程序的运行性能,每处理一个错误,都需对程序进行一次负载测试。
LoadRunner的Controller使得我们可以重复执行和出错修改之前一样的测试方案。
2.4.4Jmeter
Jmeter
是一个非常流行的采用JAVA开发的性能测试工具。
与LoadRunner相比,Jmeter的结果分析能力没有那么详细,但是它也有自己的优势。
Jmeter是一款开源的免费软件,借助JDK环境它就可以运行,无需安装,非常小巧。
jmeter最初的设计意图只是想测试web的性能,但是经过不段的发展,Jmeter的功能逐渐变得强大。
现在的Jmeter可以完成对WebService、LDAP、FTP服务器、数据库等方面的测试。
Jmeter具有多线程框架,