软件测试
bJo7L\$^0{0tD07d2c Y!qn8v+GQ0(1)什么是软件测试51Testing软件测试网g@X?$LR$z7pB'r
-n'J_-m1BX1IX9t0软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。
"p|U&[4\^{051Testing软件测试网6I `N[S#j软件测试在软件生存期中横跨两个阶段:通常在编写出每一个模块之后就对它做必要的测试(称为单元测试)。模块的编写者与测试者是同一个人。编码与单元测试属于软件生存期中的同一个阶段。在这个阶段结束之后,对软件系统还要进行各种综合测试,这是软件生存期的另一个独立的阶段,即测试阶段,通常由专门的测试人员承担这项工作。51Testing软件测试网,V5O9L&x\U
51Testing软件测试网2G^.ZC.q(2) 软件测试的目的和原则
"|$cjx8_
Uk051Testing软件测试网Kv3N8q d0k$\`w"kGrenford J.Myers就软件测试目的提出以下观点:
_JA'Om,v&r051Testing软件测试网\z vdQDM!L § 测试是程序的执行过程,目的在于发现错误;
j+tPZ9aQL051Testing软件测试网3Ms@xs2y0JQ § 一个好的测试用例在于能发现至今未发现的错误;51Testing软件测试网!Zk.h_{@$L2N
p5O:m*rS+Pf.S|0 § 一个成功的测试是发现了至今未发现的错误的测试。
gl3}}g6M2}$?z-|p(Z01U3N)F)x$rJ0设计测试的目标是想以最少的时间和人力系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,就能够发现软件中的错误。测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。此外,实施测试收集到的测试结果数据为可靠性分析提供了依据。51Testing软件测试网efNi6k&V\q
A!A!c'jzO*o0测试不能表明软件中不存在错误,它只能说明软件中存在错误。
@EaM0] f0??U5H]0软件测试的原则:
OP%WpvE051Testing软件测试网$[w K4lj4M;Gq0^① 应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。51Testing软件测试网1N&L/?1JzB
[T
51Testing软件测试网\T/@qRS'u不应把软件测试仅仅看作是软件开发的一个独立阶段,而应当把它贯穿到软件开发的各个阶段中。坚持在软件开发的各个阶段的技术评审,这样才能在开发过程中尽早发现和预防错误,把出现的错误克服在早期,杜绝某些发生错误的隐患。51Testing软件测试网
KIT+G)`+m2lK-bY/u
51Testing软件测试网*NS{'QM
JS3L
SN② 测试用例应由测试输入数据和与之对应的预期输出结果这两部分组成。51Testing软件测试网RN2K"w2h{G/|*Ej
51Testing软件测试网mQ1x-Rwfda测试以前应当根据测试的要求选择测试用例(Test case),用来检验程序员编制的程序,因此不但需要测试的输入数据,而且需要针对这些输入数据的预期输出结果。
M%|%\5\y3U UQ051Testing软件测试网+X/p2QKg③ 程序员应避免检查自己的程序。51Testing软件测试网 z{k7q&J
51Testing软件测试网}(cQ%RyC)U程序员应尽可能避免测试自己编写的程序,程序开发小组也应尽可能避免测试本小组开发的程序。如果条件允许,最好建立独立的软件测试小组或测试机构。这点不能与程序的调试(debuging)相混淆。调试由程序员自己来做可能更有效。51Testing软件测试网[2D*?9@8\#g4_)G
51Testing软件测试网I7iwo*y④ 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
Afp2uaw4K.P0:\G4Yi-@j/w0合理的输入条件是指能验证程序正确的输入条件,不合理的输入条件是指异常的,临界的,可能引起问题异变的输入条件。软件系统处理非法命令的能力必须在测试时受到检验。用不合理的输入条件测试程序时,往往比用合理的输入条件进行测试能发现更多的错误。
lv:ai2sJ:`0+hl%j!~ GVO0⑤ 充分注意测试中的群集现象。
jr!Y^!C lU#e0zd$`n~O})mq)P$Y*[*|q0在被测程序段中,若发现错误数目多,则残存错误数目也比较多。这种错误群集性现象,已为许多程序的测试实践所证实。根据这个规律,应当对错误群集的程序段进行重点测试,以提高测试投资的效益。51Testing软件测试网r3i;q eH!~z|hvF
!QmA^4hS1a0⑥ 严格执行测试计划,排除测试的随意性。
1B5^+GU*CLW0!O*u~ B"uUjT0测试之前应仔细考虑测试的项目,对每一项测试做出周密的计划,包括被测程序的功能、输入和输出、测试内容、进度安排、资源要求、测试用例的选择、测试的控制方式和过程等,还要包括系统的组装方式、跟踪规程、调试规程,回归测试的规定,以及评价标准等。对于测试计划,要明确规定,不要随意解释。
ywz&u&Fx$C,W051Testing软件测试网0sW+rt[oYQ⑦ 应当对每一个测试结果做全面检查。
DJ%{|8J8w051Testing软件测试网z5oaDS有些错误的征兆在输出实测结果时已经明显地出现了,但是如果不仔细地全面地检查测试结果,就会使这些错误被遗漏掉。所以必须对预期的输出结果明确定义,对实测的结果仔细分析检查,抓住征侯,暴露错误。51Testing软件测试网y{7f4Ao u
+P2Z]%_8E9s!Lo0⑧ 妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。51Testing软件测试网5?~
v.X*d5R4X#ms
51Testing软件测试网d4y_m'qV-T-K(3) 确认和验证的关系
k7e2f7\B@+r9{#O:t0jM6i%@p'gL/Ls8~ci0确认(Validation)是一系列的活动和过程,其目的是想证实在一个给定的外部环境中软件的逻辑正确性。它包括需求规格说明的确认和程序的确认,而程序的确认又分为静态确认与动态确认。静态确认一般不在计算机上实际执行程序,而是通过人工分析或者程序正确性证明来确认程序的正确性; 动态确认主要通过动态分析和程序测试来检查程序的执行状态,以确认程序是否有问题。51Testing软件测试网X&WDWNd*s3b1XCp
2n+o?H!N[z9r0验证(Verification),则试图证明在软件生存期各个阶段,以及阶段间的逻辑协调性、完备性和正确性。51Testing软件测试网Kc!X ~6VZ,Pg
51Testing软件测试网C*V-qqGDe确认与验证工作都属于软件测试。在对需求理解与表达的正确性、设计与表达的正确性、实现的正确性以及运行的正确性的验证中,任何一个环节上发生了问题都可能在软件测试中表现出来。51Testing软件测试网'_oMxc9j4_};``
s
51Testing软件测试网4ZSEz&Y^&E:?'Q:M(4) 测试信息流
BN,@%Q q/hkR/M`051Testing软件测试网$H:hp^nT)a测试信息流如图5.1所示。测试过程需要三类输入:
Pw5v-wKj o9OD051Testing软件测试网v/t"y)_MyS,L§ 软件配置:包括软件需求规格说明、软件设计规格说明、源代码等;51Testing软件测试网#@ D3Wj,gx
51Testing软件测试网tyE
fu4T § 测试配置:包括测试计划、测试用例、测试驱动程序等;
#^v'z`ydB0`,ou_xCWE[0 § 测试工具:测试工具为测试的实施提供某种服务。例如,测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的工作台等。51Testing软件测试网j4nP6l@v
EW.i#C
51Testing软件测试网.Lg)vV:U2?"ol R测试之后,用实测结果与预期结果进行比较。如果发现出错的数据,就要进行调试。对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。修正后的文档一般都要经过再次测试,直到通过测试为止。51Testing软件测试网Q+\q}f}5l
H2?tfX.XPe5t0通过收集和分析测试结果数据,对软件建立可靠性模型。 51Testing软件测试网^f|JUn3JuU
51Testing软件测试网x?;J5c/X如果测试发现不了错误,那么可以肯定,测试配置考虑得不够细致充分,错误仍然潜伏在软件中。这些错误最终不得不由用户在使用中发现,并在维护时由开发者去改正。但那时改正错误的费用将比在开发阶段改正错误的费用要高出40倍到60倍。
J
F%fJb0s#p0!U(Lfz.t0(5) 测试与软件开发各阶段的关系51Testing软件测试网u7D)y;\TtC
VBoM5L4X7a@)N
n0软件开发过程是一个自顶向下,逐步细化的过程,而测试过程则是依相反的顺序安排的 自底向上,逐步集成的过程。低一级测试为上一级测试准备条件。参看图5.2,首先对每一个程序模块进行单元测试,消除程序模块内部在逻辑上和功能上的错误和缺陷。再对照软件设计进行集成测试,检测和排除子系统(或系统)结构上的错误。随后再对照需求,进行确认测试。最后从系统全体出发,运行系统,看是否满足要求。51Testing软件测试网5[ L,cL `:s2_)N3?U