搜档网
当前位置:搜档网 › 软件测试入门基础-适合于软件测试初学者

软件测试入门基础-适合于软件测试初学者

软件测试入门基础-适合于软件测试初学者
软件测试入门基础-适合于软件测试初学者

软件测试

软件测试是软件开发过程的重要组成部分,是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。软件测试是为了发现错误而执行程序的过程。软件测试在软件生存期中横跨两个阶段:通常在编写出每一个模块之后就对它做必要的测试(称为单元测试)。编码和单元测试属于软件生存期中的同一个阶段。在结束这个阶段后对软件系统还要进行各种综合测试,这是软件生存期的另一个独立阶段,即测试阶段。

一、软件测试的目的

软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Do the right thing),另一方面是确认软件以正确的方式来做了这个事件(Do it right)。

第二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息。

第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此软件测试的第三个目的是保证整个软件开发过程是高质量的。

软件质量是由几个方面来衡量的:一、在正确的时间用正确的的方法把一个工作做正确(Doing the right things right at the right time.)。二、符合一些应用标准的要求,比如不同国家的用户不同的操作习惯和要求,项目工程中的可维护性、可测试性等要求。三、质量本身就是软件达到了最开始所设定的要求,而代码的优美或精巧的技巧并不代表软件的高质量(Quality is defined AS conf ORM ance to requirements, not as “g OOD n ES s” or

“ele GA nce”.)。四、质量也代表着它符合客户的需要(Quality also means “meet cu ST omer needs”.)。作为软件测试这个行业,最重要的一件事就是从客户的需求出发,从客户的角度去看产品,客户会怎么去使用这个产品,使用过程中会遇到什么样的问题。只有这些问题都解决了,软件产品的质量才可以说是上去了。

测试人员在软件开发过程中的任务:

1、寻找Bug;

2、避免软件开发过程中的缺陷;

3、衡量软件的品质;

4、关注用户的需求。

总的目标是:确保软件的质量。

二、软件测试的原则

软件测试从不同的角度出发会派生出两种不同的测试原则,从用户的角度出发,就是希望通过软件测试能充分暴露软件中存在的问题和缺陷,从而考虑是否可以接受该产品,从开发者的角度出发,就是希望测试能表明软件产品不存在错误,已经正确地实现了用户的需求,确立人们对软件质量的信心。

为了达到上述的原则,那么需要注意以下几点:

1.应当把“尽早和不断的测试”作为开发者的座右铭

2.程序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完。

3.设计测试用例时应该考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。4.一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。

5.对测试错误结果一定要有一个确认的过程,一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。

6.制定严格的测试计划,并把测试时间安排的尽量宽松,不要希望在极短的时间内完成一个高水平的测试。

7.回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多的错误出现的现象并不少见。

8.妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。

三、软件测试的对象

软件测试并不等于程序测试。软件测试应该贯穿整个软件定义与开发整个期间。因此需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应该是软件测试的对象。

在对需求理解与表达的正确性、设计与表达的正确性、实现的正确性以及运行的正确性的验证中,任何一个环节发生了问题都可能在软件测试中表现出来。

四、软件测试方法

软件测试的基本方法

单元测试的基本方法

综合测试的基本方法

确认测试的基本方法

软件测试的基本方法

软件测试的方法和技术是多种多样的。

对于软件测试技术,可以从不同的角度加以分类:

从是否需要执行被测软件的角度,可分为静态测试和动态测试。

从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为白盒测试和黑盒测试;

1、黑盒测试

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

2、白盒测试

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

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

3.ALAC(Act-like-a-customer)测试

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

单元测试的对象是软件设计的最小单位模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。

单元测试任务

单元测试任务包括:1 模块接口测试;2 模块局部数据结构测试;3 模块边界条件测试;4 模块中所有独立执行通路测试;5 模块的各条错误处理通路测试。

模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。测试接口正确与否应该考虑下列因素:

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

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

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

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

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

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

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

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

9 是否修改了只读型参数;

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

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

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

1 文件属性是否正确;

2 OPEN/CL OS E语句是否正确;

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

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

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

6是否处理了文件尾;

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

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

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

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

2变量无初值;

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

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

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

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

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

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

2混合类型运算;

3变量初值错;

4精度不够;

5表达式符号错。

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

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

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

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

4比较运算或变量出错;

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

6迭代发散时不能退出;

7错误地修改了循环变量。

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

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

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

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

4异常处理不当;

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

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

单元测试过程

一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试。测试用例的设计应与复审工作相结合,根据设计信息选取测试数据,将增大发现上述各类错误的可能性。在确定测试用例的同时,应给出期望结果。

应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub),下图显示了一般单元测试的环境。驱动模块在大多数场合称为“主程序”,它接收测试数据并将这些数据传递到被测试模块,被测试模块被调用后,“主程序”打印“进入-退出”消息。

驱动模块和桩模块是测试使用的软件,而不是软件产品的组成部分,但它需要一定的开发费用。若驱动和桩模块比较简单,实际开销相对低些。遗憾的是,仅用简单的驱动模块和桩模块不能完成某些模块的测试任务,这些模块的单元测试只能采用下面讨论的综合测试方法。

提高模块的内聚度可简化单元测试,如果每个模块只能完成一个,所需测试用例数目将显著减少,模块中的错误也更容易发现。

综合测试的基本方法

时常有这样的情况发生,每个模块都能单独工作,但这些模块集成在一起之后却不能正常工作。主要原因是,模块相互调用时接口会引入许多新问题。例如,数据经过接口可能丢失;一个模块对另一模块可能造成不应有的影响;几个子功能组合起来不能实现主功能;误差不断积累达到不可接受的程度;全局数据结构出现错误,等等。综合测试是组装软件的系统测试技术,按设计要求把通过单元测试的各个模块组装在一起之后,进行综合测试以便发现与接口有关的各种错误。

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

1 自顶向下集成

自顶向下集成是构造程序结构的一种增量式方式,它从主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一起。深度优先策略首先是把主控制路径上的模块集成在一起,至于选择哪一条路径作为主控制路径,这多少带有随意性,一般根据问题的特性确定。以下图为例,若选择了最左一条路径,首先将模块M1,M2,M5和M8集成在一起,再将M6集成起来,然后考虑中间和右边的路径。广度优先策略则不然,它沿控制层次结构水平地向下移动。仍以下图为例,它首先把M2、M3和M4与主控模块集成在一起,再将M5和M6 和其他模块集资集成起来。

自顶向下综合测试的具体步骤为:

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

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

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

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

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

过的测试)。

从第二步开始,循环执行上述步骤,直至整个程序结构构造完毕。下图中,实线表示已部分完成的结构,若采用深度优先策略,下一步将用模块M7替换桩模块S7,当然M7本身可能又带有桩模块,随后将被对应的实际模块一一替代。

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

2自底向上集成

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

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

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

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

3 对每个模块群进行测试;

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

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

下图说明了上述过程。首先“原子”模块被分为三个模块群,每个模块群引入一个驱动模块进行测试。因模块群1、模块群2中的模块均隶属于模块Ma,因此在驱动模块D1、D2去掉后,模块群1与模块群2直接与Ma接口,这时可对MaD3被去掉后,M3与模块群3直接接口,可对Mb进行集成测试,最后Ma、Mb和Mc全部集成在一起进行测试。

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

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

确认测试的基本方法

通过综合测试之后,软件已完全组装起来,接口方面的错误也已排除,软件测试的最后一步确认测试即可开始。确认测试应检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准。

1. 确认测试标准

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

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

2. 配置复审

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

3. α、β测试

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

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

系统测试的基本方法

计算机软件是基于计算机系统的一个重要组成部分,软件开发完毕后应与系统中其它成分集成在一起,此时需要进行一系列系统集成和确认测试。对这些测试的详细讨论已超出软件工程的范围,这些测试也不可能仅由软件开发人员完成。在系统测试之前,软件工程师应完成下列工作:

(1)为测试软件系统的输入信息设计出错处理通路;

(2)设计测试用例,模拟错误数据和软件界面可能发生的错误,记录测试结果,为系统测试提供经验和帮助;

(3)参与系统测试的规划和设计,保证软件测试的合理性。

系统测试应该由若干个不同测试组成,目的是充分运行系统,验证系统各部件是否都能政党工作并完成所赋予的任务。下面简单讨论几类系统测试。

1、恢复测试

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

2、安全测试

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

3、强度测试

强度测试检查程序对异常情况的抵抗能力。强度测试总是迫使系统在异常的资源配置下运行。例如,①当中断的正常频率为每秒一至两个时,运行每秒产生十个中断的测试用例;②定量地增长数据输入率,检查输入子功能的反映能力;

③运行需要最大存储空间(或其他资源)的测试用例;④运行可能导致虚存操作系统崩溃或磁盘数据剧烈抖动的测试用例,等等。

4、性能测试

对于那些实时和嵌入式系统,软件部分即使满足功能要求,也未必能够满足性能要求,虽然从单元测试起,每一测试步骤都包含性能测试,但只有当系统真正集成之后,在真实环境中才能全面、可靠地测试运行性能系统性能测试是为了完成这一任务。性能测试有时与强度测试相结合,经常需要其他软硬件的配套支持。

