测试之家淘宝店:主营软件测试定制服务 http://shop71136398.taobao.com/ 软件评测试考试论坛:http://www.testdao.com/forum-113-1.html 2012软件评测师考试群:28388329

每日构造与冒烟测试

上一篇 / 下一篇  2007-10-15 13:26:18 / 个人分类:白盒测试

51Testing软件测试网] ^5e;c+p,`K }

  周五在公司的内网上写了一篇关于编译工作的月总结,结果被老总重视,并因此制定了关于《每日构造与冒烟测试》的规定,我也才明白原来自己一直从事的是冒烟测试。51Testing软件测试网WWd o2|0H

每日构造与冒烟测试

gU'MGV0如果你想创建一个只包含一个源程序文件的简单程序,那么你只需要编译、连接那一个文件就可以了。如果是一个团队项目组,有着许多甚至上千个源程序文件,那么要创建一个可执行程序的过程就变得更复杂、更耗时。你必须用各种各样的组件将程序逐步建立起来。51Testing软件测试网*UT6t1D3z)_

i UY `YU0微软或其它一些软件公司中惯例是:每日构造并做“冒烟测试”。每天都对已完成的源程序进行编译,然后连接组合成可执行的程序,并做“冒烟测试”,以简单的检查该执行程序在运行时是否会“冒烟”。

Z(UA(HRV+j051Testing软件测试网u Za4wkAda


&gW!^|`SU0带来的好处51Testing软件测试网y:UP)eeA

51Testing软件测试网R/~)})`IX

虽然这是一个非常简单的过程,但却有非常重要的意义:

:}Si,y9t'd6]051Testing软件测试网Kr5D+[e

1、能最小化集成风险51Testing软件测试网7v#q#X7q{

51Testing软件测试网}s1n^qy c

项目组可能遇到的一个很大的风险是,项目组成员根据不同的系统功能各自开发不同的代码,但是当这些代码集成为一个系统的时候,也许系统完成不了预期的功能。这种风险的发生取决于项目中的这种不兼容性多久才被发现,由于程序界面已经发生了变化,或者系统的主要部分已经被重新设计和重新实现了,相应的排错工作将非常困难和耗时。极端情况下,集成的错误可能回导致项目被取消掉。每日构造和冒烟测试可以使这种集成错误变得非常小,而且便于解决,防止了很多集成问题的产生。51Testing软件测试网ieS$dli M)k

51Testing软件测试网 Bl9xW M;p

2、能减小产品低质量的风险51Testing软件测试网-o ~ nVj,U m

2YH Q4~!r$u0这种风险是和集成不成功、集成出错相关联的。每天对集成的代码做一些少量的冒烟测试,即可杜绝项目中那些基本的质量问题。通过这种方式,使系统达到一种周知的良好状态,维护这样的系统可以防止系统逐步恶化到耗费大量时间排查质量问题的地步。

%pvH0W }!^-f]0

Hh8b.Y9g!bC.}}0x03、能简单化错误诊断

ZhC$`s I{ ~n051Testing软件测试网iL[0ns3m0[

当系统每天都进行build和测试时,系统任何一天发生的错误都能够变得十分精细,便于排查。比如在17日系统还运行正常,18日就出错了,那么只需要检查这两次build之间的代码变化就可以了。51Testing软件测试网O4M,X_e[

W Z6V ]? kQ:{p6D04、能极大鼓舞项目组的士气51Testing软件测试网N6`'B7yE n

