软件测试

          软件测试是伴随着软件的产生而产生的。早期的软件开发过程中,那时软件规模都很小、复杂程度低,软件开发的过程混乱无序、相当随意,测试的含义比较狭窄,开发人员将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分的工作。对测试的投入极少,测试介入也晚,常常是等到形成代码,产品已经基本完成时才进行测试。造成这样进行软件测试的原因是因为早期大家对软件测试的定义不够清晰。

       那么到底什么是软件测试?Glenford J. Myers认为测试不应该着眼于验证软件是工作的,相反应该首先认定软件是有错误的,然后用逆向思维去发现尽可能多的错误。他还从人的心理学的角度论证,如果将 “验证软件是工作的”作为测试的目的,非常不利于测试人员发现软件的错误。于是他于1979年提出了他对软件测试的定义:“测试是为发现错误而执行的一个程序或者系统的过程。[1] Bill Hetzel指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动。[2]测试是对软件质量的度量。”而现代企业大都认可软件测试是为了保证软件与产品说明书的需求保持一致。为什么需要进行软件测试?最本质的原因就在于商业利益与商业效率。软件测试是软件生命周期一个非常重要的部分,将软件测试视为一种投资更加适合。

 

1.  软件测试文档

       软件测试文档是软件测试过程中非常重要的一部分,为什么需要测试文档?应该有四方面的原因:第一是思考如何测试的指导,文档本身不是目的,重要的是测试的设计过程;第二是同僚审查的媒介;第三是后继或者其他测试者参考资料;最后一点是如果无测试文档,增加交流的损耗和工作量。软件测试文档由需求分析,功能规范说明书,开发设计文档,测试计划,测试规划说明书,测试用例,测试报告,缺陷报告组成。其中最重要的三个文档是需求分析,功能规范说明书,开发设计文档。因为需求分析是测试计划的依据。从需求分析文档,我们可以得出软件的使用范围,比如要覆盖什么样的用户群,不覆盖什么样的用户群。需求分析可以分为商务需求,用户需求,标准符合需求,系统需求。功能规范说明书的主要作用是测试规范说明书以及测试用例的依据。可以根据功能范围,要实现什么,不实现什么。得出具体的功能设计,如用户场景,操作流程和界面设计。开发设计文档最重要的作用是作为测试规范说明书以及测试用例的依据。

 

2.  软件测试技术

        软件测试的种类可以分为人工测试和基于计算机的测试。而基于计算机的测试又可以分为白盒测试和黑盒测试。原则上讲,软件测试分为静态测试和动态测试两类。静态测试包括代码审查和静态分析,动态测试包括白盒测试和黑盒测试。[3]

 

2.1 黑盒测试技术

       黑盒测试技术不考虑内部实现,主要用于功能测试,依据功能说明书设计测试用例;需要考虑的其他方面有被测应用程序所处环境;操作系统内核;API 用户界面以及文件系统的类型。常见黑盒测试技术有:

2.1.1边界值分析

        主要是分析输入,输出的边界,从而设计测试用例。如常见的边界例子:字符串,长度为零,最大允许长度,可输入最大长度;循环:0次,和最多次。数组:长度为0,和最大长度。以及一些常见的特殊值,如2月29号。

2.1.2等价类划分

       其目标是取得测试的全面和高效。通过减少冗余测试用例,达到足够广的测试覆盖。 最基本的等价类分为有效等价类和无效等价类。如取值范围1~1024,则有效等价类为1到1024范围之内;无效等价类,则为小于1,大于1024。

2.1.3组合分析

       主要的用途在于测试条件的多样性,如测试网页www.abc.com;需要考虑的问题有操作系统的类型,如Win NT4,Win2000,WinXP,Linux,Solaris;测试平台,如32位,64位;语言的种类,如中文,英文,德文,日文;浏览器的类型,如IE5,IE6,IE7,FireFox,Opera;Javascript是否启用等。这时候通过采用两两组合的方式,就可以进行有效的测试。