五、软件测试的类型

常见的软件测试类型有:

BVT (Build Verification Test)

BVT是在所有开发工程师都已经检入自己的代码,项目组编译生成当天的版本之后进行,主要目的是验证最新生成的软件版本在功能上是否完整,主要的软件特性是否正确。如无大的问题,就可以进行相应的功能测试。BVT优点是时间短,验证了软件的基本功能。缺点是该种测试的覆盖率很低。因为运行时间短,不可能把所有的情况都测试到。

Scenario Tests(基于用户实际应用场景的测试)

在做BVT、功能测试的时候,可能测试主要集中在某个模块,或比较分离的功能上。当用户来使用这个应用程序的时候,各个模块是作为一个整体来使用的,那么在做测试的时候,就需要模仿用户这样一个真实的使用环境,即用户会有哪些用法,会用这个应用程序做哪些事情,操作会是一个怎样的流程。加了这些测试用例后,再与BVT、功能测试配合,就能使软件整体都能符合用户使用的要求。Scenario Tests优点是关注了用户的需求,缺点是有时候难以真正模仿用户真实的使用情况。

Smoke Test

在测试中发现问题,找到了一个Bug,然后开发人员会来修复这个Bug。这时想知道这次修复是否真的解决了程序的Bug,或者是否会对其它模块造成影响,就需要针对此问题进行专门测试,这个过程就被称为Smoke Test。在很多情况下,做Smoke Test是开发人员在试图解决一个问题的时候,造成了其它功能模块一系列的连锁反应,原因可能是只集中考虑了一开始的那个问题,而忽略其它的问题,这就可能引起了新的Bug。Smoke Test优点是节省测试时间,防止build失败。缺点是覆盖率还是比较低。

此外,Application Compati BI lity Test(兼容性测试),主要目的是为了兼容第三方软件,确保第三方软件能正常运行,用户不受影响。Accessibility Test(软件适用性测试),是确保软件对于某些有残疾的人士也能正常的使用,但优先级比较低。其它的测试还有Functional Test(功能测试)、Security Test (安全性测试)、Stress Test(压力测试)、Performance Test(性能测试)、Regression Test(回归测试)、Setup/Upgrade Test(安装升级测试)等。

六、软件测试支持工具

一些受软件开发人员欢迎的软件测试工具为软件测试提供了强有力的支持。本文将介绍美国Rational公司的著名套装软件SQA和Pure Atria公司极具特色的Purify。

SQA SuiteSQA直接支持对客户/服务器应用软件的测试,它的一个重要特点是可以自动驱动被测程序的运行。SQA可以自动记录和重放程序执行过程,从而实现了对测试进行"复查"的自动化。

由于测试是一个需要反复进行的过程,常常要数十次甚至数百次地重复。因此,这一特性大大地提高了软件"再测试"(Re-Test)和"回归测试"(Regression)的自动化程度,把测试人员从繁杂的、重复性的手工测试中解脱出来,从而显著地提高软件测试效率。

除了这个最基本的自动录放功能外,它还提供了一系列的辅助支持功能,比如,

·被录制的程序执行过程可以被自动转换成具有良好可读性的高级语言程序,从而使这个测试驱动程序可以由测试人员根据测试需要进行必要的修改,甚至完全用手工方式编制。

·自动记录和分析比较测试的执行结果。不论是简单的正文方式的输出结果,还是任意的图表、声音、动画、图形用户界面(GUI)中的任一构件,都可以根据测试人员的指定被自动记录在测试结果库中,并可对两次测试的结果自动地进行比较,指出其差异部分。此项功能无疑对"自动查找错误"很有帮助。

·调节和设定事件的发生时间和速度。

·基本的测试库管理功能。

此外,SQA还支持软件测试人员进行以下工作:

·制定测试计划和测试大纲,并将这些文档按照自然的树状结构分层地管理起来,并据此控制和驱动整个测试过程。

·不仅能够自动记录各类测试结果,而且对其进行修改,从而使得测试人员可以在程序运行结果尚有许多错误的情况下,通过对所记录下的结果做适当修正来获得理想的"期望结果" ,为测试结果的自动比较奠定基础。

·测试问题报告的记录与管理。

总之,SQA Suite提供了一个比较完整的测试平台,以支持软件测试的各种基本活动,包括测试计划与测试大纲的制定、回归测试的自动化、测试结果的分析比较、软件问题报告的生成与自动分发和控制等。对于许多应用软件的开发无疑是个有力的测试支持工具。

Purify是原PureAtria公司(现已经与美国Rational公司合并,改名为美国Rational公司)于90年代初率先推出的专门用于检测程序中种种内存使用错误的软件工具。几乎所有使用过C语言开发软件的程序员都会有这样的体会,C语言中使用极为灵活的指针给程序员带来了很大便利,但同时也制造了许多的麻

烦。由于指针使用不当而引起的错误通常是最难发现的,同时也是最难定位的一类错误。而Purify对多种常见的内存使用错误的检错能力和准确的定位,受到广大软件开发人员的青睐。

Purify可以自动识别出二十多种内存使用错误,包括

·未初始化的局部变量

·未申请的内存

·使用已释放的内存

·数组越界

·内存丢失

·文件描述问题

·栈溢出问题

·栈结构边界错误等

在下面的例子中,暗藏着两个内存使用错误。第一行为指针数组pp申请的空间尺寸不对。这类错误往往不易发现,因为在C语言中,一些"轻微"的内存越界可能被系统所容忍。但这往往是导致更严重错误的根源。例如,可能破坏其它数据区等。最后一行的错误是在释放pp 之前没有释放赋予它的字符串空间,从而把它们"丢失"了。这类错误犹如慢性自杀,它会逐渐消耗掉内存,降低系统的运行效率,直到完全崩溃。而真正的问题在于,这些程序中的"恶性肿瘤"用常规的测试手段和调试工具是极难发现和加以定位的。Purify则在此充分显示了它的强大功效,所到之处,即对所测试过的情况,上述各种常见的内存错误都可以被一一揭露出来,并且准确地指出错误的类型和位置。从而大大地提高了测试和纠错的效率,提高了软件的可靠性。

…/"to get 10 wo RDS and print them out"/

if(!(pp=(char**)malloc(10))){

/*Size should be 10*sizeof(char*)*/

printf("Out of memory.\n");

exit(-1);

}

for(i=0;i<10;i++){

SCA nf("%s",buffer);

if(!(pp[i]=(char*)malloc(strlen(buffer)+1))){

print("Out of Memory.\ n");

exit(-1);

}

strcpy(pp[i],buffer);

printf(pp[i]);

}

free(pp);/*all the strings pointed by it are lost!*/

………

今年以来,原PureAtria公司陆续推出了其系列产品?/FONT>Pure,包括支持内存检测的Purify ,支持路径覆盖的PureCoverage,支持多线程应用程序性能测试的Quantify,以及用以提高测试期间连接编译被测程序效率的PureLink等。Pure系列现已支持C、C++、FORTRAN语言,以及UNIX和Window NT等操作系统,如Sun OS、Solaris 2.3,HP-UX,Windows NT Server以及IBM A/ X等。

结束语

充分认识软件测试的重要性和复杂性,合理地选择测试方法,有效地组织测试人员和安排测试任务,并且尽量使用软件测试工具增强软件测试的自动化程度,无疑可以帮助软件开发和测试人员大大提高测试效率和软件的质量。

七、软件测试的基本过程

软件测试是一个极为复杂的过程。如图一所示,一个规范化的软件测试过程通常须包括以下基本的测试活动。

·拟定软件测试计划

·编制软件测试大纲

·设计和生成测试用例

·实施测试

·生成软件问题报告

对整个测试过程进行有效的管理实际上,软件测试过程与整个软件开发过程基本上是平行进行的。测试计划早在需求分析阶段即应开始制定,其它相关工作,包括测试大纲的制定、测试数据的生成、测试工具的选择和开发等也应在测试阶段之前进行。充分的准备工作可以有效地克服测试的盲目性,缩短测试周期,提高测试效率,并且起到测试文档与开发文档互查的作用。

此外,软件测试的实施阶段是由一系列的测试周期(Test Cycle)组成的。在每个测试周期中,软件测试工程师将依据预先编制好的测试大纲和准备好的测试用例,对被测软件进行完整的测试。测试与纠错通常是反复交替进行的。当使用专业测试人员时,测试与纠错甚至是平行进行的,从而压缩总的开发时间。更重要的是,由于专业测试人员丰富的测试经验、所采用的系统化的测试方法、全时的投入,特别是独立于开发人员的思维,使得他们能够更有效地发现许多单靠开发人员很难发现的错误和问题。

软件测试大纲是软件测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。无论是自动测试还是手动测试,都必须满足测试大纲的要求。

一般而言,测试用例是指为实施一次测试而向被测系统提供的输入数据、操作或各种环境设置。测试用例控制着软件测试的执行过程,它是对测试大纲中每个测试项目的进一步实例化。已有许多著名的论著总结了设计测试用例的各种规则和策略。从工程实践的角度讲有几条基本准则:

