Everything should be tracked!

软件测试入门基础

上一篇 / 下一篇  2008-12-02 16:51:45 / 个人分类:测试资料

    软件测试是软件开发过程的重要组成部分,是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。软件测试是为了发现错误而执行程序的过程。软件测试在软件生存期中横跨两个阶段:通常在编写出每一个模块之后就对它做必要的测试(称为单元测试)。编码和单元测试属于软件生存期中的同一个阶段。在结束这个阶段后对软件系统还要进行各种综合测试,这是软件生存期的另一个独立阶段,即测试阶段。
^E3xn0sx0
SRT)lr5_;UF0一、软件测试的目的
-FzCI9w0
4}ajz7ou.Q0g1X0      软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Do the right thing),另一方面是确认软件以正确的方式来做了这个事件(Do it right)。
#]2q8N(Pd051Testing软件测试网4f(@nf&_ZB'gl5}N
      第二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息。51Testing软件测试网*XgJ3x4bF,C5e

8HpE/L"L0      第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此软件测试的第三个目的是保证整个软件开发过程是高质量的。
(xR0{_1g)r[0
`/[SuJ4Vr9w0      软件质量是由几个方面来衡量的:一、在正确的时间用正确的的方法把一个工作做正确(Doing the right things right at the right time.)。二、符合一些应用标准的要求,比如不同国家的用户不同的操作习惯和要求,项目工程中的可维护性、可测试性等要求。三、质量本身就是软件达到了最开始所设定的要求,而代码的优美或精巧的技巧并不代表软件的高质量(Quality is defined AS confORMance to requirements, not as “gOODnESs” or “eleGAnce”.)。四、质量也代表着它符合客户的需要(Quality also means “meet cuSTomer needs”.)。作为软件测试这个行业,最重要的一件事就是从客户的需求出发,从客户的角度去看产品,客户会怎么去使用这个产品,使用过程中会遇到什么样的问题。只有这些问题都解决了,软件产品的质量才可以说是上去了。
7` jyU?z d0
f,q%f yl!n0      测试人员在软件开发过程中的任务:51Testing软件测试网Z6Bp$AB:b c

|%E7vSJ6X6{0      1、寻找Bug
)G5T.r^4\6F^.? ^0      2、避免软件开发过程中的缺陷;51Testing软件测试网3G~|H1rG
      3、衡量软件的品质;51Testing软件测试网&^1IA![\4V
      4、关注用户的需求。
W+hTK3^WT(E`051Testing软件测试网 uPv"ROis]-f
      总的目标是:确保软件的质量。
fd%R&AKf;n8L x)B051Testing软件测试网L8s!H}H
二、软件测试的原则
M?j6]Y's1}/r}6j051Testing软件测试网u6^-l X+Jy a-h[
51Testing软件测试网g9r W0L L:n V D:g
      软件测试从不同的角度出发会派生出两种不同的测试原则,从用户的角度出发,就是希望通过软件测试能充分暴露软件中存在的问题和缺陷,从而考虑是否可以接受该产品,从开发者的角度出发,就是希望测试能表明软件产品不存在错误,已经正确地实现了用户的需求,确立人们对软件质量的信心。
7^?'cE2b051Testing软件测试网g:Wo*Sy/sv S D6E.t6m
      为了达到上述的原则,那么需要注意以下几点:51Testing软件测试网F"fC8dZ{bL {cZ5ee
1.应当把“尽早和不断的测试”作为开发者的座右铭
$]G2i7t KJ02.程序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完。51Testing软件测试网0]fEE}(C-[u%Da
3.设计测试用例时应该考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。51Testing软件测试网+w x(T@/?5eM-~r
4.一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。
3b$zQw~j9c$G05.对测试错误结果一定要有一个确认的过程,一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。
%V UzO Z9aF06.制定严格的测试计划,并把测试时间安排的尽量宽松,不要希望在极短的时间内完成一个高水平的测试。51Testing软件测试网3UgkI][u L&G8v&\
7.回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多的错误出现的现象并不少见。51Testing软件测试网` i"CB^0lK
8.妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。51Testing软件测试网k~:pjd)[$J-r Aw

;r:x1k }-zWm0
O7O.KH@Y[0三、软件测试的对象51Testing软件测试网;}-lJ&G hm
51Testing软件测试网 qsUQ/U EoB)h
  软件测试并不等于程序测试。软件测试应该贯穿整个软件定义与开发整个期间。因此需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应该是软件测试的对象。51Testing软件测试网 _;D*u{!j)iepA

)?vF `m4r$V0  在对需求理解与表达的正确性、设计与表达的正确性、实现的正确性以及运行的正确性的验证中,任何一个环节发生了问题都可能在软件测试中表现出来。51Testing软件测试网Q1@OcjO&Q;D

'r._l1SC cg.X051Testing软件测试网0W,l2x,e5dt4CA~8b
四、软件测试方法51Testing软件测试网Ar'?(Y"~5v
 51Testing软件测试网%x7sg;\#zG[ [
 51Testing软件测试网:x9iU3]@
软件测试的基本方法51Testing软件测试网4w ^qQ v:Y B,D
单元测试的基本方法
fs)R/Cm0综合测试的基本方法
?8h zvRo2`0确认测试的基本方法51Testing软件测试网Xbw6GoP
系统测试的基本方法
*O3x1\;dEyo0软件测试的基本方法
NBsy UoT*wJ0e0
)p.XM^%`7Q;c3a0  软件测试的方法和技术是多种多样的。51Testing软件测试网"B1sS"f$pV1sd
  对于软件测试技术,可以从不同的角度加以分类:
}d5`tQ~{051Testing软件测试网.O%B&LeEz;m
  从是否需要执行被测软件的角度,可分为静态测试和动态测试。51Testing软件测试网v k*B#Bl%O
  从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为白盒测试黑盒测试51Testing软件测试网MoBtqZW6~bY

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

;|&eaPn)pr6F02、白盒测试51Testing软件测试网OiemmTfR q

