测试驱动开发

上一篇 / 下一篇  2012-05-10 14:22:45 / 个人分类:杂谈

理念51Testing软件测试网B4z2jb Xw;m{IZ*G

  如果我们能够在设计程序前先设计测试方案,情况怎么样?

+i*RY z9R(pBI#Rd,g051Testing软件测试网)lua"`i

  如果我们能够做到:除非缺乏某个功能将导致测试失败;否则就拒绝在程序中实现该功能,情况会怎么样?51Testing软件测试网xN'F4{uY^#`

51Testing软件测试网9fS K#nt

  如果我们能够做到:除非由于缺少某行代码将导致测试失败,否则就拒绝在程序中增加哪怕一行代码,情况会怎样?

,?%c SC Fn)R(@&l051Testing软件测试网/{d7a%YI

  如果首先编写失败的测试表明需要一项功能,然后再逐渐地增加那项功能使测试通过,情况又会怎样?

)_0fmwQy l0

{l;@_ am!QR0  这对于我们正在编写的软件的设计有什么影响?如果存在这样一组包罗万象的测试,我们能够从中得到什么好处?51Testing软件测试网\i0|u6D?7CFSH%@r L

M1GySSMK0  方法

o%y.JBz T ~W0

#k"?:\2zE:d3^0  ● 创建一个清单,列出我们所知道的需要让其运行通过的测试51Testing软件测试网1LD a.U)Rnf&n:r

51Testing软件测试网1gt)YNE&qO

  ● 通过一小段代码说明我们希望看到怎样的一种操作51Testing软件测试网 r py[/y

@:b#ou8D ~ l~*Iq*B&_0  ● 暂时忽略JUnit的一些细节问题

!u[{$k:Z4sbK0

V6ct.|9V0  ● 通过建立存根(stub)来让测试程序通过编译51Testing软件测试网o"}b!yA7V-|

8X*e;?#A C$c'|0  ● 通过一些另类的做法来让测试运行通过51Testing软件测试网M9N5R n&ej

0KQz+d,~aE0  ● 逐渐使工作代码一般化,用变量代替常量

"Ym'uXB r!Q051Testing软件测试网][.V&@_&v l,cSz3U&Qp

  ● 将新的工作逐步加入计划清单,而不是一次全部提出

,z*eF Z2wXe M0

HI9gqB0  尽快使测试程序可运行的策略

p'n M?\R7p#Mq051Testing软件测试网~/{\OJv"D

  1、伪实现

W ?([ XOI| S#_4ggfs0

aWw l6i/V,h0  返回一个常量并逐渐用变量代替常量直至伪实现代码成为真正实现的代码。51Testing软件测试网$?Y6_Q/M

51Testing软件测试网;]%~9va5bL

  2、显明实现

0d} d4y3a-TI;_-@1s051Testing软件测试网"h;a+T'N B

  将真正实现的代码直接敲入。

^^q l@!I9u'P051Testing软件测试网6D vu2o*g CvX R

  3、三角法51Testing软件测试网&@ {-j0EQX/b

51Testing软件测试网5B%@G)g k(RN9h(Y

  测试的步骤/阶段

%M Ra]s%WB3|051Testing软件测试网EFQI*C,R$p

  1、写一个测试程序

q-uLs)^0y051Testing软件测试网]D CR4e

  2、让测试程序编译通过51Testing软件测试网 t:ql0}%[$g C

3、运行测试程序,发现不能运行51Testing软件测试网 \(u~p3nv

  4、让测试程序可以运行

]$u*_ `?%DU(T0

4R'e"`3Ct.j0  5、消除重复设计,优化设计结构(重构)

9Lp&j:J-X%E]5}0

??3B!JS c inlM0  不同的阶段有不同的目的。它们需要不同的解决方式,不同的审美观。前三个阶段需要很快完成,这样我们就达到一个包含新功能的已知状态。你可以不择手段地到达这一状态,这是因为就在此短暂的一刻尽快地让测试程序运行通过比如何设计更重要。51Testing软件测试网 r4m*hZZ`~V#N

5m@1e^)J0  虽然在前三阶段,你可以抛弃所有的设计原则,但是,记住,这一开发周期还没有结束。没有第五步,整个周期的前四步也毫无意义。要适时地进行设计。该让它运行通过时就让它运行通过,该优化时让要进行优化。

Z9| [gQvH$S051Testing软件测试网 S(` Zm KQ$hJ/} |

  经过前面三个阶段,可能你的代码充满了很多重复代码和重复设计。请记住,在你编写下一个测试代码之前请把它们清除掉。51Testing软件测试网3c0`N7h?

51Testing软件测试网Ec ~8QY1xK!y^

  测试驱动开发的过程

P Y,\UA(Ha9e051Testing软件测试网 X @D)A6Kb

  ● 加入一个小的测试

#{(mb%j%C f0

B$O"E/t0ES0  ● 运行所有的测试,运行失败51Testing软件测试网AE vT-B6i

TZO1k.L#i-_/S vb0M0  ● 适当修改

s `7Cl\u{051Testing软件测试网\6UO~e h}

  ● 运行测试且成功

.]'L J| B/?,|N W051Testing软件测试网 I x\N!i N[q

  ● 重构,消除重复设计,优化设计结构51Testing软件测试网SX9KYs5Zsw fO

^:Q#G,l?BB5c/A;t4L0  体会

S1DMQFB8BH,V[0

3H@%X:M-V a p3QN0  将设计缺陷转化为测试代码进行证明51Testing软件测试网.? s0v| m.S2V_m

*v@ Y b7@"U+q K2C0  当发现某种情形不该成立或者应该成立时,第一件事情都应该把它变成测试代码,然后证明它(测试不通过)。再修改现有代码以通过测试。51Testing软件测试网s G.E1R7l7f+m

c/zq3l iZH?;Q }0  或者说:

.h:G7w(j.~ |o%q051Testing软件测试网'|.P HJpV.g6qd$j

  ● 将一个设计缺陷(副作用)转化为一个由此缺陷导致运行失败的测试程序。51Testing软件测试网K4g}$e3[ v6T

d/d5QL|0  ● 将采用存根实现使代码迅速编译通过

7nH-y0N2NA0

o b zutX)D6` |0  ● 键入我们认为正确的代码以使测试程序能尽快工作51Testing软件测试网:]*A z6lI}I

+|!rNA(~ e0  每一次只处理清单上的一个问题

6W}y*^.|_o3z-A*}0

;u5hR$Ce y0  每一次只解决清单上的一个问题。让测试通过后,要及时进行重构。在未消除重复代码之前,请不要写下一个测试用例

5^Aw7df.W`051Testing软件测试网Ud qPVM-h4Q

  有代码,无测试?

`:KRj#y051Testing软件测试网+Z/p1F2L"k7Y

  当你增加一行代码,而它没有测试代码时,这个时候你应该停止,然后思考。允许没有测试代码的代码存在么?51Testing软件测试网6jLZ?9f

t}2XAv[$[0  除非由于缺少某行代码将导致测试失败,否则就拒绝在程序中增加哪怕一行代码。

,^iJ GI7j-k%? u0

TAG:

wxj_yzx的个人空间 引用 删除 wxj_yzx   /   2012-05-26 20:31:10
 

评分:0

我来说两句

Open Toolbar