1.测试用例的代表性:能够代表各种合理和不合理的、合法的和非法的、边界和越界的,以及极限的输入数据、操作和环境设置等;

2.测试结果的可判定性:即测试执行结果的正确性是可判定的或可评估的;

3.测试结果的可再现性:即对同样的测试用例,系统的执行结果应当是相同的。

八、制定成功的测试计划

“工欲善其事,必先利其器”。专业的测试必须以一个好的测试计划作为基础。尽管测试的每一个步骤都是独立的,但是必定要有一个起到框架结构作用的测试计划。测试的计划应该作为测试的起始步骤和重要环节。一个测试计划应包括:产品基本情况调研、测试需求说明、测试策略和记录、测试资源配置、计划表、问题跟踪报告、测试计划的评审、结果等等。

产品基本情况调研:

这部分应包括产品的一些基本情况介绍,例如:产品的运行平台和应用的领域,产品的特点和主要的功能模块,产品的特点等。对于大的测试项目,还要包括测试的目的和侧重点。

具体的要点有:

目的:重点描述如何使测试建立在客观的基础上,定义测试的策略,测试的配置,粗略的估计测试大致需要的周期和最终测试报告递交的时间。

变更:说明有可能会导致测试计划变更的事件。包括测试工具改进了,测试的环境改变了,或者是添加了新的功能。

技术结构:可以借助画图,将要测试的软件划分成几个组成部分,规划成一个适用于测试的完整的系统,包括数据是如何存储的,如何传递的(数据流图),每一个部分的测试是要达到什么样的目的。每一个部分是怎么实现数据更新的。还有就是常规性的技术要求,比如运行平台、需要什么样的数据库等等。

产品规格:就是制造商和产品版本号的说明。

测试范围:简单的描述如何搭建测试平台以及测试的潜在的风险。

项目信息:说明要测试的项目的相关资料,如:用户文档,产品描述,主要功能的举例说明。

测试需求说明:

这一部分要列出所有要测试的功能项。凡是没有出现在这个清单里的功能项都排除在测试的范围之外。万一有一天你在一个没有测试的部分里发现了一个问题,你应该很高兴你有这个记录在案的文档,可以证明你测了什么没测什么。具体要点有:

功能的测试:理论上是测试是要覆盖所有的功能项,例如:在数据库中添加、编辑、删除记录等等,这会是一个浩大的工程,但是有利于测试的完整性。

设计的测试:对于一些用户界面、菜单的结构还有窗体的设计是否合理等的测试。

整体考虑:这部分测试需求要考虑到数据流从软件中的一个模块流到另一个模块的过程中的正确性。

测试的策略和记录:

这是整个测试计划的重点所在,要描述如何公正客观地开展测试,要考虑:模块、功能、整体、系统、版本、压力、性能、配置和安装等各个因素的影响。要尽可能的考虑到细节,越详细越好,并制作测试记录文档的模板,为即将开始的测试做准备,测试记录重要包括的部分具体说明如下:

公正性声明:要对测试的公正性、遵照的标准做一个说明,证明测试是客观的,整体上,软件功能要满足需求,实现正确,和用户文档的描述保持一致。

测试案例:描述测试案例是什么样的,采用了什么工具,工具的来源是什么,如何执行的,用了什么样的数据。测试的记录中要为将来的回归测试留有余地,当然,也要考虑同时安装的别的软件对正在测试的软件会造成的影响。

特殊考虑:有的时候,针对一些外界环境的影响,要对软件进行一些特殊方面的测试。

经验判断:对以往的测试中,经常出现的问题加以考虑。

设想:采取一些发散性的思维,往往能帮助你找的测试的新途径。

测试资源配置:

项目资源计划:制定一个项目资源计划,包含的是每一个阶段的任务、所需要的资源,当发生类似到了使用期限或者资源共享的事情的时候,要更新这个计划。

计划表:

测试的计划表可以做成一个多个项目通用的形式,根据大致的时间估计来制作,操作流程要以软件测试的常规周期作为参考,也可以是根据什么时候应该测试哪一个模块来制定。

问题跟踪报告:

在测试的计划阶段,我们应该明确如何准备去做一个问题报告以及如何去界定一个问题的性质,问题报告要包括问题的发现者和修改者、问题发生的频率、用了什么样的测试案例测出该问题的,以及明确问题产生时的测试环境。

问题描述尽可能是定量的,分门别类的列举,问题有几种:

1、严重问题:严重问题意味着功能不可用,或者是权限限制方面的失误等等,也可能是某个地方的改变造成了别的地方的问题。

2、一般问题:功能没有按设计要求实现或者是一些界面交互的实现不正确。

3、建议问题:功能运行得不象要求的那么快,或者不符合某些约定俗成的习惯,但不影响系统的性能,界面先是错误,格式不对,含义模糊混淆的提示信息等等。

测试计划的评审:

又叫测试规范的评审,在测试真正实施开展之前必须要认真负责的检查一遍,获得整个测试部门人员的认同,包括部门的负责人的同意和签字。

结果:

计划并不是到这里就结束了,在最后测试结果的评审中,必须要严格验证计划和实际的执行是不是有偏差,体现在最终报告的内容是否和测试的计划保持一致,然后,就可以开始着手制作下一个测试计划了。

九、报告软件测试错误的规范

报告软件测试错误的目的是为了保证修复错误的人员可以重复报告的错误,从而有利于分析错误产生的原因,定位错误,然后修正之。因此,报告软件测试错误的基本要求是准确、简洁、完整、规范。需要掌握的报告技术归纳如下。

1. 描述(Des CR iption),简洁、准确,完整,揭示错误实质,记录缺陷或错误出现的位置

描述要准确反映错误的本质内容,简短明了。为了便于在软件错误管理数据库中寻找制定的测试错误,包含错误发生时的用户界面(UI)是个良好的习惯。例如记录对话框的标题、菜单、按钮等控件的名称。

2. 明确指明错误类型:布局、翻译、功能、双字节

根据错误的现象,总结判断错误的类型。例如,即布局错误、翻译错误、功能错误、双字节错误,这是最常见的缺陷或错误类型,其他形式的缺陷或错误也从属于其中某种形式。

3. 短行之间使用自动数字序号,使用相同的字体、字号、行间距

短行之间使用自动数字序号,使用相同的字体、字号、行间距,可以保证各条记录格式一致,做到规范专业。

4. UI要加引号,可以单引号,推荐使用双引号

UI加引号,可以容易区分UI与普通文本,便于分辨、定位缺陷或错误。

5. 每一个步骤尽量只记录一个操作

保证简洁、条理井然,容易重复操作步骤。

6. 确认步骤完整,准确,简短

保证快速准确的重复错误,“完整”即没有缺漏,“准确”即步骤正确,“简短”即没有多余的步骤。

7. 根据缺陷或错误类型,选择图象捕捉的方式

为了直观的观察缺陷或错误现象,通常需要附加缺陷或错误出现的界面,以位图的形式作为附件附着在记录的“附件”部分。为了节省空间,又能真实反映缺陷或错误本质,可以捕捉缺陷或错误产生时的全屏幕,活动窗口和局部区域。为了迅速定位、修正缺陷或错误位置,通常要求附加中英文对照图。

8. 附加必要的特殊文档和个人建议和注解

如果打开某个特殊的文档而产生的缺陷或错误,则必须附加该文档,从而可以迅速再现缺陷或错误。有时,为了使缺陷或错误修正者进一步明确缺陷或错误的表现,可以附加个人的修改建议或注解。

9. 检查拼写和语法错误

在提交每条缺陷或错误之前,检查拼写和语法,确保内容正确,正确的描述错误。

10. 尽量使用业界惯用的表达术语和表达方法

使用业界惯用的表达术语和表达方法,保证表达准确,体现专业化。

11. 通用UI要统一、准确

错误报告的UI要与测试的软件UI保持一致,便于查找定位。

12. 尽量使用短语和短句,避免复杂句型句式

软件错误管理数据库的目的是便于定位错误,因此,要求客观的描述操作步骤,不需要修饰性的词汇和复杂的句型,增强可读性。

13. 每条错误报告只包括一个错误

每条错误报告只包括一个错误,可以使错误修正者迅速定位一个错误,集中精力每次只修正一个错误。校验者每次只校验一个错误是否已经正确修正。

以上概括了报告测试错误的规范要求,随着软件的测试要求不同,测试者经过长期测试,积累了相应的测试经验,将会逐渐养成良好的专业习惯,不断补充新的规范书写要求。此外,经常阅读、学习高级测试工程师的测试错误报告,结合自己以前的测试错误报告进行对比和思考,可以不断提高技巧。

十、软件测试人员结构组成分析

软件测试工程师是软件行业中一种即年轻又古老的职业,进入二十一世纪以来,随着中国加入WTO以后,从事这项职业的人也越来越多。一个公司在组

建一个测试队伍的时候如何分配人员结构,从而使公司软件测试工作水平得到提高,是大家比较关注的问题。本人依照自己的经验提出自己的观点:

我们首先来看一下测试人员的纵向结构

1,测试经理

