软件测试理论你知道多少?
上一篇 / 下一篇 2007-06-07 14:30:40 / 个人分类:其他
Cv'r t?&G8K-i051Testing软件测试网z(H]0a(W%k
G4NC8C;I8n0I0软件开发和使用的历史已经留给了我们很多由于软件缺陷而导致的巨大财力、物力损失的经验教训。这些经验教训迫使我们这些测试工程师们必须采取强有力的检测措施来检测未发现的隐藏的软件缺陷。 51Testing软件测试网2f fBma(GnV-c-|
[X8J.tP VV1d/?0 51Testing软件测试网VX?|y!v&at)V
51Testing软件测试网2m)IF!fL6bV生产软件的最终目的是为了满足客户需求,我们以客户需求作为评判软件质量的标准,认为软件缺陷( Software Bug )的具体含义包括下面几个因素:
JAeuL}g k3y0!x SO8aE W+{x Y0
(i$^lVo8\H0C L5M7v*WZ0☆ 软件未达到客户需求的功能和性能;
7by Z0L,W;A00tcyoBE5ATq)m0
0x+m T&iYKI X0v8WbD(O|3L0☆ 软件超出客户需求的范围;
0Iwu4Vk0w"sw+ssa0 51Testing软件测试网-n%{qm'Em2P*Q8M51Testing软件测试网!c J4t'k#f$F3kc
51Testing软件测试网'mx2Ax:Skf?8nA☆ 软件出现客户需求不能容忍的错误; 51Testing软件测试网5dg${(s7L0`
HK5wo-b/S%C0 51Testing软件测试网4kA"L{ }uC8m
51Testing软件测试网 ].J.b/nx-i☆ 软件的使用未能符合客户的习惯和工作环境。
"|f4u`L+u;OC0 51Testing软件测试网 {a@cfA mC51Testing软件测试网Wd3f4]R"]
0|.B#q x#V'v0考虑到设计等方面的因素,我们还可以认为软件缺陷还可以包括软件设计不符合规范,未能在特定的条件(资金、范围等)达到最佳等。可惜的是,我们中的很多人更倾向于把软件缺陷看成运行时出现问题上来,认为软件测试仅限于程序提交之后。 51Testing软件测试网ip jb8`t\V/K
51Testing软件测试网&TD\B?4|!po!Y-[51Testing软件测试网`8E [I]b6Q~
51Testing软件测试网3g4m3H,GL在目前的国内环境下,我们几乎看不到完整准确的客户需求说明书,加以客户的需求时时在变,追求完美的测试变得不太可能。因此作为一个优异的测试人员,追求软件质量的完美固然是我们的宗旨,但是明确软件测试现实与理想的差距,在软件测试中学会取舍和让步,对软件测试是有百益而无一弊的。
WB/A1v%c0vXX5vS'Q0 51Testing软件测试网%qz1n(v-f#l{c
X6a)t9A1~t*W0下面是一些软件测试的常识,对这些常识的理解和运用将有助于我们在进行软件测试时能够更好的把握软件测试的尺度。
'`rn"N L7I0 51Testing软件测试网T({1` nW7d S51Testing软件测试网*U/d^NP
*jU(~"E!F*?0☆ 测试是不完全的(测试不完全) 51Testing软件测试网VUl;novP
bpb,K`0 51Testing软件测试网7j At6~[z1F*ps
51Testing软件测试网&Q*o ~-^"D]"uI-x|,G很显然,由于软件需求的不完整性、软件逻辑路径的组合性、输入数据的大量性及结果多样性等因素,哪怕是一个极其简单的程序,要想穷尽所有逻辑路径,所有输入数据和验证所有结果是非常困难的一件事情。我们举一个简单的例子,比如说求两个整数的最大公约数。其输入信息为两个正整数。但是如果我们将整个正整数域的数字进行一番测试的话,从其数目的无限性我们便可证明是这样的测试在实际生活中是行不通的,即便某一天我们能够穷尽该程序,只怕我们乃至我们的子孙都早已作古了。为此作为软件测试,我们一般采用等价类和边界值分析等措施来进行实际的软件测试,寻找最小用例集合成为我们精简测试复杂性的一条必经之道。 51Testing软件测试网Inr(e/t!YY%g
51Testing软件测试网/x+m"ING$iLNk1ilkj5LS~0 51Testing软件测试网;iR IU4m9I @x
☆ 测试具有免疫性(软件缺陷免疫性) 51Testing软件测试网kAxZ}TN`$F l
a h;IET7im0
l"mJ#{B*l0 51Testing软件测试网"Yl5R(}^软件缺陷与病毒一样具有可怕的 “ 免疫性 ” ,测试人员对其采用的测试越多,其免疫能力就越强,寻找更多软件缺陷就更加困难。由数学上的概率论我们可以推出这一结论。假设一个 50000 行的程序中有 500 个软件缺陷并且这些软件错误分布时均匀的,则每 100 行可以找到一个软件缺陷。我们假设测试人员用某种方法花在查找软件缺陷的精力为 X 小时 /100 行。照此推算,软件存在 500 个缺陷时,我们查找一个软件缺陷需要 X 小时,当软件只存在 5 个错误时,我们每查找一个软件缺陷需要 100X 小时。实践证明,实际的测试过程比上面的假设更为苛刻,为此我们必须更换不同的测试方式和测试数据。该例子还说明了在软件测试中采用单一的方法不能高效和完全的针对所有软件缺陷,因此软件测试应该尽可能的多采用多种途径进行测试。
kHX`@{M R0D9Q\07Jgo4v+eS0
D0z4D3V7h"a:Vm_{0^BhV1bg,I o g&j A0☆ 测试是 “ 泛型概念 ” (全程测试) 51Testing软件测试网IXn$dbY A@
51Testing软件测试网epyC f3C M'g51Testing软件测试网y7c:IRM*ZPTt
51Testing软件测试网!t h:W.q3Qx&a我一直反对软件测试仅存在于程序完成之后。如果单纯的只将程序设计阶段后的阶段称之为软件测试的话,需求阶段和设计阶段的缺陷产生的放大效应会加大。这非常不利于保证软件质量。需求缺陷、设计缺陷也是软件缺陷,记住 “ 软件缺陷具有生育能力 ” 。软件测试应该跨越整个软件开发流程。需求验证(自检)和设计验证(自检)也可以算作软件测试(建议称为:需求测试和设计测试)的一种。软件测试应该是一个泛型概念,涵盖整个软件生命周期,这样才能确保周期的每个阶段禁得起考验。同时测试本身也需要有第三者进行评估(信息系统审计和软件工程监理),即测试本身也应当被测试,从而确保测试自身的可靠性和高效性。否则自身不正,难以服人。
h1j9v N{4A.TXX Kr P0 51Testing软件测试网,P#H{.lSw51Testing软件测试网4l0A ?t!N0Z'Pai
B'DH5zw^0另外还需指出的是软件测试是提高软件产品质量的必要条件而非充分条件,软件测试是提高产品质量最直接、最快捷的手段,但决不是一个根本手段。
\ONT+O J4AH![0 51Testing软件测试网v6o'r Iu%FZ51Testing软件测试网#m"O7Td1X)Nle
vfK3{5^2k(B\'c0☆ 80-20 原则 51Testing软件测试网q-az'y1l7b0[9xZQ
{,E2dO%j'N Z3q0K0
/~qzsP`$m$J0afif$rsnD;l080% 的软件缺陷常常生存在软件 20% 的空间里。这个原则告诉我们,如果你想使软件测试有效地话,记住常常光临其高危多发 “ 地段 ” 。在那里发现软件缺陷的可能性会大的多。这一原则对于软件测试人员提高测试效率及缺陷发现率有着重大的意义。聪明的测试人员会根据这个原则很快找出较多的缺陷而愚蠢的测试人员却仍在漫无目的地到处搜寻。
lH1v W!Q/|fN*i`0[)Kb"R'Qf0 51Testing软件测试网g&|j3WR5j%V[ X
zzydS`(v)b"y#P080-20 原则的另外一种情况是,我们在系统分析、系统设计、系统实现阶段的复审,测试工作中能够发现和避免 80% 的软件缺陷,此后的系统测试能够帮助我们找出剩余缺陷中的 80% ,最后的 5% 的软件缺陷可能只有在系统交付使用后用户经过大范围、长时间使用后才会曝露出来。因为软件测试只能够保证尽可能多地发现软件缺陷,却无法保证能够发现所有的软件缺陷。 51Testing软件测试网I c'`sCR
51Testing软件测试网z)Y\c-_|CG3n1O&w+J0
5Ln K9p&\:Q`(Hh080-20 原则还能反映到软件测试的自动化方面上来,实践证明 80% 的软件缺陷可以借助人工测试而发现, 20% 的软件缺陷可以借助自动化测试能够得以发现。由于这二者间具有交叉的部分,因此尚有 5% 左右的软件缺陷需要通过其他方式进行发现和修正。