《敏捷软件测试:测试人员与敏捷团队的实践指南》
名称解释
XP:ExtremeProgramming,极限编程,“Extreme”(极限)是指,对比传统的项目开发方式,XP强调把它列出的每个方法和思想做到极限、做到最好;其它XP所不提倡的,则一概忽略(如开发前期的整体设计等)。一个严格实施XP的项目,其开发过程应该是平稳的、高效的和快速的,能够做到一周40小时工作制而不拖延项目进度。
Sprint:短距离赛跑的意思,这里面指的是一次迭代,而一次迭代的周期是1个月时间(即4个星期),也就是我们要把一次迭代的开发内容以最快的速度完成它,这个过程我们称它为Sprint。
敏捷成功测试的7个要素:
1.使用全对参与方法;
2.利用敏捷测试思维;
3.自动化回归测试;
4.提供和获得反馈;
5.构建核心实践的基础;
6.与客户协作;
7.保持大局观;
敏捷软件开发是目前十分流行,并在业界逐步推广的软件开发模式。不同与传统的软件开发模式,敏捷开发模式有着自己鲜明的价值和方法。其中,敏捷测试部分也同以往的软件测试流程有所不同。这对测试人员提出了新的要求,带来了新的挑战。本文将结合一个软件项目实例,基于项目开发的不同阶段,详细介绍每个阶段的主要测试活动。文中将分析每个主要测试活动的前提条件和目标任务,并根据实例推荐最佳的解决方案。
从一个实例详解敏捷测试的最佳实践
第一部分:敏捷软件开发简介
敏捷软件开发(Agile Software Development)初起于九十年代中期。最早是为了与传统的瀑布软件开发模式(waterfall model)相比较,所以当时的方法叫做轻量级方法(Lightweight methods)。二十世纪初,17 位该方法的倡导者建立了敏捷联盟(Agile Alliance),并将该软件开发方法命名为敏捷软件开发过程。
敏捷联盟在成立之初总结了四条基本的价值原则:
- 人员交流重于过程与工具(Individuals and interactions over processes and tools)
- 软件产品重于长篇大论(Working software over comprehensive documentation)
- 客户协作重于合同谈判(Customer collaboration over contract negotiation)
- 随机应变重于循规蹈矩(Responding to change over following a plan)
基于这四点原则,敏捷软件开发有着自己独特的流程(参见图 1)。
图 1. 敏捷软件开发流程
整个过程中夹杂了很多在敏捷开发前己经出现的软件开发方法,包括极限编程(Extreme Programming,1996)、Scrum(1986)、特征驱动开发(Feature Driven Development),测试驱动开发(Test Driven Development)等。这些方法在敏捷软件开发流程的各个阶段都有充分的体现和应用。
例如,Scrum 主要着重于项目管理,团队中的项目经理(Scrum master)需要在每个客户需求到来的时候制定 Sprint 的周期,定义每个 Sprint 的目标、分派任务、进行监督、最后总结得失并开始计划新的 Sprint。
相反,特征驱动开发和测试驱动开发主要被应用于 Sprint 周期中。如果项目进行于开发新功能时期,这个阶段主要推行特征驱动开发。所有测试和开发人员都将自己的工作重心放在新的功能上面,从开发和测试两个方面来完成各自的任务。如果项目进行于测试新功能时期,这个阶段需要将工作的重点挪到测试上来。所有的测试和开发人员都密切关注着目前版本的缺陷状况。测试人员需要在每天的站立会议(Daily Standup Meeting)上报告前一个工作日发现的新缺陷情况,项目经理根据项目进度和缺陷严重性来决定是否修复这些问题。需要及时修复的缺陷是目前 Sprint 中的一个新任务,将由项目经理添加到 Sprint Backlog 上并通知开发人员去修复漏洞。
对于敏捷开发和测试中的审查过程,极限编程中的同行评审(peer review)思想得到了充分应用。代码和文档的审查追求简单而高效。团队成员两两组成一对,互相评审;有时候,一个开发和一个测试人员也可以组成一对,互相协作。这样能够有助于缺陷和问题在第一时间被抹杀在萌芽中。
敏捷开发还有以下几个关键概念 (Key Issues):
- 迭代过程(Iterative process)
- 用户故事(User stories)
- 任务(Tasks)
- 站立会议(Stand-up meeting)
- 持续集成(Continuous integration)
- 最简方案(Simplest solutions)
- 重构(Re-factoring)
这些概念是敏捷开发中经常使用到的观点和方法。下面我们将详细论述测试人员在敏捷软件开发中扮演的角色和职能。
第二部分:敏捷开发中的测试人员
本部分将简要介绍敏捷开发中测试人员所需要具备的素质和职责。
2.1 敏捷开发团队介绍
我们的敏捷开发团队由四位开发人员、两位测试人员、一位产品设计,一位项目经理和一位产品经理组成(参见图 2)。每天早上十点,在固定的时间和会议室里面,团队会举行站立会议。这时候,团队成员按照既定的顺序向项目经理汇报各自前一天完成的任务,所遇到的困难和当天要完成的任务。同时,项目经理更新 Sprint Backlog(一张制作精良的 Excel 表格),并及时解决每个人所提出的问题。
图 2. 敏捷开发团队成员
由于敏捷开发要求参与人能够快速而高效得应对变化,所以无形中对测试人员提出很高的要求。
2.2 测试人员需要具备的素质
测试是软件开发中不可或缺的一部分。在敏捷软件开发中亦是如此。不同的组织给测试人员以不同的称号:测试开发 (Test Developer)、质量分析员 (Quality Analyst)、软件质量工程师 (Software Quality Engineer) 等。
每个称号隐含有不同的职能。以上的称号分别对应以下的能力要求:
- 具有质量检测和编写代码的能力–> 测试开发
- 具有防止缺陷 (Quality Assurance) 和质量控制 (Quality Control) 的能力–> 质量分析员
- 具有开发和执行测试程序的能力 -> 软件质量工程师
总结而言,有三方面的基本素质要求:代码编写(Coding)、测试 (Testing) 和分析 (Analysis)。
在很多其他的开发流程中,各个测试阶段对测试人员的能力有所不同;有时候侧重分析(比如系统配置测试),有时候侧重代码编写 ( 比如功能测试 )。但是,在敏捷开发流程中,测试人员需要结合这三方面来开展工作,只有这样才能真正反映敏捷测试的本质:简单而高效得应对变化。
2.3 测试人员的主要职责
在敏捷软件开发中,测试人员的职责有三个主要方面:
- 定义质量 (Define Quality):这应该是软件测试人员的基本职责。敏捷方法鼓励测试人员在 Sprint 计划的时候直接与客户交流,从自己的经验出发,共同为产品功能制定质量要求。
- 交流缺陷(Communication):敏捷过程强调团队中的交流。开发人员经常会专注于重要而新奇的功能,测试人员应该抓住细节,寻找设计中的“missing door”;另外,开发人员使用单元测试来保证产品的基本质量,测试人员可以使用验收测试(Acceptance Test)来鉴定客户需求与实际成果之间的不一致性。
- 及时反馈 (Feedback): 敏捷过程强调简单而高效。测试人员需要及时反馈产品目前的质量问题。这样一来,团队才可以立刻着手解决。如果传统的流程是一周汇总一次状态的话,敏捷流程要求每天汇总质量问题。在我们的项目中,内部的测试报告会以网页的形式显示在内部站点上。每个团队成员能够随时获取。另外,我们的测试框架提供自助测试 (Self-assistant Test):通过点击测试用例列表中的某个具体用例,开发人员不需要中断测试人员的工作就可以重现缺陷。
以上总结了测试人员在敏捷开发中的需要展现的能力和担负的任务,下面请跟随一个项目实例来详细了解敏捷测试的最佳实践。
第三部分:敏捷开发中的测试流程
本部分结合一个软件项目,详细介绍项目流程中的主要测试活动,每个活动的前提条件和目标任务等。
3.1 介绍项目实例
项目介绍:根据一家在线 B2B 公司的要求,我们将为其开发一款类似于谷歌的搜索服务。作为 Web Service,该服务可以内嵌于网页中。当用户输入关键词并选择商户的类型和位置后,系统会返回具体商户的列表(参见图 3)。
图 3. 项目实例图
典型的敏捷开发和测试活动参见下表。它主要由三部分构成,从最初的用户故事设计和发布计划,到几次 Sprint 周期的迭代开发和测试,以及最后的产品发布阶段。每个时间段都有相应的测试活动。通常 Sprint 周期被分成两类:特征周期(Feature Sprint)和发布周期(Release Sprint)。特征周期主要涉及新功能的开发和各类测试。发布周期则会结合计划,确定新版本功能,然后对最新的功能进行测试。
敏捷开发的主要活动 | 测试活动 |
---|---|
用户故事设计 | 寻找隐藏的假设 |
发布计划 | 设计概要的验收测试用例 |
迭代 Sprint | 估算验收测试时间 |
编码和单元测试 | 估算测试框架的搭建 |
重构 | 详细设计验收测试用例 |
集成 | 编写验收测试用例 |
执行验收测试 | 重构验收测试 |
Sprint 结束 | 执行验收测试 |
下一个 Sprint 开始 | 执行回归测试 |
发布 | 发布 |
在迭代的 Sprint 周期中,开发部分可以根据传统步骤分成编码和单元测试、重构和集成。需要指出的是,重构和集成是敏捷开发的 Sprint 迭代中不可忽视的任务。如果在新的 Sprint 周期中要对上次的功能加以优化和改进,必然离不开重构和集成。
在每个 Sprint 周期结束前,测试团队将提交针对该 Sprint 周期或者上个 Sprint 周期中已完成的功能的验收测试(在实际项目中,测试团队的进度通常会晚于开发团队)。这样一来,开发团队可以运行验收测试来验证所开发的功能目前是否符合预期。当然,这个预期也是在迭代中不断变化和完善的。
当产品的所有功能得以实现,测试工作基本结束后,就进入了发布周期。此时,测试团队的任务相对较多。
以上,我们概述了敏捷开发的主要活动。下面我们将对各阶段相应的测试活动作详细的介绍和分析。首先是用户故事设计和发布阶段。
3.2 用户故事设计和发布计划阶段
在用户故事和发布计划阶段,项目经理和产品经理会根据客户的需求,制定概要的产品发布日程计划。此时,测试人员可以和开发人员一起学习新的功能,了解客户的需求。其中,有两个主要活动:寻找隐藏的假设和设计概要的验收测试用例。
3.2.1 寻找隐藏的假设
正如前文所述,开发人员通常关注一些重要的系统功能而忽视细节。此外,敏捷开发倡导简单的实现方案,每个开发 Sprint 周期不可能将功能完美得实现;相反,每个 Sprint 都会增量得开发一些功能。所以,测试人员在最初就需要从各种角度来寻找系统需求,探索隐藏的假设。
项目实例:
- 从在线 B2B 公司角度思考
Q:这个搜索框对公司的业务有什么价值?
A:搜索框可以为用户方便得提供商户的目录信息。如果越来越多用户使用这个搜索框,可以增加我们网站的访问量。
- 从用户角度思考
Q:作为查询信息、寻找商业合作伙伴的网站用户,搜索框对我有什么好处?
A:坏处:找到一家商户的地址,过去才发现已经关门歇业
好处:查找商户很简单,只要轻点鼠标
不快:有时候在寻找一类商户,却记不清楚具体名字
- 从程序员角度思考
Q:一个搜索框的最简单实现方法是什么?
A:一个有 text input 和 search button 组成的 form;后台通过 server 程序将符合类型和地址的商户名从数据库中取出,返回给用户;每个返回项包括商户的名称、地址和评价意见。
- 寻找这些观点中的问题
Q:搜索框如何在用户忘记具体名字的时候提醒用户?
A:在第一版本中实现比较困难。可以让用户输入至少一个类型来提高模糊查找的效果。
- 最后寻找到隐藏的假设
以上的思考让测试人员对系统的隐含假设更加清晰:
首先,系统应该能够在高峰时候处理 200 条搜索请求和 1000 个鼠标点击事件。
其次,用户可以在已经查找到的内容中继续查找
最后,系统提供一个商户类别清单;如果用户选择商户类别而忘记具体名字,系统提供模糊查询。
在敏捷开发中,这些假设可以作为用户故事记录下来,从而指导未来系统的开发和测试。
3.2.2 设计概要的验收测试用例
定义完一系列用户故事后,测试人员就可以着手设计概要的验收测试用例。正如我们在前文论述,不同于单元测试,验收测试检查系统是否满足客户的预期,也就是用户故事是否能够实现。于是,测试人员可以根据每条用户故事来扩展,寻找其中的“动作”,然后为每条“动作”制定正例和反例。
项目实例:
动作 | 数据 | 期待的结果 |
---|---|---|
搜索 | 一组能成功搜索到的(类别,位置)数据 | 在该类别和位置条件下的一组商户信息 |
搜索 | 一组不能成功搜索到的(类别,位置)数据 | 空列表 |
3.3 迭代 Sprint 阶段
当一个 Sprint 周期正式开始时,项目经理将制定该周期的具体开发和测试任务。在定期的 Sprint 计划会议(Planning Meeting)上,每位团队成员都要提供自己在未来一个 Sprint 周期中的休假和培训计划。另外,每个团队可以根据各自团队成员的能力和工作经验,适当设定一个工作负载值(Load Factor)。比如,我们团队的工作负载值为 75%,也就是说每个人平均每天工作 6 小时(以 8 小时计算)。接着,大家就可以开始分配任务。
当开发团队开始编码和单元测试时,测试人员的工作重点包括:估算验收测试的时间、估算测试框架的搭建、详细设计验收测试和编写验收测试代码。第两个主要活动一般在项目初期的 Sprint 周期中完成。其他的三个主要活动将在接下来的多个 Sprint 周期中视情况迭代进行。下面我们将具体介绍每个主要活动。
3.3.1 估算验收测试时间
在软件开发初期,需要估算时间以制定计划。这一点在敏捷开发中应用更加广泛。如果以前的开发模式需要测试人员估算一个软件版本发行的计划(这样的计划通常会延续几个月),那么现在则要在每个 Sprint 机会会议上估算两周到一个月的任务。此外,在每天的站立会议上,测试人员需要不断得更新自己的估算时间,以应对变化的需求。所以,每个测试人员都应该具备一定的估算任务能力。下面我们将介绍两个通用的估算测试计划的方法:
- 快速而粗糙的方法
从经验而言,测试通常占项目开发的三分之一时间。如果一个项目开发估计要 30 天 1 人,那么测试时间为 10 天 1 人。
项目实例:
搜索框的开发估计需要 78 天 1 人完成。但是,考虑到系统有模糊搜索的功能,所以测试任务可能会占 40%左右,大概 31 天 1 人。下面列出了具体的任务:
任务 | 估计时间 |
---|---|
设计测试用例,准备测试数据(搜索数据集) | 8 |
加载数据集 | 2 |
编写自动测试代码 | 18 |
执行测试和汇报结果 | 3 |
总结 | 31 |
- 细致而周全的方法
这个方法从测试任务的基本步骤出发,进行详细分类。其中包括 :
- 测试的准备(设计测试用例、准备测试数据、编写自动测试代码并完善代码)
- 测试的运行(建立环境、执行测试、分析和汇报结果)
- 特殊的考虑
项目实例:
估算单个测试任务的事例参见下表:
测试 | 准备 | 运行 | 特殊考虑 | 估算 | ||
---|---|---|---|---|---|---|
1 | 设计测试用例 | 0.5 | 建立环境 | 0.1 | ||
准备测试数据 | 0.5 | 执行测试 | 0.1 | |||
编写自动测试代码 | 0.5 | 分析结果 | 0.1 | |||
完善自动测试代码 | 2.5 | 汇报结果 | 0.1 | |||
总共 | 4 | 0.4 | 0 | 4.4 |
估算多个测试任务的汇总参见下表:
测试任务编号 | 准备 | 运行 | 特殊考虑 | 估算 |
---|---|---|---|---|
1 | 4 | 0.4 | 0 | 4.4 |
2 | 4 | 0.4 | 0 | 4.4 |
3 | 12 | 4.5 | 8.5 | 25 |
4 | 4 | 0.4 | 0 | 4.4 |
5 | 4 | 0.4 | 0 | 4.4 |
6 | 4 | 0.4 | 0 | 4.4 |
7 | 4 | 0.4 | 0 | 4.4 |
总共 | 51.4 |
3.3.2 估算测试框架的搭建
测试框架是自动测试必不可少的一部分工作。由于敏捷开发流程倡导快速而高效得完成任务,这就要求一定的自动测试率。一个完善的测试框架可以大大提高测试效率,及时反馈产品的质量。
在敏捷开发流程中,在第一个 Sprint 周期里,需要增加一项建立测试框架的任务。在随后的迭代过程中,只有当测试框架需要大幅度调整时,测试团队才需要考虑将其单独作为任务,否则可以不用作为主要任务罗列出来。
项目实例:
考虑该项目刚刚进入测试,需要为此建立一个测试框架。于是,在原先的估算中多增加一些任务。
任务 | 估算(小时) |
---|---|
选择测试工具 | 3 |
建立测试系统 | 3 |
编写下载、存放和恢复测试数据的脚本 | 2 |
寻找或建立测试结果汇报工具 | 8 |
设计具体的搜索测试用例 | 4 |
准备搜索测试数据 | 4 |
编写和测试“搜索”模块 | 3 |
编写和测试“验证返回列表”的模块 | 1 |
学习“在结果中搜索”的模块设计 | 4 |
编写和测试“在结果中搜索”模块 | 4 |
第一次执行测试 | 4 |
分析第一轮测试结果 | 4 |
第二次执行测试 | 4 |
分析第二轮测试结果 | 4 |
总共 | 52 |
3.3.3 详细设计验收测试用例
完成对测试任务的估算,接着就可以着手详细设计验收测试用例。我们可以对概要设计中的测试用例进行细化,根据不同的测试环境、测试数据以及测试结果,编写更详细的测试用例。另外,可以结合几个用例,完成一个复杂的测试操作。
由于敏捷开发的流程是不断迭代的过程,所以很多复杂的功能可能会在未来的 Sprint 周期中被优化。对测试人员而言,一个有效的方法是尽量将一些验证基本功能的测试用例作为基本验证测试用例(Basic Verification Test Case)在第一时间实现自动化;而对一些复杂的功能测试用例,可以先采用手工的方法测试,直到在未来 Sprint 周期中该功能达到稳定时候再考虑自动化。此外,对测试中出现的缺陷可以设计回归测试用例(Regression Test Case),为其编写自动测试代码,使得此类问题在发布周期(Release Sprint)时可以顺利而高效得进行验证。
项目实例:
基本验证测试用例:
动作 | 数据 | 期待的结果 |
---|---|---|
登录 | 用户名:(空) 密码:(空) |
“用户名和密码无效” |
功能测试用例:
动作 | 数据 | 期待的结果 |
---|---|---|
登录 | 正确的用户名和密码 | 进入系统:请输入搜索条件并点击“搜索”按钮 |
搜索 | 错误的类型 | 提示正确的类型 |
搜索 | 使用正确的类型 | 商户列表 |
3.3.4 编写验收测试用例
敏捷开发不提倡撰写太多的文档,提倡直接编写测试用例。此外,测试人员和客户应取得良好的沟通,将这些需求总结下来,转化成验收测试用例。如果资源充足,最好对验收测试用例建立版本控制机制。
考虑到需求在每一轮 Sprint 周期中会不断得变化,测试团队要控制测试的自动化率,正确估计未来功能的增减。自动化率过高会导致后期大量测试代码需要重构,反而增加很多工作量。
3.4 Sprint 结束和下一个 Sprint 开始
在一个 Sprint 周期结束时,团队要举行一个回顾会议(Retrospective Meeting)。团队成员可以在会议上畅所欲言,指出在过去一个 Sprint 周期中可行的,不可行的和有待改进的地方。待改进之处将在项目经理监督下于未来的 Sprint 周期中实现。
由于敏捷开发倡导增量开发,当新的 Sprint 开始时,测试团队需要根据新 Sprint 周期的开发进度及时重构验收测试。如果新 Sprint 周期没有具体的新功能开发,测试团队可以将精力集中在执行验收测试和寻找缺陷上。
如果下一个 Sprint 周期是发布周期,那么测试人员需要准备执行回归测试。下面我们来详细了解每个测试活动。
3.4.1 重构验收测试
正如上文所提及,敏捷开发是以迭代方式进行的,功能在每次迭代中推陈出新。于是,验收测试用例经常需要修改或者添加,相应的验收测试代码也需要删减。这部分工作如果时间花销很大,最好在估算的时候一并提出。
项目实例:
在下一个 Sprint 周期中,我们需要实现之前没有实现的“模糊查找”功能。测试人员要在新的 Sprint 周期中更新原来的验收测试用例,在测试“搜索”模块中添加模糊查找测试。重新估算的测试任务参加下表:
任务 | 估计时间 |
---|---|
设计测试用例,准备测试数据(模糊搜索数据集) | 2 |
加载数据集 | 1 |
编写自动测试代码 | 3 |
执行测试和汇报结果 | 2 |
总结 | 8 |
3.4.2 执行验收测试
验收测试可以分为两大类,基本验证测试和功能测试。如果是基本验证测试,推荐开发人员在运行完单元测试和提交代码前直接运行自动测试脚本。如果是功能测试,可以在每个 Sprint 后期,新功能代码提交后,由测试人员单独执行。
敏捷开发的开发和测试是相辅相成的。一旦基本验证测试出现问题,那就说明开发人员的实现违反了最初客户定义的需求,所以不能够提交。如果功能测试出现问题,那么测试人员要及时与开发人员沟通。如果是缺陷,需及时上报给项目经理,并在每天站立会议中提出;如果不是,那么继续下一项任务。这个过程充分体现了敏捷开发所提倡的团队交流机制。
3.4.3 执行回归测试
在发布周期中,测试人员所肩负的任务非常重要,因为这是产品发布前的最后质量检验。
首先,要建立一套自动生成 build、运行自动测试代码、手工执行测试用例并汇总测试结果的框架。估算方法参加上文。
其次,定期执行各类测试,包括功能和系统测试。
最后,要整理之前在每个特征测试周期中出现的问题。如果已经整理并归类为回归测试用例,那么只要定时执行就可以了;否则,需一一添加。如果用例已经被自动化,可以直接运行;如果是手工测试,测试人员需要按照测试用例进行操作,最后汇总测试结果。这部分测试就是所谓的回归测试。
总结
以上我们回顾了敏捷测试在整个项目开发中的基本流程。详细介绍了各阶段存在的主要测试活动,结合实际项目,叙述每个测试活动的最佳实践。
最后,我们来探讨一下测试中的两个问题:手工测试和测试报告。
手工测试和自动测试是两个主要的测试类型。考虑到敏捷开发的高效性,自动测试会优于手工测试。手工测试有两个主要的缺点:不可靠和容易被遗忘。比如,在文中的搜索实例中,一旦我们重新建立索引,那么先前在搜索文本中出现的文字错误就无法重现。另外,当测试人员按部就班得手工完成一个一个测试用例时,他们很容易遗忘一些特殊的测试用例,很多缺陷因此而被埋没。敏捷测试主张一些基本的验收测试可以被自动化;对一些涉及系统方面的测试,手工测试比较适合。
测试报告是反映一个测试团队工作的最好成果。为适应敏捷开发的节奏,测试报告可以以网页的形式发布在内部的 web 服务器上,在一些问题区域上标注鲜明的色彩,用来警示团队中的每个人。
综上所述,本文详细谈论了敏捷开发中测试的各项任务。希望本文有助于正在使用敏捷模式或者打算使用敏捷模式的团队更好得理解敏捷测试。
敏捷测试人员如何做好敏捷测试
一、敏捷测试人员的焦虑与困惑。
参加过多次敏捷项目培训,发现培训老师对测试人员的角色定位和敏捷测试意识鲜有提起,大家也更多关注于流程、功能分解、迭代周期和时间进度安排等。常常看见敏捷项目组里的测试人员对一些问题感到焦虑、困惑,比如:
需求文档太少,无法理解需求或对需求理解不深刻,难以设计测试。
需求变化过于频繁,测试用例维护工作量大。
时常发现自己所做的工作超出自己的职责。
测试人员不足,迭代周期短、测试时间紧,回归测试不全导致遗漏缺陷。
测试人员存在感不强,难以融入开发团队。
测试人员代码能力不足,无法编写单元测试代码或自动化测试脚本。
开发自测不足,太依赖测试人员的系统测试。
提交的缺陷不被重视。
与开发人员沟通存在问题。
等待版本、等待环境。
如果对敏捷项目、敏捷开发流程多做些了解,会发现其中的一部分困惑其实主要来源于对敏捷测试的认识、思考和实践不足。下面就谈谈一个优秀敏捷项目测试人员应具备的敏捷意识,以及如何通过这些意识去解决面临的“问题”。
二、一个优秀的敏捷项目测试人员应具备的意识
相对传统项目而言,敏捷项目对测试人员有更高的要求,对测试人员是一种挑战,也是一个全方位锻炼、成长的机会。一个优秀的敏捷项目测试人员应具备如下意识:
(一)心态
以积极的心态拥抱变化:敏捷,即快速变化。敏捷项目原本充满变化
和不确定性,因而需求变化比较快,产品开发周期短,给软件测试带来很大的挑战。但每一次的需求调整都是为了使产品开发朝着更正确的方向开展,测试人员应给予理解,减少无用的抱怨,积极主动去接受变化、理解变化,采取探索性测试尽早发现可能存在的问题,给予及时反馈。
(二)文档
接受精简的文档:如果要求需求频繁变化的敏捷项目像传统项目一样有
详尽的文档,那么,每次变化将需要花费大量的时间来更新需求。特别是变化后不进行同步更新,将比精简的文档还糟糕。在敏捷项目中,直接沟通交流的效率远大于文档,而且直接沟通更能在理解上达成一致。测试人员可以通过主动沟通了解需求,自己整理出一份详细的需求,并不一定要像需求规格一样标准,易于理解即可。通过整理,可以更深入理解需求、发现问题、暴露问题。当然,也不能走极端,认为敏捷可以不要文档,核心业务逻辑应有文档或会议纪要体现。
测试简单化:测试应关注于产生价值,不断尝试最简单的方法满足测试
需要。比如,迭代初期,测试用例可以简单到只是包括所有测试点的清单,不仅可以节省评审时间,也可以避免需求的频繁变动加大测试用例维护的工作量。当然,每个迭代仍然需要明确且易于修改的测试计划、测试目标、测试范围、测试类型,选择合适的测试策略。在版本稳定后,再进行标准的用例库建设。
(三)主动意识
尽可能多的参与需求讨论:测试人员可以利用自己在用户体验、业务逻
辑方面的经验,和项目组成员充分交流和讨论,提出有建设性的建议。也可以通过需求讨论,更加深入理解需求。
作为勇敢的发言者:敏捷团队是民主的,团队成员能够平等参与讨论。
思想的碰撞,更易突发灵感产生创造性的思维,有想法和建设性的建议应该勇敢提出来。测试人员和开发人员所站角度不同,测试人员的视角更接近客户,不要害怕所提的问题过于简单。要敢于提出问题、发表自己的意见、提出建议,尽早揭示风险、暴露问题,以免在后期造成更大的影响。
主动沟通和协作意识:进入敏捷的协作环境,测试人员不应该局限在
自己的职责领域,应关注于项目组共同的目标,尽可能产生更大的价值。优秀的测试人员应该知道如何与他人更好的沟通、合作,且随时准备协作。良好的团队沟通和协作意识也是项目成功的关键因素之一。
乐于分享与反馈信息:一个测试人员所负责的功能一般不仅限于一个模
块,因而比一个开发人员能掌握更多的需求信息。测试人员可以向项目组成员积极分享需求、反馈各功能模块的测试进展,让所有人更了解整体需求和项目动态。及时提供全面的质量反馈,每个周期对缺陷分类汇总,分析相似缺陷的发生频率和易发缺陷的功能模块,用清晰的图形化展示,提醒开发人员避免再次产生同样的缺陷。
主动参与代码复审:测试人员不写代码,但可以主动参与代码复审,有
助于提升代码阅读能力,也可能以测试人员的视角发现隐蔽的缺陷。
不断改进工作和学习新技能:创新无论在哪里都非常重要。敏捷开发鼓
励团队采纳新技术,使产品和团队自身都有很强的适应力和生命力。测试人员应该不断的学习和自我提升才能更好的适应和应对变化,努力培养自己的工作技术,关注、读好的文章以获得新想法和技能,试验新的工具和技术,改进测试工作。
(四)测试方法
测试驱动开发:敏捷项目测试人员参与了整个软件生命周期,测试人员
应该在不同阶段确认和验证、预防缺陷,而不是等到软件开发完成后才去发现缺陷。单元测试驱动开发(UTDD)和验收测试驱动开发(ATDD),前者大多由开发负责,后者由测试操作。测试人员可以关注和推动单元测试,并利用专业测试、需求理解能力,以测试需求驱动、指导开发。当编码由测试指导,开发的产品可能更符合客户的期望,也有助于确保版本发布后重要功能正确、迭代功能无缺失。
测试自动化:众所周知,由于敏捷项目快速迭代的特点,用自动化做回
归测试是敏捷项目成功的要素之一。敏捷测试中回归测试是必须的,没时间实现测试自动化是一个不断积累债务的过程。测试自动化开始时会比较艰难,应尽早克服困难,选定或准备合适的工具。一旦某些核心功能稳定,每个迭代开始小规模的自动化工作,逐步把稳定的功能用自动化测试实现,减少回归时间和成本,将原本可发挥更大价值的人力从重复的手工测试中解放出来,将更多的时间用于重要的探索性测试。经验统计显示,80%的缺陷是在探索测试过程中发现的。
(五)敏捷观
树立正确的敏捷测试观念:敏捷项目是以结果为导向的,因此敏捷测试
同样是结果导向。要有全局观,不只是关注于发现缺陷,也不以发现缺陷多少为目标,应关注于是否实现当前的功能。测试人员和开发人员都有相同的质量目标,应尽量协助开发人员不断提高软件的质量。不要“等待”,尽可能的早工作,做能够做的工作。
三、总结
通过上面对敏捷意识的描述,可以看到前面提到的文档问题、职责问题、融合问题、技能问题等等其实大多都不是问题,可以通过提高敏捷意识来解决,而这种敏捷意识对一个敏捷项目的成功起着极大的推动作用。敏捷测试人员在提高自身意识的同时,也应努力推动项目组的整体意识,制定出测试标准、流程,让体系约束大家,共同提高软件开发和测试的质量。
---------------------
原文:https://blog.csdn.net/weixin_39914925/article/details/78848455