测试经理主要负责测试队伍的内部管理以及与其他外部人员,客户的交流,详细说来主要包括进度管理,风险管理,资金管理,人力资源管理,交流管理等等,测试经理需要具有项目经理的知识和技能。同时测试工作开始前项目经理需要书写《测试计划书》,测试结束需要书写《测试总结报告》

2,测试文档审核师

测试文档审核师主要负责前置测试,包括在需求期与设计期间产生的文档进行审核,比如《业务建模书》,《需求规格说明书》,《概要设计书》,《详细设计书》等等。审核需要进行书写审核报告。当文档确定后,需要整理文档报告,并且反映介绍给测试设计师。

3,测试设计师

测试设计师主要根据需求期与设计期间产生的文档设计各个测试阶段的测试用例。

(往往测试文档审核师,测试设计师可以有相同的一组人来完成)

4,测试工程师

测试工程师按照测试用例,来完成测试工作。

但是测试人员应该有哪些人来组成呢?也就是测试人员的横向组成,让我们再来讨论讨论:

1,需要具有一定开发经验的计算机专业人员

由于具有一定开发经验的计算机专业人员即懂得计算机的基本理论,又有一定的开发经验。所以对于软件中哪里容易出错,哪里不容易出错他们了如指掌;他们可以分析程序的性能,软件性能差是否是占有内存空间太多,或者是占有CPU 时间太多引起的,还是其他原因,他们往往是专家。尤其是进行非功能测试的时候,他们可以更好的搭建系统测试平台。这种人员应该占测试队伍中一半以上。2,需要具有本软件业务经验的人员

测试队伍中需要有这样的人员的目的在于,这些人员由于对业务非常熟悉,软件质量的前提又是满足用户的需求。专业业务知识是计算机专业人员达不到的,所以这方面人才可以利用它们的业务知识和专业水平,参与系统需求期间的文当审核,可以发现软件中存在的业务性错误。比如专业用语不准确,业务流程不规范等等,这种人才对于专业性比较强的软件测试工作尤为重要,比如税务,法律,艺术,CAD,CAM…

3,只需要会操作计算机的人员

由于软件一旦卖出去之后,使用软件的人各种各样,各种各样的人带来各种各样的操作情况,请一大部分人员在软件测试工作后期进行测试工作是十分重要的,他们往往会发现专业测试人员测试不出的东西和一些希奇古怪的错误。这就是软件测试学中所谓的猴子测试法。

对于一个软件公司来说,并不是说所有的测试队伍都需要这三种人员,实际中可

以一组人代替多个角色,但是要遵循以下原则:

1,对于业务不是很专业的软件,具有一定开发经验的计算机专业人员与具有本软件业务经验的人员可以合并;

2,只需要会操作计算机的人员,可以由公司行政人员来充当。

十一、软件测试的现实和理想

“从我在微软工作的经历来看,软件测试绝对不是开发活动完成后的收尾工作,很多大型的开发项目,测试会占据项目周期一半以上的时间。以IE4.0为例,代码开发时间为6个月,而稳定程序花去了8个月的时间。”前微软亚洲研究院博士、软件测试专家陈宏刚谈道。从投入的资金和人力物力来看,测试、使产品稳定和修改花去的时间可能占到80%。

还处在婴儿期

软件测试之所以发展相对缓慢,一个原因是做研究和做开发的人交流的机会相对少。只有做大型系统工程的人才会对测试提出较高的要求,重要性才能显现出来,而做研究和教学的人没有大型系统工程案例,所以造成了测试理论研究的发展缺乏充实的基础材料。真正做大型系统开发的工程师,又没有时间将第一手的测试经验变成系统的理论。

“在美国,佛罗里达州和华盛顿州分别有一所大学开设软件测试课程,其他有正规课程的学校不是很多。软件测试正停留在没有学科系统、没有系统教育的阶段。虽然已经有学校开设了这门课程,但是使用的教学案例,多半是单机软件,还谈不上系统的理论。”陈宏刚博士介绍说。

高素质的“杂牌军”

由于企业对测试人才有着迫切的需要,因此,只好自己培养测试人才队伍。例如微软公司,对不同的产品制定测试规范,开设一些课程,通过讲座的形式对测试技术人员进行培训,但是也还未形成系统的理论。

即使在微软,测试队伍是典型的“杂牌军”,没有科班,没有统一的专业,更多的是具有丰富的经验和不同行业背景的员工,例如具有语言学、数学、物理学、计算机、工程、管理等学科等背景的员工。但是,这不是说随便什么人都可以做测试工作,陈宏刚工作过的那个试验室,20个人中有7个博士。可见,虽然测试不是一个专门的学科,但是,这个部门对于一个成熟的软件企业又是至关重要的部门。

认识需再提高

IBM和微软公司属于领先的大公司,对测试的认识也经历了一个过程。开始的时候,也是开发人员兼职做测试,就像今天国内一些较小规模的软件企业。但是,后来的结果表明,花在软件修补上面的费用太高,以至于远远超出了所能够

最新软件测评师考试基础知识名师精编资料汇编

软件评测基础知识 软件测试基本概念 软件质量与软件测试:软件测试是软件质量保证工作的一个重要环节。软件测试和软件质量保证是软件质量工程的两个不同层面的工作。软件测试只是软件质量保证工作中的一个重要环节。质量保证(QA)的工作是通过预防、检查与改进来保证软件的质量,它所关注的是软件质量的检查和测量。软件测试所关心的不是过程的活动,而是对过程的产物以及开发出的软件进行剖析。 软件测试定义:软件测试就是在软件投入运行前对软件需求分析、软件设计规格说明和软件编码进行的查错(包括代码执行活动与人工活动)。软件测试是为了发现错误而执行程序的过程。软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序的错误。是在软件投入运行前,对软件需求分析、软件设计规格说明和软件编码的最终复审,是软件质量保证的关键步骤。 软件测试目的:(1)测试是一个为了寻找错误而运行程序的过程;(2)一个好的测试用例是指很可能找到迄今为止未发现的错误的用例;(3)一个成功的测试是指揭示了迄今为止尚未发现的错误的测试。 软件测试的目标是能够以耗费最少时间与最小工作量找出软件系统中潜在的各种错误与缺陷。 测试只能证明程序中错误的存在,但不能证明程序中没有错误。 软件测试原则:(1)尽早地并不断地进行软件测试;(2)程序员或程序设计机构应避免测试自己设计的程序;(3)测试前应当设定合理的测试用例;(4)测试用例的设计不仅要有合法的输入数据,还要有非法的输入数据;(5)在对程序修改之后要进行回归测试;(6)充分注意测试中的群集现象;(7)妥善保留测试计划、全部测试用例、出错统计和最终分析报告,并把它们作为软件的组成部分之一,为软件的维护提供方便;(8)应当对每一个测试结果做全面检查;(9)严格执行测试计划,排除测试的随意性。 软件测试对象:软件的测试不仅仅是程序的测试,软件的测试应贯穿于整个软件生命同期中。在软件定义阶段产生的可行性报告、项目实施计划、软件需求说明书或系统功能说明书,在软件开发阶段产生的概要测试说明书、详细设计说明书,以及源程序等都是软件测试的对象。 软件测试过程模型:V模型、W模型、H模型。 软件测试模型的使用:在实际软件测试的实施过程中,应灵活地运用各种模型的优点,通常可以在W 模型的框架下,运用H模型的思想进行独立的测试。当有变更发生时,按X模型和前置模型的思想进行处理。同时,将测试和开发紧密结合,寻找恰当的就绪点开始测试,并反复进行迭代测试,以达到按期完成预定的目标。 软件问题分类:软件错误、软件缺陷、软件故障、软件失效。 软件测试类型: 按开发阶段分:单元测试、集成测试、确认测试(有效性测试)、系统测试 确认测试、验收测试 按测试实施组织分:开发方测试(验证测试或alpha测试)、用户测试(beta)、第三方测试(独立测试) 按测试方式分:动态测试、静态测试 按测试技术分:白盒测试、黑盒测试、灰盒测试 软件测试过程:用黑盒法设计基本的测试方案,再利用白盒法补充一些必要的测试方案。可以用以下策略结合各种方法: (1)在任何情况下都应该使用边界值分析的方法; (2)必要时用等价划分法补充测试方案; (3)必要时用错误推测法补充测试方案; (4)如果在程序的功能说明中含有输入条件的组合,最好在一开始就用因果图法,然后再按以上(1)、(2)、(3)步进行。 (5)对照程序逻辑,检查已设计出的设计方案。可以根据对程序可靠性的要求采用不同的逻辑覆盖标

软件测试工程师必备知识

一、基本常识类 1.计算机基础知识 2.计算机网络基础知识 3.软件测试基本知识(软件质量,软件质量管理基础知识,软件测试概念,软件测试标准,软件测试技术及方法,软件测试项目管理) 4.软件开发基本知识(软件工程知识,理解软件开发方法及过程) 二、技术类 1.程序语言 C/C++,VB,VC,Java,.net,ASP,Javascrīpt等。具体要求要视公司的具体项目或产品来定。但一般以C为基本要求。 2.数据库知识

