NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

从测试人员的角度看敏捷中的障碍

  • 2015-06-25
  • 本文字数:3198 字

    阅读完需:约 10 分钟

Scrum 是一种迭代式与增量式的框架,它体现了软件开发的一种敏捷式的途径。在软件组织中,使用 Scrum 进行软件应用开发与测试正在变得越来越流行。

在 Scrum 团队中,测试与开发同样重要。在每个 Sprint 中,测试人员需要在特定的、极短的时间内对特性进行测试,以帮助团队尽早地消除 bug。

虽然敏捷测试比起传统的测试方法存在着许多优势,但它也有不足之处,其中之一就是有时它会在每个 Sprint 临结束时对质量保证(QA)团队产生了过多的压力,最终可能会导致 Sprint 的溢出。

测试人员所面对的另一个问题是缺乏全面的文档。在敏捷项目中有一个严重的陷阱,就是缺乏对设计与文档的强调,因此造成了许多需求的模糊不清。虽然人们说过多的细节文档会妨碍重要的工作,但我认为可以在某个敏捷项目管理工具中维护每个用户故事的适当细节、文档以及每种可能的场景,以此解决这一问题。

QA 团队无法对几周之后的工作内容进行规划,在敏捷项目中,测试人员必须在代码开发的同一个迭代内进行代码的测试,并且要求他们为代码及整个应用提供快速的反馈。不过,在大多数情况下,可运行的代码只在一个 Sprint 临近结尾时才能够提交,此时由于 demo 或演示的需要,代码往往要处于冻结状态。其结果就是测试团队往往缺乏足够的时间进行验证,因此往往对某个特定 Sprint 的测试会推迟到下一个迭代中,此时才会将这些工作丢给测试团队。

在 Scrum,测试人员的工作不仅仅是进行测试,并在缺陷跟踪工具中记录 bug,而是包含了多种不同的任务,例如测试管理和分析以及测试执行的职责。除此之外的职责还包括客户处理,以及 bug 的跟踪,还有将客户不断建议的频繁变更进行集成。

真正的敏捷 QA 往往还要负责非单元测试工具、测试环境搭建以及测试数据的准备。处于这一角色上的人会发现他们需要在互相冲突的选择中进行权衡。这些选择与非敏捷项目中的选择相类似,但由于敏捷项目的时间短暂,使这些问题显得更为突出。对于测试进行管理的职责往往分派给某个敏捷团队中的一个或两个成员,而不是由整个团队承担起这一任务。

虽然在敏捷项目中进行工作会让你始终保持警觉,但分散的职责以及更好的时间管理能够让你的工作更简单,同时也更高效。

时间估算是敏捷测试人员的一大挑战,要进行准确的测试估算,需要考虑到多个重要的因素,例如项目的范围、所需的测试类型、测试任务以及以往的经验。但有时即使是最精确的估算方式也会最终显得时间不足,这是因为每个 Sprint 结束前的测试时间过于短暂,因此 QA 无法进行足够的端到端测试。如果在先前的开发过程出现了任何延迟,都有可能影响 QA 的时间安排,有时 QA 无法在整个迭代中完成某个测试用例的执行,因此他只能选择快速的完成。在估算过程中,QA 有责任提醒整个团队必须执行的测试任务,因此让团队成员不会对任务过分承诺。这里的估算应当包括手工任务和自动化任务,团队或许需要对某个用户故事编写或改写自动化测试。

在敏捷测试中的另一个障碍是在测试过程中缺乏客户的参与,客户或许会认为他们只需要在产品完全结束之后再参与就足够了。这会导致验收测试和验收标准方面的问题。我们在演示过程中很少会收到下一步应该做些什么的反馈。建立一种信任关系有助于缓解这一风险。

在我之前的一个项目中,我曾看到客户建议对应用程序的核心功能进行巨大的改动。这种改动会影响应用程序中的其它特性,并且导致代码的改动,并且使测试工作量倍增。从客户那里得到的反馈时间太晚,会推迟产品上线的时间。让业务人员专门负责与客户进行每日沟通,能够填补在客户响应时间上的鸿沟。

