(转载)从一个实例详解敏捷测试的最佳实践
上一篇 / 下一篇 2009-02-20 13:55:20 / 个人分类:测试工作讨论
从一个实例详解敏捷测试的最佳实践 |
].a7IQ/vI2w-o9`hb+d0陈 晓颖, 软件工程师, IBM51Testing软件测试网3`uRy4K*u| 4L5km N'@\$]M02009 年 2 月 16 日51Testing软件测试网%e[ Pq7^(kw ` 敏捷软件开发是目前十分流行,并在业界逐步推广的软件开发模式。不同与传统的软件开发模式,敏捷开发模式有着自己鲜明的价值和方法。其中,敏捷测试部分也同以往的软件测试流程有所不同。这对测试人员提出了新的要求,带来了新的挑战。本文将结合一个软件项目实例,基于项目开发的不同阶段,详细介绍每个阶段的主要测试活动。文中将分析每个主要测试活动的前提条件和目标任务,并根据实例推荐最佳的解决方案。51Testing软件测试网?*E;stz2eHC6`!U't8j051Testing软件测试网 m+f2}as/QZ 敏捷软件开发(Agile Software Development)初起于九十年代中期。最早是为了与传统的瀑布软件开发模式(waterfall model)相比较,所以当时的方法叫做轻量级方法(Lightweight methods)。二十世纪初,17 位该方法的倡导者建立了敏捷联盟(Agile Alliance),并将该软件开发方法命名为敏捷软件开发过程。51Testing软件测试网6v(H+y UvWU c-]d1Js 5^Ej'}4J hVD"Z;W9l0敏捷联盟在成立之初总结了四条基本的价值原则: 'j+o:l#B${LbC0L1Sqm0
基于这四点原则,敏捷软件开发有着自己独特的流程(参见图 1)。 {&GF8ZD4N&I5U0!n"kq1LBJ$v4W0D`^0图 1. 敏捷软件开发流程 /[C_%e'zmE051Testing软件测试网f1c.Q^!wd H fs.t)H4s!tE2q+o;Fjs0整个过程中夹杂了很多在敏捷开发前己经出现的软件开发方法,包括极限编程(Extreme Programming,1996)、Scrum(1986)、特征驱动开发(Feature Driven Development),测试驱动开发(Test Driven Development)等。这些方法在敏捷软件开发流程的各个阶段都有充分的体现和应用。 a+y&te5S9|.xE"{5K051Testing软件测试网&QUn p2?p7Lj)E例如,Scrum 主要着重于项目管理,团队中的项目经理(Scrum master)需要在每个客户需求到来的时候制定 Sprint 的周期,定义每个 Sprint 的目标、分派任务、进行监督、最后总结得失并开始计划新的 Sprint。 -Pyg y*hJ1HTl051Testing软件测试网R"RHfw%E相反,特征驱动开发和测试驱动开发主要被应用于 Sprint 周期中。如果项目进行于开发新功能时期,这个阶段主要推行特征驱动开发。所有测试和开发人员都将自己的工作重心放在新的功能上面,从开发和测试两个方面来完成各自的任务。如果项目进行于测试新功能时期,这个阶段需要将工作的重点挪到测试上来。所有的测试和开发人员都密切关注着目前版本的缺陷状况。测试人员需要在每天的站立会议(Daily Standup Meeting)上报告前一个工作日发现的新缺陷情况,项目经理根据项目进度和缺陷严重性来决定是否修复这些问题。需要及时修复的缺陷是目前 Sprint 中的一个新任务,将由项目经理添加到 Sprint Backlog 上并通知开发人员去修复漏洞。51Testing软件测试网sNu4hA#f!r#F j5{3~/qr "h JK)a~RW0对于敏捷开发和测试中的审查过程,极限编程中的同行评审(peer review)思想得到了充分应用。代码和文档的审查追求简单而高效。团队成员两两组成一对,互相评审;有时候,一个开发和一个测试人员也可以组成一对,互相协作。这样能够有助于缺陷和问题在第一时间被抹杀在萌芽中。51Testing软件测试网#p5| B E]A@.\,T 3q-H4[#OV0敏捷开发还有以下几个关键概念 (Key Issues):51Testing软件测试网 hG qt/y?o.O??
iI"|3f,k v"M0这些概念是敏捷开发中经常使用到的观点和方法。下面我们将详细论述测试人员在敏捷软件开发中扮演的角色和职能。 &kr,N_3n3w#s051Testing软件测试网@ I*t Y2h2u$r^
O @] fo@v5W051Testing软件测试网+f!{'Ye2S 第二部分:敏捷开发中的测试人员51Testing软件测试网9F q'\N9cLkS 51Testing软件测试网H_!ys)l.@#j.vN本部分将简要介绍敏捷开发中测试人员所需要具备的素质和职责。 ]j)}d BR051Testing软件测试网 N?.K!T#_,lM&s9J*s0r)?%M051Testing软件测试网x$NqbDcl#h我们的敏捷开发团队由四位开发人员、两位测试人员、一位产品设计,一位项目经理和一位产品经理组成(参见图 2)。每天早上十点,在固定的时间和会议室里面,团队会举行站立会议。这时候,团队成员按照既定的顺序向项目经理汇报各自前一天完成的任务,所遇到的困难和当天要完成的任务。同时,项目经理更新 Sprint Backlog(一张制作精良的 Excel 表格),并及时解决每个人所提出的问题。 n*wk*~r;gE6`h+x&f051Testing软件测试网C H]R'G~0ng!L3?7t图 2. 敏捷开发团队成员51Testing软件测试网#Xc,cq*ny8E)| 51Testing软件测试网(x z&}m3WOvx 51Testing软件测试网 }0[2^os {Da 由于敏捷开发要求参与人能够快速而高效得应对变化,所以无形中对测试人员提出很高的要求。 a9N&G^ x0@ Pi,QT02.2 测试人员需要具备的素质 #r1p VnILuQ0z4|9l9v| {9\`0测试是软件开发中不可或缺的一部分。在敏捷软件开发中亦是如此。不同的组织给测试人员以不同的称号:测试开发 (Test Developer)、质量分析员 (Quality Analyst)、软件质量工程师 (Software Quality Engineer) 等。 :hW8r,hb051Testing软件测试网}%T(s ZH$}j每个称号隐含有不同的职能。以上的称号分别对应以下的能力要求: ,f*@%pk|Fs0
总结而言,有三方面的基本素质要求:代码编写(Coding)、测试 (Testing) 和分析 (Analysis)。 TV z2f0Vb]UC0)ywTA4XS+R:@x0在很多其他的开发流程中,各个测试阶段对测试人员的能力有所不同;有时候侧重分析(比如系统配置测试),有时候侧重代码编写 ( 比如功能测试 )。但是,在敏捷开发流程中,测试人员需要结合这三方面来开展工作,只有这样才能真正反映敏捷测试的本质:简单而高效得应对变化。 [W'R5@4Y051Testing软件测试网9bw_|]&c.xZj$d051Testing软件测试网|Sm i3B3u|i;C在敏捷软件开发中,测试人员的职责有三个主要方面: 9JZ6j}b@p0
以上总结了测试人员在敏捷开发中的需要展现的能力和担负的任务,下面请跟随一个项目实例来详细了解敏捷测试的最佳实践。 p;H!O_4kU051Testing软件测试网$WK$n4m;P
&H!t ^W`s(U051Testing软件测试网4r \BDoh4zB[0g0?4w-a{%s~-lc3G:j051Testing软件测试网DvR1M#U&L{ 本部分结合一个软件项目,详细介绍项目流程中的主要测试活动,每个活动的前提条件和目标任务等。51Testing软件测试网%@'_YD#fXQJ 51Testing软件测试网@H3[ P,\(O3.1 介绍项目实例51Testing软件测试网_k)I4kG-t,t(e0[6S'r 51Testing软件测试网)i'v s s2w xU项目介绍:根据一家在线 B2B 公司的要求,我们将为其开发一款类似于谷歌的搜索服务。作为 Web Service,该服务可以内嵌于网页中。当用户输入关键词并选择商户的类型和位置后,系统会返回具体商户的列表(参见图 3)。51Testing软件测试网lF)g_D!|[oNh5TZ )a E PvY)a0O0图 3. 项目实例图 "A3f?i c1A#jb051Testing软件测试网[xl-_$v H;h!v%KW8Z&B0典型的敏捷开发和测试活动参见下表。它主要由三部分构成,从最初的用户故事设计和发布计划,到几次 Sprint 周期的迭代开发和测试,以及最后的产品发布阶段。每个时间段都有相应的测试活动。通常 Sprint 周期被分成两类:特征周期(Feature Sprint)和发布周期(Release Sprint)。特征周期主要涉及新功能的开发和各类测试。发布周期则会结合计划,确定新版本功能,然后对最新的功能进行测试。 5q+W t@!\ F!P[0
'z rsk[K0 c9uLy!v&RX*B0在迭代的 Sprint 周期中,开发部分可以根据传统步骤分成编码和单元测试、重构和集成。需要指出的是,重构和集成是敏捷开发的 Sprint 迭代中不可忽视的任务。如果在新的 Sprint 周期中要对上次的功能加以优化和改进,必然离不开重构和集成。 'd\ _bV5[H K09Atv:C xg1_@S0在每个 Sprint 周期结束前,测试团队将提交针对该 Sprint 周期或者上个 Sprint 周期中已完成的功能的验收测试(在实际项目中,测试团队的进度通常会晚于开发团队)。这样一来,开发团队可以运行验收测试来验证所开发的功能目前是否符合预期。当然,这个预期也是在迭代中不断变化和完善的。 1nS$J|1B T Yr051Testing软件测试网I#sR&~S1}VDa当产品的所有功能得以实现,测试工作基本结束后,就进入了发布周期。此时,测试团队的任务相对较多。51Testing软件测试网 ?Q0z}nfB 51Testing软件测试网T$V iP+@oaZg| R以上,我们概述了敏捷开发的主要活动。下面我们将对各阶段相应的测试活动作详细的介绍和分析。首先是用户故事设计和发布阶段。51Testing软件测试网 U1qF%l6P/|6mF e6j^G%S L8N03.2 用户故事设计和发布计划阶段 Qx S*\`4N,BT0Pl8jB c)`;~ G(sY p0在用户故事和发布计划阶段,项目经理和产品经理会根据客户的需求,制定概要的产品发布日程计划。此时,测试人员可以和开发人员一起学习新的功能,了解客户的需求。其中,有两个主要活动:寻找隐藏的假设和设计概要的验收测试用例。51Testing软件测试网 m(X:_K2s8|R 51Testing软件测试网L&jmN*Kd3.2.1 寻找隐藏的假设51Testing软件测试网0RO Al)u[ 51Testing软件测试网Vr'@3XR正如前文所述,开发人员通常关注一些重要的系统功能而忽视细节。此外,敏捷开发倡导简单的实现方案,每个开发 Sprint 周期不可能将功能完美得实现;相反,每个 Sprint 都会增量得开发一些功能。所以,测试人员在最初就需要从各种角度来寻找系统需求,探索隐藏的假设。51Testing软件测试网8[%e4D/J6jw6@ .N*HF7{0pZ$B:o*E&x0项目实例: grm&wC1v a8W)`q]0
Q:这个搜索框对公司的业务有什么价值?51Testing软件测试网&]V xR0F:U
Q:作为查询信息、寻找商业合作伙伴的网站用户,搜索框对我有什么好处?51Testing软件测试网5^x0d'n^wTSP 好处:查找商户很简单,只要轻点鼠标 |