SQL Server,Oracle,Mysql,Sybase 等。一般对测试人员的要求就是要求会使用,然后熟练使用SQL语句进行查询,修改,添加,删除数据操作。 3.操作系统 Windows,Linux(常用的RedHat,SUSE,Debian)/Unix(FreeBSD,Solaris,HP-UX,AIX,Mac)系统。 三、自动化测试工具类 1.自动化测试概念/自动化测试框架好多人觉得自动化测试就是使用自动化测试工具,其实各种工具只是自动化测试实施的一个有效利器,如何建立一个脱离工具的自动化测试框架远远比研究如何使用测试工具复杂,困难的多。 2.自动化测试流程

3.自动化测试工具的使用自动化测试框架(流程)GUI的功能测试自动化非GUI的功能测试自动化性能测试(广义的和狭义的性能测试)自动化测试工具(功能测试工具,性能测试工具,缺陷管理工具,测试管理工具)(HP)Mercury Interactive QuickTest Pro,WinRunner,LoadRunner,Quality Center(Test Director),SiteScope Compuware QACenter(TestPartner QARun QALoad QADirector TrackRecord),DevPartner studio (IBM)Rational TestSuite(Robot TestManager FunctionalTester PerformeranceTester ClearQuest ClearCase ...)(Borland)Segue SilkTest SilkPerformer SCTestManager 其它:JUnit,NUnit,Auto It,Test Architect,OpenSTA等

软件测试技术知识点

一、软件测试的定义 软件测试是一个过程或一系列过程,用来确认计算机代码完成了其应该完成的功能,不执行其不该有的操作。 1.软件测试与调试的区别? (1)测试是为了发现软件中存在的错误;调试是为证明软件开发的正确性。 (2)测试以已知条件开始,使用预先定义的程序,且有预知的结果,不可预见的仅是程序是否通过测试;调试一般是以不可知的内部条件开始,除统计性调试外,结果是不可预见的。 (3)测试是有计划的,需要进行测试设计;调试是不受时间约束的。 (4)测试经历发现错误、改正错误、重新测试的过程;调试是一个推理过程。(5)测试的执行是有规程的;调试的执行往往要求开发人员进行必要推理以至知觉的"飞跃"。 (6)测试经常是由独立的测试组在不了解软件设计的条件下完成的;调试必须由了解详细设计的开发人员完成。 (7)大多数测试的执行和设计可以由工具支持;调式时,开发人员能利用的工具主要是调试器。 2.对软件测试的理解?

软件测试就是说要去根据客户的要求完善它.即要把这个软件还没有符合的或者是和客户要求不一样的,或者是客户要求还没有完全达到要求的部分找出来。 (1)首先要锻炼自己软件测试能力,包括需求的分析能力,提取能力,逻辑化思想能力,即就是给你一个系统的时候,能够把整个业务流程很清晰的理出。 (2)学习测试理论知识并与你锻炼的能力相结合。 (3)想和做。想就是说你看到任何的系统都要有习惯性的思考;做就是把实际去做练习,然后提取经验。 总结测试用例,测试计划固然重要,但能力和思想一旦到位了,才能成为一名合格的软件测试工程师。 二、软件测试的分类 1.按照测试技术划分 (1)白盒测试:通过对程序内部结构的分析、检测来寻找问题。检查是否所有的结构及逻辑都是正确的,检查软件内部动作是否按照设计说明的规定正常进行。--结构测试 (2)黑盒测试:通过软件的外部表现来发现错误,是在程序界面处进行测试,只是检查是否按照需求规格说明书的规定正常实现。--性能测试 (3)灰盒测试:介于白盒测试与黑盒测试之间的测试。

软件测试基本知识

软件测试基本知识 1、测试的定义 软件测试是软件工程过程的一个重要阶段,是在软件发布前对软件开发各阶段产品的最终检查,是为了保证软件开发产品的正确性、完全性和一致性而检测软件错误、修正软件错误的过程。 软件测试是: ①程序测试是为了发现错误而执行程序的过程; ②测试是为了证明程序有错,而不是证明程序无错误; ③一个好的测试用例是在于它能发现至今未发现的错误; ④一个成功的测试是发现了至今未发现的错误的测试。 软件开发的目的是开发出实现用户需求的高质量、高性能的软件产品,而软件测试是以检查软件功能和其他非功能特性为核心,是软件质量保证的关键,也是成功实现软件开发目标的重要保障。 2、测试的种类 从测试方法角度,测试分为: 1.黑盒测试:是功能测试、数据驱动测试或基于规格说明的测试。在不考虑程序内部结构和内部特性的情况下,测试者依据该程序功能上的输入输出关系,或是程序的外部特性来设计和选择测试用例,推断程序编码的正确性。 2.白盒测试:是结构测试、逻辑驱动测试或基于程序的测试。测试者熟悉程序的内部结构,依据程序模块的内部结构来设计测试用例,检测程序代码的正确性 从测试发生的时间顺序,测试分为: 1.单元测试:是对软件基本单元的测试 2.集成测试:对由个模块组装而成的系统进行测试,检查各模块间的接口和通信 3.验收测试:验证软件的功能和性能及其它特性是否与用户的要求一致。 4.系统测试:是将通过验收测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列确认测试。系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方。 在MSF中,测试分为2大类:

软件测试基础知识整理

软件测试基础教程 测试是软件生存周期中十分重要的一个过程,是产品发布、提交给最终用户前的稳定化阶段。 一、测试的分类: 从测试方法的角度分为: (1)手工测试:不使用任何测试工具,根据事先设计好的测试用例来运行系统,测试各功能模块。 (2)自动化测试:利用测试工具,通过编写测试脚本和输入测试数据,自动运行测试程序。目前最常用的自动化测试工具是基于GUI的自动化测试工具,基本原理都是录制、回放技术。 > 从整体的角度分为: (1)单元测试:是针对软件设计的最小单位—程序模块,进行正确性检验的测试工作。一般包括逻辑检查、结构检查、接口检查、出错处理、代码注释、输入校验、边界值检查。单元测试的依据是系统的详细设计;一般由项目组开发人员自己 完成。 (2)集成测试:在单元测试的基础上,将所有模块按照设计要求组装进行测试。一般包括逻辑关系检查、数据关系检查、业务关系检查、模块间接口检查、外部接口检查。 (3)系统测试:系统测试是在所有单元、集成测试后,对系统的功能及性能的总体测试。 (4)确认测试:模拟用户运行的业务环境,运用黑盒测试方法,验证软件系统是否满足用户需求或软件需求说明书中指明的软件特性(功能、非功能)上的。 从测试原理上分为: . (1)白盒测试:是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。 (2)黑盒测试:是通过使用整个软件或某种软件功能来严格地测试,而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。在测试时, 把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它 只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收和正确的输出。 黑盒测试方法主要有等价类划分、边界值分析、因—果图、错误推测法。 A、等价类划分:是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子 集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试 用例设计方法。 B、边界值分析:长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是 发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错 误。 C、错误推测法:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的 方法。错误推测方法的基本思想:列举出程序中所有可能有的错误和容易发生错误的特 殊情况,根据他们选择测试用例。例如,在单元测试时曾列出的许多在模块中常见的 错误。以前产品测试中曾经发现的错误等,这些就是经验的总结。还有,输入数据 和输出数据为0的情况。输入表格为空格或输入表格只有一行。这些都是容易发生错 误的情况。可选择这些情况下的例子作为测试用例。

软件测试基础知识汇总

黑盒测试主要是为了发现以下错误: 1、是否有不正确或遗漏的功能? 2、在接口上,输入能否正确地接受?能否输出正确的结果? 3、是否有数据结构错误或外部信息(例如数据文件)访问错误? 4、性能上是否满足要求? 5、是否有初始化或终止性错误? 黑盒测试用例方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交实验设计法、功能图法。 等价类划分法:把程序的输入域划分为若干部分,然后从每个部分中选取少数代表性数据作为测试用例,每一类的代表性数据在测试的作用等价于这一类中的其他值。 边界值分析法:对输入或输出的边界值进行测试,通常边界值分析法是作为等价类划分的补充,其测试用例来自等价类的边界。 错误分析法:基于经验和直觉推测程序中可能存在的错误,从而对有针对性的设计测试用例的方法。 因果图法:利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。 判定表驱动法:判定表是分析和表达多逻辑条件下执行不同操作的。 正交实验法:从大量的数据中挑选适量的,有代表性的点,从而合理地安排实验的一种科学测试方法。 功能图法:由状态迁移图和布尔函数组成,状态迁移图用状态和迁移来描述,一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变,同时要依靠判定表或因果图表示的逻辑功能。 折叠LR函数: lr_start_transaction 为性能分析标记事务的开始 lr_end_transaction 为性能分析标记事务的结束 lr_rendezvous 在Vuser 脚本中设置集合点 lr_think_time 暂停Vuser 脚本中命令之间的执行 lr_end_sub_transaction 标记子事务的结束以便进行性能分析

软件测试自学指南