敏捷的一个主要优势是能够尽早地开始测试。随着项目逐渐成熟,敏捷测试也变得越来越重要。每个特性在开发完成之后就应当进行完整的测试,而不是在整个开发结束后再开始测试。

在项目的早期完成了几个成功的迭代之后,用户故事与工作量会开始增长,而项目也需要加入更多的团队成员。随着开发人员数量的增长,测试人员的数量也应当随之增长,以维持一个恒定的测试人员 / 开发人员的比例(通常是一个测试对应两个开发人员)。

现在,让我们假设以上情形在每个 Sprint(大约两周到四周)中都会重复出现。从客户的角度来看,在每个循环中,敏捷测试都需要对一个或多个新的软件模块进行验证。还需要考虑在最终发布之前如何、以及何时处理回归测试的问题。测试不再是软件开发的一个阶段,而是与开发混合在一起,持续的测试是确保持续前进以及最终成功的咒语,也是唯一的方法。

在每个 Sprint 的过程中,敏捷测试将对每个新的功能进行检验。通常来说,在每个 Sprint 的结束之前,需要保留一小段时间以进行回归测试,然后才能进入下一个 Sprint。敏捷团队常常会实现一种构建验证测试(BVT)程序,团队通过它实施一个标准的验证步骤集,它将横跨整个应用程序,以确保应用程序的稳定性与功能性。如果可能的话,应当将这种程序进行自动化,并集成为持续集成服务器的一部分,这将使发布过程更加严格。

对于跨多个 Sprint 的项目来说,一种标准的实践是在其中设置一个代码强化 Sprint,或发布 Sprint,从整合的观点来看,能够确保应用程序的整体功能。良好的情况下,假设在每个 Sprint 中都小心翼翼地处理了缺陷的问题,那么这个过程不应该超过 30 天或 45 天。可以通过为每个用户故事和 bug 设定手动与自动化测试的目标以实现这一点。QA 有责任将任何尚未实现自动化的用户故事和 bug 标注为手动。这样,在新的构建部署之前,我们就能够获得一个可以手动执行的回归测试的集合。对于自动化来说,我们应该维护一个良好的自动化测试套件,在开发者每次提交代码时作为一个持续集成任务自动运行。

每个 Sprint 中,我们都在添加新的特性,或是发动现有的特性。我们也需要确保之前所创建的功能还在继续正常运行。一个自动化测试框架能够帮助团队快速地进行测试并找到 bug。这不仅是对于新的开发任务所产生的回归缺陷的一种安全保障,同时也节省了开发者与测试人员的宝贵时间,让他们专注于自己最擅长的工作上。

但是,由于每个 Scrum Sprint 的时间限制,同时编写自动化测试用例以及进行手动测试就成为一个很大的挑战。为了克服这一挑战,我们团队对于每个用户故事完成的定义加入了一个规定:如果某个用户故事的适当路径(happy path)还没有完成自动化,那么就不能够开始进行测试。通常来说,让一个开发者与一个 QA 测试人员共同合作编写适当路径是一种优秀的实践。

有些情况下,在一个 Sprint 中对非功能性方面进行测试是不可能的,例如系统的性能。对于每个非功能性方面的测试都应当创建新的用户故事,并独立估算时间。此外,这些测试也应当实现自动化,并加入到回归测试套件中,以确保缺陷修复后的系统还能够继续正常运行。如果整个系统是持续集成的,并且使用了自动化测试,那么也许就不必对其进行严格的集成测试了。

虽然在瀑布式、迭代式与敏捷实践中测试的任务从原则上来说没有什么区别,但敏捷的心态与它的测试实践为实现理想的结果提供了新的有效方法。敏捷性体现在敏捷实践当中,而不是体现在支配性的流程中本身。