Bf@}v+}Pv5@J0  白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
KTP:rr~K9q051Testing软件测试网%z9X+w {'J_J bq)E
  “白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。51Testing软件测试网 d8?(Lfn8]p#Q1XY
51Testing软件测试网3}|AlQS;^
3.ALAC(Act-like-a-customer)测试
f#N-i:k2S)N'b)_$EL:Z E051Testing软件测试网L/c'n!a@h%X4Kg
 
y Q7eDQ051Testing软件测试网#G^&\R A e(I
  ALAC测试是一种基于客户使用产品的知识开发出来的测试方法。ALAC测试是基于复杂的软件产品有许多错误的原则。最大的受益者是用户,缺陷查找和改正将针对哪些客户最容易遇到的错误。51Testing软件测试网2ok Ui"gV8i

.z"LetV x:U3k0bvS|N0单元测试的基本方法51Testing软件测试网C DzSSq `1q~Z e
51Testing软件测试网N6h&e F NCO.a/U
单元测试的对象是软件设计的最小单位模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。51Testing软件测试网_`6S&{*wr
单元测试任务51Testing软件测试网Q;N"T'] ^3J!rA
51Testing软件测试网^a*Q @ `S
  单元测试任务包括:1 模块接口测试;2 模块局部数据结构测试;3 模块边界条件测试;4 模块中所有独立执行通路测试;5 模块的各条错误处理通路测试。
Q,LS7u]9th0
_y pu;j|QSm0  模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。测试接口正确与否应该考虑下列因素:
$i"|*}6v%JI6B'{0   1 输入的实际参数与形式参数的个数是否相同;
&mk4Ui7L-]%fi w-C,m0   2 输入的实际参数与形式参数的属性是否匹配;51Testing软件测试网M"s w-gg2dY4^
   3 输入的实际参数与形式参数的量纲是否一致;51Testing软件测试网3F9[ N}_1}IC
   4 调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;
NI#O9I*_u? Gu0   5 调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;51Testing软件测试网*ov2@-q?SVE7K3N
   6调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;