9v{Sf6Q&F0看到产品的不断成长,能够极大的鼓舞项目组的士气,有时甚至不管这个产品到底用来做什么。开发人员可能会为系统显示了一个矩形而感到激动。通过每日构造,产品每天进步一点点,保证项目士气的持续高涨。51Testing软件测试网qZ"u)c T;D c-W"WkX1H&f

Iuu.nkk-{ h0
Q0oZC&O;C0进行每日构造和冒烟测试

l {k3f B9G+a051Testing软件测试网1Kz ahS l4Q9iS

虽然说这是一个简单枯燥的活,每天进行build,每天进行测试,但也有着一些值得注意的细节:

/N,?L-^ vT0J0

UMKMgp&C01、每天坚持51Testing软件测试网'cq"t)\6r-tD-e/C

I b%Rgk0每日构造,最重要的就是“每日”。如Jim McCarthy所说,把每日构造看作是项目的“心跳”,没有“心跳”的话,项目也就死了(Dynamics of Software Development, Microsoft Press, 1995)。Michael Cusumano and Richard W. Selby描述了另外一种隐含的比喻,把每日构造比作项目的“同步脉冲”(Microsoft Secrets, The Free Press, 1995)。 不同开发人员写的代码在他们的“脉冲”之间肯定都会存在“同步”的差异,但是必须有这样一个“同步脉冲”,使得这些代码能够组合为一个整体。当项目组坚持每天把这些不同的“脉冲”组合到一起的时候,开发人员脱离整体的情况就会得到极大程度的杜绝。51Testing软件测试网 RZxc$z{

51Testing软件测试网$^E5bNs Jp

有些项目组把这一过程简化为“每周build一次”。这样带来的问题是,某一次build失败后,可能要回溯好几周才能找到原因。如果这种情况发生的话,已经得不到经常build带来的好处了。51Testing软件测试网(pyr0[%Kt

51Testing软件测试网G!GFE2U4E ]%E_X

2、严格检查每一次build51Testing软件测试网 cRxJ,r

S,y ~#I%b_"Rx0要保证每一次build的成功,就必须保证build后的结果(也可称为build)是可以正常运行的,如果build不可运行,那么本次build被认为是不成功的,同时应该将修复此次build的工作提高到项目组最高级别来处理。51Testing软件测试网"A qod/o+T_Gp

$_%nP%g{3hP0对于如何衡量一个build,每一个项目组都会定义一些自己的标准,这些标准需要设定一个严格的质量级别来处理那些特别严重的缺陷,同时也需要具有一定的伸缩性来忽略掉那些微不足道的缺陷,一些不适当的关心也许会使整个过程举步为艰。51Testing软件测试网!y:p,Wlr|)g,E

51Testing软件测试网 PM.L;JGP WP

一个好的build起码应该具备以下条件:51Testing软件测试网4SWbP8I'LKY

zS7u%R$]1E:Cg3t0●能够成功编译所有的文件、库,以及其它相关组件;51Testing软件测试网E,D lCjz E

51Testing软件测试网u!|VW6Y1k0U.l

●能够成功链接所有的文件、库,以及其它相关组件;51Testing软件测试网8^K9v!ggp2ur1? j

51Testing软件测试网5Ge6d-] I9L

●不能存在任何使得系统无法运行或者运行出错的高级别故障;51Testing软件测试网}D)^8B(x#A"Z

yM"y \}!k'v2S0●当然,必须通过冒烟测试

q5p)b3}K4Zoklh051Testing软件测试网4L;[3@:[7fv iP.p^,d

3、每天进行冒烟测试

HU|7_%I051Testing软件测试网R3H-Nx I7\1V

冒烟测试应该是对整个系统流程从输入到输出的完整测试。测试不必是面面俱到的,但是应该能够发现系统中较大的问题。冒烟测试应该是足够充分的,通过了冒烟测试的build就可以认为是经过充分测试、足够稳定的。

%D%UD h7C051Testing软件测试网)XL:?6r:E0_&\7y!?:m

不进行冒烟测试的build是没有太大价值的。冒烟测试就像一个哨兵,在阻止着产品质量恶化和集成问题的产生,不进行冒烟测试,每日构造可能会变成浪费时间的练习。

j)L+NqL+fg CC3_051Testing软件测试网9gU.kHj)C;N