2.1.4因果图分析

    主要是输入的各种组合情况复杂,需要对输入的各种情况进行分析;此时,利用图解法分析输入的各种组合情况,从而设计测试用例。

 

2.2 白盒测试技术

       黑盒测试技术并不能很好的在早期发现文档或者程序中可能的错误;而白盒技术能够很好的解决这个问题,并且能够提高代码的覆盖率。覆盖率是测试所执行到的覆盖项占总数的百分比,覆盖率是测试文档定义的软件能够发布所必需满足的条件之一。

   白盒测试也称结构测试或逻辑驱动测试,是一种测试用例设计方法,从程序的控制结构导出测试用例;单元测试是白盒测试的一种,一般由开发人员自己生成。白盒测试可分为:

2.2.1静态白盒测试

    在不执行的条件下有条理地仔细审查软件设计,体系结构和代码,从而找出软件缺陷的过程,也称为结果分析。进行静态白盒测试的首要原因就是尽早发现软件缺陷,以找出动态黑盒子测试难以揭示或遇到的软件缺陷;从另一方面给黑盒测试的测试设计和应用测试用例提供思路。可以利用代码审查工具进行,如PREFast。

2.2.2动态白盒测试

    根据具体实现代码确定如何测试。主要是检查程序的内部结构,逻辑,循环和路径,一般要遵循四条原则,一是保证一个模块中的所有独立路径至少被测试一次;二是所有逻辑值据需测试真和假两种情况。三是检查程序的内部数据结构,保证其结构的有效性,四是在上下边界及可操作范围内运行所有循环。

3.软件测试过程

       测试虽然是软件生存周期的一个独立阶段,但测试工作却渗透到从分析、设计直到编程的各个阶段中,如测试文档的编写从分析和设计阶段就开始了,而具体的测试工作随项目的不断深入也在进行中。在实际工作中,测试环节可分为五个阶段,明显的、同等重要的有三个阶段:即单元测试、集成测试(又称构件测试)和系统测试。

3.1 单元测试

       单元测试即模块测试,一个窗口、函数、菜单、报表或一个存储过程都可以作为一个单元进行测试。单元测试是测试的第一步。由开发者自己进行测试最合适,一般采用白盒测试。

3.2 集成测试

       在将所有的单元经过测试以后,接着进行集成测试。集成测试也称组装测试,即将已分别通过测试的单元按要求组合起来再进行的测试,以检查这些单元之间的接口是否存在问题。要求参与的人熟悉单元的内部细节,又要求他们能够从足够高的层次上观察整个系统。集成测试阶段是以黑盒法为主,在自底向上集成的早期,白盒法测试占一定的比例,随着集成测试的不断深入,这种比例在测试过程中将越来越少,渐渐地,黑盒法测试占据主导地位。集成测试主要是开发与测试人员负责。

3.3 系统测试

       系统测试是整个测试阶段的最后一步,所有的开发和测试在这一点上集中表现为生成一个具有一定功能的软件系统。该阶段主要对系统的准确性及完整性等方面进行测试。主要进行:功能确认测试、运行测试、强度测试、恢复测试、安全性测试等。系统测试的测试人员由测试组成员(或质量保证人员)或测试组成员与用户共同测试。在整个系统开发完成,即将交付用户使用前进行。在这一阶段,完全采用黑盒法对整个系统进行测试。

3.4验收测试

       由用户参与并以用户为主对系统功能,性能等进行的系统测试。验收测试一般是在系统测试完成之后将产品交付给用户,并由用户来完成测试。其目的是检验系统是否符合预先定义的用户需求并达到事先约定的验收标准,产品可以交付使用,在实际用户环境中运行系统并发现潜在的未曾发现的错误。

3.5回归测试

      在软件修改或版本更新后重复以前的全部或部分的测试。回归测试可以在整个软件测试过程中任何阶段运行,由开发人员和测试人员共同完成,其目的是验证程序在修改或版本更新后,确保所作的更改不会破坏原有的功能,以前所有的正确功能和其他指标仍旧正确。

    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值