软件测试自学指南 软件测试自学指南一、软件测试基础知识 要想进入测试这个行业,就必须要了解什么是软件测试,该如何测试? 这部分的学习目标:掌握软件测试的基本概念、软件测试的流程,并能熟练的应用常见的用例设计方法来设计测试用例。掌握常见的测试方法和类型,并知道如何进行每个阶段的测试。 下面是推荐的参考书: 1、软件测试(原书第2版) (美)佩腾(Patton,R.)著,张小松等译 这本书可以用来作为进入行业的第一本书,本书讲解的都是实用的技术,通过阅读本书可以快速的去学会如何测试软件。个人建议,这本书至少要读3遍以上。 看完这本书,自己可以去找一个项目(可以到开源中国上查找)来测一测,应用一下学的知识,找一找缺陷。在测试这个项目中要体会一下测试的流程,学习如何搭建测试环境。 2、软件测试的艺术(原书第3版) (美)梅耶等 第二本就是这本软件测试的“圣经”,这本书据说是硅谷测试人员必备的书。这本书最值得看的地方就是测试的思想。阅读这本书可以让你有豁然开朗的感觉。 3、计算机软件测试(原书第2版)(美)卡尼尔 这本书也是值得一读的,同样也是非常适合初学者阅读的。 4、全程软件测试朱少民 上面的都是外国人写的,来本国产的。 还有很多经典的测试书,例如:Paul C.Jorgensen的软件测试(第2版)这本书,但是笔者认为他不是很适合初学者,这本书都是用来做研究生教材的,做过一段测试的可以来看看。 二、软件测试进阶书籍 这部分主要是针对有过一年左右测试经验的,真正测试过几个项目的。推荐的参考书主要是提高测试效率的,一些测试的经验。 1、有效软件测试

这本书主要是给软件测试的各个阶段提出了一些建议,一共50条。这些建议都十分中肯,值得一读。 2、软件测试经验与教训 听书名也应该了解了一大半了吧,这本书一共给出了293条经验,阅读它吧。它会让你重新思考关于测试的基本理论。 还有一些很好的书籍了,但是没有读过的就不做推荐了。 三、自动化测试 我们都知道,目前自动化测试是软件测试的趋势,而且目前公司在招聘的过程中都会考察自动化相关的知识。这里我们介绍一下QTP和Loadrunner等测试工具。 目标:掌握自动化测试的概念、流程和方法。能够使用相关的工具进行自动化的测试。QTP部分: 目标:掌握QTP的测试流程、工作原理和基本使用。能够使用QTP进行自动化测试。进阶需要掌握自动化框架设计的原理,并能独立设计自动化框架。 目前网络资源很丰富,有很多前辈录制了很多视频,大家可以先来看看。 1、IT播吧- 小强老师零基础学习软件测试系列视频教程之QTP学习指南 首先可以先看这套视频,这里主要讲的是QTP的基本使用。学习视频的过程中,最好能够独立的测试QTP自带的飞机订票的例子。这个最好了,QTP的基本使用就没问题了。 2、精通QTP——自动化测试技术领航余杰赵旭斌编著 第一个视频还是讲的录制和回放,并且也是以飞机订票作为的例子,但是实际工作中,很少有录制的项目,基本上都是需要自己开发脚本的。所以这本书会给你很大帮助的。 3、QTP自动化测试权威指南(第二版) 这本是QTP的大牛Tarun Lalwani的经典力作,公认的QTP测试的“圣经”。无论是初学者还是使用过QTP的都应该好好的读一读。

软件测试基础知识总结

一、什么是软件测试? 1979年,myer:软件测试就是为了发现错误而执行程序或系统的过程。 1983年,IEEE:软件测试即使用人工或自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 二、现代软件测试活动的内容? 制定测试计划、设计测试用例、实施测试、提交缺陷报告、测试总结 三、软件测试的目的? GrenfordJ.Myers在《The Art of Software Testing》一书中的观点: 1、测试是程序的执行过程,目的在于发现错误 2、一个成功的测试用例在于发现至今未发现的错误 3、一个成功的测试是发现了至今未发现的错误的测试 简单的说,测试的根本目的就是确保最终交给用户的产品符合用户的需求,在产品交给用户之前尽可能多的发现并改正问题。 四、测试一般要达到的目标? 确保产品完成了它所承诺或公布的功能,并且用户可以访问到的功能都有明确的书面说明; 确保产品满足性能和效率的要求; 确保产品是健壮的和适应用户环境的。 五、软件测试分类? 1、按测试策略分类: a静态测试与动态测试 静态测试 定义:不运行被测程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程。 Ps:通过分析或检查源程序的文法、结构、过程、接口等来检验程序的正确性,找出缺陷和可疑之处,例如不匹配的参数、不适当的分支嵌套和循环嵌套、未使用过的变量、空指针的引用等;可采用人工和软件工具进行;静态测试工具的代表:telelogic公司的logiscope 软件、PR公司的PRQA软件等。 静态测试特点: 不必动态地运行程序,也不必进行测试用例设计和结果判断等工作; 可由人工进行,充分发挥人得逻辑思维优势; 不需要特别的条件,容易展开。 静态测试要点: 代码审查(code inspection或code review)、代码走查(walkthrough)、桌面检查、技术评审(软件需求分析和设计评审)、静态分析(使用软件工具,包括控制流分析、数据流分析、接口分析和表达式分析) 动态测试 定义:实际运行被测程序,输入相应的测试实例,检查运行结果和预期结果的差异,判断执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性,并分析系统运行效率和健壮性等性能。 组成:构造测试实例、根据测试实例运行程序、分析程序的输出结果。 主要方法:黑盒测试和白盒测试。 动态测试特点: 实际运行被测试程序,取得程序运行的真实情况、动态情况,并进行分析; 必须生成测试数据来运行程序,测试质量依赖于测试数据;

软件测试必备基础知识

软件测试必备基础知识 一、基本概念 软件测试 在规定条件下对程序进行操作,以发现错误,对软件质量进行评估,包括对软件形成 过程的文档、数据以及程序进行测试 软件测试的目的 发现程序中存在的错误发现程序中存在的错误,而不是证明程序无错误。一个好的测试用例在于它能发现至今尚未发现的错误。一个成功的测试则是发现了至今未发现的错误。开始我们认为做测试无非是为了证明我们编的程序是无错误的,那是大错特错了。因为bug会因时间不同,条件不同而出现。永远无法证明我们的程序是绝对正确的。 为反馈信息做准备为开发者或软件项目经理提供反馈信息,以及为风险评估所准备的信息 软件测试的原则 所有的测试都应追溯到用户需求。因为软件的目的是使用户完成预定的任务,满足其 需求,而软件测试揭示软件的缺陷和错误,一旦修正这些错误就能更好地满足用户需求。 应尽早地和不断地进行软件测试。由于软件的复杂性和抽象性,在软件生命周期各阶 段都可能产生错误,所以不应把软件测试仅仅看作是软件开发的一个独立阶段,而应当把 它贯穿到软件开发的各个阶段去。在需求分析和设计阶段就应开始进行测试工作,编写相 应的测试计划及测试设计文档,同时坚持在开发各阶段进行技术评审和验证,这样才能尽 早发现和预防错误,杜绝某些缺陷和错误,提高软件质量,测试工作进行得越早,越有利 于提高软件的质量,这是预防性测试的基本原则。 在有限的时间和资源下进行完全测试,找出软件所有的错误和缺陷是不可能的,软件 测试不能无限进行下去,应适时终止。因为,测试输入量大、输出结果多、路径组合太多,用有限的资源来达到完全测试是不现实的。

测试只能证明软件存在错误而不能证明软件没有错误。测试是无法显示潜在的错误和缺陷,继续进一步错误可能还会找到其它错误和缺陷。 充分关注测试中的集群现象。在测试的程序段中,若发现的错误数目多,则残存在其中的错误也越多,因此应当花较多的时间和代价测试那些具有更多错误数目的程序模块。 程序员应避免检查自己的程序。考虑到人们的心理因素,自己揭露自己程序中的错误是件不愉快的事,自己不愿意否认自己的工作;另一方面,由于思维定势,自己难以发现自己的错误。因此,测试一般由独立的测试部门或第三方机构进行。 尽量避免测试的随意性。软件测试是有组织、有计划、有步骤的活动,要严格按照测试计划进行,要避免测试的随意性。 软件测试对象 程序开发过程中的各个文档、源程序、目标程序及数据 软件测试的模型 V模型 从左到右,描述了基本的开发过程和测试行为,非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系。 左边依次下降的是开发过程各阶段,与此相对应的是右边依次上升的部分,即各测试过程的各个阶段。 V模型问题: "测试是开发之后的一个阶段,"测试的对象就是程序本身。 "实际应用中容易导致需求阶段的错误一直到最后系统测试阶段才被发现。 "整个软件产品的过程质量保证完全依赖于开发人员的能力和对工作的责任心,而且上一步的结果必须是充分和正确的,如果任何一个环节出了问题,则必将严重的影响整个工程的质量和预期进度 W模型相对于V模型,W模型更科学。W模型是V模型的发展,强调的是测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、功能和设计同样要测试。测试与开发是同步进行的,从而有利于尽早地发现问题。 W模型也有局限性。W模型和V

软件测试基础知识适合初学者