简而言之,一个优秀的敏捷测试人员应当具备处理多任务的能力,并且能够跟上开发与发布的节奏。对于测试人员来说,创新性比挑剔来得更为重要。一个测试专家应当努力进行学习与创新,并且对于客户的期望必须具备全面的理解。最后,一个敏捷测试人员必须具备多种技术,例如手动测试、功能性测试和性能测试,并且需要具备领导能力和沟通能力这样的软技巧。

关于作者

Priyanka Hasija是一位来自于 Thoughtworks 的 QA 咨询师,她在 IT 行业有 5 年的从业经验。在这段时间时,她对于敏捷的原则已经建立了一个坚实的认识,并且在多个敏捷项目中成功地实践了这些原则。Priyanka 在手动测试方面获得了丰富的经验,并且在使用自动化测试工具方面也经验颇丰,这些工具包括 Cucumber、Web-driver 和 JMeter 等等。她也在内部与外部的多个会议上进行了演讲。

查看英文原文: A Tester’s Perspective on Agile Snags

2015-06-25 00:422243
用户头像

发布了 428 篇内容, 共 172.1 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

区块链发展的3个必经阶段究竟是什么

CECBC

去中心化

附PPT丨如何构建数据库容器化PaaS

dbaplus社群

数据库 容器

开一个世界末日的脑洞

熊斌

我的世界 生活记录 七日更

Android开发全套学习!不同层级的Android开发者的不同行为,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

设计模式【1】-- 单例模式到底几种写法?

秦怀杂货店

设计模式

字节跳动自研「BVC2.0」视频编码器在 MSU 2020 中获得四项第一

字节跳动技术团队

字节跳动 视频编码

字节跳动开源云原生机器学习平台 Klever

字节跳动技术团队

学习 字节跳动

星环科技助力商业银行机器学习平台建设

星环科技

FinTech

安卓开发快速学习!一个小例子彻底搞懂Android的MVP模式到底是什么?面试必问

欢喜学安卓

android 程序员 面试 移动开发

Mybatis【7】-- Mybatis如何知道增删改是否成功执行?

秦怀杂货店

Java mybatis

“区块链+”产业生态雏形已现 安全监管逐步完善

CECBC

区块链 区块链生态

附PPT丨广东移动智慧中台能力运营实践

dbaplus社群

中台 中台战略

JustSwap交易所系统APP开发|JustSwap交易所软件开发

系统开发

一直在云上的星空联盟,“真”上云了

亚马逊云科技 (Amazon Web Services)

云计算 AWS

Github标星5.3K,网易云的朋友给我这份339页的Android面经,附赠课程+题库

欢喜学安卓

android 程序员 面试 移动开发

反垄断之下 区块链迎来新生?

CECBC

区块链

架构师训练营第五周课后作业

万有引力

Mybatis【8】-- Mybatis返回List或者Map以及模糊查询怎么搞?

秦怀杂货店

Java mybatis

第五周作业

胡益

LeetCode题解:42. 接雨水,双指针,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

领域驱动设计DDD

积极&丧

爱奇艺用户分析平台实践:TB级数据查询秒级返回

dbaplus社群

大数据

Mybatis【9】-- Mybatis占位符#{}和拼接符${}有什么区别?

秦怀杂货店

mybatis 预编译

记一次由Arthas引起的Metaspace OOM问题

闲鱼技术

Java 阿里巴巴

《爱奇艺安全应急响应中心漏洞评分标准2021》来了

爱奇艺技术产品团队

安全 安全漏洞

explicit_defaults_for_timestamp 参数详解

Simon

MySQL 七日更

架构师入门感悟之十

笑春风

毕业三年,如何达到月薪30K?我想跟你聊聊!!

冰河

程序员 程序人生 架构师 升职加薪 提升自我

Lambda【1】-- List相关Lambda表达式使用(上篇)

秦怀杂货店

Java Lambda

Angel推荐算法在游戏推荐中的应用

DataFunTalk

学习

设计模式【1.1】-- 你想如何破坏单例模式?

秦怀杂货店

设计模式 单例 23种设计模式

从测试人员的角度看敏捷中的障碍_文化 & 方法_Priyanka Hasija_InfoQ精选文章