【转】从一个实例详解敏捷测试的最佳实践
上一篇 / 下一篇 2010-03-23 13:39:58 / 个人分类:敏捷测试
{:I ? XO)R\N&O02009 年 2 月 16 日51Testing软件测试网 YNm|0PR1T5}N~5{
敏捷软件开发是目前十分流行,并在业界逐步推广的软件开发模式。不同与传统的软件开发模式,敏捷开发模式有着自己鲜明的价值和方法。其中,敏捷测试部分也同以往的软件测试流程有所不同。这对测试人员提出了新的要求,带来了新的挑战。本文将结合一个软件项目实例,基于项目开发的不同阶段,详细介绍每个阶段的主要测试活动。文中将分析每个主要测试活动的前提条件和目标任务,并根据实例推荐最佳的解决方案。
~ XE"P4I%_&K0第一部分:敏捷软件开发简介51Testing软件测试网^7o%~l2r R&j+SG'|K(E
6\$k uC`w#y0敏捷软件开发(Agile Software Development)初起于九十年代中期。最早是为了与传统的瀑布软件开发模式(waterfall model)相比较,所以当时的方法叫做轻量级方法(Lightweight methods)。二十世纪初,17 位该方法的倡导者建立了敏捷联盟(Agile Alliance),并将该软件开发方法命名为敏捷软件开发过程。
;xJWISP%Y `051Testing软件测试网!qZd$p.bW H/P#F'V敏捷联盟在成立之初总结了四条基本的价值原则:51Testing软件测试网"q \@3y$K H,az
- 人员交流重于过程与工具(Individuals and interactionsover processes and tools)
- 软件产品重于长篇大论(Working softwareover comprehensive documentation)
- 客户协作重于合同谈判(Customer collaborationover contract negotiation)
- 随机应变重于循规蹈矩(Responding to changeover following a plan)
基于这四点原则,敏捷软件开发有着自己独特的流程(参见图 1)。
XAEVZ#a051Testing软件测试网1B5E+K DE/vR图 1. 敏捷软件开发流程51Testing软件测试网w\"s3HQ5i }.|
k&Z({#n/s'L051Testing软件测试网 Cs^(@ UxL*t]
整个过程中夹杂了很多在敏捷开发前己经出现的软件开发方法,包括极限编程(Extreme Programming,1996)、Scrum(1986)、特征驱动开发(Feature Driven Development),测试驱动开发(Test Driven Development)等。这些方法在敏捷软件开发流程的各个阶段都有充分的体现和应用。
Z#fr S(iS051Testing软件测试网!G:^Oe)g,u例如,Scrum 主要着重于项目管理,团队中的项目经理(Scrum master)需要在每个客户需求到来的时候制定 Sprint 的周期,定义每个 Sprint 的目标、分派任务、进行监督、最后总结得失并开始计划新的 Sprint。
U|q!k],wp}051Testing软件测试网jW zr%n YJ v r相反,特征驱动开发和测试驱动开发主要被应用于 Sprint 周期中。如果项目进行于开发新功能时期,这个阶段主要推行特征驱动开发。所有测试和开发人员都将自己的工作重心放在新的功能上面,从开发和测试两个方面来完成各自的任务。如果项目进行于测试新功能时期,这个阶段需要将工作的重点挪到测试上来。所有的测试和开发人员都密切关注着目前版本的缺陷状况。测试人员需要在每天的站立会议(Daily Standup Meeting)上报告前一个工作日发现的新缺陷情况,项目经理根据项目进度和缺陷严重性来决定是否修复这些问题。需要及时修复的缺陷是目前 Sprint 中的一个新任务,将由项目经理添加到 Sprint Backlog 上并通知开发人员去修复漏洞。51Testing软件测试网?xi+{ q#PO
%O#P?L!I8D0对于敏捷开发和测试中的审查过程,极限编程中的同行评审(peer review)思想得到了充分应用。代码和文档的审查追求简单而高效。团队成员两两组成一对,互相评审;有时候,一个开发和一个测试人员也可以组成一对,互相协作。这样能够有助于缺陷和问题在第一时间被抹杀在萌芽中。
y#y(ti$@!NnN6F\[-pJ0~+p U1H b:{6p OB0敏捷开发还有以下几个关键概念 (Key Issues):51Testing软件测试网Dyr(@o7s
- 迭代过程(Iterative process)
- 用户故事(User stories)
- 任务(Tasks)
- 站立会议(Stand-up meeting)
- 持续集成(Continuous integration)
- 最简方案(Simplest solutions)
- 重构(Re-factoring)
这些概念是敏捷开发中经常使用到的观点和方法。下面我们将详细论述测试人员在敏捷软件开发中扮演的角色和职能。51Testing软件测试网[2W M~%I#^/}[
D aq*zt1?GzA/[:m0
'x,n/B^u8t o b.Y-P0 |
51Testing软件测试网
]?G0F;ec P5q
|
3h$[f lruR.J051Testing软件测试网D(n4zLu9G ?Fd
第二部分:敏捷开发中的测试人员51Testing软件测试网kr9Zy%|`*v
51Testing软件测试网\4b5dM5F*z*N本部分将简要介绍敏捷开发中测试人员所需要具备的素质和职责。51Testing软件测试网$vyv,EJ N!Z1IZW
51Testing软件测试网WE;_9e2|:\,J2.1 敏捷开发团队介绍51Testing软件测试网#A8ym/oc%MDL
?'f3AQ)h0我们的敏捷开发团队由四位开发人员、两位测试人员、一位产品设计,一位项目经理和一位产品经理组成(参见图 2)。每天早上十点,在固定的时间和会议室里面,团队会举行站立会议。这时候,团队成员按照既定的顺序向项目经理汇报各自前一天完成的任务,所遇到的困难和当天要完成的任务。同时,项目经理更新 Sprint Backlog(一张制作精良的 Excel 表格),并及时解决每个人所提出的问题。51Testing软件测试网8i1vLaj6Z
$DFO2^IU0图 2. 敏捷开发团队成员51Testing软件测试网jrd"i:X
;hUIqzBgA @P k0
(ibAju)n;Pp OCK0由于敏捷开发要求参与人能够快速而高效得应对变化,所以无形中对测试人员提出很高的要求。51Testing软件测试网:tir)n`"e
51Testing软件测试网b$kB,olXuj2.2 测试人员需要具备的素质51Testing软件测试网D.qXJ;tK5U4XzF*?X
51Testing软件测试网e^`zh-zC!d#h测试是软件开发中不可或缺的一部分。在敏捷软件开发中亦是如此。不同的组织给测试人员以不同的称号:测试开发 (Test Developer)、质量分析员 (Quality Analyst)、软件质量工程师 (Software Quality Engineer) 等。
s~O\ aA2~Y09o-J^~"} M4c6IQx0eFT0每个称号隐含有不同的职能。以上的称号分别对应以下的能力要求:
0XXc:Q"r4_0n|0- 具有质量检测和编写代码的能力–> 测试开发
- 具有防止缺陷 (Quality Assurance) 和质量控制 (Quality Control) 的能力–> 质量分析员
- 具有开发和执行测试程序的能力 -> 软件质量工程师
总结而言,有三方面的基本素质要求:代码编写(Coding)、测试 (Testing) 和分析 (Analysis)。
8S3V6s;T-H)}0+x;O"yhkY[ Gq6u0在很多其他的开发流程中,各个测试阶段对测试人员的能力有所不同;有时候侧重分析(比如系统配置测试),有时候侧重代码编写 ( 比如功能测试 )。但是,在敏捷开发流程中,测试人员需要结合这三方面来开展工作,只有这样才能真正反映敏捷测试的本质:简单而高效得应对变化。51Testing软件测试网5S5E-x_E,J
(~ |FxQ@N&Q02.3 测试人员的主要职责51Testing软件测试网\ J@c)ps4}:~X
51Testing软件测试网L:BGbpp3B在敏捷软件开发中,测试人员的职责有三个主要方面:
1]rSP'm0@-y0- 定义质量 (Define Quality):这应该是软件测试人员的基本职责。敏捷方法鼓励测试人员在 Sprint 计划的时候直接与客户交流,从自己的经验出发,共同为产品功能制定质量要求。
- 交流缺陷(Communication):敏捷过程强调团队中的交流。开发人员经常会专注于重要而新奇的功能,测试人员应该抓住细节,寻找设计中的“missing door”;另外,开发人员使用单元测试来保证产品的基本质量,测试人员可以使用验收测试(Acceptance Test)来鉴定客户需求与实际成果之间的不一致性。
- 及时反馈 (Feedback): 敏捷过程强调简单而高效。测试人员需要及时反馈产品目前的质量问题。这样一来,团队才可以立刻着手解决。如果传统的流程是一周汇总一次状态的话,敏捷流程要求每天汇总质量问题。在我们的项目中,内部的测试报告会以网页的形式显示在内部站点上。每个团队成员能够随时获取。另外,我们的测试框架提供自助测试 (Self-assistant Test):通过点击测试用例列表中的某个具体用例,开发人员不需要中断测试人员的工作就可以重现缺陷。
以上总结了测试人员在敏捷开发中的需要展现的能力和担负的任务,下面请跟随一个项目实例来详细了解敏捷测试的最佳实践。51Testing软件测试网w-J4L?w0uu(`q
+qA/rXQ8Kl7x$s~7D0
51Testing软件测试网 w+d.S5dn8~&{nt"kB |
0xn)~7S9_0
|
;P-k#n%L l:w/IOO051Testing软件测试网'x@0M bo-B3sO9A
t%q7roS7n OW0第三部分:敏捷开发中的测试流程51Testing软件测试网v9BOtr!z
*bH:xTQ)J4p0本部分结合一个软件项目,详细介绍项目流程中的主要测试活动,每个活动的前提条件和目标任务等。
%@m"X,IlS7zDF051Testing软件测试网3R w7Wv(CnZ%V.j]9VE3.1 介绍项目实例51Testing软件测试网I Wf6i6c9P$H
51Testing软件测试网i'kVe(g!\"d!Y\3L项目介绍:根据一家在线 B2B 公司的要求,我们将为其开发一款类似于谷歌的搜索服务。作为 Web Service,该服务可以内嵌于网页中。当用户输入关键词并选择商户的类型和位置后,系统会返回具体商户的列表(参见图 3)。51Testing软件测试网'f&}JDkI
51Testing软件测试网6FpN6tJ:o9\Y图 3. 项目实例图
S-doaoi'Mj"N0
$jD_h`0
2CQ8z{"u3A8K |3l0典型的敏捷开发和测试活动参见下表。它主要由三部分构成,从最初的用户故事设计和发布计划,到几次 Sprint 周期的迭代开发和测试,以及最后的产品发布阶段。每个时间段都有相应的测试活动。通常 Sprint 周期被分成两类:特征周期(Feature Sprint)和发布周期(Release Sprint)。特征周期主要涉及新功能的开发和各类测试。发布周期则会结合计划,确定新版本功能,然后对最新的功能进行测试。51Testing软件测试网/Q7NT1p&r
敏捷开发的主要活动 | 测试活动 |
---|---|
用户故事设计 | 寻找隐藏的假设 |
发布计划 | 设计概要的验收测试用例 |
迭代 Sprint | 估算验收测试时间 |
编码和单元测试 | 估算测试框架的搭建 |
重构 | 详细设计验收测试用例 |
集成 | 编写验收测试用例 |
执行验收测试 | 重构验收测试 |
Sprint 结束 | 执行验收测试 |
下一个 Sprint 开始 | 执行回归测试 |
发布 | 发布 |
s ^p:y-P0在迭代的 Sprint 周期中,开发部分可以根据传统步骤分成编码和单元测试、重构和集成。需要指出的是,重构和集成是敏捷开发的 Sprint 迭代中不可忽视的任务。如果在新的 Sprint 周期中要对上次的功能加以优化和改进,必然离不开重构和集成。51Testing软件测试网6k!\-v)I y4U4D+o
51Testing软件测试网l6st%b3o在每个 Sprint 周期结束前,测试团队将提交针对该 Sprint 周期或者上个 Sprint 周期中已完成的功能的验收测试(在实际项目中,测试团队的进度通常会晚于开发团队)。这样一来,开发团队可以运行验收测试来验证所开发的功能目前是否符合预期。当然,这个预期也是在迭代中不断变化和完善的。51Testing软件测试网0lrKU3T oi[
$o*@:@at3F0当产品的所有功能得以实现,测试工作基本结束后,就进入了发布周期。此时,测试团队的任务相对较多。
I0SaGJ2se9W"Iu0_zS7U\3]Dm0以上,我们概述了敏捷开发的主要活动。下面我们将对各阶段相应的测试活动作详细的介绍和分析。首先是用户故事设计和发布阶段。