摘要:软件测试不仅是软件开发生存周期过程中最艰巨、最复杂的任务,也是软件开发过程中的一个非常重要的阶段。软件测试的目的不仅发现软件的错误与缺陷,还对软件的质量进行度量和评估,确保软件质量,提高软件可靠性。主要从软件测试方法、原理、应用、可行性研究等方面进行分析。   

  关键词:软件测试;生存周期;软件质量 

  0引言 

  随着计算机技术的普及和推广,各类型软件广泛受到各行业人员的青睐,人们对软件产生了极大的依赖 ,随着这一趋势的不断发展,人们对软件的质量要求越来越高,如何保证软件的质量已成为软件工程领域的一项重要任务。软件质量决定了软件的寿命,软件质量关系到软件的使用与维护。任何软件在投入使用前,都要检测软件设计中的错误与缺陷,以确保软件的质量。目前,保证软件质量直接有效方法就是软件测试,通过测试寻找软件的Bug、避免软件开发过程中的缺陷、关注用户的需求、衡量软件的品质,最终目的就是保证软件质量。 

  1软件测试概述 

  软件测试的目的是以最少的测试用例集合测试出更多的程序潜在错误,降低测试效率成本,确保软件的质量,软件测试在软件生命周期占据重要地位。在软件工程学中,通过如图1所示的软件开发V 模型,可以看出软件测试按操作的先后顺序可分为单元测试、集成测试、系统测试和验收测试。软件测试是软件开发过程中最艰巨、最繁重的任务,据大量的统计数据表明,软件测试的工作量占软件开发总工作量的40%左右,有的甚至超过总工作量的一半。软件测试是在软件投入使用前,对软件需求分析、设计说明以及编码进行最终复审,是软件质量保证的关键步骤。任何项目软件测试均可用白盒测试和黑盒测试。 

   2黑盒测试 

  2.1黑盒测试概念 

  黑盒测试也称为功能测试或数据驱动测试,它是在知道程序功能的情况下,检验软件的功能模块是否能正常使用。 

  2.2黑盒测试的原理、方法和功能 

  黑盒测试着眼于程序外部结构,把程序看作一个没有打开或黑乎乎的盒子,不关心软件内部设计以及程序实现,只关心外部表现,通过观察输入与输出即可知道测试的结果。测试者只在程序接口进行测试,检查程序功能是否符合需求规格说明书的规定,程序是否能接收输入数据而产生正确的输出信息,并保持外部信息的完整性。 

  黑盒测试注重于测试软件的功能需求,测试软件功能是否达到预期目的,是否符合软件说明书的要求。黑盒测试通过黑盒测试检测软件的是否存在缺陷、功能是否被遗漏,软件的性能是否满足用户需求,软件能否接受正确的数据输入,根据用户需求得到正确的数据输出,能否保持数据完整性,是否存在初始化及终止性错误等问题,确保软件的正确性、安全性、可用性、兼容性、健壮性。 

  目前常用的黑盒测试有边界值分、析等价划分、正交试验法、错误推测法、判定表驱动法、因果图法、功能图法、场景法等测试方法。这些方法都比较常用和适用,但在使用过程中,应根据软件项目的特点选择测试方法,以便提高测试效率。 

  2.3黑盒测试可行性研究 

  黑盒测试无须了解软件内部设计和实现等问题,只需基于软件供需求和设计说明书,站在用户角度对软件界面和软件的功能进行测试。黑盒测试技术应用于确认测试、系统测试和验收测试。测试的结果取决于测试用例,对测试人员的经验要求比较高,黑盒测试不能提供直观测试覆盖率,不容易发现内部实现的漏洞,无法对程序进行定位测试,难于衡量系统的完整性。黑盒测试偏向业务,注重整体。 

  目前,黑盒测试工具主要有客户端功能测试:MI公司的winrunner,compuware的qarun,Rational的robot ;服务器端压力性能测试: MI公司winload,compuware的qaload,Rational的SQA load等等; Web测试工具:MI公司的Astra系列,rsw公司的e�test suite; 测试管理工具:rational的test manager,compuware的qadirector等;缺陷跟踪工具:trackrecord,Testtrack。其中,Winrunner是一个较为典型自动化测试工具,通过自动捕获、检测和模拟用户交互操作,能识别出绝大多数软件功能缺陷,从而确保那些跨越了多个功能点和数据库的应用程序在发布时尽量不出现功能性故障。 

  3白盒测试 

  3.1白盒测试概念 

  白盒测试又称为结构测试、逻辑测试和基于程序的测试,其目的是发现程序编码过程中的错误。它知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,来检验程序中的每条通路是否都能按预定要求正确工作,而不顾它的功能是怎样的。 

  3.2白盒测试的原理、方法及功能 

  白盒测试把程序看成是一个打开透明的盒子,是对软件设计过程的细节进行细致的检查。测试人员必须清楚程序的内部结构,利用程序内部的逻辑结构和其他相关信息,设计或选择相应的测试用例,对程序所有逻辑路径进行测试,然后再不同点检查程序状态,确定实际状态是否与预期目标完全一致。 

  软件测试人员使用白盒测试主要对程序功能模块进行检测,主要体现在以下几方面:对程序模块的所有独立的执行路径至少测试1次;对所有的逻辑判定“真”与“假”的两种取值至少测试1次;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性等。 

  常用白盒测试方法有语句覆盖、条件覆盖、判定覆盖、条件组合覆盖、判定/条件覆盖、路径覆盖等,其中路径覆盖是最强的逻辑覆盖标准,它保证程序中的每一条可能的路径至少执行一次,因而这样设计的测试用例更具有代表性,暴露程序错误的能力也最强。 

  3.3白盒测试可行性研究 

  白盒测试在了解系统整体设计与实现和对源代码进行审核的基础上进行,能尽早发现问题,测试效果好等优点,用盒测试技术应用于单元测试, 集成测试也会涉及一些。但是,白盒测试起点高,不能确保系统与软件需求的一致性,测试代价远远高于黑盒测试,侧重于实现,注重局部,对过程进行测试。 

  常用的白盒测试工具有PR公司的PRQA 软件、Telelogic 公司的Lo2giscope 软件、Macabe 公司的Macabe、 Rational 公司的Purify、 Compuware公司的DevPartner 软件、Numega 中的BounceChecker等系列。其中Logiscope是一种软件质量保证工具,它可以通过自动进行代码检查和对容易出错的模块的鉴定与检测来帮助扩大测试范围,从而达到保证质量和完成软件测试的目的。Purify工具能自动定位内存相关错误,在错误发生并造成破坏之前进行修正,这些错误包括非法指针操作、数组越界检测、内存分配错误以及内存泄漏、未初始化内存访问等。 

  4实用测试策略 

  为提高软件的测试策略,要尽可能把无限的测试变成有限的测试,以较小的代价暴露较多的程序错误,降低测试的效率成本。在实际高水平的测试中,往往需要综合使用各种方法,即采用白盒测试与黑盒测试相结合,静态测试与动态测试相结合,机器测试与人工测试相结合,以有效的提高测试效率和测试覆盖度。测试用例的设计方法有如下的实用测试策略:使用边界值分析设计测试用例,测试边界容易出错之处;使用等价划分设计测试用例,测试软件的主要错误;必要时结合人工测试的错误推测方法设计测试用例作弥补;使用逻辑覆盖涉及测试用例作为测试补充;若检查程序输入条件和各种组合情况或输入条件和输出结果存在因果联系,使用因果图法和判定表驱动法;软件存在着多个输入参数且每个输入参数的有多种取值的情况,使用正交试验法;利用功能图法通过不同时期条件的有效性设计不同的测试用例;对于业务流清晰的软件,利用场景法贯穿整个测试案例设计过程,在案例中综合使用各种测试方法。 

  5测试原则 

  不论使用什么测试方法设计测试用例,都必须保证软件的有限测试,测试人员在进行软件测试时应遵行如下的测试原则:一是软件要尽早测试和不断测试,如果不在早期阶段进行测试,错误的延时扩散常常会导致最后成品测试的巨大困难,甚至造成严重的后果;二是预先预定软件的测试结果;三是尽量避免测试自己编写的程序,测试工作应该由独立的专业的软件测试机构来完成;四是测试要兼顾合法输入和不合法数据的输入;五是测试要以软件需求规格说明书为标准;六是对测试错误结果一定要有一个确认的过程,要明确找到的新错与找到的旧错成正比;七是测试是相对的,不可能穷尽所有测试,要根据人力物力安排测试,并选择好的测试用例和测试方法;八是测试用例留作测试报告与以后的反复测试用,重新验证纠错的程序是否有错。 

  总之,黑盒测试和白盒测试是软件测试重要技术,用来发现软件缺陷与错误,是对软件质量进行度量和评估,以提高软件的质量的关键技术。任何软件项目都可以使用白盒测试和黑盒测试,在使用时不存在技术含量的谁高谁低的问题,只是两者的偏重不同,使用的技术也不同。从以往经验总结来看,软件工程师进行软件测试时,主要以黑盒测试为主,白盒测试为辅,必要时根据需要选择合适的测试工具,降低软件测试的工作量和复杂度,保证软件的质量,提高软件测试和软件开发的效率。参考文献: 

  [1]张海藩.软件工程导论[M].北京:清华大学出版社,2000. 

  [2]郑人杰.计算机软件测试技术[M].北京:清华大学出版社,1992. 

  [3]胥家瑞.浅谈白盒测试和黑盒测试在软件测试测试中的作用[J].天津市财贸管理干部学院学报,2010(4). 

  [4]IAN SOMMERVILLE.Software Engineering[M].北京:机械工业出版社,2004. 

  [5]王雅文,宫云战,杨朝红.软件测试工具[J].北京化工大学学报,2007(34). 

  [6]陈明.实用软件工程基础[M].北京:清华大学出版社,2001.