As long as alive, every day is full of hope

软件测试规范

上一篇 / 下一篇  2009-06-04 16:20:53 / 个人分类:测试知识

软件测试规范

 

 

 

一、目的与适用范围

1、目的

软件测试是软件工程的重要组成部分,测试工作的质量直接影响软件产品的生命力。测试工作的标准化是软件质量保证(Quality Assurance)重要而且必须的环节。制定本标准的目的在于使测试流程更标准,测试过程更规范。从而使整个软件生产纳入更系统化、更专业化的轨道。

2、适用范围

本标准适用于软件测试流程的管理和测试的具体操作过程。本标准的使用者可以是企业内部的测试人员和开发人员。

 

二、测试方法

  软件测试的方法和技术是多种多样的。以下将介绍比较常用的一些测试方法:   

1、静态测试

静态方法是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。

2、动态测试

 动态方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。

3黑盒测试

      黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。黑盒测试方法主要有等价类划分、边值分析、因果图、错误推测等,主要用于软件确认测试。

      “黑盒法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。黑盒法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

4白盒测试

      白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。

      “白盒法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。白盒法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。

5ALAC(Act-like-a-customer)测试

   ALAC测试是一种基于客户使用产品的知识开发出来的测试方法。ALAC测试是基于复杂的软件产品有许多错误的原则。最大的受益者是用户,缺陷查找和改正将针对哪些客户最容易遇到的错误。   

6单元测试方法

6.1单元测试任务

单元测试任务包括:

      模块接口测试;

      模块局部数据结构测试;

      模块边界条件测试;

      模块中所有独立执行通路测试;

      模块的各条错误处理通路测试。

     模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。

6.2接口测试

测试接口正确与否应该考虑下列因素:

      输入的实际参数与形式参数的个数是否相同;

      输入的实际参数与形式参数的属性是否匹配;

      输入的实际参数与形式参数的量纲是否一致;

      调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;

      调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;

      调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;

      调用预定义函数时所用参数的个数、属性和次序是否正确;

      是否存在与当前入口点无关的参数引用;

      是否修改了只读型参数;

      对全程变量的定义各模块是否一致;

      是否把某些约束作为参数传递。

           如果模块内包括外部输入输出,还应该考虑下列因素:

      文件属性是否正确;

       OPEN/CLOSE语句是否正确;

      格式说明与输入输出语句是否匹配;

      缓冲区大小与记录长度是否匹配;

      文件使用前是否已经打开;

      是否处理了文件尾;

      是否处理了输入/输出错误;

      输出信息中是否有文字性错误;

6.3数据测试

检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误:

      不合适或不相容的类型说明;

      变量无初值;

      变量初始化或省缺值有错;

      不正确的变量名(拼错或不正确地截断);

      出现上溢、下溢和地址异常。

       除了局部数据结构外,如果可能,单元测试时还应该查清全局数据(例如FORTRAN的公用区)对模块的影响。

6.4控制流测试

在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。此时设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。此时基本路径测试和循环测试是最常用且最有效的测试技术。计算中常见的错误包括:

      误解或用错了算符优先级;

      混合类型运算;

      变量初值错;

      精度不够;

      表达式符号错。

    比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:

      不同数据类型的对象之间进行比较;

      错误地使用逻辑运算符或优先级;

      因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;

      比较运算或变量出错;

      循环终止条件或不可能出现;

      迭代发散时不能退出;

      错误地修改了循环变量。

6.5出错处理测试

一个好的设计应能预见各种出错条件,并预设各种出错处理通路,出错处理通路同样需要认真测试,测试应着重检查下列问题:

      输出的出错信息难以理解;

      记录的错误与实际遇到的错误不相符;

      在程序自定义的出错处理段运行之前,系统已介入;

      异常处理不当;

      错误陈述中未能提供足够的定位出错信息。

6.6边界条件测试

边界条件测试是单元测试中最后,也是最重要的一项任务。众的周知,软件经常在边界上失效,采用边界值分析技术,针对边界值及其左、右设计测试用例,很有可能发现新的错误。

[-page-]      