软件测试基本概念 1、软件=程序+文档,软件测试=程序测试+文档测试。 “程序”是指能够实现某种功能的指令的集合,“文档”是指软件在开发、使用和维护过程中产生的图文集合。; 2、软件的分类 按功能分:系统软件、应用软件 按技术架构分:单机版软件、C/S结构软件(C是指客户端,S指服务器端)、B/S结构软件(B是指浏览器) 按照用户划分:产品软件、项目软件 按开发规模划分:小型、中型、大型 3、BUG的定义:软件的BUG指的是软件中(包括程序和文档)不符合用户需求的问题。常见的软件BUG分三种类型:完全没有实现的功能;基本实现了用户需求的功能;实现了用户不需要的功能。 4、测试环境=软件+网络+硬件。搭建环境:真实、干净、无毒、独立 5、软件环境的分类:软件开发环境软件生产运行环境 6、测试用例:指在测试执行之前设计的一套详细的测试方案,包括测试环境、测试步骤、测试数据和与其结果!测试用例=输入+输出+测试环境。测试用例有两个模板,word和excel,前者适合性能测试,后者适合功能测试。 软件测试分类 1、黑盒测试:指的是把被测的软件看作是一个黑盒子,我们不去关心盒子里面的结构是什么样子的,只关心软件的输入数据和输出结果 白盒测试:指的是把盒子盖打开,去研究里面的源代码和程序结构。 2、静态测试:是指不实际运行被测软件,而只是静态的检查程序代码、界面或文档中可能存在的错误的过程。 动态测试:是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程,所以我们判断一个测试属于动态测试还是静态测试,唯一的标准就是看是否运行程序。

注:同一个测试,既有可能属于黑盒测试,也有可能属于动态测试;既有可能属于静态测试,也有可能属于白盒测试。他们之间也有可能交叉。 3、单元测试:编译运行程序——静态测试——动态测试 集成测试:是单元测试的下一个阶段,是指将通过测试的单元模块组装成系统或子系统,再进行测试,重点测试不同模块的接口部分。 系统测试:指的是将整个软件系统看作1个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。 验收测试:指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保障人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序. 验收测试又分为α测试和β测试,其实α测试指的是由用户、测试人员、开发人员等共同参与的内部测试,而β测试指的是内侧后的公测,即完全交给最终用户测试。 4、功能测试:是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求。功能测试又可以细分为很多种:逻辑功能测试、界面测试、易用性测试、安装测试、兼容性测试等。 性能测试:软件的性能包括很多方面,主要有时间性能和空间性能两种。时间性能:主要指软件的一个具体事务的响应时间。空间性能:主要指软件运行时所消耗的系统资源。 软件性能测试分为一般性能测试、稳定性测试、负载测试和压力测试。一般性能测试指的是让被测系统在正常的软硬件环境下运行,不向其十佳任何压力的性能测试。稳定性测试,也叫可靠性测试,是指连续运行内测系统,检查系统运行时的稳定程度。我们通常用MTBF (错误发生的平均时间间隔)来衡量系统的稳定性,越大稳定性越强。负载测试是性能测试的一种,通常是指让被测系统在其能忍受的眼里的极限范围之内连续运行,来测试系统的稳定性。压力测试是性能测试的一种,通常是指连续不断地给被测系统增加压力,直到将被测系统压垮为止,用来测试系统所能承受的最大压力。 假设一个人很轻松的就能背一袋米,背两袋米很吃力,最多就能背三袋米,那么: 一般性能测试:我就让他背一袋米 稳定性测试:我让他背一袋米,但是让他去操场上跑圈,看多久累倒。 负载测试:我让他背两袋米去操场上跑圈,看多久累倒。 压力测试:我让他背两袋米,三袋米,四袋米......发现他最多就能背三袋米。 5、回归测试:是指对软件的新的版本测试时,重复执行上一个版本测试时的用例 冒烟测试:是指在对一个新版本进行西戎大规模的测试之前,先验证一下软件的基本功

软件测试基础知识

软件测试基础知识(摘自《软件评测师教程》) 什么是软件测试? RE:“软件测试”的经典定义是在规定条件下对程序进行操作,以发现错误,对软件质量进行评估。 什么是软件质量? RE:在1991年软件产品质量评价国际标准ISO 9126中定义的“软件质量”是:软件满足规定或潜在用户需求特性的综合。 到1999年,软件“产品评价”国际标准ISO 14598经典的“软件质量”定义是:软件特性的总和,软件满足规定或潜在用户需求的能力。 软件测试的目的是什么? RE:测试的目的,是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。 同时,测试是以评价一个程序或者系统属性为目标的活动,测试是对软件质量的度量与评估,以验证软件的质量满足用户的需求的程度,为用户选择与接受软件提供有力的依据。 软件测试的原则是什么? RE:A 所有的软件测试都应追溯到用户需求。 B 应当把“尽早地和不断地进行软件测试”作为软件测试者的座右铭。 C 完全测试是不可能的,测试需要终止。 D 测试无法显示软件潜在的缺陷。 E 充分注意测试中的群集现象。 F 程序员应避免检查自己的程序。 G 尽量避免测试的随意性。 什么是黑盒测试? RE:黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。 黑盒测试法注重于测试软件的功能需求,主要试图发现下列积累错误::. A 功能不正确或遗漏; B 界面错误; C 数据库访问错误; D 性能错误; E 初始化和终止错误。 什么是测试用例? RE:测试用例就是设计一个情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的执行结果。测试用例是将测试行为具体量化的方法之一。 使用测试用例的好处是什么? RE:A 在开始实施测试之前设计好测试用例,可以避免盲目测试并提高测试效率。 B 测试用例的使用令软件测试的实施重点突出、目的明确。 C 在软件版本更新后只需修正少部分的测试用例便可展开测试工作,降低工作强度,缩短项目周 期。 D 功能模块的通用化和复用化使软件易于开发,而测试用例的通用化和复用化则会使软件测试易 于开展,并随着测试用例的不断精化其效率也不断攀升。

软件测试基础知识大全新手入门必备

1.软件生命周期(SDLC)的六个阶段 1、问题的定义及规划 此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。 2、需求分析 在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。"唯一不变的是变化本身。",同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。 3、软件设计 此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。 4、程序编码 此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。 5、软件测试 在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。 6、运行维护 软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。 2、软件生命周期模型 从概念提出的那一刻开始,软件产品就进入了软件生命周期。在经历需求、分析、设计、实现、部署后,软件将被使用并进入维护阶段,直到最后由于缺少维护费用而逐渐消亡。这样的一个过程,称为"生命周期模型"(Life Cycle Model)。 典型的几种生命周期模型包括瀑布模型、快速原型模型、迭代模型。

软件测试必备基础知识总结

软件测试必备基础知识总结 作者:Kevin老师 什么是软件测试 软件测试是使用人工操作或者软件自动运行的方式来检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程。本质:软件测试是为发现软件错误而执行程序的过程。 例如场景:淘宝网用户登陆 大家都有在淘宝购物的经历吧,如果想要在淘宝进行购物,就必须登陆后才能进行。 那么能够登陆的前提是什么呢?必须是淘宝网的注册用户。 登陆的步骤是什么呢?在下图1中输入已经注册的用户名>输入已设定的密码>点击“登陆”按钮,步骤非常简单。 大家也一定会遇到过用户名和密码输入错误而无法登陆的情况,此时就需要重新的输入用户名和密码进行再次登陆。 上述场景对淘宝中匹配的用户名和密码能够成功登陆而非匹配的用户名和密码不能登陆的简单验证就是“软件测试”。

图1 什么是测试用例 测试用例是将软件测试的行为活动做一个科学化的组织归纳,目的是能够将软件测试的行为转化成可管理的模式。基础内容包括:测试目标描述、输入数据、测试步骤、预期结果。可能会根据各个公司模板的不同,增加用例编号、模块、用例编写人、创建日期、前提条件等内容。 我们以“淘宝网用户登陆”这个场景为例进行用例设计,把场景中的描述语言转化为用例的设计方法如下: 用例模板实例 编号模 块 用例描述前提条 件 输入 数据 测试步骤预期 结果 实际 结果 1登 陆验证未登陆 用户不能够 购物 用户未 登陆 1.访问淘 宝网 2.购买任 一商品 弹出 用户 登陆 对话 框 2登验证输入正用户已用户 1.访问淘 1.登

陆确的用户名 和密码能够 登陆经注册名: Kevin 密码: 1234 56 宝网 2.购买任 一商品 3.在弹出 的用户登 陆对话框 中输入测 试数据中 的用户名 和密码 4.点击“登 陆”按钮 陆成 功 2.进 入付 款页 面 3登 陆验证输入错 误的用户名 和密码不能 够登陆 用户已 经注册 用户 名: Kevin 密码: 6543 21 1.访问淘 宝网 2.购买任 一商品 3.在弹出 的用户登 陆对话框 中输入测 试数据中 的用户名 和密码 4.点击“登 陆”按钮 1.登 陆失 败 2.未 进入 付款 页面 测试用例设计简单吧!接下来想一下登陆模块的扩展吧!例如:

