企业Web应用中的敏捷测试和瀑布测试-1

上一篇 / 下一篇  2012-08-21 09:54:38 / 个人分类:杂谈

51Testing软件测试网:z fE.p5V(i*lw/[

  简介51Testing软件测试网(G2B~E0k5{

-\ dsW Ck _0  同是企业WEB应用程序项目,一个用敏捷,一个用瀑布流程,它们的测试策 略会有何不同?在二者中,测试的关注点都在于告诉业务客户这个应用程序做了哪些事情,同样也要消除应用程序作为产品交付以后的失败风险。它们的主要区别不 是测试本身,而是何时执行测试、由谁执行测试。测试的每个阶段都可以在系统就绪后随时开始,无须等待前一个测试阶段完成。51Testing软件测试网2KHib&QK9N

f6P"m&b dx t D5_0  从未涉足敏捷项目,或是刚启动某个敏捷项目并在寻找指导建议的读者都可以看看这篇文章,它正是为你们而写。文中的信息虽并非笔者新创,但也是收集整理的结果,希望这些信息能帮助你们朝着更为敏捷的过程迈进。51Testing软件测试网l V,K'h+Evb

?t'A y6t.~4C0   敏捷项目的测试阶段跟瀑布项目的测试阶段几乎毫无二致。每个阶段都有准出标准,但是在进入某个测试阶段之前,是不需要等待整个应用程序完成的。只要应用 程序所完成的部分足以进入下一个测试阶段就行。因为测试的对象是一个已完成的功能,而不是一个发布,所以测试阶段是在持续并行进行的。于是就有了一大堆回 归测试。这便也意味着回归测试是测试自动化的基础。对于敏捷项目而言,环境与资源也是要注意的地方,因为对测试环境的需求会来得更早、更加频繁。51Testing软件测试网(T k$PPK5YP

51Testing软件测试网g!yZ*?Znx:CI

   “快速失败”是敏捷项目的一句格言,它的含义是尽可能早地判断出应用程序无法满足业务需求。要做到这一点,就需要不断地对解决方案是否满足业务需求进行 检测,一旦不满足,就要尽早把问题解决。敏捷团队成员-开发人员、测试人员、架构师、业务分析师以及业务代表等人都关注于尽早交付业务价值。所以,测试需 要所有团队成员协力来做, 它不仅仅是测试人员的责任。51Testing软件测试网nQ%[&c`^E4Jx"k

51Testing软件测试网 M1_(e\)rl,A ?A

  测试分类51Testing软件测试网vD2dE(o bR P+\

51Testing软件测试网|0X6Fp'E` A3ld

  敏捷项目跟瀑布项目的测试分类几乎是一样的。其差别主要在于大部分精力投入的地方和每个测试阶段所执行的时机。敏捷项目倾力关注单元测试功能测试,从而为稍后执行的测试阶段创造出高质量的代码,于是后期就不会发现本应在早期发现的缺陷,并能专注于所需要测试的领域。而瀑布项目就有一个常见的问题,后期测试的焦点总是放在找出本来应该在前期发现的缺陷身上。于是修复缺陷的成本提高了,测试工作的投入翻番了,测试的关注点也偏离了。51Testing软件测试网/i ~(sJ:jwYvn9`

y.IZkFg0  瀑布项目和敏捷项目另外一个巨大的不同在于测试自动化。敏捷项目力求在所有测试领域内都达到100%自动化。测试跟持续构建系统集成在一起,于是当代码发生变化时,这个变化会被自动检测到,应用程序被构建起来,然后所有的测试都会被执行。51Testing软件测试网P{ cR;xO

51Testing软件测试网"oi+xQ8l:H F]

  测试驱动开发(TDD)在敏捷项目中很常用,用这种方法的时候,测试用例比代码要先一步创建。于是我们就可以越来越多地看到为代码和功能创建的测试用例。用自动化测试来驱动开发,然后消除重复,这种做法可以保证无论复杂度多高,任何开发者都可以写出可靠的、没有bug的代码。TDD常用的地方是单元测试,但也同样可以用于功能测试、集成测试、用户验收测试和性能测试51Testing软件测试网4X @9E_YO$|q

51Testing软件测试网aR!Z c+c#E,y@j

  单元测试51Testing软件测试网8a"li5^K5Wo0I

51Testing软件测试网,l3xn rc c+S0yD

  单元测试又称白盒测试,它要测试所开发出来的每一个模块。瀑布项目不关注这个测试阶段,而且大多数时候即便有的话也是随意为之。敏捷项目强调单元测试,而且会把所有单元测试都自动化。自动化的单元测试是敏捷项目的基础,对持续集成和重构起辅助作用。51Testing软件测试网%b#ud4K&myT

51Testing软件测试网T~U} x

  单元测试应当考虑以下几点:

m}M @{051Testing软件测试网"OZ$YYm

  1、用stub和mock来消除对外部接口的依赖。

:M\r!qm051Testing软件测试网 h'@xh`ub's

  2、由创建代码的开发人员编写单元测试。51Testing软件测试网Y.[i*y[C3uZ1`T

[!ZT'E[}0  3、单元测试要能自动化执行,而且要被包含在持续开发构建中。51Testing软件测试网d8j!Dl|U

wY'r!{b0  4、单元测试之间不能有依赖,让每一个单元测试都能独立执行。51Testing软件测试网{ dy2{V%fL|.sW

51Testing软件测试网6q Xr*Sqp{i` kvj

  5、任何开发人员都要能在他自己的机器上执行单元测试。51Testing软件测试网AC jX~,^*U(Y:d#@

2r4_p*pe?fuby2u3~l0  6、用代码覆盖率来判断哪些部分的代码没有被单元测试覆盖。51Testing软件测试网/b2`(M3Ry4D g

&C:u3Uge0  7、在检入代码的修改之前,要保证单元测试100%通过。51Testing软件测试网CFCZ{#b f%Dk8NqS

C-k Q \ A)md)p0  任何测试失败都表示构建失败。

*O;x't g"fqkZ2Q0

(L5?-Q4l9Ca!M v0t%n0  功能测试51Testing软件测试网*p!D9z7i(\ F9_$[

{+Jjb$u0  功能测试常常跟系统测试相 关联,它的重点是测试应用程序的功能(包括负面测试和边界条件)。在瀑布项目中,测试团队一般是在这个阶段开始测试工作。测试团队的成员会一直等下去,直 到开发者完成了所有的功能,并通过所有的单元测试之后才进入功能测试阶段。 敏捷项目把功能拆分成故事,每次迭代开发一定数量的故事。每个故事都有一些验收标准,这些标准一般都是由业务分析师和测试分析师制定的,它们也可以看作跟 测试条件类似。测试分析师会根据验收标准创建测试用例,用它们来检测代码行为的完成程度。故事一旦编码完成,而且单元测试运行通过以后,就可以运行功能测 试来判断是否满足验收标准了。这就意味着在敏捷项目中,只要第一块功能已经完成编码,功能测试就可以启动,而且会贯穿整个项目的生命周期。51Testing软件测试网'Tx.blt3[l

:c6OxUf0  功能测试应当考虑以下几点

,GV*pS?j3Z051Testing软件测试网z7d2p-CgX;KZ%G!AY(K

  1、要能自动化执行,并且进入持续构建(如果测试运行时间很多长,也可以只在开发持续构建中包含一小部分精挑细选的功能测试,而在系统集成持续构建中包含全部功能测试)。51Testing软件测试网o r1Qv%Q x,w

51Testing软件测试网^O8^[a!f)NcM"q

  2、在编码之前写下测试意图,代码完成后对测试进行实现。

"j6^ [$a1{ V&f~0

0xx Tr#G[:Ji~'K0  3、把通过所有功能测试作为故事完成的条件。51Testing软件测试网#A7c&\(r _2JD

U x2Z(|m9R(g6LO0j6p0  4、在应用程序安装到另外一个环境(如试机环境或产品环境)上的时候需要执行功能测试。

c"pt/^3T.Q jaI051Testing软件测试网Hz8D` x I*t

  任何测试失败都表示构建失败。

Q-?I/y"f@051Testing软件测试网b@k/q;dI)}NE+Wa

  探索性测试51Testing软件测试网5I@)jt @%Y?

51Testing软件测试网$j"U|*|4Sq

  探索性测试又称为随机测试。瀑布项目在它们的测试策略中没有这种测试类型,不过大多数测试人员都会多少做一些探索性测试。在敏捷项目中这是个很 关键的测试阶段,因为它可以用来检测自动化测试的覆盖率,并收集对于应用程序质量的反馈。它为测试人员和业务分析师提供了一种结构化的方式去使用、去探索 系统,从而找到缺陷。如果探索性测试在某个功能区域内找到了大量缺陷,那这部分的自动化测试用例就要被审核。51Testing软件测试网g j&l;lZ-Oj

51Testing软件测试网"`!]k1Bi j`

  探索性测试应当考虑以下几点:

J0B U:fro]0

1R} sLc`!D/r@2K0  1、在系统集成环境中执行。51Testing软件测试网,X8G%I$eFmDJ

~N5wl)AuJ{0  2、在较高的层次上监测探索性测试活动。

5|0WX1D;CSu0xc051Testing软件测试网7]? {;m-K@

  3、用自动化的环境设置方式来减少搭建环境的时间。

}2l[GT T#S^051Testing软件测试网;]$wC^H2QQ~/V

  4、将破坏性测试作为探索性测试的一部分。

!ZV _UL0

-@$}7q L2T4s/w0  集成测试

U Pq%K2o.t4yRN%N0

xD\A [2Ck/L|^0  应用程序在作为产品部署的时候,需要各个部分的协作;集成测试就是把这各个独立的部分集成起来进行测试。瀑布项目不但会把应用程序的各个独立模 块进行集成,还会把那些虽然不属于项目的一部分,但是要开发当前应用程序就必须用到的一些应用程序也做集成。在敏捷项目中,独立模块间的集成是被持续构建 所覆盖的,所以集成测试的关注点就是那些不属于当前项目的外部接口。51Testing软件测试网-^*@{Rs;q _

XEVU'Dr3i0  集成测试应当考虑以下几点51Testing软件测试网1s z&D uMw.{

1t%y s gL} u0  1、在执行集成测试的时候,需要考虑到当前迭代还没有开发的功能。

ni5G aks(c&l)Y051Testing软件测试网.s+A']$F3l s(d&V-\

  2、写一些集成测试来定位特殊的集成点,以协助代码调试,即便功能测试会调用到这些集成点也无妨。

0o:v'XPsi;L:a E0

{ os6Dw0  3、将集成测试自动化,放到系统集成持续构建中。51Testing软件测试网'`3c$LMk

'n%w6A+@B@;}j0  任何测试失败都表示构建失败。51Testing软件测试网9O3X1XfP/C1b;r$@y

)b5q0f"\yy0  数据验证

AUy(\r&|O051Testing软件测试网p-fi[.E"h v

  如果项目需要移植既有数据的话,就要进行数据验证。它可以保证现有的数据被正确地移植到新的Schema中,新的数据被添加进来,旧的数据被移除。这种类型的测试在瀑布项目和敏捷项目中是被同等对待的,除了敏捷项目会尽力把它自动以外。51Testing软件测试网z#] v?7]YuW

7uu HBGrW.ku Z0  数据验证应该考虑以下几点:51Testing软件测试网&q |^'_;l!RI

`6E/CV8{}6a0  1、在系统集成环境、试机环境和产品环境中都要执行。

SfN-~}rV"g7H0

A S KF$C*C0  2、尽可能地自动化。51Testing软件测试网1v{YqOqsGe&?E+C

9y@4F*D ~0V l0  3、要把测试放到系统集成持续构建中。51Testing软件测试网6r4u[P"f;uXzS

51Testing软件测试网!Jv e~k4|'I5nk/[

  任何测试失败都表示构建失败。51Testing软件测试网OSb"j"?PW

51Testing软件测试网Rw'lLT

  用户验收测试(UAT)

Sh$tqjw b051Testing软件测试网6g;MQzIY9Q

  UAT关注的是完整的业务过程,它用来确保应用程序能按照业务的处理方式工作并能满足业务需求。它同样还要从客户、消费者、管理员等各种用户的 角度出发考虑应用程序的可用性。在瀑布项目中,这个阶段通常就被用来找出应该在早期阶段就被发现的bug。业务人员也会在这个阶段验证开发团队交付的应用 程序的质量。敏捷项目用UAT来确保应用程序满足业务需求,因为等到进入这个测试阶段的时候,代码质量已经较高了。在敏捷项目中,业务人员从早期的测试阶 段就开始参与,所以他们对交付的东西有更多的信心。

h$D?/?\051Testing软件测试网)z"^;Hun-l7}p,c

  UAT应该考虑以下几点:51Testing软件测试网/M3Q|Y5Py*W7Q,R

51Testing软件测试网 a ]{AT,c

  1、首先进行手工测试,等它验证了系统行为以后再把它自动化。51Testing软件测试网 h8Otr x `

-RxF(I8~ xG1B4My0  2、把自动化测试放到系统集成持续构建中

Y3I/h2E(o2D$F,a051Testing软件测试网#TmI g/E8c#`~t

  3、让应用程序的最终用户亲自将整个程序运行一遍,不过项目的测试人员要在旁边协助。51Testing软件测试网 ~bp'MO8O7X0fxA

N Vy4f ~;[0  4、在试机环境下执行UAT, 用作验收。

8qb"m4H'd051Testing软件测试网bS?+kgc.Ft?3SOd|

  5、只要完成了一个业务过程或者一个主要的UI组件,就要执行UAT。

u[}"m7@F(h051Testing软件测试网,T'}j} pp%V$YX

  任何测试失败都表示构建失败。51Testing软件测试网J?^L`R

/Y4F6e4H)YvR0  性能测试

~l,]V8m#KT-Z,s0

]7c#MI%fL!i4U@ H.H0{0  性能测试涵盖的范围比较大,不过一般可以分成以下三类。

rm*z"sb"dWW r051Testing软件测试网)j.k/Ys'I6GE(u

  1、容量测试:独立测试核心功能组件的容量。例如, 可以支持多个用户并发检索?一秒种能做多少次?等等。容量测试被用来精确度量系统的极限,还可以对容量规划和系统的扩展性起辅助作用。

.m0y)JJ4Cw7[5Q0

6\3yi.^:bu C0  2、负载测试:侧重于系统在负载下的表现。负载应该要体现出用户所期望系统可以经受得住的流量。51Testing软件测试网k1v,hu-I*J

/A.__*Y8XG&d^f@0  3、压力测试:关注系统在压力下的表现。比较常用的技术是浸泡测试(soak test);在浸泡测试中,系统会在一定的负载下持续运行一段时间,用来找出长期问题,如内存泄漏、资源泄漏等。压力测试还会覆盖故障转移和恢复,例如正 在工作的集群中的一台服务器出现问题,检查是否可以做到故障转移和恢复。51Testing软件测试网Kv8nx w AQ

51Testing软件测试网2|-o!f:{t+I

  瀑布项目直到项目接近尾声的时候才做性能测试,这个时候应用程序已经“完成了”开发,通过单元测试和功能测试。而敏捷项目则会尽快启动性能测试。51Testing软件测试网 Nz\}B0P

&k7hY5Su!w0I9s0  性能测试应该考虑以下几点:51Testing软件测试网"v,T'C ^'G:X$l ~r@

,bL4xU6LA{@k0  1、在功能测试中设置一些性能度量,例如一个测试第一次运行要花多长时间,接下来每次又要花多久,把这些时间所占的百分比做一下比较(上升表示有问题,下降表示良好)51Testing软件测试网5t$m;y ~3G:?3{

51Testing软件测试网 Mw v |"};xV

  2、把一些性能测试放到系统集成持续构建中去做。

#_yPqY9_%v/TC0

d*q$}AXF0  3、一旦一个业务过程,或是某个规模比较大的功能或接口完工,就要做性能测试。

&cP a*j3~+\o v l+Y0

5Fm$V+|L"]c0  4、只有在试机环境中运行的时候才签收性能测试。51Testing软件测试网&l(LNdE6p

51Testing软件测试网y)C"N%e?0H~0Np

  任何测试失败都表示构建失败。

2R+@&Bv7A3r3N,o6~7v051Testing软件测试网 F;T`'PO1r)eVI

  非功能性测试

jD)n"v6gJ0

A `'u'[_7`0  非功能性测试所涵盖的范围很广,性能测试通常也属于这个话题。但是因为性能测试是企业解决方案中很重要的一部分,而且需要不同的资源和技能集, 所以就被划出来单独成为一个测试阶段。非功能性测试一般都包含有这些内容:可操作性(包括监控、日志、审计/历史记录)、可靠性(包括故障转移,单个组件 故障,完整故障,接口故障)以及安全性。无论瀑布项目还是敏捷项目,在这个测试阶段都会遇到重重阻碍,二者的差异不太突出。51Testing软件测试网4rM \-S$n-u*C:q

6lPFj'S*O$a)B0  非功能性测试应该考虑以下几点:

;n(M$Z7K:[T-C0

7r9E&jv|)ld~%`0  1、非功能性需求一般都是很难捕获的,而且即便被捕获,也很难进行度量。(例如:99.9%的无故障时间)

j C"Jd$_8QY8aA0

%L!E9F"[(A2Uo%[#pN0  2、尽可能让所有的非功能测试都自动化执行,把它们也都放到系统集成测试环境中。51Testing软件测试网M~-J&LD6G7V|'X E3m3l

_)\$|x[,qUgEk:S;{6x0  3、在定义测试用例的时候,让真正要监控产品环境并对其提供支持的人也参与进来。

X&Q:C7L'f#U_0

C#]/L8H-}2HT0  4、在应用程序成为产品以后,非功能测试或监控还要继续。

9Z PB#a@I0

5RN3X4e|0  回归测试51Testing软件测试网Rb4c8p` X[-F

51Testing软件测试网Z:\t$yZ(_R0o(s)}

  在瀑布项目中,回归测试无论从时间上还是费用上来看,都算得上是成本最高的测试阶段了。如果在项目晚期(如UAT阶段)发现了缺陷,再构建应用 程序的时候,就得把所有单元测试、功能测试和用户验收测试重新运行一遍。因为大多数瀑布项目都没有自动化测试,所以回归测试的开销就很大。敏捷项目以持续 构建和自动化测试来应对回归测试,使每次构建都可以进行回归测试。51Testing软件测试网2gY1m{w.j!a_W

51Testing软件测试网'n6e:]Hh X4j

  回归测试应该考虑这一点:

)gx}(^YsA%A,R0

*J5y3?t5j0  每次迭代结束时都做一下手工测试,收集早期反馈。51Testing软件测试网@\7U \#v2C`2I5]2G

wGe-UQ[+s[0  产品校验

}L,QQ4F0

hc]NF4t0  产品校验会在把产品交付给用户使用之前,审查产品环境中的应用程序,看看所有内容是否否都已经正确安装,系统的操作性如何。而有些测试还是只能到了产品环境中才能完整运行的,最好尽快将其完成。无论是瀑布项目还是敏捷项目,产品校验的方式并无二致。

6k J N!E.^,?;]#Z0

]Y^]*y0  产品校验应该考虑以下几点:

(\j.fb*l V$@051Testing软件测试网|f6F\T/R0},L

  1、让最终用户来做产品校验测试。

+Qslv e @!rj0

rD%}i|X&IV,`0  2、趁着产品系统还没有正式上线,从这个测试阶段的早期就要尽可能多地执行自动化回归测试。51Testing软件测试网%ri6g8VW Q

Hy?Vy'pa%aH0  瀑布项目和敏捷项目的测试阶段还是很相似的,主要差异就是每个测试阶段关注的重点和执行时机。敏捷项目中有大量的自动化测试,用持续集成来减少 回归测试对项目带来的影响。在瀑布项目中,如果发现应用程序的质量低下,那么在晚期再去执行前期的测试就是很常见的事情(如在UAT的时候做功能测试)。 敏捷项目可以减少测试中的浪费,在早期发现问题,让团队在交付应用时增强信心。

3Q$`8a"uCkU8byd&\0

TAG:

 

评分:0

我来说两句

Open Toolbar