广州广日电气设备有限公司511447
摘要:随着近年来电子信息技术的迅猛发展,如今,软件测试技术日新月异,各种软件测试方法也不断推陈出新,大量的文献资料都对这些方法做了深入的探讨和研究,然而我们发现这些文档基本都是基于理论层次的研究,其中的测试实例也是一些简单的小程序。因此,要将理论转化为实际生产力,需要进一步将抽象的软件测试方法与具体的软件工程项目结合起来。在此背景下,我们以一个实际软件产品为基础,通过产生大量测试数据对不同测试方法生成测试用例的能力进行比较,总结出适合特定软件的简单高效的测试方法。
关键词:ATE软件;测试系统;设计及性能
前言:本文的目的在于在于以实际产品为对象,通过测试实践活动,从面向过程软件测试方法、面向对象软件测试模型、类测试、交互测试、系统测试及测试用例用例设计、自动测试等多个角度对诸如功能图分析、边界值分析、等价类划分、状态图以及有限状态机等多种软件测试方法进行研究和比较,最后总结出适用于通用自动测试设备(ATE)系统软件的测试方法。
一、ATE软件的概念
ATE(AutomaticTestingEquipment),即自动测试设备,是指测试硬件和它自己的操作系统软件,而这个操作系统软件(有时候叫做测试流程控制程序)被统称为ATE软件。恰似神奇的自动“示波器”。复杂的ATE系统的设计领域,包括了机械、电源、冷却、工业安全、模拟和数字电子学以及软件。
ATE是一种非常先进灵活的方案,可以满足多种产品的程序测试要求。微型计算机控制的仪器出现以后,ATE的结构设计直接针对测试需要,ATE包括系统集成、信号连通增值软硬件、面向测试的语言和图形用户界面等。
二、自动测试设备(ATE)系统软件的测试现状
目前很多软件开发机构都面临这样一个问题,那就是开发出来的软件产品的质量一直得不到很好的保证,很多产品在正式交付用户使用后总是存在诸多问题。其中很重要的原因是软件开发的管理水平不高,尤其是忽视了对软件产品进行必要和充分的测试。一直以来,国内对于软件测试的重要性缺乏足够的认识,在对软件测试的理解上也存在一些误区,例如有的企业直到编码阶段后期才开始测试,有的采用谁开发谁测试或者交叉测试的办法,有的甚至连测试这一环节都没有,产品的质量当然无法提高。ISO9000质量体系认证越来越得到软、硬件公司的重视,而测试是ISO9000中质量保证实施的一个重要环节,中国加入WTO后越来越多的企业的产品要面对国际市场优秀产品的竞争,产品质量的保证是生存之本。
资料统计表明,在国外许多典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。因此,测试对于软件生产来说是必需的,问题是我们应该思考“采用什么方法、如何安排测试”。从本质上讲,对软件测试方法的研究其实是对生成测试用例的方法研究。
三、ATE软件的综合测试策略
在经历了诸多由于未经测试或缺乏测试造成的失败案例之后,人们逐渐认识到软件测试的重要性。迄今为止已经形成很多较为成熟、通用的软件测试方法和技术理论,然而理论只是理论,在实际应用中会出现许多意想不到的变化致使这些理论不能充分发挥其指导作用。并且正是由于这些理论的通用性而削弱了它的针对性。软件测试策略会受到诸如开发工具、软件体系结构、软件应用行业、测试资源等方方面面的因素的影响。所以,要测试一个具体的软件,必须结合其特点制定特定的测试计划和测试策略并选择合适的质量评估指标体系。面向过程的软件测试思想是所有软件测试方法的基础。无论采用何种语言开发的软件,其测试流程基本相似,只是各测试阶段采用的技术和方法稍有区别。首先我们来看一下瀑布式的测试模型:
最传统的测试模型是完成一部分编码之后进行单元测试,随着产品框架日渐完善,再按顺序执行集成、系统测试。而实践提示我们测试越早介入对于保证软件质量越有效。据有关机构研究表明,在开发周期中,每推后一步实施错误检查,成本就会增加10%。应着眼于整个软件生存期,特别是着眼于编码以前各开发阶段的测试工作,例如制定整个产品的系统测试计划,对规格说明书、概要设计模型、详细设计阶段形成的算法等对象的测试,这些测试多为静态测试。这就要突破原来对测试的理解,即:测试工作在编码之后才开始的。图1是在简单V模型基础上进行了改良的测试模型。
软件测试技术大体上分为两类:白盒测试和黑盒测试(这两种方法在执行时又包括静态测试、动态测试等多种手段)。白盒测试又称结构测试、逻辑驱动测试或基于程序本身的测试,也可称为程序员测试,它把测试对象看成是一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员都是公开的。白盒测试的方法有逻辑覆盖(语句覆盖、判定覆盖、判定
-条件覆盖、条件组合覆盖、路径覆盖)、基本路径测试等。黑盒测试又称功能测试、数据驱动测试或基于规格说明的测试,也可被称为用户测试,它把测试的对象看成一个黑盒子,不考虑程序内部的逻辑结构和内部特性,主要在软件的接口处进行测试,主要测试软件的功能。黑盒测试的方法包括等价类划分法、边界值分析、错误推测法、因果图、功能图等。两种测试方法从不同的角度出发,反映了软件的不同侧面,也适用于不同的开发环境。一般来说单元阶段偏重使用白盒测试,而系统阶段完全使用黑盒测试,有时需要根据具体情况将两者结合使用。
图1软件开发生命周期-改进的V模型
三、ATE软件自动测试类型
3.1嵌入型软件自动化测试
嵌入型的被测试软件在实际应用中,一般为软件系统所调用,自己不能独立运行,对于需要进行专门测试的软件,要求具有明确的输入输出接口。测试软件负责被测试软件运行环境的建立,为被测试软件制造测试输入,接收被测试软件的测试结果输出,完成测试结果的比较等。嵌入型被测试软件要求具备自维护性,即一旦测试软件根据接口要求建立了软件运行环境,测试软件嵌入的被测试软件要求能够按照实际运行环境相同的方式进行运行,两者效果应该完全相同。由于可能涉及开发平台的问题,嵌入型被测试软件应该尽可能采用标准函数,以保证可移植性,并且除了明确定义的输入输出接口之外,不应该再有其他的对外操作接口如操作硬件寄存器等。
由于被测试软件的输入和输出均由测试软件负责处理,为便于回归测试和测试用例管理,一般测试软件需要制定文件脚本,以便用于测试自动化。
3.2非嵌入型软件自动化测试
非嵌入型的被测试软件在实际应用中,一般为独立的软件系统,自己可以独立运行。一个可测试性强的软件系统,一般会提供文件脚本的输入和输出接口,测试输入既可以通过手工操作输入,也可以通过文件脚本调入,两者的运行表现完全等效,通常来说还会提供手工操作输入转储为文件脚本的功能。测试输入经软件系统运行后,测试结果要求能够输出为文件脚本,至少测试结果可以编制测试程序接入被测试软件系统获取并转换为文件脚本。
目前市场上有一些商用化的录制回放软件,可以作为测试自动化的测试输入,在这种情况下,被测试软件系统的可测试性接口的要求有所降低,测试输入接口不在成为测试自动化的必要条件,虽然没有该接口会导致可测试性的降低。但是测试结果的输出接口依然是测试自动化的必要条件,如果不能够将测试结果直接或间接转储为文件脚本,软件系统将很难或无法进行测试自动化。
对于非嵌入型被测试软件,测试用例的脚本输入和输出需要进行专门的管理,并且同样需要编制专用的测试软件对脚本输出进行测试结果比较处理,以用于测试自动化。
四、ATE软件的综合测试设计方法
4.1黑盒测试用例设计方法
黑盒测试着眼于程序外部结构,针对软件界面和软件功能进行测试。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行异常处理测试。自动测试系统通常要处理来自仪器、雷达等测试对象的大量数据,要完全模拟这些信息对自动测试系统软件进行测试几乎是不可能的,因此需要借助一些手段对测试用例进行简化处理。
图2
发现错误与测试用例数量以及新增错误与测试用例数量的关系如图2所示。从图中可以看出,虽然随着测试用例数量的增加,可能会找到更多的软件错误,但是其投入与产出的比率却逐渐下降,当测试用例的数量达到某一程度的时候会极大地降低测试工作的效率。在不影响测试充分性的基础上,要求测试人员从无限的数据组合里提取出最具代表性的部分,充分发现隐藏在软件中的错误。
4.2测试显示与功能强耦合类的方法
具备低耦合、高内聚特征的模块拥有良好的可测性,编写驱动模块和桩模块比较容易。但对某些可测性不高或测试较复杂的模块,应该用一些特殊的方法进行测试。测试显示与功能强耦合类的方法对于显示部分(GUI),尽量做到显示与控制分离。把代码移到GUI视图
的外面。然后各种GUI动作就成了模型上的简单方法调用。这样,对GUI测试者来说,通过方法调用测试功能比间接地测试功能容易得多。另一个好处是它使修改程序功能而不影响视图变得更容易。
4.3测试继承类的方法
如果被继承的操作在后代中不起作用,这就属于后代和祖先之间的交互问题。可以在测试用例时核实单元之间的交互。但不要在测试单元时测试被继承的操作。被继承的操作应该在测试用例时进行测试。
4.4测试抽象类的方法
对类的基于执行的测试需要构建一个类的实例。许多面向对象的编程语言,包括C++和Java,都支持识别抽象类的语法。测试抽象类到底具有什么意义可能并不明显。因为编程语言在语义上通常不允许创建抽象类的实例,所以测试实例没有任何意义。但是,抽象类可以被继承,而且可以创建其后代的实例。因此,测试抽象类的目的之一是确定继承是否可能,以及是否有后代类的实例;第二个目的是确定对抽象类本身的可能调用(C++中的this)是否会实现。
要测试这一点,需要让测试程序创建一个继承该抽象类的后代类。测试程序将通过测试该后代类来对单元进行测试。通常,采用为类编写源代码的方法使该类可以作为一个抽象或具体类而很容易编译,然而不一定会取得好的结果,还很容易出错。一个好的替代方案是使用指导性检查而不是基于执行的测试。
最后本文以系统级别软件测试为重点,对多种不同类型的软件测试方法进行了深入的探讨和研究,并通过大量的实例探讨了部分方法。在积累一定测试经验的基础上,我们建议,对基于面向过程思想开发的ATE系统(或基于面向对象思想开发的ATE系统中的面向过程部分)的功能测试中采用边界值分析和强健壮等价类结合生成测试用例的方法,其中等价类划分可以根据被测对象的特点在定义域空间或值域空间完成。
结束语
软件测试方法种类繁多,然而各种方法的最终目的都是生成好的测试用例,及时充分地发现软件中可能潜在的错误。在国内,软件测试研究工作仍处于初级阶段。我们所做的软件测试方法研究课题具有一定的前瞻性,为国内整个软件测试领域带来了一些新的活力,希望能对所有软件测试工程师和研究人员有所帮助。只有在大家的共同交流和互相帮助下,我国的软件测试行业才能得到蓬勃的发展。
参考文献
[1]谭浩强著.C程序设计.北京:清华大学出版社.2009.9
[2]朱站著.数据结构(C语言版).西安:西安交通大学出版社.2013.2
[3]陈华.“ATE测试软件平台”的软件测试.计算机测量与控制.2011.11
[4]CapersJones著.软件评估、基准测试与最佳实践(韩柯等译)北京:机械工业出版社.2012.4