航天工业总公司二院204所 周新蕾 缪峥红
s{ki8C/yZ0一、对
软件可靠性
测试的认识
51Testing软件测试网0gXc.Sk4Q:ea51Testing软件测试网SB
P
y{ejxt![J&T1.有关术语
0a!@&?ev8anR:lU0(1)软件可靠性 在规定条件下,在规定时间内,软件不引起系统失效的概率。该概率是系
5Ow,~ X`,c:[/D[0统输入和系统使用的函数,也是软件中存在故障的函数,系统输入将确定是否会遇到存在的故
r `:IJ!u3{a7`-M0障。
\dh0d5o2Q,o0(2)软件可靠性估计 应用统计技术处理在系统测试和运行期间采集、观察到的失效数据
51Testing软件测试网g
qRZF4Jy#T Z,以评估该软件的可靠性。
R'M&\k1jZ0(3)软件可靠性测试 在有使用代表性的环境中,为进行软件可靠性估计对该软件进行的
T-E
m0e v2pO$Z#a0功能测试。
1{ OQwy0LR0需要说明的是,"使用代表性"指的是在统计意义下该环境能反映出软件的使用环境特性
)?`F)|Yg#K)U0。
J8cJH `
kcg
S051Testing软件测试网;W'zJ6D-p7Y:n#I!`~r*y2C2.软件可靠性测试的目的
51Testing软件测试网sl BB3D软件可靠性测试的主要目的有:
51Testing软件测试网&l3P'i
IPyv yG w.`(1)通过在有使用代表性的环境中执行软件,以证实软件需求是否正确实现。
51Testing软件测试网M ~up)T#yT(2)为进行软件可靠性估计采集准确的数据。估计软件可靠性一般可分为四个步骤,即数
51Testing软件测试网h9L,f.\$FgKkpY据采集、模型选择、模型拟合以及软件可靠性评估。可以认为,数据采集是整个软件可靠性
51Testing软件测试网V4cY2}mA.J8my-G估计
工作的基础,数据的准确与否关系到软件可靠性评估的准确度。
51Testing软件测试网ab2^!yX\~;~4E}(3)通过软件可靠性测试找出所有对软件可靠性影响较大的错误。
(l*q9f)^3U051Testing软件测试网1x4G
l
Em3.软件可靠性测试的特点
51Testing软件测试网Ah3{"_;Sk软件可靠性测试不同于硬件可靠性测试,这主要是因为二者失效的原因不同。硬件失效
;zcz{:^#w0G0一般是由于元器件的老化引起的,因此硬件可靠性测试强调随机选取多个相同的产品,统计它
51Testing软件测试网6m
F ^HK2b mL9l们的正常运行时间。正常运行的平均时间越长,则硬件就越可靠。软件失效是由设计缺陷造
Nny4}Qp#Kr0成的,软件的输入决定是否会遇到软件内部存在的故障。因此,使用同样一组输入反复测试软
51Testing软件测试网?^
u(?~件并记录其失效数据是没有意义的。在软件没有改动的情况下,这种数据只是首次记录的不
51Testing软件测试网6Jh(P;f!L{1Fu断重复,不能用来估计软件可靠性。软件可靠性测试强调按实际使用的概率分布随机选择输
51Testing软件测试网'WW1Ys\^ ^入,并强调测试需求的覆盖面。
51Testing软件测试网n\F,I"Sn,Bt!V软件可靠性测试也不同于一般的软件功能测试。相比之下,软件可靠性测试更强调测试
5h?l9?(K8c-[0输入与典型使用环境输入统计特性的一致,强调对功能、输入、数据域及其相关概率的先期
^#[}q{uA0识别。测试实例的采样策略也不同,软件可靠性测试必须按照使用的概率分布随机地选择测
51Testing软件测试网GL+W K,Kh+LlB试实例,这样才能得到比较准确的可靠性估计,也有利于找出对软件可靠性影响较大的故障。
+r8Jw"c#t#j}0此外,软件可靠性测试过程中还要求比较准确地记录软件的运行时间,它的输入覆盖一般也要
51Testing软件测试网4r \q%i.a&J;|4@5S|大于普通软件功能测试的要求。
51Testing软件测试网 eds0R*bk2r对一些特殊的软件,如容错软件、实时嵌入式软件等,进行软件可靠性测试时需要有多种
51Testing软件测试网{G:wOa;zAN测试环境。这是因为在使用环境下常常很难在软件中植入错误,以进行针对性的测试。
51Testing软件测试网 x,z0S\!P
~)oL51Testing软件测试网yt;K'?}$bu'a/lI4.软件可靠性测试的效果
51Testing软件测试网eyT/L2Zlh'q软件可靠性测试是软件可靠性保证过程中非常关键的一步。经过软件可靠性测试的软件
}A)d2ZN
Z1[0并不能保证该软件中残存的错误数最小,但可以保证该软件的可靠性达到较高的要求。从工
51Testing软件测试网*I6u[0xij_程的角度来看,一个软件的可靠性高不仅意味着该软件的失效率低,而且意味着一旦该软件失
7w:~n3|.Uf0效,由此所造成的危害也小。一个大型的工程软件没有错误是不可能的,至少理论上还不能证
51Testing软件测试网\^X[l"LJ明一个大型的工程软件能没有错误。因此,保证软件可靠性的关键不是确保软件没有错误,而
:HZ7{$Wr)Ga:N0是要确保软件的关键部分没有错误。更确切地说,是要确保软件中没有对可靠性影响较大的
51Testing软件测试网ypwH%J^:M4TqB错误。这正是软件可靠性测试的目的之一。
^^@9Yl5ap+v0软件可靠性测试的侧重点不同于一般的软件功能测试,其测试实例设计的出发点是寻找
51Testing软件测试网;G%ux1EAP%zW对可靠性影响较大的故障。因此,要达到同样的可靠性要求,可靠性测试比一般的功能测试更
:KY ^[3T
f]0有效,所花的时间也更少。
#}+ys$SZ^Su.X0另外,软件可靠性测试的环境是具有使用代表性的环境,这样,所获得的测试数据与软件
2|5l?]_J? f5^0的实际运行数据比较接近,可用于软件可靠性估计。
\q#T0z(j2Z-NgP0总之,软件可靠性测试比一般的功能测试更加经济和有效,它可以代替一般的功能测试,
51Testing软件测试网:xV3w(wg9~+Q l#xm而一般的软件功能测试却不能代替软件可靠性测试,而且一般功能测试所得到的测试数据也
51Testing软件测试网Dc)N^K/}v不宜用于软件可靠性估计。
51Testing软件测试网Jde:t7De%oBvU5C#NC(z+LG0二、软件可靠性测试中需注意的问题
51Testing软件测试网K
nFlX Y软件可靠性测试一般可分为四个阶段:制定测试方案,制定测试计划,进行测试并记录测
6u'`*xVQI`0试结果,编写测试报告。
:rU4d:pGQ)n-r.A0制定测试方案时需要特别注意被测功能的识别和失效等级的定义。制定测试计划时需设
51Testing软件测试网aO7fPFw计测试实例,决定测试时要确定输入顺序,并确定程序输出的预期结果,这时也需注意测试覆
51Testing软件测试网
U(Dw9q4R
KI$Sb/A盖问题。
51Testing软件测试网J*J/z+p2~ON51Testing软件测试网 Gk$wA3g$]:`
J7J1.功能识别
51Testing软件测试网L{P(l @@'u#HO软件可靠性测试的第一步就是进行功能识别,确定使用剖面。功能识别的目标是:识别所
!hTrM}}g/y;|0有被测功能以及执行这些功能所需的相关输入,识别每一个使用需求及其相关输入的概率分
51Testing软件测试网)d-kp:qE+U8zz$~SG_布。
*QP P\7{p+zc_0为达到第一个目标,需要分析软件功能的所有集合,这些功能之间全部的约束条件,功能
`:k'^;j)iJr0之间的独立性、相互关系和相互影响,还需分析系统的不同运行模式、失效发生时系统重构
w l4g7vGi~du-|0策略等对软件运行方式有较大影响的因素。
51Testing软件测试网IWH.yf-PL第一个目标也是一般软件功能测试需要达到的目标,但第二个目标则是软件可靠性测试
"n|3?+oM5aD3A0特别强调的。为了得到能够反映软件使用的有代表性的概率分布,测试人员必须和系统工程
3Q4^1TO`o%w5|#kZ0师、系统运行分析员和顾客共同合作。需要指出的是,由于可靠性的要求,输入数据的概率分
Gg'S;Jq I
|.F0布应包括合法数据的概率分布和非法数据的概率分布两部分。有时为了更好地反映实际使用
Jp4F"SjS/{/l0状况,还需给出那些影响程序运行方式的条件,如硬件配置、负荷等的概率分布。
J(xK-w7f%thK0/d0^Wr7\-xJe$X]P9E+z02.定义换效等级
51Testing软件测试网)e
m(g'fv.co_定义失效等级主要是为了解决下面两个问题:
j'h,{I}4bG
Cv0·对发生概率小但失效后危害严重的功能需求的识别。
%?xeGP} w0·对可不查找失效原因、并不做统计的功能需求的识别。
51Testing软件测试网5s]6OGO4{在制定测试计划时,失效及其等级的定义应由测试人员、设计人员和用户共同商定,达成
#k+|.s&H{#`0协议。一般的等级定义如表所示。
u6ErL&zyB4P,`A0@@16115000.GIF;表1 失效等级定义@@
51Testing软件测试网mu'eEy*cM9t如果存在1级和2级失效可能性,那么就应该进行故障树分析,标识出所有可能造成严重失
%@J5~L^0dYF0效的功能需求和其相关的输入域、外部条件和发生的可能性。
'MpM+Wj[5Mfm0对引起1级和2级失效的功能需求及其相关的输入域必须进行严格的强化测试。对引起3
51Testing软件测试网`Xda/U级失效的功能可按其发生概率选择测试实例。第4级失效可不查找原因,可在以后的版本中处
^T
lt4xU:B*U"D0理。
;cq,q+l
R-r0:a.IcArMSOy8O`03.可靠性测试覆盖
\
z}7Vl@!v0可靠性测试必须保证输入覆盖和环境覆盖,这是准确估计软件可靠性的基础。
51Testing软件测试网5v4F*F/M!GoEgI8u;c|输入覆盖包括下面几个内容:
7~V'usI:c,{W+{tB0·输入域覆盖,即所有被测输入值域的发生概率之和必须大于软件可靠度的要求。
51Testing软件测试网D.\5OL$Q·重要输入变量值的覆盖。
51Testing软件测试网[y.T-dy·相关输入变量可能组合的覆盖,以确保相关输入变量的相互影响不会导致软件失效。
51Testing软件测试网(n8Ys7C#c2~dxt6l·设计输入空间与实际输入空间之间区域的覆盖,即不合法输入域的覆盖。
51Testing软件测试网X:X0s C@M3H/s·各种使用功能的覆盖。
51Testing软件测试网 [K\GU:T环境覆盖是指测试时必须覆盖所有可能影响程序运行方式的条件。
51Testing软件测试网H&xA'T
nin?*C]8Ps!^w,Z%g0三、软件可靠性测试的步骤
51Testing软件测试网X$cg%U@t8U/Q软件可靠性测试分为四个阶段:
-K8cC%CIVk,s0F
d$p"b^$~-w9@01.制订测试方案
Q],DH1dC&U%Fn'l0B0本阶段的目标是识别软件功能需求,触发该功能的输入和对应的数据域,确定相关的概率
$U t1Ou!dH0分布及需强化测试的功能。
51Testing软件测试网8KQnz%jN2T{以下是我们推荐的步骤。在一些特定的应用中,有的步骤并不是必须的。
51Testing软件测试网Sd4b!uQ'sOoc/FRDz(1)分析功能需求 分析各种功能需求,识别触发该功能的输入及相关的数据域(包括合法
51Testing软件测试网E\Np[NYX-d与不合法的两部分)。分析时要注意下述问题:
/P-Cc%|%fjht2r0·该软件是否存在不同的运行模式?如果存在,那么应列出所有的系统运行模式。
51Testing软件测试网)Yp"DcPN[t G·是否存在影响程序运行方式的外部条件?如果存在,那么有多少?它们的影响程度如何
51Testing软件测试网.V]8A#Y{+x }·各种功能需求之间是相互独立的还是相关的?如果相关,是密切相关还是部分相关?如
Z1VQ:N0V9[DvR(`0果两种功能密切相关,那么可将两种功能合并为一种功能。如果功能之间为部分相关,则需列
h%O?o-g5|
wKA0出相应输入变量的合法组合。
51Testing软件测试网3YU.`.s,^~5k(2)定义失效等级 判断是否存在出现危害度较大的1级和2级失效的可能性。如果这种可
51Testing软件测试网DvJJQ能性存在,则应进行故障树分析,标识出所有可能造成严重失效的功能需求和其相关的输入域
51Testing软件测试网H
mN3n'B\
v0`2U"rk。
51Testing软件测试网+zh+r\7vhK(3)确定概率分布
!H5V.k1]k?3X0·确定各种不同运行方式的发生概率,判断是否需要对不同的运行方式进行分别测试。
51Testing软件测试网vU Go
P6GR&K如果需要,则应给出各种运行方式下各数据域的概率分布;否则,给出各数据域的概率分布。
'Trwz.wq7C:u%{&Ba0·判断是否需要强化测试某些功能。
f
BUhz#Y:I0(4)整理概率分布的信息 将这些信息编码送入
数据库。
51Testing软件测试网!XqD9rr2i`51Testing软件测试网m3\-R1yF&tV5c+yC2.制订测试计划
&[[!TR}0本阶段的目标是:
51Testing软件测试网oE'G m!Goe9sod(1)根据前一阶段整理的概率分布信息生成相对应的测试实例集,并计算出每一测试实例
51Testing软件测试网mpJfMRS7I$Ya预期的软件输出结果。
51Testing软件测试网Y]:qE@:Z/[Z本阶段需要注意:在按概率分布随机选择生成测试实例的同时,要保证测试的覆盖面。
51Testing软件测试网1gP'hb7mV/G;}i(2)编写测试计划,确定测试顺序,分配测试资源。由于本阶段前一部分的工作需要考虑
!F9jn2T5G}5a![0大量的信息和数据,因此需要一个软件支持工具,建立数据库,并产生测试实例。另外,有时预
51Testing软件测试网2d.B8qIM:ss0G测软件输出结果也需要大量的计算,有些复杂的软件甚至要用到仿真器模拟输出结果。
\-Q \4Fjj0总之,具体实施与被测应用软件的实际功能类型有关。
51Testing软件测试网:T2F-`i!c m.l"k;Q'iqE51Testing软件测试网0X8}YG
Nv@"e3.测试
hKm(eyg)A0本阶段进行
软件测试。需注意的是被测软件的测试环境(包括硬件配置和软件支撑环境
$w WO
VG0)应和预期的实际使用环境尽可能一致,对某些环境要求比较严格的软件(如嵌入式软件)则应
|K)f`X;z2\P0完全一致。
51Testing软件测试网.]&B/W$WoC测试时按测试计划和顺序对每一个测试实例进行测试,判断软件输出是否符合预期结果
Y%p6[ }jeT9X2I0。测试时应记录测试结果、运行时间和判断结果。如果软件失效,那么还应记录失效现象和
51Testing软件测试网dJl$C Ncl&t)e时间,以备以后核对。
,{6x?p5{XQ0U&_/CkK8v
^04.编写测试报告
51Testing软件测试网2D u5nTy*Ov%Bh
P按软件可靠性估计的要求整理测试记录,并将结果写成报告。
M?z$}8R&N.D"Wa%q0笔者认为,软件可靠性测试的关键在于:
sGj(OH2D0·对需求、输入、数据域的识别及相关概率分布的确定。
51Testing软件测试网]#V/_~$C1V(y·按照概率分布随机生成测试实例,并确定测试顺序。
51Testing软件测试网~tsf8s0iB^据国外有关文献报导,这种
测试方法已成功应用于大量应用软件的可靠性测试,包括一些
;rj
htU9fQ0商用软件和航空、航天电子设备中嵌入式软件的测试,其效果很好。因此,我们有必要投入一
nI'u9G
U3A3Z0定的人力、物力,针对我们的实际需要,有目的地对各类应用软件进行软件可靠性测试,从实
51Testing软件测试网7U+a
?
w0S0[a践中逐步积累经验。同时需要软件开发方和使用方共同合作,进行软件可靠性测试方法的研
51Testing软件测试网M'l Fy6nQ究和有关支持工具的开发,促进我国软件可靠性水平的提高。
T5rB cebG+cC051Testing软件测试网*}'u^Xs3|T(~(计算机世界报 1997年 第16期)
cssK6mUj051Testing软件测试网&w2{Df$HNN$b c 51Testing软件测试网"x7W z%T6mdx