冒烟测试必须随着系统的扩充而扩充。最初,冒烟测试可能是非常简单的,比如验证系统是否会打印“Hello World”,随着系统功能的扩充,冒烟测试需要越来越充分。最初的冒烟测试也许只需要几秒钟来执行,逐渐地,测试可能会花费30分钟,1小时,甚至更长。51Testing软件测试网)bB2L;M1_["P/Tv

51Testing软件测试网4H6sn O{2v*@

4、建立一个专门的build小组

I ?9C^O#]|F0xE0

*c&`u7eJ-M0在很多项目组,维护每日构造,并更新冒烟测试用例,会耗费一个人工作的大部分时间。因此在一些大的项目中,这项工作独立成不止一个人来完成的全职工作。比如在 Windows NT 3.0的研发中,就有一个由四个全职人员组成的专门的build小组(Pascal Zachary, Showstopper!, The Free Press, 1994)。

t4ef;|O Nm q0

C+k+t\ V#[05、为build增加修订,如果这样做有意义的话51Testing软件测试网]${v rJ"N

y1S|%n.M]L#B0一般开发人员不会每天都经常向系统中快速的增加实际的代码,通常是每隔几天,他们在开发好完成某个功能的一套代码以后,然后集成到整个系统中。

$F]'qK&}/tpQ051Testing软件测试网!oG(gB%w0]p

51Testing软件测试网mr'z+cDJg!M
6、规定一些导致build失败的惩罚措施

2eS$d7S#ca,s \9Gx051Testing软件测试网 [W2U;Pg.hT*h+J+B

很多执行每日构造的项目组都会规定一些惩罚措施,来惩罚那些导致build失败的行为。从最开始,项目组成员就清楚的知道,build的正常执行是项目组的头等大事。一个失败的build是项目组的意外,无法成为项目组工作的准则。必须坚持:导致build失败的同事,必须停下手中的工作,首先来解决build失败的问题。如果一个项目组的build经常失败的话,久而久之的,再来谈build的正确性就没有意义了。

)EHhVis ~n0

$PA_)l"[5mS#y0有种轻松的惩罚措施,能够突出解决问题的优先性。Some groups give out lollipops to each "sucker" who breaks the build. This developer then has to tape the sucker to his office door until he fixes the problem. 有些项目组会惩罚犯错的同事戴上山羊角,或者向一个项目基金捐献5块钱。51Testing软件测试网4P"I6uHs*mi ^D

Jq.h#b5b0有些项目组对此的惩罚就有点残酷了。微软的开发人员,在一些知名度很高、很重要的产品如Windows NT,Windows 95,Excel等产品后期研发中,被要求随时带着寻呼机,如果你的代码导致build失败的话,即使是凌晨3点钟,也会要求你立即来处理这个问题。51Testing软件测试网']wRzt

51Testing软件测试网!uvb1I!LZ;s@8B

7、即使在压力下也需坚持每日构造和冒烟测试51Testing软件测试网%FhMS(XC

51Testing软件测试网0\UG2O S R5Kbc

当项目进度的压力越来越大时,维护每日构造的工作看起来有些浪费时间,但是恰恰相反。在压力之下,开发人员丢掉一些平时的规定,会采用一些设计和实现的捷径,这在平时压力较小的环境下一般时不会用的。代码的review和单元测试也可能会比平时粗心一些,这些代码的状态变化也会比平时快很多。

2j'U&Q |;A2?@$K0

%`b d#n%}!Z VN0为防止这种情况的出现,每日构造会坚持相关的规定,让压力下的项目保持在正轨上。代码仍然每天在不断变化,但是构造过程使得这种变化每天都可控。51Testing软件测试网:H&vn!I3m Yk

6V;]*b'h6s0谁能够从每日构造这种过程中得到好处呢?一些开发人员会抗议说,由于他们的项目太大,每天进行build是没有实际意义的。但是为什么现在最复杂的软件项目组却能够成功的执行每日构造的制度呢?本文首发时,Windows NT包括了560万行代码、分布在4万个源程序文件中,项目组仍然可以坚持每日构造。51Testing软件测试网 SjP{ i&w){^

51Testing软件测试网+Zu+PD&N0[a G1B

公司每日构建约定

G2_T u r'P j051Testing软件测试网!Rd7Ht i-Ez

微软是每天14:00为检入(Check In)截止时间。我们也照此办理。因此每日构建约定如下:

MO Ja;VL e;@j0

2t/h0D+_5H0为保证软件开发质量,提高代码稳定性,将缺陷尽可能的扼杀在萌芽状态,PDMS开发组决定实施每日构建:51Testing软件测试网_MXgWN;dO/Y

~!h&q;Ai\ Q01   代码检入时间: 现初步约定所有开发人员的代码在每天14:00之前检入,没有检入的将视为不参与当天的构建。51Testing软件测试网!V7KC(P op6W&["T ]*g

51Testing软件测试网nSS{1Kn

2   构建当天版本:14:00后由测试组负责进行每日构建编译,具体编译问题和开发人员协商解决,并将编译好的库放在\\system\D\PDMS开发文档\Pdms下的lib和libd文件夹下。以后每天可以从该目录下获得最新版本。

A&M(qT0zsc|051Testing软件测试网.j%r@3i?Ap B

3   运行自动化测试工具:测试组在编译完成之后,运行CPPUNIT自动化测试工具,对功能进行完整和重复检验。对于缺陷和错误记录并提交到缺陷管理系统。51Testing软件测试网&zVC1C h@

51Testing软件测试网 bX"K9ii:Nu

51Testing软件测试网i&w*je:y8I#BFz
 

'CsQ$Ma6Q0

TAG: 白盒测试

 

评分:0

我来说两句

Open Toolbar