7、集成测试的基本方法

       某设计人员习惯于把所有模块按设计要求一次全部组装起来,然后进行整体测试,这称为非增量式集成。这种方法容易出现混乱。因为测试时可能发现一大堆错误,为每个错误定位和纠正非常困难,并且在改正一个错误的同时又可能引入新的错误,新旧错误混杂,更难断定出错的原因和位置。与之相反的是增量式集成方法,程序一段一段地扩展,测试的范围一步一步地增大,错误易于定位和纠正,界面的测试亦可做到完全彻底。下面讨论两种增量式集成方法。

       7.1自顶向下集成

       自顶向下集成是构造程序结构的一种增量式方式,它从主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一起。深度优先策略首先是把主控制路径上的模块集成在一起,至于选择哪一条路径作为主控制路径,这多少带有随意性,一般根据问题的特性确定。

       自顶向下集成测试的具体步骤为:

      以主控模块作为测试驱动模块,把对主控模块进行单元测试时引入的所有桩模块用实际模块替代;

      依据所选的集成策略(深度优先或广度优先),每次只替代一个桩模块;

      每集成一个模块立即测试一遍;

      只有每组测试完成后,才着手替换下一个桩模块;

      为避免引入新错误,须不断地进行回归测试(即全部或部分地重复已做过的测试);

      从第二步开始,循环执行上述步骤,直至整个程序结构构造完毕。

       自顶向下集成的优点在于能尽早地对程序的主要控制和决策机制进行检验,因此较早地发现错误。缺点是在测试较高层模块时,低层处理采用桩模块替代,不能反映真实情况,重要数据不能及时回送到上层模块,因此测试并不充分。解决这个问题有几种办法,第一种是把某些测试推迟到用真实模块替代桩模块之后进行,第二种是开发能模拟真实模块的桩模块;第三种是自底向上集成模块。第一种方法又回退为非增量式的集成方法,使错误难于定位和纠正,并且失去了在组装模块时进行一些特定测试的可能性;第二种方法无疑要大大增加开销;第三种方法比较切实可行。

       7.2自底向上集成

       自底向上测试是从原子模块(即软件结构最低层的模块)开始组装测试,因测试到较高层模块时,所需的下层模块功能均已具备,所以不再需要桩模块。

      自底向上综合测试的步骤分为:

      把低层模块组织成实现某个子功能的模块群(cluster;

      开发一个测试驱动模块,控制测试数据的输入和测试结果的输出;

      对每个模块群进行测试;

      删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功能的新模块群;

      从第一步开始循环执行上述各步骤,直至整个程序构造完毕。

          自底向上集成方法不用桩模块,测试用例的设计亦相对简单,但缺点是程序最后一个模块加入时才具有整体形象。它与自顶向综合测试方法优缺点正好相反。因此,在测试软件系统时,应根据软件的特点和工程的进度,选用适当的测试策略,有时混和使用两种策略更为有效,上层模块用自顶向下的方法,下层模块用自底向上的方法。

       此外,在集成测试中尤其要注意关键模块,所谓关键模块一般都具有下述一或多个特征:对应几条需求;具有高层控制功能;复杂、易出错;有特殊的性能要求。关键模块应尽早测试,并反复进行回归测试。

 

8、确认测试的基本方法

       8.1确认测试标准

          实现软件确认要通过一系列黑盒测试。确认测试同样需要制订测试计划和过程,测试计划应规定测试的种类和测试进度,测试过程则定义一些特殊的测试用例,旨在说明软件与需求是否一致。无论是计划还是过程,都应该着重考虑软件是否满足合同规定的所有功能和性能,文档资料是否完整、准确,人机界面和其他方面(例如,可移植性、兼容性、错误恢复能力和可维护性等)是否令用户满意。

             确认测试的结果有两种可能,一种是功能和性能指标满足软件需求说明的要求,用户可以接受;另一种是软件不满足软件需求说明的要求,用户无法接受。项目进行到这个阶段才发现严重错误和偏差一般很难在预定的工期内改正,因此必须与用户协商,寻求一个妥善解决问题的方法。

       8.2配置复审

           确认测试的另一个重要环节是配置复审。复审的目的在于保证软件配置齐全、分类有序,并且包括软件维护所必须的细节。

       8.3αβ测试

       事实上,软件开发人员不可能完全预见用户实际使用程序的情况。例如,用户可能错误的理解命令,或提供一些奇怪的数据组合,亦可能对设计者自认明了的输出信息迷惑不解,等等。因此,软件是否真正满足最终用户的要求,应由用户进行一系列验收测试。验收测试既可以是非正式的测试,也可以有计划、有系统的测试。有时,验收测试长达数周甚至数月,不断暴露错误,导致开发延期。一个软件产品,可能拥有众多用户,不可能由每个用户验收,此时多采用称为αβ测试的过程,以期发现那些似乎只有最终用户才能发现的问题。

       α测试是指软件开发公司组织内部人员模拟各类用户行对即将面市软件产品(称为α版本)进行测试,试图发现错误并修正。α测试的关键在于尽可能逼真地模拟实际运行环境和用户对软件产品的操作并尽最大努力涵盖所有可能的 用户操作方式。经过α测试调整的软件产品称为β版本。紧随其后的β测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况、提出批评意见。然后软件开发公司再对β版本进行改错和完善。

 

9系统测试的基本方法       

      9.1恢复测试

        恢复测试主要检查系统的容错能力。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。恢复测试首先要采用各种办法强迫系统失败,然后验证系统是否能尽快恢复。对于自动恢复需验证重新初始化(reinitialization)、检查点(checkpointing mechanisms)、数据恢复(data recovery)和重新启动(restart)等机制的正确性;对于人工干预的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内。

      9.2安全测试

        安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。例如,想方设法截取或破译口令;专门定做软件破坏系统的保护机制;故意导致系统失败,企图趁恢复之机非法进入;试图通过浏览非保密数据,推导所需信息,等等。理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值。此时非法侵入者已无利可图。

      9.3强度测试

        强度测试检查程序对异常情况的抵抗能力。强度测试总是迫使系统在异常的资源配置下运行。例如,当中断的正常频率为每秒一至两个时,运行每秒产生十个中断的测试用例;定量地增长数据输入率,检查输入子功能的反映能力;运行需要最大存储空间(或其他资源)的测试用例;运行可能导致虚存操作系统崩溃或磁盘数据剧烈抖动的测试用例,等等。

TAG:

引用 删除 毛佳威   /   2010-03-25 20:20:46
5
ananbo的个人空间 引用 删除 ananbo   /   2009-06-05 16:06:59
想让人看不??汗。。。还得全选那。
ananbo的个人空间 引用 删除 ananbo   /   2009-06-05 16:06:25
5
扬起测试的风帆,我们一起远航 引用 删除 david.wang   /   2009-06-04 22:30:11
哇,这也太耀眼了吧。
 

评分:0

我来说两句