测试基础知识总结

目录: 第一章、软件工程学 第二章、软件测试基础 第三章、基于生命周期软件测试 第四章、软件测试分类与分级 第五章、软件缺陷管理(*)常见缺陷状态说明(*)第六章、软件测试过程及管理(*)测试计划(*)第七章、软件静态测试 第八章、动态测试 第一章、软件工程学 1.软件的定义:软件由数据:该程序能够具体满意地处理信息的数据结构程序:当运行时, 能够提供所要求功能和性能的指令或计算机程序集合;文档:描述程序功能需求以及程序如何操作和使用文档。 2.软件危机的产生:软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需 求,从而导致软件开发与维护过程中出现一系列严重问题的现象。 3.软件危机的原因1)需求不明确2)缺乏正确的理论指导3)软件开发规模越来越大4) 软件开发复杂度越来越高 4.消除软件危机的办法对计算机软件有一个正确的认识(软件≠程序)充分认识到软件 开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目推广使用在实践中总结出来的开发软件成功技术和方法开发和使用更好的软件工具 5.软件工程 方法 项目计划与估算需求分析数据结构总体设计编码、测试与维护等 工具 软件工具软件支撑环境计算机辅助软件工程(CASE)等 过程 方法使用的顺序需交付的文档变更管理里程碑管理等 软件生命周期(*)SRS:计划,分析,设计,编码,测试,运行和维护。 软件生命周期模型(*)

瀑布模型: V模型强调软件开发的协作和速度,将软件实现和验证有机地结合起来,在保证较高的软件质量情况下缩短开发周期。 迭代模型: 4.1 敏捷开发的定义是一种以用户的需求进化为核心、迭代、循序渐进的开发方法。 敏捷开发的特点:变强调软件开发对未来可能出现的变化和不确定性做出全面反应 早总体目标是尽可能早地、持续地对有价值软件的交付 快主要是用于需求模糊或快速变化的前提下,小型开发团队的软件开发活动 软件开发主流技术 主机终端模式 文件服务器模式 C/S模式客户/服务器模式

软件测试基础知识大全(新手入门必备)

1. 软件生命周期(SDLC)的六个阶段 1、问题的定义及规划 此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。 2、需求分析 在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。"唯一不变的是变化本身。",同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。 3、软件设计 此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。 4、程序编码 此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。 5、软件测试 在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。 6、运行维护 软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。 2、软件生命周期模型 从概念提出的那一刻开始,软件产品就进入了软件生命周期。在经历需求、分析、设计、实现、部署后,软件将被使用并进入维护阶段,直到最后由于缺少维护费用而逐渐消亡。这样的一个过程,称为"生命周期模型"(Life Cycle Model)。 典型的几种生命周期模型包括瀑布模型、快速原型模型、迭代模型。

软考软件测评师基础知识辅导

软考软件测评师基础知识辅导

————————————————————————————————作者:————————————————————————————————日期:

2011年软考软件测评师基础知识辅导(1) 软件评测基础知识 软件测试基本概念 软件质量与软件测试:软件测试是软件质量保证工作的一个重要环节。软件测试和软件质量保证是软件质量工程的两个不同层面的工作。软件测试只是软件质量保证工作中的一个重要环节。质量保证(QA)的工作是通过预防、检查与改进来保证软件的质量,它所关注的是软件质量的检查和测量。软件测试所关心的不是过程的活动,而是对过程的产物以及开发出的软件进行剖析。 软件测试定义:软件测试就是在软件投入运行前对软件需求分析、软件设计规格说明和软件编码进行的查错(包括代码执行活动与人工活动)。软件测试是为了发现错误而执行程序的过程。软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序的错误。是在软件投入运行前,对软件需求分析、软件设计规格说明和软件编码的最终复审,是软件质量保证的关键步骤。 软件测试目的:(1)测试是一个为了寻找错误而运行程序的过程;(2)一个好的测试用例是指很可能找到迄今为止未发现的错误的用例;(3)一个成功的测试是指揭示了迄今为止尚未发现的错误的测试。 软件测试的目标是能够以耗费最少时间与最小工作量找出软件系统中潜在的各种错误与缺陷。 测试只能证明程序中错误的存在,但不能证明程序中没有错误。 软件测试原则:(1)尽早地并不断地进行软件测试;(2)程序员或程序设计机构应避免测试自己设计的程序;(3)测试前应当设定合理的测试用例;(4)测试用例的设计不仅要有合法的输入数据,还要有非法的输入数据;(5)在对程序修改之后要进行回归测试;(6)充分注意测试中的群集现象;(7)妥善保留测试计划、全部测试用例、出错统计和最终分析报告,并把它们作为软件的组成部分之一,为软件的维护提供方便;(8)应当对每一个测试结果做全面检查;(9)严格执行测试计划,排除测试的随意性。 软件测试对象:软件的测试不仅仅是程序的测试,软件的测试应贯穿于整个软件生命同期中。在软件定义阶段产生的可行性报告、项目实施计划、软件需求说明书或系统功能说明书,在软件开发阶段产生的概要测试说明书、详细设计说明书,以及源程序等都是软件测试的对象。 软件测试过程模型:V模型、W模型、H模型。 软件测试模型的使用:在实际软件测试的实施过程中,应灵活地运用各种模型的优点,通常可以在W模型的框架下,运用H模型的思想进行独立的测试。当有变更发生时,按X模型和前置模型的思想进行处理。同时,将测试和开发紧密结合,寻找恰当的就绪点开始测试,并反复进行迭代测试,以达到按期完成预定的目标。 软件问题分类:软件错误、软件缺陷、软件故障、软件失效。 软件测试类型: 按开发阶段分:单元测试、集成测试、确认测试(有效性测试)、系统测试 确认测试、验收测试 按测试实施组织分:开发方测试(验证测试或alpha测试)、用户测试(beta)、第三方测试(独立测试) 按测试方式分:动态测试、静态测试 按测试技术分:白盒测试、黑盒测试、灰盒测试 软件测试过程:用黑盒法设计基本的测试方案,再利用白盒法补充一些必要的测试方案。可以

软件测试基础知识点整理

1:软件可靠性的定义(P2) 答:系统在特定环境下,在给定的时间内无故障运行的概率。 2:软件缺陷的主要原因(P5) 答:源于软件需求规格说明书。 3:软件测试的定义(P9) 答:(1)软件测试是为了发现错误而执行程序的过程。 (2)软件测试是根据软件开发各阶段的规格说明和程序内部结构而精心设计的一批测试用例。并利用这些测试用例运行程序以及发现错误的过程,即执行测试步骤。 4:什么是测试用例(P9) 答:测试用例是为特定目的而设计的一组测试输入、执行条件和预期的结果; 它是执行测试的最小实体。 5:软件测试的目标(P11) 答:(1)测试是程序的执行过程,目的在于发现错误,不能证明程序的正确性,仅限于处理有限的情况。 (2)检查系统是否满足需求,这也是测试的期望目标。 (3)一个好的测试用例在于发现未曾发现的错误,成功的测试是发现了错误的测试。 6:软件测试的原则(P11) (1)尽早、及时 (2)测试用例包括测试数据和预期结果。 (3)程序提交测试后,应由专门测试人员测试,避免由设计者自行检查。(4)测试用例应包括合理输入条件和不合理的输入条件。 (5)严格执行测试,排除测试的随意性。 (6)充分注意测试当中的群体现象。 (7)应对每一个测试结果做全面的检查。 (8)保存测试相关文档。 7:什么是α测试,什么是β测试(P16) α测试是在开发环境下进行的测试即内测

β测试是用户实际使用环境下进行的测试即公测 8:软件开发和软件测试各阶段的联系(P26) 9:软件测试过程(P33) 制定测试计划——设计测试用例——执行测试用例——写测试报告 10:软件测试执行的三个阶段(P35) 初测期细测期回归测试期 11:集成测试过程的两个重要里程碑——功能冻结和代码冻结的概念 功能(特征)冻结:经过测试,符合设计要求,确认系统功能和其他特性均不再做任何改变。 代码冻结:理论上,在无错误时代码冻结,但实际上,代码冻结只标志系统的当前版本的质量达到预期的要求,冻结程序的源代码,不再对其做任何修改。(P36) 12:CMM的五个等级(P42) 初始级可重复级已定义级已管理级优化级 13:关键过程域概念(P44) 所谓关键过程域是指一系列相互关联的操作活动,这些活动反映了一个软件组织改进软件过程是必须集中力量改进的几个方面,关键过程域包含了达到某个成熟程度级别时必须满足的条件。 14:软件测试充分性准则(理解)P54 (1)对任何软件系统都存在有限的充分测试集合。 (2)如果一个软件系统在一个测试数据集合的测试是充分的,那么再次测试一些测试数据也应该是充分的,这一特性称作测试的单调性。 (3)即使对软件所有的组成成分都进行了充分的测试,也不能表明整体软件系统的测试已经充分了,这一特性称作测试的非复合性。 (4)即使对软件系统整体的测试是充分的,也不能证明软件系统中各组成成分都已经充分地得到了测试,这一特性称作测试的非分解性。

相关主题