软件自动化测试(精选11篇)
软件自动化测试 篇1
摘要:软件测试作为软件开发的一个重要环节,对提高和保障软件质量起到关键作用。该文从软件自动化测试的设计原则、自动化测试框架的选择和自动化测试用例的生成等几个方面出发对软件测试自动化技术加以探讨,其目的是为企业实施自动化测试过程提供参考。
关键词:软件测试,自动化,框架,测试用例
软件测试作为软件质量保障的重要手段,其存在于软件开发生命周期的每一个过程。在整个软件项目的开发过程中,测试人员必须对所开发的软件进行不断测试,以保证软件的正常运行。统计数据表明:软件项目中超过一半的预算投入到软件测试中,所以软件测试代价高昂。缺陷发现的越晚,修正缺陷的代价也越高,给企业造成的损失也越大。
随着软件规模的增加,测试工作量的增大,需要投入大量的人力,原本的手工测试逐渐暴露出诸多缺陷,例如,覆盖率量化困难、重复测试效率低下、不一致性和可靠性低、依赖人力资源等。软件自动化测试技术正是在这种情况下产生的。其根本目标是使所有的测试行为包括测试用例的设计、驱动、结果检查、缺陷定位和移除等都尽可能实现自动化。事实证明,正确、合理的实施自动化测试,能够对软件生命周期的各个阶段进行快速、全面的测试,提高软件测试效率,保证软件的质量,节约软件的开发成本,缩短软件的开发测试周期。但实际上,并非所有的自动化测试技术都可以达到测试活动的预期目标,诸多软件开发机构在实施软件自动化测试的过程中通常存在无法正确找准测试自动化的切入点、程序开发过程和测试自动化过程相互独立、软件测试脚本的质量低劣、测试自动化过程对测试用例的依赖程度过高等方面的负担造成工期延误和成本浪费,甚至最终被完全放弃等问题。
自动化测试技术要想有效地解决测试质量与效率、降低测试自动化的投入、提高其产出等问题间的矛盾,必须形成一套系统的自动化测试体系,在质量保障方面有所作为。因此,深入研究软件自动化测试技术和方法,保障软件质量,已经成为国内外软件行业和相关机构的研究热点。
1 自动化测试的设计原则
软件自动化测试是相对于手工测试而存在的,自动化测试可以被理解为使用一个商业通用测试自动化工具编写一个软件来发现其他软件的缺陷。开发测试脚本以执行键盘、鼠标动作和后台进程并验证应用程序响应和行为。一个良好的自动化测试体系在设计时,需满足以下条件:可维护性-使测试更新跟上软件升级的步伐;高效性-实现效率最大化;可靠性-使测试结果准确而且可重现;兼容性-允许测试用例为不同的测试目标而以不同的方式组合;可用性-测试人员或用户容易掌握定制或更改测试用例的方法;健壮性-可以处理意外情况而不退出或终止;可移植性-测试脚本可以在不同环境中运行测试。
2 自动化测试框架的选取
自动化测试框架是一组自动化测试的规范、测试脚本的基础代码,以及测试思想、惯例的集合。自动化测试框架的好坏对自动化测试的成功有直接影响。目前业界公认的自动化测试框架,主要有四种:数据驱动框架、测试脚本模块化框架、测试库架构框架和关键词驱动框架。
1)数据驱动框架
测试驱动引擎从数据文件读取输入数据,通过变量的参数化,将测试数据传入测试脚本,不同的数据文件对应不同的测试用例,数据驱动脚本将测试脚本(执行步骤)和数据分离,将测试输入数据存储在独立的数据文件中,而不是直接存储在脚本中[1]。在脚本中引入变量,执行时通过变量来读取数据文件中的数据。通过数据驱动脚本,同一个脚本可以测试不同的输入数据,提高了脚本的重用率和可维护性。其缺点是初始建立的开销较大,由被测试应用程序的变化所导致的工作量在所有架构中是最多的,因此维护成本是相当高的。
2)测试脚本模块化框架
测试脚本模块化框架的测试脚本中包含了各功能点的控件识别和业务逻辑操作,其中包含调用外部测试数据。框架结构如图1所示。图中箭头方向代表的是调用关系。负责自动化测试脚本维护的开发工程师必须了解自动化编程和业务逻辑。负责为花测试数据的工作由测试工程师完成。它的优点是控件和业务逻辑一旦发生变化,底层的测试脚本就要进行修改和维护(这比没有任何抽象封装的自动化测试程序稍好一点)。缺点是几乎所有大的变更导致的工作量都要交给自动化测试开发工程师来完成;控件识别和业务逻辑本身属于不同的领域,
没有很好进行抽象封装。
3)测试库构架框架
所有的针对测试系统本身的控件识别和支持的操作将被封装在测试库中;通过测试脚本调用测试库的同时传递外部的测试数据;自动化测试开发工程师在编写测试库的同时(无需了解业务),还需要负责控件的变更和维护;对业务比较熟悉的自动化测试开发工程师编写测试脚本,并负责业务逻辑的变更和维护;测试工程师则只需要维护测试数据(无需了解自动化开发)。框架结构如图2所示。其优点是在被测试系统中,无论是哪一层的变化,其需要的变更维护工作只需要交给相应人员即可;这从根本上实现了控件识别操作和业务逻辑的抽象分离。其缺点是由变更引起的工作量还是附加在自动化测试开发工程师身上。
4)关键词驱动框架
关键词驱动框架是数据驱动框架的一种改进类型。在该框架中,需要定义关键词表格,关键词表格一般存储在测试数据库、Excel或文件中,表格一般包括所需要的所有对象、操作和测试数据。编写驱动代码读取表格数据,分析测试对象、测试操作和测试数据。关键词驱动的主要思想是:脚本与数据分离、界面元素名与测试内部对象名分离、测试描述与具体实现细节分离[2]。关键词驱动模式具有以下优点:在同一个特定格式的数据表中就可以实现测试步骤、测试数据以及验证结果的编写;独立于测试脚本语言开发测试用例;所需脚本数量是随着软件的规模而不是测试的数量而变化的;可以用于工具无关的方法实现测试;实现测试的方法可以剪裁适合测试者而不是测试工具。
3 自动化测试用例的生成
自动化测试中,自动化测试用例是重中之重,一个设计优秀的自动化测试用例能在很大程度上决定自动化测试是否成功。自动化测试用例应用脚本技术进行用例解析,是针对自动化测试框架的,在进行设计时应满足两个原则[3]:(1)选择操作过程相同的一些测试需求,来组成用例场景,使用测试用例结构化指导测试脚本的结构化。(2)场景包含的用例不能太多,当一个场景包含的用例数量较多时,可以考虑对场景进行分拆。
1)自动化测试用例要素分析
在设计自动化测试用例时,除了必须包含测试目标、测试前提条件、测试环境要求、测试类别、测试用例标识、测试操作ID、测试操作描述、测试操作路径、测试输入数据和期望结果等元素,对必填元素在编写结束后必须进行判空校验,以确保测试用例自动执行时的有效性。
设计测试用例时,首先要保证测试用例名称能唯一标识某一个用例,例如“新用户注册”。在自动化测试底层会一般是通过添加ID来控制用例的唯一性,但是在界面上显示时,一般通过醒目的信息提示等手段对唯一性进行控制。其次,每一个测试活动通常存在前提条件。一个测试用例往往是另外一个用例执行的前提。正常情况下在执行登陆操作之前,用户需要进行注册操作。所以把新用户注册用例作为用户登陆用例的前提。另外,因为测试用例已经存在于测试用例库,所以要想使计算机能够知道在执行该用例之前,必须先执行某一个用例,那么就需要在相关用例之间建立前置关联关系。最后,测试步骤的操作过程在自动化测试过程中实际分为操作步骤、控件和数据三个关键词段[4]。操作步骤就是用户的操作顺序。在测试过程中,测试人员主要对控件实施某种行为,例如:用户进行注册时,是在注册页面中输入用户名、密码以及各种其他信息,然后点击“注册”按钮,这是针对文本框和按钮等控件进行操作。而数据主要是用户在这些控件上所填充的输入内容。在自动化测试来说,标识控件的可以通过对象本身以及该对象的属性来进行描述。
2)测试用例的粒度设计
测试用例的粒度因为有很多与之相关的因素,包括项目的质量、时间以及用户要求等等,在整个软件测试领域目前还没有统一定论。测试用例的粒度决定了用例模型级的复杂度,也决定了每一个用例内部的复杂度。应该视软件的具体情况来把握各个层次的复杂度,在尽可能保证整个用例模型的易理解性前提下决定用例的大小和数目[4]。在进行用例粒度设计时应注意以下问题:第一,一个用例不能对多个功能点进行校验,尽量保证每个用例验证功能点单一化;第二,在设计用例步骤时,不应涵盖步骤之间的相互跳转操作。
4 结束语
随着软件规模的的日益庞大,实施软件测试的成本也越来越高。将自动化软件测试技术引入到软件开发的整个过程,不仅可以缩短软件开发周期,让产品更快投放市场,能够提高软件测试的准确度和精确度,增加软件的可信任度,另外还能增强测试的稳定性和可靠性。自动化测试包含的内容有方方面面,这里只是对其中的一部分进行研究。对于自动化测试,我们除了要建立一个正确的认识观之外,还应该力求在自动化测试领域不断创新,制定出更系统的自动化测试体系,为软件质量保驾护航。
参考文献
[1]刘旭.软件测试自动化的测试研究[J].煤炭技术,2012(7):168-169.
[2]黄威.关键词驱动的测试自动化框架模型与系统实现[J].计算机技术与发展,2012(4):57-60.
[3]李翼,陈创.计算机软件测试技术浅谈[J].计算机光盘软件与应用,2012(11):113-115.
[4]郭德红.自动化测试的测试用例设计[J].价值工程,2012(20):195-197.
软件自动化测试方法的研究与应用 篇2
【关键词】软件 自动化测试 方法
引言
软件测试是保证软件质量有效的合理方法,是软件系统工程中必不可少的组成部分,随着软件的发展,人们对软件的质量提出了较高的要求,相对应的软件测试技术的要求也很高。当前社会上有许多测试方法都能有效的保证软件的质量,但是自动化测试不仅提高了测试的效率,还提升了测试的质量。因此,研究自动化测试已经成为软件测试中的新课题。
一、软件自动化测试
1.1软件自动化测试
软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。
1.2软件自动化测试的方法
1.2.1录制回放的方式
记录回放的方式流行于早期商业工具之中,无需编程技能即可快速上手。然而这种方法相对脆弱,一旦UI变化测试就会受到影响,分散的脚本不可重用且难以维护,而且系统在测试前必须可用(也就意味着无法使用A-TDD方法)。因此这种方法并不适合大型自动化测试。
1.2.2独立脚本测试
线性脚本允许使用各种语言来编写非结构化脚本,脚本直接与被测系统交互。能够快速上手,灵活性强。但是编写脚本需要编程技能,系统中一个改动会影响所有脚本,没有经过模块化或重用的大量脚本难以维护。因此这种方法适合简单任务,不适合大型自动化。
1.2.3数据驱动方法
数据驱动方法,将数据与测试脚本分离,基于模块化的测试库,一个驱动脚本可以执行多个相似测试,这样非常容易建立新测试。维护工作可以分离,测试人员负责数据,程序员负责写测试库。然而,不同类型测试仍需要新的驱动脚本,初始建立数据解析器和重用组件需要花人力。这种方法适合大型项目,只需要较少的编程技能。
1.2.4关键字驱动
关键字驱动,将数据与关键字结合来描述如何使用数据执行测试(见图1)。这种方法具备数据驱动的优势,同时非编程人员也能建立新类型测试。所有测试由同一个框架来执行,同时框架可以支持多种接口库实现功能扩展。然而初始成本很大,但是可以使用开源方案节省一定成本,因此非常适合大型项目。关键字驱动的案例如图1所示。
二、软件自动化测试的应用
以企业客户服务ARCH网站为例,该网站具有统一的用户界面和身份管理、浏览方式,其能够有效的避免出现多次登录不同的应用程序中的现象发生,如果用户采用不同的设备登录该网站,其表现形式不同,但是网站内的信息是一致的。在进行ARCH网站开发时,以网站的每个模块为单位进行开发然而模块的数量非常多,在处理这些模块时还会不断的出现新的模块,然而由于进度的原因,常常出现模块开放后没有进行足够的测试,从而导致在模块中测试就能发现的缺陷在整个系统测试中才发现。为了解决这一问题,测试者引进了自动化测试,测试者通过持续集成工具把自动化测试的测试计划、测试日程、测试执行和错误跟踪等功能融为一体,极大的加快了测试的进程,采用自动化测试不仅给测试者带来了一定的挑战,还提高了测试的效率的质量,提高了测试者的激情。
三、结语
谈软件测试自动化 篇3
信息技术的飞速发展, 使软件产品应用到社会的各个领域, 软件产品的质量自然成为人们共同关注的焦点。不论软件的生产者还是软件的使用者, 均生存在竞争的环境中, 软件开发商为了占有市场, 必须把产品质量作为企业的重要目标之一, 以免在激烈的竞争中被淘汰出局。用户为了保证自己业务的顺利完成, 当然希望选用优质的软件。质量不佳的软件产品不仅会使开发商的维护费用和用户的使用成本大幅增加, 还可能造成灾难性的后果 (如民航订票系统、银行结算系统、证券交易系统、自动飞行控制软件、军事防御和核电站安全控制系统等) 。
为了解决这一问题, 人们在开发过程中使用了很多方法, 力图通过严谨的开发过程保证软件的质量。这些努力当然是创造高质量软件产品的有效方法。但对软件进行测试仍然是保证软件质量最重要和最有效的方法。
软件测试的目的, 第一是确认软件的质量, 其一方面是确认软件做了你所期望的事情, 另一方面是确认软件以正确的方式来做了这个事件。第二是提供信息, 比如提供给开发人员或程序经理的反馈信息, 为风险评估所准备的信息。第三软件测试不仅是在测试软件产品的本身, 而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题, 这说明此软件开发过程很可能是有缺陷的。因此软件测试的第三个目的是保证整个软件开发过程是高质量的。
进入上世纪90年代, 软件行业开始迅猛发展, 软件的规模变的非常大, 在一些大型软件开发过程中, 测试活动需要花费大量的时间和成本, 而当时测试的手段几乎完全都是手工测试,
u_longipaddr;/*IP地址*/
u_longmask;/*屏蔽码*/
struct accstdinfo next;/*指向标准访问列表项的指针*/
};
ACC_STD_INFO acc_std_list[100];/*标准访
问列表数组*/
第二, CACHE的数据结构。
为了提高查表的效率, 采用CACHE方式, 每次查表先查CACHE寻找匹配。
struct accstdcache
{
u_longsrc_addr;/*数据包的原地址*/
u_longmask;/*屏蔽码*/
struct accstdcache*next;/*指向标准访问列CACHE表项的指针*/
}
typedef struct accstdcache*ACC_STD_CACHE;
第三, 配置命令。测试的效率非常低;并且随着软件复杂度的提高, 出现了很多通过手工方式无法完成测试的情况, 于是, 很多测试实践者开始尝试开发商业的测试工具来支持测试, 辅助测试人员完成某一类型或某一领域内的测试工作, 而测试工具也逐渐盛行起来。通过运用测试工具, 可以达到提高测试效率的目的。测试工具的发展, 大大提高了软件测试的自动化程度, 让测试人员从繁琐和重复的测试活动中解脱出来, 专心从事有意义的测试设计等活动。采用自动比较技术, 还可以自动完成测试用例执行结果的判断, 从而避免人工比对存在的疏漏问题。设计良好的自动化测试, 在某些情况下可以实现“夜间测试”和“无人测试”。在大多数情况下, 软件测试自动化可以减少开支, 增加有限时间内可执行的测试, 在执行相同数量测试时节约测试时间。而测试工具的选择和推广也越来越受到重视。对测试工具能够发挥的作用, 大家都已经了解并认可了, 但是很多引入自动化测试工具的软件公司并没有能够让测试自动化发挥应有的作用。主要存在以下问题:
1过高的期望
没有建立一个正确的软件测试自动化的观念, 或操之过急, 或认为测试自动化可以代替手工测试, 或认为测试自动化可以发现大量新缺陷, 或不够重视而不愿在初期投入比较大的开支等。多数情况下, 对软件测试自动化存在过于乐观的态度、过高的期望, 人们都期望通过这种测试自动化的方案能解决目前遇到的所有问题。
2缺乏专业的测试人才
有些软件公司舍得花几十万元去买测试工具软件, 但缺乏具有良好素质、经验的测试人
(1) 建立标准访问列表或删除标准访问列表
(2) 将标准访问列表应用于接口酬冬访问列表从接口中移走
(3) 显示标准访问列表
3.3 Cisco路由器访问控制的实例分析
下面列举了一些重要的访问列表控制实例:
(1) 防范IP欺骗和欺骗路由器
将访问列表1用于wan连接ip access-group 1in;将访间列表2用于以太网接口, 连接ip accessgroup 2 out。
(2) 阻击来自远程特定IP地址的访问:access-
(3) 保护内部特定主机:access-list 101 deny ip
才。软件测试自动化并不是简简单单地使用测试工具, 还需要有良好的测试流程、全面的测试用例等来配合脚本的编写, 这就要求测试人员不仅熟悉产品的特性和应用领域、熟悉测试流程, 而且很好地掌握测试技术和编程技术。
3测试工具本身的问题
一般不会对自动测试脚本再做大规模的测试, 所以自动测试脚本的质量往往依赖于TA工程师 (测试自动化工程师) 的经验和工作态度, 如果自动测试工具不能提供一种机制来保证脚本的质量, 那将直接影响到测试结果的正确性。
4盲目引入测试工具
有一点很明确, 不同的测试工具面向不同的测试目的、具有各自的特点和适用范围, 所以不是任何一个优秀的测试工具都能适应不同公司的需求。
5没有良好的使用测试工具的环境
建立良好的测试工具应用环境, 需要测试流程和管理机制做相适应的变化, 也只有这样, 测试工具才能真正发挥其作用。
6其它问题
软件测试自动化所需要的测试脚本其维护量很大, 而且软件产品本身代码的改变也需要遵守一定的规则, 从而保证良好的测试脚本使用重复性, 也就是说测试自动化和软件产品本身不能分离。其次, 提供软件测试工具的第三方厂家, 对客户的应用缺乏足够理解, 很难提供强有力的技术支持和具体问题的解决能力。也就是说, 软件测试工具和被测试对象-软件产品或系统的互操作性会存在或多或少问题, 加之技术环境的不断变化, 所有这些对测试自动化的应用推广和深入, 都带来很大的影响。
(4) 保护内部所有主机的重要端口, 如果保护用于文件和打印共享的端口, 应阻止进入网络的135、137、138、139的TCPT和UDP端口。
(5) 阻止外部网络用ping来探测网络, 可以用:
阻止外部网络用traceroute来探测网络, 可以
用:access-list 102 denyicmp anyanytime-exceed-
参考文献
[1]夏亮.强化Cisco路由器的安全配置[J].软件导刊, 2008 (6) 。
[2]赵清源.试论路由器的安全配置与安全维护[J]电脑与电信, 2008年 (3) 。
[3]房莉.Cisco路由器的安全与加固[J].黑龙江科技信息, 2007年 (22) 。
[4]马素刚.路由器安全访问策略设计与实现》, 《西安邮电学院学报》, 2007年 (5) 。
[5]王云.路由器访问列表与网络安全[J].陕西气象, 2006年 (4) 。
软件自动化测试 篇4
作者:网络转载 发表于:[ 2011-11-21 13:19:48 ]有个测试同仁让我帮她看看她的简历,看完简历后我的直觉就是“这位测试同仁两年的测试白干了”。简历是一块敲门石,但这块敲门石是什么材质的,恐怕人见人智,然而什么样的简历才能是一块金质敲门石呢,下面是我的一个些个人见解,希望能给正在或正准备寻找更好发展机会的测试同仁们有所帮助。
针对在测试行业中已经有所感悟的人-凸现项目经验优势:在公司允许的范围内,把你参与的项目做一个简单的介绍。比如你参与的项目的体系结构,实现技术等等。这些东西能在一定程度上体现你对测试项目了解的程度,熟知程度,从而也能体现出你的经验到底有哪些。比如,我们可以在我们的项目介绍中告诉对方我们采用的4层架构:数据库,中间件,webservice,客户端,采用的c/s模式等等,如果你觉得可以,我们列举我们的数据库采用的是什么,中间件采用的是什么等等,在简单描述了项目之后,你可以非常坦诚的告诉你所求职的公司,在这个项目中你主要负责的部分,比如主要负责哪个层次的测试,主要负责的是测试执行还是测试设计等等。
对测试能力的描述。这一块很多人喜欢一概罗列,其实在我看来这是个大忌。一概罗列通常并不能体现出一个人的能力,有些人走得是测试管理路线,他擅长的一定是流程流程方面的掌控能力,有些人是走性能测试路线,他擅长的一定是具体的某个或者某些工具的使用。千万不要把自己描述成一个无所不能的,这在我看来,往往是一个无所特长的人。
如果可以,请加入一些测试方面的独特见地。我非常不喜欢的就是一旦问什么,都是书上的一套东西搬出来了,其实书本与现实有时有很大的差别,适时的表现出自己的独特见地,能证明你是一个活学活用的人,这样的人在任何一个单位都非常的吃香。
针对测试新人,切记“诚实的原则”:有些人可能没有吸引人眼球的学历,毕业院校,但请你大方的写出来,大胆的告诉你求职的公司,只有你认可自己,才能希望别人认可你,如果你加入这家公司,你也可以硬气的工作。学历,毕业院校可能成为你面试过程中的一点障碍,可是学历,毕业院校只能证明你的过去,并不能代表你的未来。现在大部分公司更认可一个人的能力,学历,毕业院校只是你一点出彩的地方而已。
浅谈软件测试中回归测试 篇5
关键词:软件测试;回归测试
中图分类号:TP311.52文献标识码:A文章编号:1007-9599 (2011) 03-0000-01
Regression Testing of Software Testing
Fan Xuedong
(Xi'an Foreign Affairs University,Xi'an710077,China)
Abstract:Regression testing despite the tedious,repetitive,but it must do the test,whether to take automated testing tools,or other test method is the problem discussed in this article.In this paper,the nature of regression testing,discusses the key,importance and testing methods,have their academic and practical significance.
Keywords:Software testing;Regression testing
一、概述
所谓回归测试就是当軟件发生改变时,重新测试已经通过测试的测试区域,以验证修改的正确性及其影响。在软件开发生命周期中,软件发生改变,就会带来问题。改变可能是源于发现了错误并做了修改,也有可能是因为集成或维护阶段加入了新模块。错误跟踪与管理系统不完善;对错误的理解不透彻,只修正了错误的外在表现,从而造成修改失败;修改还有可能产生副作用,从而导致软件未被修改的部分产生新的问题;新加入代码还有可能对原有代码带来影响。因此,我们就必须重新测试,以便确定修改是否达到了预期的目的。同时,为了验证修改的正确性及其影响就需要进行回归测试。
回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。
二、测试的大部分工作是做回归测试,软件一旦作了修改就必须进行
项目的测试组在实施测试的过程中会将所开发的测试用例保存到“测试用例库”中,并对其进行维护和管理。当得到一个软件的基线版本时,用于基线版本测试的所有测试用例就形成了基线测试用例库。在需要进行回归测试的时候,就可以根据所选择的回归测试策略,从基线测试用例库中提取合适的测试用例组成回归测试包,通过运行回归测试包来实现回归测试。保存在基线测试用例库中的测试用例可能是自动测试脚本,也有可能是测试用例的手工实现过程。回归测试需要时间、经费和人力来计划、实施和管理。在给定的预算和进度下,需要对测试用例库进行维护并依据一定的策略选择相应的回归测试包。
(一)首先必须有个管理良好的测试用例库,用例库中的所有用例必须有效,达到足够的覆盖率。这需要有良好的测试管理工具,并有相应的资源(时间与人力)去维护这个测试用例库,使其中没有过时,冗余的测试用例。如何管理组织好测试用例库是一个值得深入研究的课题,要做好回归测试,组织管理良好的测试用例库是前提。测试用例库的维护为了最大限度地满足客户的需要和适应应用的要求,软件在其生命周期中会频繁地被修改和不断推出新的版本,修改后的或新版本软件会添加新的功能或者变化。同时,被修改的或新增添的软件功能,仅靠重新运行以前的测试用例不行,必须追加新的测试用例来测试。
测试用例库维护是一个连续的过程,通常可以将软件开发的基线作为基准,维护的主要内容包括:(1)删除过时的测试用例。因为需求的改变等原因可能会使一个基线测试用例不再适合被测试系统,这些测试用例就会过时。(2)改进不受控制的测试用例。随着软件项目进展,库中的用例会不断增加,会出现对输入或运行状态十分敏感的测试用例。这些测试不容易重复且结果难以控制,影响测试效率。(3)删除冗余的测试用例。冗余测试用例的存在降低了回归测试的效率。所以需要定期的整理测试用例库,并将冗余的用例删除掉。(4)增添新的测试用例。程序段、构件或关键的接口在现有的测试中没有被测试,就应该开发新测试用例。不仅改善了测试用例的可用性,而且也提高了测试库的可信性,同时还可以将一个基线测试用例库的效率和效用保持在一个较高的级别上。
(二)回归测试的实质在于它是一个能够检测到回归错误的受控实验。回归测试包的选择在软件生命周期中,即使一个得到良好维护的测试用例库,也可能变得相当大,这使每次回归测试都重新运行完整的测试包变得不切实际。当测试组选择缩减的回归测试时,有可能删除了将揭示回归错误的测试用例,消除了发现回归错误的机会。然而,如果采用了代码相依性分析等安全缩减技术,就可决定哪些测试用例可以被删除而不会让回归测试的意图遭到破坏。选择回归测试策略应该兼顾效率和有效性两个方面。常用的选择回归测试的方式包括:(1)再测试全部用例。选择基线测试用例库中的全部测试用例组成回归测试包,这是比较安全的方法,它具有最低遗漏和风险,但测试成本最高。往往超出我们的预算和进度。(2)基于风险选择测试。可以基于一定的风险标准来从基线测试用例库中选择回归测试包。首先运行最重要的、关键的和可疑的测试,而跳过那些非关键的、优先级别低的或者高稳定的测试用例,这些用例即便可能测试到缺陷,其严重性也仅有三级或四级。(3)基于操作剖面选择测试。若基线测试用例库的测试用例是基于软件操作剖面开发的,测试用例的分布情况反映了系统的实际使用情况。回归测试所使用的测试用例个数可由测试预算确定,优先选择针对最重要或最频繁使用功能的测试用例,释放和缓解最高级别风险,有助于尽早发现那些对可靠性有最大影响的故障。(4)再测试修改的部分。当测试者对修改的局部化有足够的信心时,可以通过相依性分析识别软件的修改情况并分析修改的影响,将回归测试局限于被改变的模块和它的接口上。通常,一个回归错误一定涉及一个新的、修改的或删除的代码段。在允许的条件下,回归测试尽可能覆盖受到影响的部分。
再测试全部用例的策略是最安全的策略,但过时回归测试不太可能揭示新的错误,而且由于时间、人员、设备和经费的原因,不允许选择再测试全部用例的回归测试策略,此时,可选择适当的策略进行缩减的回归测试。
(三)实际工作中,回归测试需要反复进行,回归测试的基本过程有了测试用例库的维护方法和回归测试包的选择策略。回归测试可遵循下述基本过程进行:(1)识别软件中被修改的部分;(2)从原基线测试用例库中,排除所有不再适用的测试用例,确定那些对新的软件版本依然有效的测试用例,其结果是建立一个新的基线测试用例库T。(3)依据一定的策略从T中选择测试用例测试被修改的软件。(4)若必要可生成新的测试用例集T1,用于测试T无法充分测试的软件部分。(5)用T1修改后的软件。第b和第c步测试验证修改是否破坏了现有的功能,第d和第e步测试验证修改工作本身。
三、结论
(一)无论采取何种策略,回归测试是必须的一种测试。回归测试时我们必须采取一些较为有效的方法。例如安排新的测试者完成手工回归测试,让更有经验的测试者开发新的测试用例,做一些探索性的测试。但最重要的就是基于实际可行的引进自动化测试,因为机器不会累。实际中,回归测试的重复将非常令人厌烦,因此,需要通过自动测试来实现重复的和一致的回归测试,提高回归测试效率。
(二)在测试软件时,应用多种测试技术是常见的。测试时,测试者希望采用多于一种回归测试策略来增加修改软件的信心。如果回归测试包不能达到所需的覆盖要求,必须补充新的测试用例。回归测试是重复性较多的活动,容易使测试者感到疲劳和厌倦,降低测试效率,在实际中可以采用一些策略减轻这些问题。可以在不影响测试目标的情况下,鼓励测试者创造性地执行测试用例,变化输入、按键和配置能够有助于激励测试者又能揭示新的错误。
(三)回归测试需要根据项目、测试资源等实际情况采取有效计划和组织。其中需要注意的是必须重视回归测试,在测试计划中有很好的进度安排及选择相应的回归,重视测试用例的维护,借助于自动化工具。在组织测试时需注意:首先是各测试阶段的修改一定要在本测试阶段内完成回归,以免将错误遗留到下一测试阶段。其次,测试期间应对软件版本冻结,将测试发现的问题集中修改,集中回归。建议将回归测试与兼容性测试结合起来。在新的配置条件下运行旧的测试可以发现兼容性问题,同时也可以揭示编码在回归方面的错误。
参考文献:
[1]贺平.软件测试教程.电子工业出版社,2010,1
软件自动化测试工具研究 篇6
关键词:软件自动化测试,测试工具,应用
1 软件自动化测试优点
软件实现自动化测试, 其目的在于缩短测试周期, 增强对软件性能方面的测试能力, 从而达到保证软件质量并使软件能够提前上线。相对于手工测试来说, 自测试工具具有如下优点:
(1) 提高了测试效率。在软件测试中对于回归测试中的动作和用例是已经完全设计好的, 同时可以完全预知测试期望和结果, 从而可以极大提高测试效率, 缩短回归测试时间。
(2) 可以运行更多更繁琐的测试。许多不可能同时让足够多的测试人员同时进行测试的大量用户测试, 实行自动化测试可模拟出同一时间的许多用户, 更好的利用资源, 同时达到测试的目的。
(3) 具有一致性和可重复性。由于测试是自动执行的, 每次测试的结果和执行的内容的一致性是可以得到保障的, 从而达到测试的可重复效果。自动化测试还存在着复用性的优点, 自动测试通常采用脚本技术, 只需要对脚本做少量的甚至不做修改, 实现在不同的测试过程中使用相同的用例。
2 软件自动化测试工具的分类及功能
目前用于测试的工具较多, 从测试应用的角度看, 一般可分为白盒测试工具 (动态测试、静态测试) 、黑盒测试工具 (功能测试、性能测试) 、测试管理工具 (测试流程管理、缺陷跟踪管理、测试用例管理) 等几大类。具体分析如下:
2.1 白盒测试工具
白盒测试主要是从程序的内部结构出发设计测试用例, 对程序所有逻辑路径进行测试, 通过在不同点检查程序的状态, 确定实际的状态, 来测试产品内部动作是否按照设计规格说明书的规定正常进行, 检验程序中的每条通路是否都能按预定要求正确工作。其对应的测试工具也主要是直接对代码进行分析, 针对程序代码、程序结构、对象、类层次等进行测试, 测试中发现的缺陷可以定位到代码行、具体的某个变量。软件自动化测试中对白盒测试工具的选择主要应依据该工具对开发语言的支持力度、对嵌入式操作系统的支持力度、代码的覆盖深度及测试的可视化。
白盒测试工具可进一步细分为静态测试工具和动态测试工具。静态测试工具是不运行被测程序本身, 仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。具有代表性的静态测试工具有Gimpel公司的PC-lint和Compuare的DevPartner Studio中的CodeReview。动态测试工具需要实际运行被测系统, 并设置断点, 向代码生成的可执行文件插入一些监测代码, 监测断点这一时刻程序运行的数据。具有代表性的动态测试工具有IBM-Rational公司的Purify, Pure Coverage, Quanlify和Compuare公司的Error Detect, Coverage Analysis, PerformanceAnalysis。
2.2 黑盒测试工具
黑盒测试是在已知产品所应具有的功能的情况下, 通过测试来检测每个功能能否正常使用的测试工具。其基本工作原理是利用脚本的录制和回放, 模拟用户的操作, 然后将被测系统的输出记录下来同预先给定的标准结果比较。测试时完全不考虑程序内部结构和内部特性, 它只检查程序功能是否按照需求规格说明书的规定正常使用, 主要用于软件确认测试。黑盒测试工具的代表有IBM Rational的TeamTest、Robot, Compuware公司的QACenter, MI公司的WinRunner等工具。
2.3 测试数据生成工具
测试数据生成工具主要应用在测试的前端, 为测试过程准备大量的可用数据。并且通过转化、析取、变换或捕捉现有数据作为依据, 自动为测试程序生成可靠的测试数据。同时, 可以通过配置工具配置数据生成的规则, 并且有一个自动配置引擎, 可以根据已经存在的数据库自动生成配置文件。目前典型的测试数据生成工具有:Bender& Associates公司提供的功能测试数据生成工具SoftTest; InternationalSoftwareAutomation公司提供的PanoramaC/C++测试数据生成工具。
2.4 测试管理工具
测试管理工具是指用工具对软件的整个测试输入、执行过程和测试结果进行管理的过程。测试管理工具通过一个中央数据仓库, 实现测试人员、开发人员或其他IT人员在异地进行信息交流。从测试需求管理到测试计划、测试日程安排、测试执行到出错后的错误跟踪, 实现了全过程的自动化管理, 提高回归测试的效率、大幅提升测试时间、测试质量、用例复用、需求覆盖等。测试管理工具的代表有Mercury Interactive公司的TestDirector、IBM-Rational公司的ClearQuest。
3 选择软件自动化测试工具的方法
在考虑选用工具的时候, 面对用于软件测试的众多工具, 可以从以下几个方面来权衡和选择。
3.1 功能
选择一个测试工具首先就是看它提供的功能。除了基本的功能之外, 测试工具还应具备以下功能:①录制/回放功能:在自动化测试工作中, 该功能是绝大多数专业测试人员开始自动化测试尝试的第一步;②集成功能:测试工具的引入是伴随着测试过程改进而进行的一个持续的过程。因此, 集成功能也是测试工具必须考虑的因素;③图像测试功能:进行软件测试中有时必须要测试一个位图或类似的图片, 在多数的Windows应用程序中会带有一些绘图控件, 而在GIS (地理信息系统) 应用软件的测试中, 这一功能作用尤为重要。
3.2 易用性
不同的测试工具面向不同的测试目的、具有各自的特点和适用范围, 所以不是任何一个优秀的测试工具都能适应不同公司的需求。因此, 在选择测试工具时应考虑工具的易用性。
3.3 连续性和一致性
在选择测试工具时, 必须考虑测试工具引入的连续性和一致性, 即对测试工具的选择必须有一个全盘的考虑, 分阶段、逐步的引入测试工具。
3.4 适合于软件生命周期
软件所处的生命周期不同, 测试目的不同, 因此, 在软件不同的生命周期阶段, 应根据其测试特点选择不同的测试工具。
4 测试工具在软件自动化测试中的应用
4.1 软件自动化测试的实施程序
自动化测试与软件开发过程从本质上来讲是一样的, 其实施程序是利用自动化测试工具, 经过对测试需求的分析, 设计出自动化测试用例, 从而搭建自动化测试的框架, 设计与编写自动化脚本, 测试脚本的正确性, 从而完成该套测试脚本。具体步骤如下:
4.1.1 分析测试需求
开发管理者、测试管理者和测试人员实现自动化测试的目标常常是有差别的。如功能测试、性能测试、安全性测试等等。同时, 不同的测试工具其测试功能不同, 因此, 在实施测试方案之前也需要收集需求, 选择测试工具。
4.1.2 设计测试用例
测试用例是按一定顺序执行的与测试目标相关的一系列测试。测试用例设计将产生测试所包括的输入值、期望结果以及其他任何运行测试的相关信息。
4.1.3 编写测试脚本
测试脚本的编写过程便是具体的测试用例的脚本转化。根据测试设计生成需要进行的测试脚本。一些高度自动化的测试工具能够根据软件以前运行的情况自动地录制测试用例。
4.1.4 实施测试
测试过程的自动化的实现主要依靠测试支持系统对测试过程进行了自动化调度和控制。
4.1.5 生成软件测试报告
对结果进行分析, 发现产品中问题的本质, 对产品质量进行准确地评估。
4.2 测试工具在软件自动化测试中的应用
4.2.1 识别待测试程序集中的类、方法和属性
待测试程序集的命名空间和类型类是很好地测试一个程序集的必要信息, 是在开始测试给定程序集之前必须了解的。因此, 在实际的测试过程中, 在测试一个给定的程序集之前, 一般都需要用测试工具识别出所有的命名空间和类型类。
4.2.2 代码分析
代码分析技术类似于高级语言编译系统, 是为查找和描述软件源代码中的薄弱环节而开发的, 这些薄弱环节可能是软件安全漏洞、逻辑错误、编程错误、开发异常、边界条件错误或其他会引发问题的错误代码。在软件测试中一般针对不同的高级语言去构造测试工具, 在工具中定义类、对象、函数、变量等规则、语法规则;在分析时对代码进行语法扫描, 找出不符合编码规范的地方;根据某种质量模型评价代码质量, 生成系统的调用关系图等。因此, 在该技术中, 测试工具通过分析源代码, 自动生成测试驱动和桩模板。开发人员在该测试脚本的基础上指定测试输入数据、期望输出数据以及桩函数逻辑。测试执行后自动生成测试报告和各种运行时候报告, 从而完成整个过程的软件测试。
在此过程中, 测试对代码的分析在逻辑上一般应将整个测试工具分成各自独立的两部分:静态分析模块和动态分析模块。其中, 静态分析模块是整个自动化工具的基础。静态测试工具直接对代码进行分析, 不需要运行代码, 也不需要对代码编译链接, 生成可执行文件。首先, 分析工程文件, 根据工程文件依次读入所有的源程序。然后, 对代码进行语法扫描, 找出不符合编码规范的地方, 根据某种质量模型评价代码的质量, 生成系统的调用关系图等。最后, 对源程序作语法分析, 从中提取各种必要的数据, 并在静态数据库中将得到的数据全部保存, 提供给后续的动态分析和测试报告使用。动态测试工具一般采用“插桩”的方式, 向代码生成的可执行文件中插入一些监测代码, 用来统计程序运行时的数据, 分析软件的覆盖率、检查内存使用有否渗漏和违例、跟踪程序的异常终止等等。根据动态测试在软件开发过程中所处的阶段和作用, 动态测试工具应完成以下3个步骤:①单元测试:其目的是检验软件基本组成单位的正确性;②集成测试:其主要目的是检查软件单位之间的接口是否正确;③系统测试:其目的是对应经集成好的软件系统进行彻底的测试, 以验证软件系统的正确性和性能等满足其指定的要求。
4.2.3 捕获—回放
捕获—回放技术是在窗口系统的基于消息管理机制的基础上实现的。测试人员先借助捕获回放工具手动进行对软件系统的操作来完成测试脚本的录制, 工具会首先学习被测软件系统组件层次结构和组件自身的信息, 随后会采用某种方式截获测试人员在被测软件系统组件上触发产生的事件, 随后解析该事件, 得到事件的各个参数, 保存到测试脚本中, 与预先给定的标准结果比较, 测试软件缺陷。捕获——回放工具能够捕获在测试过程中传递给软件的输入, 生成执行的脚本, 并且能够在以后的时间中, 重复这个执行的过程。如果工具不能识别应用程序对象而无法进行对手工测试的录制和回放, 日后测试自动化的实现将会遇到巨大困难而导致失败。对于用户输入的捕获, 捕获——回放工具将以3种级别捕获, 即硬件级别、操作级别和进程级别。硬件级别捕获, 是对用户输入的录制和回放主要是采用硬件来完成。如某个字符的键盘输入、鼠标的点击等。硬件设备可以捕获键盘敲击的键值, 或加密键盘扫描码, 从而监控该计算机的使用, 以防止底层恶意代码对计算机的监听。捕操作系统级别的录制和回放工具主要用于在系统级别对键盘或鼠标的输入进行监控。进程级别捕获是捕获——回放工具采用C++ 或者Jvaa语言实现对特定的进程进行监控。同时, 为了监控大多数语言编写的目标程序, 测试工具可对不同语言编写的目标程序加挂针对该语言的包, 对该语言包进行捕获。
4.2.4 自动生成测试脚本和脚本测试
脚本是一组测试工具执行的指令集合, 这些指令可以被自动化测试工具执行。
自动化测试工具为了能够提高开发测试脚本的速度, 必须能过提供录制脚本的功能, 将通讯包录制下来, 快速得到技术细节问题, 从而提高开发测试脚本的速度。
负载压力测试工具LoadRunner是目前应用最为广泛的性能测试工具之一。该工具通过模拟上千万用户实施并发负载, 实时性能监控的系统行为和性能方式来确认和查找问题。一般负载压力测试工具主要由虚拟用户脚本生成器、压力产生器、用户代理、压力调度、监视系统和压力结果分析工具组成。其主要的操作步骤是:①选择协议:测试工具的测试都是在获取各种通信协议下应用体统的客户端与服务器端的通信信息后进行的, 因此, 在进行测试之前, 首先应选择被测应用系统客户端与服务器端的通信所使用的协议类型;②创建测试脚本:选择相应的协议后, 虚拟用户脚本生成器通过代理方式接收客户端发送的数据包, 记录并将其转发给服务器端;接收到从服务器端返回的数据流, 记录并返回给客户端。 这样服务器端和客户端都以为在一个真实运行环境中, 虚拟脚本生成器能通过这种方式截获数据流;虚拟用户脚本生成器在截获数据流后对其进行了协议层上的处理, 最终用脚本函数将数据流交互过程体现为我们容易看懂的脚本语句;③产生负载:压力生成器根据脚本内容, 产生实际的负载;④创建虚拟用户:压力调度根据用户的场景要求, 设置各种不同脚本的虚拟用户数量, 设置同步点等;⑤设定负载方案:使用测试工具控制台设定负载方案;⑥执行测试:监控系统则可以对数据库、应用服务器、服务器的主要性能计数器进行监控;⑦结果分析。
测试结束后, 测试工具会收集客户端、服务器端和网络3个方面所有的测试数据并生成测试结果报告。并通过压力结果分析工具评估系统组件的运行性能, 从而定位应用系统存在的主要问题, 完善系统功能, 实现系统的优化。
5 结束语
针对软件技术的发展, 程序的规模逐渐增大, 复杂度也逐渐增加的趋势, 正确使用软件测试工具可以增强软件测试的自动化程度。在众多的自动化测试工具中, 我们应综合各种因素, 正确地选择和使用自动化测试工具, 不断地提高测试的效率和测试质量, 降低测试成本, 更好地完成软件开发工作。
参考文献
[1]黄茂生.软件自动化测试工具的评估与选择[J].电子质量, 2007 (12) .
[2]李理, 刘军.软件测试工具的选择和使用[J].警察技术, 2006 (4) .
[3]徐进.自动化软件测试的分析[J].信息技术, 2010 (3) .
软件自动化测试实施方案 篇7
关键词:自动化测试,软件质量,测试管理
1. 前言
在大平台软件研制过程中, 存在研制周期长、需求不断变化的情况, 软件的每一次改动都要求进行相应的回归测试。因此, 对软件自动化测试的需求尤为明确, 除了人机界面, 接口、性能都可以纳入自动化测试的范畴。
2. 软件自动化测试的引入
除了由于需求的变化带来的软件改动导致测试工作量增加以外, 软件功能规模的不断扩大, 也是软件测试工作量不断增加的主要因素。如果采用手工测试, 则会存在测试部全面、测试花费时间长等种种弊端, 并且很难保障系统软件的质量。
相比与手工测试, 自动化测试的优势是明显的。首先自动化测试可以提高测试效率, 使测试人员更加专注于新的测试模块的建立和开发, 从而提高测试覆盖率;其次, 自动化测试使测试资产的管理数字化, 并使测试资产得以在整个测试生命周期内得到复用, 这个特点在功能测试和回归测试中尤其具有意义;此外, 通过测试流程的自动化管理使机构可以通过流程的关键绩效指标来衡量测试过程的有效性, 从而实现了软件质量保证向软件质量管理的进化。
3. 软件自动化测试的实施
实施软件自动化测试必须进行多方面的培训, 包括测试流程制定、缺陷管理、测试工具的选择和使用、人员安排以及掌握相关业务知识等。如果测试过程不合理, 引入自动化测试只会给软件组织或者项目团队带来更大的混乱。所以, 首先应该根据实际情况, 选择合适的测试工具;再次, 必须制定合理的、切实可行的测试计划。
3.1 制定测试管理流程
根据大平台软件研制的实际工作情况, 我们采用自动化测试的基本流程是:编写测试需求, 制定测试计划, 编写测试用例, 测试执行, 形成测试报告。测试实施过程中产生的所有文档都使用测试管理工具进行管理;使用自动化的测试工具录制测试脚本, 通过回放脚本, 实现功能以及性能测试的自动化;测试执行完毕后, 由测试工具自动生成测试报告。
TestManager工作流程支持RUP定义的5个主要的测试活动, 它们是一个软件工程过程:
●测试的计划
●测试的设计
●测试的实施
●测试的执行
●测试的评估
这些活动的每一个都与测试资产有输入和输出的交互, 如下图图1所示:
3.2 测试工具以及测试管理工具的选择
测试工具的种类有很多种, 选择合适的测试工具是自动化测试工作顺利展开的关键。经过对比后, 该方案中我们选择了自动化测试工具Rational Robot。Rational Robot可以开发三种测试脚本:用于功能测试的GUI脚本、用于性能测试的VU以及VB脚本。它的主要作用包括以下几点:
(1) 执行完整的功能测试。记录和回放遍历应用程序的脚本, 以及测试在查证点 (verification points) 处的对象状态。
(2) 执行完整的性能测试。Robot和TestManager协作可以记录和回放脚本, 这些脚本有助于断定多客户系统在不同负载情况下是否能够按照用户定义标准运行。
(3) 在SQA Basic、VB、VU环境下创建并编辑脚本。Robot编辑器提供有色代码命令, 并且在强大的集成脚本开发阶段提供键盘帮助。
(4) 测试IDE下Visual Basic、Oracle Forms、Power Builder、HTML Java开发的应用程序。甚至可测试用户界面上不可见对象。
(5) 脚本回放阶段收集应用程序诊断信息, Robot同Rational Pruify、Quantify、Pure Coverage集成, 可以通过诊断工具回放脚本, 在日志中观察结果。
Robot使用面向对象记录技术, 记录对象内部名称, 而非屏幕坐标。若对象改变位置或者窗口文本发生变化, 仍然可以找到对象并回放。测试工具主要功能的比较见表1:
为了使测试工作规范化, 就要对其进行有效地管理, 因此测试管理工具的使用尤为重要。本方案中, 我们使用的管理工具是与Robot同一个公司的产品Rational TestManager, 它是一个开放的可扩展的架构, 统一了所有的工具、成品和数据, 而数据是由测试工作产生并与测试工作关联的。在这个唯一的“保护伞”下, 测试工作中的所有负责人和参与者能够定义和提炼他们将要达到的质量目标。测试工作中, 我们使用TestManager制定测试计划, 实现了对测试用例的管理和维护;根据实际工作需要, 对测试用例的相关属性进行不同的运行环境配置, 包括测试用例的运行环境、运行时间、以及对应的测试脚本等。最后结合使用Rational
SODA for Word生成相应的报告文档, 主要包括脚本详细信息报告、脚本摘要信息报告和运行结果报告等。可以根据实际需要对各种报告模板进行定制, 从而得到满足不同需求的报告样式。测试管理工具的比较见右表2:
在规范测试流程, 改善测试管理的同时, 严格控制软件版本对测试工作来说也同样重要。因此, 采用Rational ClearCase进行软件版本管理。
3.3 测试环境部署
测试环境采用资源共享, 协同工作的方式。测试环境部署以及时实施情况:一台测试服务器, 服务器上安装测试管理工具TestManager以及测试所需要的数据库, 在服务器上, 管理员设计并部署了测试工程、创建了测试小组, 并赋予了不同的测试人员相应的工程权限, 使每一个测试人员在负责各自的测试工作是, 也能够查看并使用其他测试人员录制编写完成的脚本, 实现脚本的共享和复用, 提高工作效率。一台版本控制服务器安装Rational ClearCase, 对被测进行版本控制;一台或多台测试机器, 主要运行被测软件和测试工具Rationa Robot。软件测试部署框图如图2所示:
3.4 测试实施实例
以在实际工程中的软件功能测试为例, 需要验证被测软件在某个频段内是否能够自动选择正确的滤波器, 利用测试工具Robot提供的数据池功能并按照频率设置规则准备频率数据库frequency, 然后使用Robot录制并编写如下脚本:
‘Initially Recorded:2006-8-11 11:52:10软件和文档、测试脚本和测试用例等
打开被测程序, 回放该脚本, 脚本会按照数据库中的频率一次进行参数设置, 并自动比较设置结果, 以验证被测程序滤波器选择的正确性。运行过程不需要人工干预, 运行结果自动保存在Robot的测试记录中, 以便测试结束后进行查看。
4. 总结
实践证明, 通过将该套自动化测试实施方案运用到软件测试工作中, 能够优化软件测试流程, 有效地提高测试效率, 对软件质量的提高起到事半功倍的效果。
参考文献
[1]郭荷清主编《现代软件工程——原理, 方法, 与管理》[M].广州:华南理工大学出版社, 2004.2 (2005.1)
[2]齐志昌等编著《软件工程》[M].北京:高等教育出版社, 2001.8 (2002重印)
[3]郑人杰等编著《基于软件能力成熟度模型 (CMM) 的软件过程改进——方法实施》[M].北京:清华大学出版社, 2003
[4]DUSTINE, RASHKAJ, PAULJ.Automated Software Tesin[M].Addison2Wesley, 1999.
[5]张海藩.软件工程导论[M].北京:清华大学出版社, 1998
软件自动化测试理论及其实现 篇8
在过去, 软件测试基本都是由开发人员自己或者专门的测试部门进行检测的, 程序开发员及相关部门要消耗大量时间来对软件进行开发测试, 工作效率和质量较低。因此, 自动化软件测试技术的出现, 可以使开发与测试人员的软件测试工作更加方便快捷, 逐渐摆脱复杂的人力测试, 推动工作效率的有效提高。
1 软件自动化测试的实现
1.1 软件自动化测试的概念及测试理论
测试自动化指的就是利用自动化测试工具以及其他有效的测试方法, 根据测试工程师的原定计划开展自动测试工作, 进而达到减少手工测试工作量, 促进软件测试质量提高的目的。软件自动化测试是一项新型软件测试的技术, 根据测试的需要, 可以调整测试系统运行的环境, 然后通过设置好的系统程序对需要测试的软件进行测试。软件自动化测试的工作原理就是要通过应用专用的软件工具来进行软件测试工作, 取代以往的手工测试, 实现对软件性能及质量的验证, 判定其是否满足预定需求。软件自动化测试以提高测试效率和质量为根本目的, 为软件的实际质量提供保证, 通常可以通过可视用户界面或者直接命令实现对脚本的使用, 有效应用相关代码完成对应用程序的驱动, 完成软件自动化测试工作[1]。
1.2 回归测试自动化理论
回归测试是软件测试工作中的一个重要环节, 当我们对代码进行修改或者对软件硬件平台进行变更亦或是更换硬件配置时, 就一定要开展回归测试。回归测试作为软件生命周期的一个重要构成部分, 在整个软件测试工作中占据很大的比重。在软件快速更迭开发过程中, 软件新版本经常需要连续发布, 这就使回归测试的开展变得更加紧迫和必要。所以, 我们必须要选择有效的回归测试方法来促进回归测试效率及质量的提高。
1.3 软件自动化测试技术及实现
软件自动化测试技术可以根据机制的不同划分为侵入式测试技术以及非侵入式测试技术。侵入式技术通常利用某种方法对内部代码进行修改, 对其运行环境开展有效控制, 非侵入式测试技术则多应用于软件监视及检查工作, 而不是对软件内部的具体结构和内部代码进行修改。软件自动化测试一般使用自动化测试工具, 例如IBM的RQM、RFT (见图1) 以及RPT等就能够实现对测试脚本的提供, 并针对目标应用程序进行有效测试[2]。软件测试人员以及软件开发人员必须要不断学习新的自动化测试技术并将其应用在测试工作中, 不断完善和优化企业的自动化测试工具, 才能真正满足企业的自动化测试需求。
2 软件自动化测试的具体应用
软件自动化测试在具体应用中需要遵循一定的步骤, 具体应用流程如表1所示。
2.1 自动化测试的主要应用工具
现阶段, 我们主要应用的软件自动化测试工具主要有白盒测试工具、黑盒测试工具以及测试管理工具等。黑盒测试工具主要由功能测试工具以及性能测试工具组成。黑盒测试工具通常通过测试脚本的录制, 再把被测试系统的输出结果记录下来, 跟原来制定的标准进行对比。此类测试工具主要以Rational公司生产的Team Test以及Robot Compuware公司制造 的QACenter作为典型代表。白盒测试工具通常以代码作为主要测试对象, 测试工作中挖掘出的缺陷能够定位到代码级, 按照测试工作原理的差异性, 我们可以将白盒测试工具划分为静态工具以及动态工具。静态工具针对代码进行直接分析, 采用语法扫描方法开展代码分析工作, 针对与编码规范不符的地方则无需运行代码, 不用对其进行编译链接, 直接生成可执行文件。静态测试工具以Telelogic公司的Logisco Pe软件以及PR公司的PRQA软件为主要代表。动态测试工具则以Compuware公司的Dev Partner软件以及Rational公司的Puri系列为主要代表。测试管理工具一般用来对测试需求、计划以及用例、实施情况进行管理。
2.2 回归测试自动化理论的应用
回归测试自动化即使用测试工具, 实现自动选择测试用例开展回归测试。本企业在实现回归测试自动化时, 通常使用RQM、RFT等测试工具, 利用其捕获用户操作功能以及自动回放用户操作功能, 促进回归测试有效性的提高。捕获功能以及回放功能能够将用户在开展测试过程中的具体输入操作完整记录下来, 保存软件的响应记录, 在我们进行软件修改, 再次运行该软件时, 就可以通过测试回放功能将之前的输入操作再次应用到新的测试操作中, 同时对前后几次测试的响应情况进行自动对比, 假如响应出现差异, 则表示对该软件的修改存在新的错误。
2.3 软件自动化在稳定软件测试以及重复性测试中的应用
在对一个测试进行自动化之前, 要明确这个软件的实际用途是不是适用与软件自动化在稳定软件测试以及重复性测试中的应用, 如果这个测试随着时间的推移会发生重大变化就不需要对其进行自动化改革。因为应用程序发生变化的时候会导致自动化测试代码跟着改变。如果一个测试被重复的使用, 并且工作量大且不方便就需要将这个软件进行自动化。
3 编辑自动化测试脚本
自动化的软件测试工具在使用之后, 首先要做的是编辑自动化测试的脚本, 要求脚本覆盖更多的测试项目, 也就是说有新的产品与新的项目时, 可以简单的修改与还原原来的脚本, 从而使得后续脚本的维护与更新工作量大大的减少, 测试脚本模块化框架见图2。除此之外还要考虑到脚本编辑的简易操作性, 由于脚本不是由专门的人员进行编辑, 几乎是全部的测试人员一同进行的, 倘若脚本的格式与内容太复杂, 就会使得最终脚本不一致, 从而影响到自动化测试软件的规范性, 因此, 在进行脚本的编辑之前, 必须要制定自动化测试的脚本规范, 使得编辑的脚本具有统一性。
4 结束语
综上所述, 根据不同产品具有的特性, 选择合适的软件自动化测试工具, 开发出简单灵活、成本低并且兼容性强的自动化测试工具, 从而合理的应用到软件的测试工作中, 提高软件测试的工作效率, 加强软件的测试能力, 从而实现节约成本与实现软件检测的目的, 同时还要保证软件的质量, 使得在软件自动化测试下的软件在投入使用的过程当中能够更加高效的利用, 从而提高软件的使用率, 为开发商提供更好更高的经济效益。
摘要:本文阐述了软件自动化测试的基本理论及实现过程, 并对其具体应用情况进行了分析和总结, 供大家参考和探讨。
关键词:软件自动化,测试理论,实现与应用
参考文献
[1]郑毅, 王挺.浅论软件企业的自动化测试[J].浙江水利科技.2010, 03 (03) :256-336.
软件自动化测试方法简述与展望 篇9
1 自动化测试优势
测试自动化涉及到测试流程、测试体系、自动化编译、持续集成、自动发布测试系统以及自动化测试等方面整合。也就是说要让测试能够自动化,不仅是技术、工具的问题,更是一个公司和组织的文化问题。首先公司从资金、管理上支持,其次要有专门的测试团队去建立适合自动化测试的测试流程、测试体系;其次就是把原代码从受控库中取出、编译、集成、发布可运行系统、进行自动化的单元测试和自动化的功能测试的过程。
相对于手工测试,自动化测试通过自动化测试工具或者其他手段可以充分的增加测试覆盖范围,完成大量的重复测试,体现软件性能优劣。这些都是手工测试很难完成的,相比较而言,自动化测试拥有以下主要属性:
1)速度
想象手工测试Windows计算机的数千个测试用要花费多少时间,也许大约五秒钟执行一个测试用例。而自动化可能以10倍,100倍甚至1000倍的速度来执行。
2)效率
当测试员忙于执行测试用例时,他会无暇进行其他工作。如果有一个测试工具减少了执行测试用例的时间,测试员会有更多的时间进行测试计划,考虑新的测试用例。
3)准确度和精确度
测试员常识几百个测试用例之后,注意力会分散,并开始犯错误,而测试工具则会一如既往地每次执行同样的测试,并毫无差错地检查结果。
4)节约资源
有时要执行一些测试用例基本上是不可能的,比如创建测试条件需要的人数或者设备数目根本就不允许。测试工具可以用来模拟真实的情况,大大减少执行测试需要的物理资源。
5)仿真和模拟
测试工具常用来代替正常情况下与产品连接的硬件或者软件。这些“伪”设备和“伪”程序以选定的方式来驱动或者响应软件-除此之外,实现起来可能困难。
2 自动化测试方法
2.1 自动化测试框架
在自动化实施的过程中,一套优秀的测试框架要保证自动化的高效率和高质量。
从流程图1中可以看出,一个好的测试框架,将直接决定着测试脚本的开发和维护。而基本的自动化测试框架应如图2所示。
当然,测试框架的需要不停的维护和改善,但是把框架设计复杂话也是不可取的,设计框架的目的是让自动化更加自动,测试脚本的开发和维护变得简单。不能过分追求开发设计而背弃了测试“简单”的初衷。
2.2 自动化测试准备
拥有了一套完善的测试框架并不意味着自动化便可以顺利进行,还需要注意一下几个方面的内容:
1)沟通方式完善性
当确认了自动化测试,就需要把自动化测试工作纳入到项目的统一安排之中,把自动化测试人员也作为需求、设计、开发的相关共利者,当发生改变时,要即时通知,以便修改测试用例,避免编码或设计已发生改变,而自动化测试脚本尚未更新,其结果只能导致在排查软件缺陷上花费大量时间。
为充分理解需求与设计,自动化测试人员不可避免的要与设计人员沟通软件设计,测试人员需要耐心与细心,与开发人员保持好的关系,同时要尽量把问题一次沟通清楚,避免沟通不清导致测试用例返工,由此导致工作量的浪费。
对于基于组件的自动化测试,需要开发人员对功能充分的理解,明白自己开发的功能必须依靠什么组件,模块运行必要的支持组件。开发人员理解不充分,就会浪费测试代码的调试时间,直接影响最终的部署。
2)测试代码健壮性
测试用例的代码应具有很好的健壮性,理想的测试用例代码本身不会导致误报,断言错误时,只能是被测模块发生了失败。而在实际实施过程中,测试代码的健壮性很难保证,一方面由于测试用例代码编写人员本身编程水平不能保证,很可能产生代码上的BUG,另一方面由于需求和设计的变化,测试用例本身也要随时发生改变,测试用例更新不及时,就会导致被测模块的失败,因此及时沟通及更新用例代码,也是非常有必要。
3)测试驱动实时性
测试驱动是实现测试用例的根本,由于分工和涉足点不同,自动化测试人员只能完成很少一部分测试驱动,其它驱动由开发人员完成,测试人员只是负责定义驱动的输入输出接口。
但是开发人员有自己的任务,编写测试驱动势必增加其工作量,影响其原有工作的进行。为了自动化测试的正常进行,必须要与开发组进行充分的沟通,合理安排开发人员工作量,在不影响原有工作的基础之上完成测试驱动。
测试驱动实现的滞后,将影响测试用例的调试和最终部署,影响整体流程。
4)测试工具多样性
一种产品可能会包含各种功能组件,比如数据库、界面、通信等各种操作,因此要引入不同的自动化测试工具,完成不同功能点的测试。如界面操作的角本录入Win Runner、压力测试工具Load Runner等,各种工具的引入,可以使自动化测试的测试用例覆盖率扩大,使自动化测试更加深入和全面。
3 自动化测试误区
3.1 自动化测试可以代替手工测试
事实证明,自动化测试只能发现15%的软件缺陷,其余的85%还是需要手工测试来实现。因此,自动化测试更适合对软件质量稳定和模块的重复执行进行测试,也就是性能测试和回归测试。
3.2 自动化测试时间排在软件开发之后
理想情况下,自动化测试工程师应该在项目开发出去就介入到整个过程中,自动化测试工程师更偏重于开发,需要实现脚本的开发和维护,所以在项目一开始就必须调查自动化测试所采用的技术的可用性,避免后期影响项目进度。
3.3 自动化测试适用于所有项目
自动化测试脚本的开发和维护需要大量的时间作保证,所以,在以下条件下并不适合进行自动化测试:
需求不明确;
软件不稳定;
项目周期短;
一次性的项目;
硬件交互频繁(刷卡测试等)。
3.4 为自动化而自动化
自动化的目的是测试而不是自动化,自动化测试应该是先进的测试手段,是提高测试质量,测试速度的手段,而不是单纯为了技术研究而作的事情。
3.5 过分相信自动化测试
自动化测试的实现一般都需要通过测试工具的帮助,但是工具毕竟是工具,对于测试结果的分析还需要依靠测试人员丰富的经验,从而也说明,执行自动化测试同样需要测试基础。
4 自动化测试工具简述
自动化测试工具要实现自动化从而代替人的手工操作,只需要实现如下的三个功能:
对象识别:手工测试中点击鼠标和键盘是必须的操作,使用工具来做测试则需要首先找到它应该点哪个对象,应该在哪个文本框中输入值。
检查点:检查点就是期望结果,我们将期望结果写入检查点,运行过程中工具将实际结果与检查点进行对比来决定测试是否成功,代替人工判断。
参数化:为了实现的代码的重用和不同的输入,我们使用参数化来完成并可提升测试效率。
当前流行的自动化测试工具有很多,对每种测试工具的功能和特性有个大体的了解,才能帮助测试人员从一开始就知道哪一款测试工具适合自己的项目,从而保证测试效率。
4.1 功能测试工具
1)Win Runner
Win Runner是一种企业级的用户检验应用程序是否如期运行的功能测试工具。通过自动捕获,检验和重复用户交互的操作,Win Runner能够辨认缺陷并且确保那些跨越多个应用程序和数据库的业务流程在初次发布时就能避免出现故障,并且可以长期可靠运行。
用Win Runner创建一个此时,你只需要记录下一个标准的业务流程,Win Runner直观的记录流程能让任何人在GUI上点击鼠标就可建立测试。在记录一个测试的过程中,可插入检查点,在查询潜在错误的同时,比较预想和实际的测试结果。在插入检查点后,Win Runner会收集一套性能指标,在测试运行时对其验证。
Win Runner执行测试是,它会自动操作应用程序,他的意外处理功能为测试排除干扰,包括消息和警报。一旦测试运行后,Win Runner的互动式的报告工具通过提供详尽的,易读的报告,其中会列出的测试中发现的差错和出错的位置。
2)Slik Test
Slik Test是用于企业级应用进行功能测试的产品,可用于测试Web,Java或是传统的C/S结构,进行自动化的功能测试和回归测试的工具。
Slik Test主要特点:
跨浏览器和跨平台测试:Slik Test通过使用Document Object Model(DOM)技术,确保测试脚本在不同平台,不通浏览器下具有可移植性,以提高测试效率。
使用4Test语言进行强力测试:Slik Test的4Test是面向对象的第四代语言,特别适用于复杂测试。Slik Test中的所有测试案例,无论是录制生成或者脚本生成,均可使用4Test语言创建。4Test语言提供了大量的命令,数据类型和函数,允许用户通过循环和分支结构扩展测试用例的范围,也可以在测试用例中包含例外处理,从而保证脚本的强壮性。
分布式应用的几种测试:Slik Test的分布式测试结构,可以同时跨越Windows和UNIX前端、浏览器以及基于Java的网络系统环境运行同一个测试。
对质量过程的有效管理:Slik Test提供了夸多平台、开发环境、多浏览器的测试计划、开发、执行及结果报告。通过Slik Test,可以共享测试计划、词汇、测试案例等。
4.2 性能测试工具
Load Runner是一种预测系统行为和性能的负载测试工具。通过模拟成千上万名用户和实施实时性能监测来确认和查找问题,Load Runner能够对整个企业架构进行测试。通过使用Load Runner,企业能自大限度地缩短测试时间,优化性能和加速应用系统的发布周期,Load Runner通过模拟实际用户的操作行为和实际实时性能监测,来帮助测试人员更快地确认和查找问题。
Load Runner中的Virtual User Generator引擎,能很简便地创建起系统负载。用Virtual User Generator建立测试脚本后,可以开始对其进行参数化操作,从而满足多套数据的测试,更精确的反应工作负载。
Load Runner内含的实时监测器,可以实时显示交互的性能数据,从而从客户和服务器双方面评估这些系统组件的运行性能,以便更快的发现问题。一旦测试完毕,Load Runner首先汇总所有的测试数据,通过提供高级分析和汇报能力,以便迅速查找到性能问题追溯原由。
5 总结
随着软件业的发展,人们对软件质量的要求的不断提高,无论从工程上还是实验系统阶段,软件自动化测试都会收到越来越多的关注和推广,软件应用系统的多样性,决定了软件自动化测试的多样性,这也是正是客观世界的体现。
参考文献
[1]Patton R.软件测试[M].北京:机械工程出版社,2008.
[2]张茂林.软件自动测试的研究与程序实现[J].北京航空航天大学学报,1997(1).
[3]杨凡德,李小将,闫舒.GUI自动测试工具设计与实现[J].装备指挥技术学院学报,2003(3).
[4]陈志宏.测试用例自动生成方法的研究与应用[D].天津:天津大学,2004.
[5]王光源.Web应用的自动化测试[D].济南:山东大学,2006.
[6]张忠林,马海云,贾利敏.软件测试的一种数学简化方法[J].计算机应用与软件,2008(4).
[7]Kaner C,Jack F.Testing Computer Software[M].John wiley&Sons Inc.
[8]于劲松,李行善.下一代自动测试系统体系结构与关键技术[J].计算机测量与控制,2005(1).
[9]张志霞.基于GUI的C/S系统软件测试自动化技术研究与实现[D].南京:南京航空航天大学,2004.
浅析软件测试技术 篇10
关键词:软件测试;手机测试;软件质量
一、引言
随着软件规模的增大,软件的复杂程度也越来越大,与其他系统的接口不断增多,导致软件开发中出现错误或缺陷的机会越来越多,市场对软件质量重要性的认识逐渐增强。1983年,在IEEE提出的软件工程标准术语中给软件测试下的定义是:“使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。”IEEE Std829-1998进一步明确软件测试是用于检测当前软件与实际设计需求间的差异的过程,具体包括了测试用例(test case,TC)集、测试过程集以及两者的组合。IEEE Std829-2008将软件测试延伸到整个软件开发生命周期中,指出软件测试是给定条件下对系统或组件的执行,以及对结果进行观察或记录的行为。
二、软件测试技术概述
软件测试在软件生命周期中横跨两个阶段,通常在编写出每一个模块之后就需要对它做必要的测试(称为单元测试)。编码和单元测试属于软件生命周期中的同一个阶段。在结束这个阶段后对软件系统还要进行各种综合测试,如集成测试、系统测试、性能测试和配置测试,这是软件生命周期的另一个独立阶段,即测试阶段。软件测试的原则应把“尽早和不断地进行软件测试”作为软件开发者的座右铭,实践证明,单元测试能够尽早发现问题,减少后期测试的错误量。经验表明,测试后程序残存的错误数目与该程序中已发现的错误数目或检错率成正比。
1.软件测试的主要方法
(1)黑箱测试(black-box testing),也称黑盒测试,是软件测试方法,测试应用程序的功能,而不是其内部结构或运作。测试者不需具备应用程序的代码、内部结构和编程语言的专门知识。测试者只需知道什么是系统应该做的事,即当键入一个特定的输入,可得到一定的输出。测试案例是依应用系统应该做的功能,照规范、规格或要求等设计。测试者选择有效输入和无效输入来验证是否正确输出。此测试方法可适合大部分的软件测试,如单元测试(unit testing)、集成测试(integration testing)以及系统测试(system testing)。(2)白箱测试(white-box testing,又称透明盒测试glass box testing、结构测试structural testing等)是一个测试软件的方法,测试应用程序的内部结构或运作,而不是测试应用程序的功能(即黑箱测试)。在白箱测试时,以编程语言的角度来设计测试案例。测试者输入数据验证数据流在程序中的流动路径,并确定适当的输出,类似测试电路中的节点。白箱测试可以应用于单元测试(unit testing)、集成测试(integration testing)和系统的软件测试流程,可测试在集成过程中每一单元之间的路径,或者主系统跟子系统中的测试。尽管这种测试的方法可以发现许多的错误或问题,它可能无法检测未使用部分的规范。
2.软件测试的主要类型
(1)功能测试——按照测试软件的各个功能划分进行有条理的测试。在功能测试部分要保证测试项覆盖所有功能和各种功能条件组合。(2)系统测试——对一个完整的软件以用户的角度来进行测试。系统测试和功能测试的区别是,系统测试利用的所有测试数据和测试的方法都要模拟成和用户的实际使用环境完全一样,测试的软件也是经过系统集成以后的完整软件系统,而不是在功能测试阶段利用的每个功能模块单独编译后生成的可执行程序。(3)极限值测试——对软件在各种特殊条件、特殊环境下能否正常运行和软件的性能进行测试。特殊条件一般指的是软件规定的最大值、最小值以及在超过最大、最小值条件下的测试。特殊环境一般指的是软件运行的机器处于CPU高负荷或是网络高负荷状态下的测试,根据软件的不同,特殊环境也有不同。(4)性能测试——对软件性能的评价。简单地说,软件性能衡量的是软件具有的响应及时度能力。因此,性能测试是采用测试手段对软件的响应及时性进行评价的一种方式。根据软件的不同类型,性能测试的侧重点也不同。(5)压力测试。压力测试常常和性能测试相混淆。它们的主要不同点是,压力测试要求进行超过规定性能指标的测试。如一个网站设计容量是100个人同时点击,压力测试就要是采用120个同时点击的条件测试。压力测试的通常判断准则:系统能够恢复,压力过程中不要有明显性能下降。
3.软件测试的主要阶段
(1)单元测试是对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,测试的对象是软件设计的最小单位——模块。(2)集成测试也称综合测试、组装测试、联合测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。其主要目的是检查软件单位之间的接口是否正确,集成测试的对象是已经经过单元测试的模块。(3)系统测试主要包括功能测试、界面测试、可靠性测试、易用性测试、性能测试。功能测试主要针对包括功能可用性、功能实现程度(功能流程和业务流程、数据处理和业务数据处理)方面的测试。(4)回归测试指在软件维护阶段,为了检测代码修改而引入的错误所进行的测试活动。回归测试是软件维护阶段的重要工作,有研究表明,回归测试带来的耗费占软件生命周期的1/3总费用以上。与普通的测试不同,在回归测试过程开始的时候,测试者有一个完整的测试用例集可供使用,因此,如何根据代码的修改情况对已有测试用例集进行有效的复用是回归测试研究的重要方向。此外,回归测试的研究方向还涉及自动化工具,面向对象回归测试,测试用例优先级,回归测试用例补充生成等。
三、主要测试工具
软件测试工具是通过一些工具能够使软件的一些简单问题直观地显示在读者的面前,这样能使测试人员更好地找出软件错误所在。软件测试工具分为自动化软件测试工具和测试管理工具。一个好的软件测试工具和测试管理工具结合起来使用将会使软件测试效率大大提高。这里主要介绍以下两种测试工具:
QTP是一个B/S系统的自动化功能测试的利器,是软件程序测试工具。Mercury的自动化功能测试软件QuickTest Professional,可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。Mercury QuickTest Pro 是一款先进的自动化测试解决方案,用于创建功能和回归测试。它自动捕获、验证和重放用户的交互行为。Mercury QuickTest Pro为每一个重要软件应用和环境提供功能和回归测试自动化的行业最佳解决方案。
LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。通过使用LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner 是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助人们更快地查找和发现问题。此外,它还能支持广泛的协议和技术,为特殊环境提供特殊的解决方案。
四、总结
软件测试在软件质量保证活动中越来越发挥着重要的作用。然而,软件测试是一项费时、费力并且单调乏味的活动,测试人员需要设计、执行、分析大量的测试用例。将自动化引入软件测试领域能有效地减轻人员的劳动强度,提高测试的效率和质量,从而节省软件开发的成本,提高软件的质量。随着软件产业的发展,软件产品的质量控制与质量管理正逐渐成为软件企业生存与发展的核心。
参考文献:
[1]杜丽洁.基于QTP自动化测试框架的开发与应用[D].武汉:武汉理工大学,2012.
软件自动化测试 篇11
软件测试是使用人工或自动化手段来运行、检测软件系统的过程, 是软件开发必不可少的环节和软件工程实践的重要组成部分, 自动化测试是软件测试发展的必然结果。成功实施自动化测试的关键是选用适合自己测试项目的自动化测试工具, 然而, 不管选用何种测试工具, 都会带来相应的测试成本:商业测试工具昂贵, 开源测试工具虽然免费, 但却拥有较高的使用成本, 且免费的测试工具性能比较单一, 无法支持整个自动化测试的实施, 有时, 即使在付出了相应的测试成本后, 测试效果依然不如人意。
因此, 开发适合自己项目的特定的测试工具将是一种行之有效的解决方案。其中“猴子”自动化测试工具也正是在这样的背景中提出的。由于项目资源投入有限, 大型而通用的测试工具的开发和维护需要耗费项目组不少的资源, 而具有简单功能的“笨猴子”的开发成本相对于收益是可以接受的。本文将在分析自动化测试的主要技术后给出一个“猴子”自动化测试工具的设计步骤和实现的关键技术, 其中的方法可以为将来设计功能更强大的“猴子”测试工具奠定一定的基础。
1 自动化测试技术
1.1 自动化测试优势
针对手工测试, 自动化测试有着很强的优势, 即借助计算机的计算能力可以重复、不知疲倦地运行, 对数据能进行精确的、大批量的比较, 而且不会出错。因此, 自动化测试适宜用在需要重复执行机械化的界面操作、计算、数值比较、搜索等方面。应该充分利用自动化测试工具的高效率来帮助测试人员完成一些基本测试用例的执行, 从而实现更加快速的回归测试, 并提高测试的覆盖率。虽然, 自动化测试的目的是帮助人工, 但是手工测试仍有很多不可替代的地方, 例如很多数据的正确性、界面是否美观、业务逻辑的满足程度等都离不开测试人员的人工判断。因此, 为了让软件测试更加顺利和取得更好的效果, 通常是自动化测试和人工测试相结合, 让其充分发挥各自的优势。
1.2 自动化测试工具选择
自动化测试工具可以将复杂的测试工作自动化或半自动化, 减少测试工作量, 提高测试工作效率、减少测试开销, 所以需要选择一个合适的且满足企业信息系统工程环境的自动化测试工具。从开发成本来说, 自动化测试工具分为商业、开源和自制的测试工具。根据测试方法的不同, 自动化测试工具分为白盒测试工具、黑盒测试工具和测试管理工具。工具和软件开发过程中相关活动的关系如图1所示。
(1) 商业测试工具。目前很多软件公司都具有一套自动化测试工具。白盒测试工具的代表有:Telelogic公司的Logiscope, PR公司的PRQA, Compuware公司的DevPartner, Rational公司的Purify, 其中前两个是静态测试工具, 后两个是动态测试工具。黑盒测试工具的代表有:Rational公司的TeamTest和Robot, Compuware公司的QACenter, Mercury Interactive的WinRunner、LoadRunner和QTP等。测试管理工具的代表有Rational公司的TeamManager、Compuware公司的TrackRecord等。除此之外, 还有专用于性能测试的工具有Radview公司的WebLoad, Microsoft公司的WebStress等工具, 针对数据库测试的TestBytes对应用性能进行优化的EcoScope等工具。
虽然, 很多大型软件公司都有一套自动化测试工具, 但没有一种通用的测试工具可以找到任何软件中的所有Bug。应该根据被测软件的特性来进行合理的选择, 此外, 上述的测试工具价格都相对较高, 从整个软件开发的成本来说也是需要考虑的。
(2) 开源测试工具。开源测试工具作为开源软件的重要组成部分, 但开源并不意味着完全免费, 开源测试工具同样需要考虑使用成本。开源测试工具相对于商业测试工具的优势:相对成本较低, 可以根据实际需求对其进行个性化改造。引入开源测试工具也需要考虑成本、选型等问题。
常见的测试管理类开源测试工具有:Bugzilla、Mantis、BugFree。单元测试类开源测试工具有:Nunit、Nmock等。性能测试类开源测试工具有:Jmeter、TestMaker等。自动化功能测试类开源测试工具有:Abbot Java GUI Test Framework、White、Watir等。
(3) 自制测试工具。目前, 很多软件测试组织其实都已经具备了自己动手开发测试工具的条件。自己动手开发测试工具的优势主要有:购买成本为0;可以有针对性地开发自己需要的那部分功能;可以自己定制需要的功能, 随时修改, 实现个性化;可扩展性好, 可以随时增加新功能;可以充分利用项目组熟悉的语言来开发, 从而利用自己的技术优势;可以使用自己熟悉的脚本语言, 从而不必使用商业工具提供的“厂商脚本语言”。
虽然, 自制测试工具有很多好处, 但是也必须考虑随之而来的成本问题。自制测试工具开发的成本主要是指开发时间、人员和维护方面的成本, 还需考虑测试工具的实用性, 不需要做一个大而全的、面面俱到的工具。因此, 通常应当将自制测试工具最好定位在辅助测试、用于解决专门的问题、迫切的问题。在商用工具价格昂贵、开源测试工具也不适用的时候, 可以考虑自制测试工具。本文下一章节将着重介绍一个“猴子”测试工具的设计与开发的关键技术。
2“猴子”测试工具设计与实现
2.1“猴子”测试技术的概念
所谓的猴子测试 (Monkey Test) , 即搞怪测试、随机测试, 通俗来讲是一种系统对信号因子输入稳健性的测试方法, 一般用于计算机软件程序这样的逻辑严密性要求较高的系统。测试者可以进行各种稀奇古怪的操作模式, 用以测试软件的稳定度。该测试技术泛指任何形式的, 不需要任何人工干预的, 随机进行的自动化测试。这种类型的工具之所以称为“猴子”是源于“无限猴子定理”, 即“让一只猴子一直在打字机上按键, 最终能完成莎士比亚的全部工作”。由于系统的“可重复性”以及系统输入因子“有限性”和“单纯性”, “猴子”测试被广泛用于软件Bug测试。
根据“猴子”测试的原理, 有很多可以实现“猴子”测试的方法, 一个简单的实现方式是一个能随机产生鼠标点击和键盘输入来模拟用户操作的“猴子”测试工具。而复杂的实现方式是实现一个“聪明”的“猴子”, 构建聪明“猴子”测试工具需要开发和测试资源, 而最昂贵的代价是创建模型或状态表[2]。
2.2“猴子”测试工具开发使用的技术
一个“猴子”测试工具的开发主要是语言的选择和接口驱动的设计。本文基于对被测软件 (C#语言开发的软件) 的考虑, 故选用了C#语言。“猴子”测试工具的实现原理是利用产生鼠标点击和键盘输入事件来模拟用户操作, 而Windows GUI驱动是直接驱动Windows底层的API完成查找GUI控件、驱动鼠标和键盘操作的方式实现对软件的测试。故可以利用Windows系统提供的Windows API完成工具的实现。
2.3“猴子”测试工具的具体实现
(1) 功能简述。该“猴子”测试工具主要功能:随机点击界面, 输入随机字符和键盘按键, 对于某些类型 (按钮、可编辑框等) 的控件做出特定的动作, 监视被测试程序的进程信息, 能识别出程序是否出现异常, 持续记录内存和CPU使用情况, 方便发现是否存在内存泄漏问题, 持续截屏, 方便追溯和问题定位。
(2) 设计原理。“猴子”测试的工作原理是利用测试工具随机产生键盘敲击和鼠标单击事件。因此, 利用Windows系统的本机原生函数实现对键盘输入, 鼠标点击的模拟, 从而创建一个”猴子”进行简单测试。
(3) 设计流程。本文的“猴子”测试工具的设计流程如图2所示。
在设计过程中, 鼠标操作功能和截屏功能是开发的难点, “猴子”动作规则的设计则是整个工具的核心。
(4) 具体实现。界面设计:“猴子”工具的界面主要包含Bug报告存储地址选择、源字符集、被测程序选择、测试时间间隔选择等。作为一个运用于软件开发过程中以测试相对应的项目而实现的辅助性小工具, 其界面的实现不需要太复杂的功能。
实现鼠标操作功能主要有以下步骤:
首先, 引入鼠标触发事件的函数。该函数原型为:
其次, 设计鼠标相关操作的类MouseAPI, 该类定义了鼠标的各种操作, 考虑到篇幅有限, 这里仅列出该类的主要函数原型及功能说明, 如表1所示。
(3) 键盘敲击功能的实现。在“猴子”工具的实现中, 键盘操作的要点是键盘输入字符串的设计, 本文是将键盘输入的字符集储存于一个文本文件中, 该文件会在“猴子”开始工作时被读入程序并储存于一个字符串数组中, 然后以随机截取数组中字符串的方式发送给被测程序, 以实现对键盘输入的模拟。
(4) 截屏功能的实现。为了记录“猴子”测试的过程, 方便发现缺陷或出现异常时能找回发生的现场, 通过屏幕截图可以清楚地知道“猴子”测试工具点击了什么位置导致问题的出现。本文是将截屏相关的函数封装于类名为GDIAPI的类文件中, 其类设计如表2所示。
该功能的实现是利用了Windows操作系统本身提供的图形处理的相关函数, 将显示设备中屏幕拷贝到内存缓冲区, 然后生成一个存储了当前屏幕的位图对象。当“猴子”工作时调用CaptureScreen方法, 将位图对象保存在指定的目录下。
(5) 记录被测程序的进程信息。通过查看被测程序在运行过程中使用的资源情况可以判断程序是否出现内存泄漏问题, 在点击了某控件后出现Bug等信息, 可以有效地帮助被测程序的纠正。该功能主要是实现Process类。该类提供对本地和远程进程的访问并能够启动和停止本地系统进程。其主要相关属性及函数如表3所示。
实现分析:通过新建一个Process类来启动被测试的应用程序, 并利用Process类提供的WorkingSet64、VirualMemorySize64等属性获得被测程序的资源使用状况, 将这些信息存入一个StringBuilder对象中, 在“猴子”停止工作时将其写入一个CSV文件中。
(6) “猴子”动作规则。将该工具之所以用“猴子”来命名, 最关键的是它具有猴子天性好动的特性, “猴子”的动作规则主要包含:随机完成鼠标移动和键盘输入、具备一些智能、连续不断地完成一些指定动作。
“猴子”随机完成鼠标移动和键盘输入实现分析:首先获取某个范围内是随机数, 然后通过其得到一个当前屏幕中任何一个点的坐标, 接着实现鼠标的随机移动。最后使用将指定的字符串数组中某个字符串以键盘输入的方式发送给应用程序。
让“猴子”具备一些智能实现分析:首先将获取光标所在点的窗口类的类名与指定的控件类类名进行比较, 进而判断当前鼠标点击的控件, 然后做出相应的动作。使用雷同的方法, “猴子”可以识别出按钮控件、静态控件, 如标签、出错提示对话框等控件并做出相对应的动作。
让“猴子”连续不断地完成一些指定的动作的实现分析:为使“猴子”能连续不断地完成指定动作, 利用Timer控件实现一个计时器, 然后通过一个按钮来控制定时器的启动和停止。而“猴子”工作时的所有动作规则都被封装于Timer控件的Tick时间中, 这样, 在每一个指定的时间段, “猴子”便会执行一次指定动作。
3 实验及结果分析
(1) 被测对象的选择。为了有效地完成对“猴子”测试工具的有效性检查, 被测对象的选择应该是拥有可编辑控件和若干按钮控件的小型软件。本次测试选了一个仅具有加、减、乘、除的简单计算器。
(2) 实验过程。整个实验过程分为如下步骤进行: (1) 设置测试报告存储的位置; (2) 设置键盘输入的字符集。指定字符集所在的文本文件的位置, 指定键盘输入的字符串; (3) 指定被测程序; (4) 根据测试的需要, 设置“猴子”操作程序的时间间隔; (5) 启动被测程序; (6) 开始“猴子”测试。
(3) 测试结果及分析。考虑到篇幅有限, 这里仅给出部分测试结果, 分别如图3、图4、图5所示。
通过对实现的“猴子”测试工具的实验, 该工具达到预期效果, 可以实现一定的自动化测试。“猴子”测试工具开始工作后, “猴子”每隔一段指定的时间就会随机点击被测程序主界面, 并在识别到可编辑控件时会随机键入某些字符串, 字符串是事先准备好的字符集文本文件中的一部分字符。在连续进行的多次试验中, 基本上, 在“猴子”进行操作了若干有限步操作后, 被测程序的bug便将会被检查出来。当测试进行了一段时间, 被测程序的大部分Bug便会被找出并纠正。这之后, 再进行“猴子”测试时, Bug的发现变得越来越困难。
4 结语
软件测试是软件工程实践中的重要组成部分, 自动化测试是软件测试发展的大方向。软件自动化测试实施的关键是自动化工具的选用, 而当所有的工具都不适用, 或自己开发一个跟项目相适应的工具比应用现有的工具更能节约成本时, 自制一个自动化测试工具便也是一种可供选择的方法。本文设计的“猴子”测试工具是对应于简单的软件进行测试“猴子”原型, 针对具体的项目程序的环境, 可以进一步完善“猴子”, 使其更加智能, 从而能发现更多的Bug。
参考文献
[1]张建, 徐宝文.软件测试专辑前言[J].计算机学报, 2011 (6) .
[2]陈技能.软件测试技术大全[M].北京:人民邮电出版社, 2011.
[3]胡铮.软件自动化测试工具实用技术[M].北京:科学出版社, 2011.
[4]JAMES BENDER, JEFF MCWHERTER.C#测试驱动开发[M].北京:清华大学出版社, 2012.
[5]徐进.自动化软件测试的分析[J].信息技术, 2010 (3)
[6]单锦辉, 姜瑛, 孙萍.软件测试研究进展[J].北京大学学报:自然科学版, 2005 (1) .
[7]王雅文, 宫云战, 杨朝红.软件测试工具综述[J].北京化工大学学报:自然科学版, 2007 (S1) .
[8]石红霞.软件测试运行规划及自动化测试工具的研究[D].成都:成都理工大学, 2011.
[9]宋洁.软件测试技术及自动测试工具的实现[D].北京:北京邮电大学, 2007.
[10]XIAO HUA-BO, HUANG SHU-LI.Research in test case method in software testing[C].ICEET2012, HongKong, 2012.
[11]CAO PING, DONG ZHAO, LIU KE.An optimal release policy for software testing process[C].Academy of Mathematics and Systems Science, 2010.
【软件自动化测试】推荐阅读:
自动化设计软件07-25
新型自动站软件10-27
自动控制系统软件开发09-12
自动控制软件系统设计11-07
软件质量与软件测试05-30
测试软件测试11-17
软件测试中回归测试08-18
自动化测试07-21
软件开发测试06-12
软件测试性07-06