X;~ Z0F pyR0   7 调用预定义函数时所用参数的个数、属性和次序是否正确;
+IN6CZfbzb0   8 是否存在与当前入口点无关的参数引用;
g4A?0R^ \NqY,Z0   9 是否修改了只读型参数;51Testing软件测试网5O]P/Qn
   10 对全程变量的定义各模块是否一致;51Testing软件测试网2z.y EG0][
   11是否把某些约束作为参数传递。
s+~3Pe$Z i"J0
L2N7{,}~"g;J0  如果模块内包括外部输入输出,还应该考虑下列因素:51Testing软件测试网L}x#|zS6q$H
   1 文件属性是否正确;51Testing软件测试网l'i7mB[f b
   2 OPEN/CLOSE语句是否正确;
-y.?A v(b^K5i+t+W0   3 格式说明与输入输出语句是否匹配;51Testing软件测试网6W4Pj4{;~K A
   4缓冲区大小与记录长度是否匹配;
~0~Ve8w+O$`2rTD0   5文件使用前是否已经打开;51Testing软件测试网;Q2yRT!EQ
   6是否处理了文件尾;51Testing软件测试网K#{*U$^8j
   7是否处理了输入/输出错误;
ER+G2{5G \0   8输出信息中是否有文字性错误;
:n;E7X'}0|0
8U5F8[K8T{`\^_,D0  检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误:
t2^yIo.pG9k5^0   1 不合适或不相容的类型说明;51Testing软件测试网3m:f _T+J1{1uk4d
   2变量无初值;51Testing软件测试网 Heo6h[TM[
   3变量初始化或省缺值有错;
i&G^x~%_0   4不正确的变量名(拼错或不正确地截断);51Testing软件测试网8rd&h-W/Zu7Z{7S
   5出现上溢、下溢和地址异常。
-k jk w|6@#S6@0
*YC3fhV^N0  除了局部数据结构外,如果可能,单元测试时还应该查清全局数据(例如FORTRAN的公用区)对模块的影响。51Testing软件测试网PLK#t3EZ7a Db
51Testing软件测试网XW\u2b)F/M3_Ru~[
  在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。此时设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。此时基本路径测试和循环测试是最常用且最有效的测试技术。计算中常见的错误包括:
3bX3t(Ht1n9O)Rs0   1 误解或用错了算符优先级;
k ^n4a~-w hr0   2混合类型运算;51Testing软件测试网Y5Ls%S V'z2r
   3变量初值错;
@1ShN:R0   4精度不够;
xZeB7dV$[l0   5表达式符号错。51Testing软件测试网4A#ch T"n9_;_,_:aR

*y6R+Q X!{&B9c!i0  比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:
,J[?8_$M?0   1不同数据类型的对象之间进行比较;51Testing软件测试网E&t/m7@ X5Us%] n
   2错误地使用逻辑运算符或优先级;
%q_+Ba,fFy0   3因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;
0F'SO0BRVv0   4比较运算或变量出错;
qE-])e7n dZ |)B0   5循环终止条件或不可能出现;
%qi0p&?5_w7S9x,H0   6迭代发散时不能退出;
7xX"s9f&YK9@`0   7错误地修改了循环变量。
^$|Ef Sp'?l^051Testing软件测试网G2d!h6N i8G
  一个好的设计应能预见各种出错条件,并预设各种出错处理通路,出错处理通路同样需要认真测试,测试应着重检查下列问题:
Q-y&{3@8eDW0   1输出的出错信息难以理解;51Testing软件测试网:L } N[Ws$ug4G
   2记录的错误与实际遇到的错误不相符;
7I A`]/^&];d`}0   3在程序自定义的出错处理段运行之前,系统已介入;
[*a&VD+x(w0   4异常处理不当;
1V*X/quZ/sQ| s0   5错误陈述中未能提供足够的定位出错信息。51Testing软件测试网7a9ij\Y4~3Y
51Testing软件测试网0O(U i3]EK9C5u
  边界条件测试是单元测试中最后,也是最重要的一项任务。众的周知,软件经常在边界上失效,采用边界值分析技术,针对边界值及其左、右设计测试用例,很有可能发现新的错误。51Testing软件测试网 } O'HM8r~

&l0JQ&Z9D1g~7E0单元测试过程
K#{\f"PFXesQE051Testing软件测试网O^:WP S(r({^W
  一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试。测试用例的设计应与复审工作相结合,根据设计信息选取测试数据,将增大发现上述各类错误的可能性。在确定测试用例的同时,应给出期望结果。
#\q}8L;`9qgK iH0
4P b-bY'm2T#?!x5}h0  应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub),下图显示了一般单元测试的环境。驱动模块在大多数场合称为“主程序”,它接收测试数据并将这些数据传递到被测试模块,被测试模块被调用后,“主程序”打印“进入-退出”消息。51Testing软件测试网1NT W;e.VZ1};Y4X/f$J

0_.h9TuS0  驱动模块和桩模块是测试使用的软件,而不是软件产品的组成部分,但它需要一定的开发费用。若驱动和桩模块比较简单,实际开销相对低些。遗憾的是,仅用简单的驱动模块和桩模块不能完成某些模块的测试任务,这些模块的单元测试只能采用下面讨论的综合测试方法。
E,axw_ @A0
dTj7v3i|m8n/r ]jdy0  提高模块的内聚度可简化单元测试,如果每个模块只能完成一个,所需测试用例数目将显著减少,模块中的错误也更容易发现。51Testing软件测试网O4aMT%CVk]

)Y+q9x)D~i,U5d*W.i0综合测试的基本方法51Testing软件测试网jr(s7ES+O%H
51Testing软件测试网Q7x8S&hh'NV.Vm
51Testing软件测试网n([3G2V5X+i*J`g.nU/K
  时常有这样的情况发生,每个模块都能单独工作,但这些模块集成在一起之后却不能正常工作。主要原因是,模块相互调用时接口会引入许多新问题。例如,数据经过接口可能丢失;一个模块对另一模块可能造成不应有的影响;几个子功能组合起来不能实现主功能;误差不断积累达到不可接受的程度;全局数据结构出现错误,等等。综合测试是组装软件的系统测试技术,按设计要求把通过单元测试的各个模块组装在一起之后,进行综合测试以便发现与接口有关的各种错误。51Testing软件测试网fCf&U ?/vR e-Jo
51Testing软件测试网-Hvq-G|i
  某设计人员习惯于把所有模块按设计要求一次全部组装起来,然后进行整体测试,这称为非增量式集成。这种方法容易出现混乱。因为测试时可能发现一大堆错误,为每个错误定位和纠正非常困难,并且在改正一个错误的同时又可能引入新的错误,新旧错误混杂,更难断定出错的原因和位置。与之相反的是增量式集成方法,程序一段一段地扩展,测试的范围一步一步地增大,错误易于定位和纠正,界面的测试亦可做到完全彻底。下面讨论两种增量式集成方法。
&v_N+~__j&I0
6V:j?IneQ:k|01 自顶向下集成51Testing软件测试网A9a {5FL`NB

:cJ i'r;dNHb0  自顶向下集成是构造程序结构的一种增量式方式,它从主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一起。深度优先策略首先是把主控制路径上的模块集成在一起,至于选择哪一条路径作为主控制路径,这多少带有随意性,一般根据问题的特性确定。以下图为例,若选择了最左一条路径,首先将模块M1,M2,M5和M8集成在一起,再将M6集成起来,然后考虑中间和右边的路径。广度优先策略则不然,它沿控制层次结构水平地向下移动。仍以下图为例,它首先把M2、M3和M4与主控模块集成在一起,再将M5和M6 和其他模块集资集成起来。
[;lt(Z7n&P9A0
*yZ1^1^d gz0  自顶向下综合测试的具体步骤为:51Testing软件测试网6`'QLsna&o
   1 以主控模块作为测试驱动模块,把对主控模块进行单元测试时引入的所有桩模块用实际模块替代;51Testing软件测试网%tdh].@&K
   2 依据所选的集成策略(深度优先或广度优先),每次只替代一个桩模块;
+^Q Fr+z5c0   3 每集成一个模块立即测试一遍;51Testing软件测试网6_kn"@ ^;W A C
   4 只有每组测试完成后,才着手替换下一个桩模块;51Testing软件测试网%lo;C!l)`jSC;bM
   5 为避免引入新错误,须不断地进行回归测试(即全部或部分地重复已做过的测试)。51Testing软件测试网Kp wl1o.j1A{
 
f9sPpr(mKz051Testing软件测试网GC5Nv4q9J
   从第二步开始,循环执行上述步骤,直至整个程序结构构造完毕。下图中,实线表示已部分完成的结构,若采用深度优先策略,下一步将用模块M7替换桩模块S7,当然M7本身可能又带有桩模块,随后将被对应的实际模块一一替代。
8I:[@Z,H Q051Testing软件测试网*G6Aj2vSo
  自顶向下集成的优点在于能尽早地对程序的主要控制和决策机制进行检验,因此较早地发现错误。缺点是在测试较高层模块时,低层处理采用桩模块替代,不能反映真实情况,重要数据不能及时回送到上层模块,因此测试并不充分。解决这个问题有几种办法,第一种是把某些测试推迟到用真实模块替代桩模块之后进行,第二种是开发能模拟真实模块的桩模块;第三种是自底向上集成模块。第一种方法又回退为非增量式的集成方法,使错误难于定位和纠正,并且失去了在组装模块时进行一些特定测试的可能性;第二种方法无疑要大大增加开销;第三种方法比较切实可行,下面专门讨论。
!N} V*@1a:@0
sAOKd D1S02自底向上集成
[.@2U/KH~051Testing软件测试网6gw1_a7LN,^
  自底向上测试是从“原子”模块(即软件结构最低层的模块)开始组装测试,因测试到较高层模块时,所需的下层模块功能均已具备,所以不再需要桩模块。
J Sx w6n3g$t _T051Testing软件测试网2I+U2Xb~6fT tQL
  自底向上综合测试的步骤分为:
a2E l]c Y:H9N0   1 把低层模块组织成实现某个子功能的模块群(cluster);51Testing软件测试网dfqgn$mH7?
   2 开发一个测试驱动模块,控制测试数据的输入和测试结果的输出;
E9C z2SUsw0   3 对每个模块群进行测试;
#u o jg V'a_0   4 删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功能的新模块群。
y:u#?,YaTQ7N]f0
c^#ez,F0D z0  从第一步开始循环执行上述各步骤,直至整个程序构造完毕。
)B8X9^.d@+R0
X%x ? ~*e8j0  下图说明了上述过程。首先“原子”模块被分为三个模块群,每个模块群引入一个驱动模块进行测试。因模块群1、模块群2中的模块均隶属于模块 Ma,因此在驱动模块D1、D2去掉后,模块群1与模块群2直接与Ma接口,这时可对MaD3被去掉后,M3与模块群3直接接口,可对Mb进行集成测试,最后Ma、Mb和 Mc全部集成在一起进行测试。51Testing软件测试网#]eP:n"Yt!^

qU{R].u0 
1SZ*b)UY2Ra5h051Testing软件测试网 sVQK*_(Wm_V-i m
  自底向上集成方法不用桩模块,测试用例的设计亦相对简单,但缺点是程序最后一个模块加入时才具有整体形象。它与自顶向综合测试方法优缺点正好相反。因此,在测试软件系统时,应根据软件的特点和工程的进度,选用适当的测试策略,有时混和使用两种策略更为有效,上层模块用自顶向下的方法,下层模块用自底向上的方法。51Testing软件测试网WW7E"Y5V&f+k8I
51Testing软件测试网,c t|3X8b:Nep'U%B^
  此外,在综合测试中尤其要注意关键模块,所谓关键模块一般都具有下述一或多个特征:①对应几条需求;②具有高层控制功能;③复杂、易出错;④有特殊的性能要求。关键模块应尽早测试,并反复进行回归测试。51Testing软件测试网2{ lS3U$[9~Y*W

tw2\!Lg B:x0确认测试的基本方法51Testing软件测试网 vg:^U-o-ym }
   通过综合测试之后,软件已完全组装起来,接口方面的错误也已排除,软件测试的最后一步确认测试即可开始。确认测试应检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准。51Testing软件测试网q'rs G7e1EAdC
51Testing软件测试网:S2Dp ]h%o4i4N
1. 确认测试标准
9\$``n+M+auB)t051Testing软件测试网:T)l!bj&o8L
  实现软件确认要通过一系列墨盒测试。确认测试同样需要制订测试计划和过程,测试计划应规定测试的种类和测试进度,测试过程则定义一些特殊的测试用例,旨在说明软件与需求是否一致。无是计划还是过程,都应该着重考虑软件是否满足合同规定的所有功能和性能,文档资料是否完整、准确人机界面和其他方面(例如,可移植性、兼容性、错误恢复能力和可维护性等)是否令用户满意。51Testing软件测试网 ?(O$Eul6W&H;`
51Testing软件测试网E0Fa:kI;Ak
  确认测试的结果有两种可能,一种是功能和性能指标满足软件需求说明的要求,用户可以接受;另一种是软件不满足软件需求说明的要求,用户无法接受。项目进行到这个阶段才发现严重错误和偏差一般很难在预定的工期内改正,因此必须与用户协商,寻求一个妥善解决问题的方法。51Testing软件测试网7x]{y%\ Li`x;a
51Testing软件测试网z l,`gxJ$jZ q
2. 配置复审51Testing软件测试网g@$AY^
51Testing软件测试网BE o9~.N/K
  确认测试的另一个重要环节是配置复审。复审的目的在于保证软件配置齐全、分类有序,并且包括软件维护所必须的细节。51Testing软件测试网#G I-C {4S6@;v$j
51Testing软件测试网 }3l4`7J0I\.S?x
3. α、β测试
jC-zQbBq.oR051Testing软件测试网-_D/y8kl
  事实上,软件开发人员不可能完全预见用户实际使用程序的情况。例如,用户可能错误的理解命令,或提供一些奇怪的数据组合,亦可能对设计者自认明了的输出信息迷惑不解,等等。因此,软件是否真正满足最终用户的要求,应由用户进行一系列“验收测试”。验收测试既可以是非正式的测试,也可以有计划、有系统的测试。有时,验收测试长达数周甚至数月,不断暴露错误,导致开发延期。一个软件产品,可能拥有众多用户,不可能由每个用户验收,此时多采用称为α、β测试的过程,以期发现那些似乎只有最终用户才能发现的问题。
K[}9U+_lx8s0
6A%[5}VGi3P%k0  α测试是指软件开发公司组织内部人员模拟各类用户行对即将面市软件产品(称为α版本)进行测试,试图发现错误并修正。α测试的关键在于尽可能逼真地模拟实际运行环境和用户对软件产品的操作并尽最大努力涵盖所有可能的用户操作方式。经过α测试调整的软件产品称为β版本。紧随其后的β测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况、提出批评意见。然后软件开发公司再对β版本进行改错和完善。51Testing软件测试网1Ubq;H3|{

Uv,e u`s0系统测试的基本方法51Testing软件测试网3u-~i|*WCfR[!PL

gO G-`.?pNE:ln0   计算机软件是基于计算机系统的一个重要组成部分,软件开发完毕后应与系统中其它成分集成在一起,此时需要进行一系列系统集成和确认测试。对这些测试的详细讨论已超出软件工程的范围,这些测试也不可能仅由软件开发人员完成。在系统测试之前,软件工程师应完成下列工作:51Testing软件测试网X*ba)Zbr
   (1) 为测试软件系统的输入信息设计出错处理通路;
8~7@;im?zcti0   (2) 设计测试用例,模拟错误数据和软件界面可能发生的错误,记录测试结果,为系统测试提供经验和帮助;51Testing软件测试网qx:YP{
   (3) 参与系统测试的规划和设计,保证软件测试的合理性。51Testing软件测试网{H-L"`Z7k
51Testing软件测试网 n dW)s U)`t6b
  系统测试应该由若干个不同测试组成,目的是充分运行系统,验证系统各部件是否都能政党工作并完成所赋予的任务。下面简单讨论几类系统测试。
@?9?!?L-L(I051Testing软件测试网Yj4S&Bo@*Nyx/y
1、恢复测试51Testing软件测试网;~ nBk/B:r W:G;e
51Testing软件测试网.N/R,~4^.d/mz
  恢复测试主要检查系统的容错能力。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。恢复测试首先要采用各种办法强迫系统失败,然后验证系统是否能尽快恢复。对于自动恢复需验证重新初始化(reinitialization)、检查点(chECkpointing mechanISMs)、数据恢复(data recovery)和重新启动 (restart)等机制的正确性;对于人工干预的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内。
Tz2earRur0
+s] X qUu|M#}C02、安全测试
k-YVZk a0
$x){_h|I,n0  安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。例如,①想方设法截取或破译口令;②专门定做软件破坏系统的保护机制;③故意导致系统失败,企图趁恢复之机非法进入;④试图通过浏览非保密数据,推导所需信息,等等。理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值。此时非法侵入者已无利可图。
0o1C"P-u(Y:f{u:I051Testing软件测试网rv']%G6A&P3D
3、强度测试51Testing软件测试网4M%DSB{#U,Az6m
51Testing软件测试网 Fc1RD0H"| Csw6f[
  强度测试检查程序对异常情况的抵抗能力。强度测试总是迫使系统在异常的资源配置下运行。例如,①当中断的正常频率为每秒一至两个时,运行每秒产生十个中断的测试用例;②定量地增长数据输入率,检查输入子功能的反映能力;③运行需要最大存储空间(或其他资源)的测试用例;④运行可能导致虚存操作系统崩溃或磁盘数据剧烈抖动的测试用例,等等。
!rEH!v"{d6r$T G051Testing软件测试网KxN0kc6K,z
4、 性能测试51Testing软件测试网'_ xZ0v+ftA

Q+rOj BQ0  对于那些实时和嵌入式系统,软件部分即使满足功能要求,也未必能够满足性能要求,虽然从单元测试起,每一测试步骤都包含性能测试,但只有当系统真正集成之后,在真实环境中才能全面、可靠地测试运行性能系统性能测试是为了完成这一任务。性能测试有时与强度测试相结合,经常需要其他软硬件的配套支持。
yv P?R0
+Go2J#|H3X0五、软件测试的类型51Testing软件测试网&yu@+`*i"l
51Testing软件测试网*o pL mF
常见的软件测试类型有:51Testing软件测试网-N)p? P:Bp'luKH%F

7^ H]r,Q_D0      BVT (Build Verification Test)
,exdC~] d,Uq051Testing软件测试网"m5f!c9j@{C0@
      BVT是在所有开发工程师都已经检入自己的代码,项目组编译生成当天的版本之后进行,主要目的是验证最新生成的软件版本在功能上是否完整,主要的软件特性是否正确。如无大的问题,就可以进行相应的功能测试。BVT优点是时间短,验证了软件的基本功能。缺点是该种测试的覆盖率很低。因为运行时间短,不可能把所有的情况都测试到。
6R3mPc2gvX*ot0
p2Q9^pW3|0      Scenario Tests(基于用户实际应用场景的测试)51Testing软件测试网%R Q%bp z/@
51Testing软件测试网3VA2n\R5O"iF9j
      在做BVT、功能测试的时候,可能测试主要集中在某个模块,或比较分离的功能上。当用户来使用这个应用程序的时候,各个模块是作为一个整体来使用的,那么在做测试的时候,就需要模仿用户这样一个真实的使用环境,即用户会有哪些用法,会用这个应用程序做哪些事情,操作会是一个怎样的流程。加了这些测试用例后,再与BVT、功能测试配合,就能使软件整体都能符合用户使用的要求。Scenario Tests优点是关注了用户的需求,缺点是有时候难以真正模仿用户真实的使用情况。
aj2iuW v0K/t&?M/K051Testing软件测试网X.SFI6B4p
      Smoke Test51Testing软件测试网 n*Wc'gR:mj

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

u?-` yS$k3csn0      此外,Application CompatiBIlity Test(兼容性测试),主要目的是为了兼容第三方软件,确保第三方软件能正常运行,用户不受影响。Accessibility Test(软件适用性测试),是确保软件对于某些有残疾的人士也能正常的使用,但优先级比较低。其它的测试还有Functional Test(功能测试)、Security Test(安全性测试)、Stress Test(压力测试)、Performance Test(性能测试)、Regression Test(回归测试)、Setup/Upgrade Test(安装升级测试)等。51Testing软件测试网&@VQ4]b9I0^9J4Ld
51Testing软件测试网g,ZP5PM:[
六、软件测试支持工具
e+O0BCl e0
)~%j9w/P9P"A051Testing软件测试网q V;{{,S%`+n
      一些受软件开发人员欢迎的软件测试工具为软件测试提供了强有力的支持。本文将介绍美国Rational公司的著名套装软件SQA和Pure Atria公司极具特色的Purify。51Testing软件测试网 z u'z+R1V,cil
51Testing软件测试网J NvADOO[
      SQA SuiteSQA直接支持对客户/服务器应用软件的测试,它的一个重要特点是可以自动驱动被测程序的运行。SQA可以自动记录和重放程序执行过程,从而实现了对测试进行"复查"的自动化。
w4oe/z:JZ5D0
1o/Y-u6@PF'@|W0      由于测试是一个需要反复进行的过程,常常要数十次甚至数百次地重复。因此,这一特性大大地提高了软件"再测试"(Re-Test)和"回归测试" (Regression)的自动化程度,把测试人员从繁杂的、重复性的手工测试中解脱出来,从而显著地提高软件测试效率。51Testing软件测试网Iy(Pa!xc2^

'I5CJ9J6M4^0      除了这个最基本的自动录放功能外,它还提供了一系列的辅助支持功能,比如,
.y&BTR'yT0
0M$zAX!~(CUdq?0  · 被录制的程序执行过程可以被自动转换成具有良好可读性的高级语言程序,从而使这个测试驱动程序可以由测试人员根据测试需要进行必要的修改,甚至完全用手工方式编制。51Testing软件测试网O'A.?/|.S\?
51Testing软件测试网%DvLA7[hbH
  ·自动记录和分析比较测试的执行结果。不论是简单的正文方式的输出结果,还是任意的图表、声音、动画、图形用户界面(GUI)中的任一构件,都可以根据测试人员的指定被自动记录在测试结果库中,并可对两次测试的结果自动地进行比较,指出其差异部分。此项功能无疑对"自动查找错误"很有帮助。51Testing软件测试网C ni6N#M!P2R
51Testing软件测试网 rV;}R H Wz\n
  ·调节和设定事件的发生时间和速度。51Testing软件测试网\tiXq

N'|-qe$z/aV0  ·基本的测试库管理功能。51Testing软件测试网3L0}j!tO,OUj!t
51Testing软件测试网]9io{3JK ] w
  此外,SQA还支持软件测试人员进行以下工作:
C3[p*K(r*NJf*l051Testing软件测试网#dcc?F/uMv'Z
  ·制定测试计划和测试大纲,并将这些文档按照自然的树状结构分层地管理起来,并据此控制和驱动整个测试过程。
6l*jd#q~(vai0
.pb7Zya0}R0  ·不仅能够自动记录各类测试结果,而且对其进行修改,从而使得测试人员可以在程序运行结果尚有许多错误的情况下,通过对所记录下的结果做适当修正来获得理想的"期望结果" ,为测试结果的自动比较奠定基础。51Testing软件测试网6X9fq%Pt\T

5Y'x5Dzo_6t"B#p{0  ·测试问题报告的记录与管理。51Testing软件测试网 ~)nL[w_
51Testing软件测试网7x?w*Xv5bTZ p B
      总之,SQA Suite提供了一个比较完整的测试平台,以支持软件测试的各种基本活动,包括测试计划与测试大纲的制定、回归测试的自动化、测试结果的分析比较、软件问题报告的生成与自动分发和控制等。对于许多应用软件的开发无疑是个有力的测试支持工具。
%F'R+Y#m@,|sgiT%]5{$]051Testing软件测试网r d pcDe ze\v.SZW
      Purify是原PureAtria公司(现已经与美国Rational公司合并,改名为美国Rational公司)于90年代初率先推出的专门用于检测程序中种种内存使用错误的软件工具。几乎所有使用过C语言开发软件的程序员都会有这样的体会,C语言中使用极为灵活的指针给程序员带来了很大便利,但同时也制造了许多的麻烦。由于指针使用不当而引起的错误通常是最难发现的,同时也是最难定位的一类错误。而Purify对多种常见的内存使用错误的检错能力和准确的定位,受到广大软件开发人员的青睐。51Testing软件测试网jd L }&J

F7d3D!p0G3\C3S0      Purify可以自动识别出二十多种内存使用错误,包括51Testing软件测试网:n(jgT'r5[R kQX$^

MW.M+~f)Y$X!v0  ·未初始化的局部变量
,wr5Q A l%j0
'[C;q9s f0  ·未申请的内存
;M:}9H#T'Ps e051Testing软件测试网 ? j+k9jj(k+Q
  ·使用已释放的内存
? W O F*l9zFO0
7\ m n7t\*VK`%t0  ·数组越界51Testing软件测试网f-[2h*nE

eF!NB1y9BO1Lb5RY0  ·内存丢失51Testing软件测试网!w%[v guvS,O;_
51Testing软件测试网 {:t/`9uS
  ·文件描述问题51Testing软件测试网F6ab#m*e!`)L

&lp8x _P0hs6z5OT%_7}0  ·栈溢出问题
h$^ u9sgT eP051Testing软件测试网4l\4j6Zt:v0A
  ·栈结构边界错误等
.I)t^RT$]!B051Testing软件测试网B-u*?qwpX
      在下面的例子中,暗藏着两个内存使用错误。第一行为指针数组pp申请的空间尺寸不对。这类错误往往不易发现,因为在C语言中,一些"轻微"的内存越界可能被系统所容忍。但这往往是导致更严重错误的根源。例如,可能破坏其它数据区等。最后一行的错误是在释放pp 之前没有释放赋予它的字符串空间,从而把它们"丢失"了。这类错误犹如慢性自杀,它会逐渐消耗掉内存,降低系统的运行效率,直到完全崩溃。而真正的问题在于,这些程序中的"恶性肿瘤"用常规的测试手段和调试工具是极难发现和加以定位的。Purify则在此充分显示了它的强大功效,所到之处,即对所测试过的情况,上述各种常见的内存错误都可以被一一揭露出来,并且准确地指出错误的类型和位置。从而大大地提高了测试和纠错的效率,提高了软件的可靠性。
{ v K$|p8S0
N(|Ub)k:\1g Jv(]0  …/"to get 10 woRDS and print them out"/51Testing软件测试网-e |1ak,V?&y

LXUB"]?y0  if(!(pp=(char**)malloc(10))){
ru4LK8bH.`Pl$BZ&K051Testing软件测试网&o!}j0R,b n
  /*Size should be 10*sizeof(char*)*/
h;E)m {U"G'[/Ye3E051Testing软件测试网4]Fw$@.Lr P.EX
  printf("Out of memory.\n");51Testing软件测试网t3m'^{pM*vL

*vD)C vK0  exit(-1);
x2tz$k*p4N6i7w:{7{M0
M{:s;ey8I@_}0  }
EJKL db0
,gE ~fc+t ud^0  for(i=0;i<10;i++){51Testing软件测试网\T5f)q(u$EF4u
51Testing软件测试网8J5w3TD B!}L
  SCAnf("%s",buffer);51Testing软件测试网"h N#q/n Enkf.V
51Testing软件测试网)F1H}*k yKy]-l
  if(!(pp[i]=(char*)malloc(strlen(buffer)+1))){51Testing软件测试网"cn4gNj

D+Ay,[Q5ujc0  print("Out of Memory.\ n");
F Q:enE-m}$['].`.~0
"]5s@](iQA$Su]4~0  exit(-1);
r3X7^0En051Testing软件测试网 As4lZ[-} c8B
  }
$m Z&?,od051Testing软件测试网_0`1d2s s/{4|
  strcpy(pp[i],buffer);
m2Yt_+SS;?|$ol0
)A$g Lo3}&Ot0  printf(pp[i]);51Testing软件测试网"PX9{lY

H5o/Ow#rU W%lrO#\0  }51Testing软件测试网(MhM[ {d'{k-}

x'LwY5Z%Ohb8vE0  free(pp);/*all the strings pointed by it are lost!*/51Testing软件测试网0G(f GR,_4m

Z Vrc~ {!W0  ………51Testing软件测试网Cl+P$|-|"_

bB,rO QsH?0      今年以来,原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等。
zm8x ^%Q#[%iY^0
c"v$x|3V/@lU0      结束语
J Y2Esu U0
7Y2O/mM Eooj0      充分认识软件测试的重要性和复杂性,合理地选择测试方法,有效地组织测试人员和安排测试任务,并且尽量使用软件测试工具增强软件测试的自动化程度,无疑可以帮助软件开发和测试人员大大提高测试效率和软件的质量。
^ ^+Q Q,jp Kd051Testing软件测试网!z#{I3|kx4qd]

TAG: 测试资料

引用 删除 sk982   /   2009-12-29 10:44:24
晕..评错了,不好意思

文章好我才评分的,很不错
引用 删除 sk982   /   2009-12-29 10:43:28
-5
 

评分:0

我来说两句

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 52244
  • 日志数: 60
  • 建立时间: 2008-08-22
  • 更新时间: 2008-12-12

RSS订阅

Open Toolbar