李科华
【摘 要】软件的开发需要多次、不断地对软件进行完善,这个完善的过程就是软件测试的过程。文章针对目前流行的测试方法进行了分析,提出了不同类型的软件最佳的测试方案。
【关键词】软件测试;测试方法;黑盒测试
【中图分类号】TP306 【文献标识码】A 【文章编号】1672-5158(2013)03-0026-01
随着软件产业的迅速发展,软件产品的质量已成为软件企业生存与发展的关键。软件缺陷自软件诞生的那一日起就跟随着出现,软件测试就应运而生。随着软件内容和结构的不断丰富,软件缺陷也日趋多样化,引起更为严重的质量问题。软件测试方法的研究正是本着提高软件质量,降低软件缺陷的影响。随着人们对软件质量的重视,软件测试也不断得到加强和持续发展。
1、软件测试的定义
软件测试应该是以查找软件缺陷为目标的一种过程,测试用例设计和缺陷管理是软件测试中提高缺陷查找效率和缺陷处理效率的两个有效手段。软件测试依靠的是强大的逻辑和条理性来完成工作,也同时存在着一定的风险。软件的应用形式多样,输出和实现功能的方式也不止一种,而产品设计中缺乏客观的标准,就使得软件缺陷的标准也变的多样,没有任何一种方式能够对软件进行完全测试。这样,就无法通过软件测试显示隐藏的软件缺陷,只能尽量查找软件缺陷,找到的软件缺陷越多,说明软件本身的缺陷就越多,同时尚有在测试过程中被发现和断定的缺陷,这也是软件测试的局限性。
2、软件测试的基本方法
软件测试过程包含几个阶段:测试需求的分析和确定;测试计划;测试执行;测试记录和跟踪;回归测试;测试总结和报告。狭义的测试是指在代码编写完成后对代码进行测试,而广义的测试开始于需求阶段,伴随着设计、实现阶段。如测试需求规格说明书,测试设计框架等。可以从不同角度来划分软件测试方法。
2.1静态测试和动态测试
软件测试从是否需要执行被测软件的角度,可以将软件测试分为静态测试和动态测试。静态测试是指依据需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行,对软件进行分析、检查和测试,不实际运行被测试的软件,约可找出30%到70%的逻辑设计错误。这种方式不通过程序运行就能够寻找代码中的缺陷或对程序中的代码进行评估,可以由人来操作,发挥了人的逻辑思维的优势或测试经验,能够批量性地发现问题,并直接定位到缺陷或错误的具体位置。静态测试可以分为静态分析和代码走查。静态分析是一种计算机辅助静态分析方法。主要对程序进行控制流分析、数据流分析、接口分析和表达式分析等。静态分析的对象是计算机程序,程序设计语言不同,相应的静态分析工具也不尽相同。代码走查是一种人工测试方法,它一般依靠有经验的程序员根据需求分析、设计规格等来执行。动态测试是指通过运行软件来检验软件的动态行为和运行结果的正确性。动态测试有两个基本要素:被测试程序和测试数据。
必须生成测试数据来运行被测试程序,取得程序运行的真实情况、动态情况,进而进行分析测试质量依赖于测试数据。
2.2黑盒测试、白盒测试、灰盒测试
从测试是否针对系统的内部结构和具体实现算法来看,可以将软件测试分为黑盒测试、白盒测试、灰盒测试。
黑盒测试又称功能测试,数据驱动的测试或者基于规格说明书的测试。黑盒测试可以从软件的功能为起始,根据功能的需求说明测试所用的方式,并依据该方式的需求来运行被测试的程序。从名字上来解释,就是将软件看成是不透明的黑盒子,对于盒子内部的结构不理会,只关注软件的实用功能,并对这些功能进行测试。
白盒测试又称结构测试,玻璃盒测试或基于覆盖的测试。相比较于黑盒测试,它更关注于软件内部逻辑结构,其测试的重点是测试用例的覆盖程序结构的程度。白盒测试,是将软件比作透明可见的盒子,测试人员可以根据程序内部的逻辑结构来设计测试用例,来测试程序的逻辑路径。
灰盒测试,也称跟踪法测试,是指介于白盒测试和黑盒测试之间的一种测试方法,它关注输出对于输入的正确性,同时也关注内部结构形式的程度,它跟踪程序的运行过程,特别是输入数据在程序中的“流程”。比如,测试人员输入数据后,软件会将其转换为代码并通信至服务器,服务器经过一系列的处理,将数据传送给客户端,并最终显示给测试者。灰盒测试能够对整体的过程进行追踪,对每一步的数据进行测试。。但较白盒测试而言,灰盒测试没有深入解析程序的结构,但也不像黑盒测试那样只关注输入和输出,它也关心程序中间的某些流程是否正确。
3、软件测试用例设计
传统软件测试用例设计是从软件的各个模块的算法细节得出的,而面向对象的软件测试用例则着眼于适当的操作序列,以实现对类的说明,主要有基于故障的测试、基于脚本的测试和类层次的分割测试等形式。
3.1基于故障的测试
软件系统最终是以实现用户的需求为目的的。基于故障的测试是从模型分析开始,逐步来测试软件可能发生的故障,为了确定故障的类型和存在方式,一般设计用例去执行代码。基于故障的测试核心问题是测试者怎么来判定错误的性质。“可能的错误”可以是意料之外的结果,不正当的操作,错误的引用等。如果是操作不当引起的错误或故障还需要对操作进行检查,排除操作因素引起的故障。这种方法除用于操作测试外,还可用于属性测试,确定其对于不同类型对象行为是否赋予了正确的属性值。
3.2基于脚本的测试
基于脚本的测试主要关注用户的需求,并从用户任务中找出用户要做什么及去执行。这种基于脚本的测试有助于在一个单元测试情况下检查多重系统,所以基于脚本用例测试比基于故障测试更实际也更复杂。
3.3类层次的分割测试
类层次的分割测试可以减少用完全相同的方式检查类测试用例的数目,这与传统测试中的等价类划分测试很相似。类层次的分割测试主要分为:基于状态的分割,按类操作是否改变类的状态来分割;基于属性的分割,按类操作所用到的属性来分割;基于类型的分割,按完成的功能分割。
4、结语
软件设计中出现的缺陷是无法完全消除的,却可以通过软件测试来降低缺陷的发生,随着市场对软件质量要求的提高,软件测试在软件开发中的地位越来越重要。软件测试的最终目的不是为了找出软件设计中的错误和故障,而是通过测试来发现缺陷,找出缺陷的分布特征和出现的规律,以期在新的开发项目中寻找更优的方式来避免缺陷的出现,改进设计结构,同时也能够通过设计有针对性的检测方法,改善软件测试的有效性。
参考文献
[1]侯衍龙.基于UML的面向对象建模技术与应用[D].南京,南京航空航天大学,2002
[2]朱少民.软件测试方法和技术[M].北京:清华大学出版社,2005