帮我理解Scrum中的QA是如何工作的。

64

显然,我们使用Scrum开发方法。它通常是这样的:

开发人员试图完成他们的任务。通常,任务需要大部分时间才能完成。QA团队催促开发人员发布一些可以测试的内容,开发人员最终在冲刺结束前的一两天发布了一些有缺陷的代码,然后花费其余时间修复QA团队发现的错误。QA团队永远无法按时完成任务,冲刺很少能按时发布可发布版本,开发和QA团队在冲刺结束前几天都过得很痛苦。

当可发布的开发任务占据大部分冲刺时间时,Scrum应该如何运作?

感谢大家参与讨论。由于这是一个比较开放的问题,似乎没有一个“答案” - 在下面有许多好的建议。我将尝试总结一些“要点”并进行一些澄清。

(顺便问一句 - 这是放置此类内容的最佳位置吗,还是应该放在“回答”中?)

值得思考/采取行动的要点:

  • 需要确保开发任务越小越好。
  • 冲刺长度应适当基于平均任务长度(例如,具有1周任务的冲刺应至少长达4周)。
  • 团队(包括QA团队)需要努力成为更准确的估算者。
  • 考虑进行并行但偏移的独立QA冲刺,如果这对团队最好的话。
  • 单元测试!

3
我觉得质量保证(QA)的日子已经不多了。开发者应该通过编写自动化测试来对自己的代码负责。敏捷开发的核心原则之一是尽早、经常性地交付可工作的代码。而今天定义下的QA并不符合这个原则。为了让QA成为敏捷开发的一部分,我认为QA需要重新定义自己。也许他们应该自己编写自动化测试,并更加融入开发流程中,我不确定。但是,只是编写一些代码然后把它扔给一个QA人员去勾掉列表上的项目的日子已经结束了。 - Spencer
3
我刚刚完成了一本名为《敏捷测试:测试人员和敏捷团队的实用指南》的书,它涵盖了这个确切的问题。非常强烈推荐。 - Andy
5
我认为这个问题可能不是适合在这里讨论的,因为它应该在programmers.stackexchange.com上进行讨论。 - Nakilon
13个回答

41

我的意见是你们存在一个估算问题。似乎在规划冲刺时只考虑了构建部分而忽略了每个功能测试所需的时间。

我并不是说这是一个容易解决的问题,因为它比任何事情都更普遍。但可以帮助的事情包括:

  • 将QA团队成员视为开发团队的一部分,并在冲刺计划和估算中更密切地包含他们。

  • “可发布的开发任务”不应占据大部分冲刺时间。应该完成工作功能。尝试收集有关每种任务的开发时间与测试时间的指标,并在估算未来冲刺时使用这些指标。

  • 可能需要审查待办事项清单,看看是否存在非常粗糙的功能特性。尝试将其细分为易于估算和测试的较小任务。

总之,由于在估算和规划冲刺时存在未考虑的任务,因此你们的团队似乎还没有找到其真正的速度。

但最终,估算不准确是敏捷或瀑布项目中遇到的严峻的项目管理问题。祝你好运。


你的完成定义必须是完整、详细和准确的。在完成定义中包括测试步骤。从开发的开始就要涉及专门的测试人员,即测试代表应该帮助完善缺陷或功能,并帮助确定最终的测试步骤。测试包含在估算中。这样开发人员或测试代表就不会有任何意外。而且使用术语“测试代表”并不准确,我们现在都是软件交付者 :) - learnerplates

35

有点晚来参加这个聚会,但根据你的描述,这是我的看法。

现在,Scrum 是一个项目管理方法,不是一个开发方法。但我认为,建立开发流程非常重要。 如果没有流程,你会花费大部分的时间应对问题而不是构建产品。

我是一个测试驱动开发的支持者。在我的开发流程中,我首先编写测试以强制执行需求和设计决策。 你们的团队是如何实施这些要求的呢? 我想说的是,你不能仅仅“把东西扔过去”并期望成功。 这种失败可能是由测试团队(未能很好地测试,从而让问题溜走)或由开发人员(未建造解决问题的产品)引起。 我并不是说你必须先编写测试 - 我不是一个狂热者或者测试驱动开发的鼓吹者 - 但我想说的是,在达到迭代结束时,你必须拥有一套生产质量、经过测试的、可以直接使用的代码流程。

我曾经处于你现在所处的状态,这种开发方法我称之为死亡螺旋法则。我曾经在美国政府为多年使用这种模型构建软件。 这种方法不好用,花费大量的金钱,产生延迟的代码、低质量的代码,对士气没有任何帮助。 当你花费所有时间纠正本可以一开始就避免的错误时,你无法取得任何进展。 我被这个过程彻底打败了。

你不想让 QA 发现你的问题。 你真的想让他们失业。我的目标是让 QA 大吃一惊,因为一切都正常工作。当然,这只是一个目标。实际上,他们还是会发现问题的。我不是超人,我也会犯错。

回到日程安排...

我现在的工作采用Scrum方法,但我们不这样称呼它。我们不注重标签,但我们注重按时生成高质量的代码。所有人都明白该做什么。我们会告诉QA何时测试我们准备好的内容。如果他们提前两周来要求测试,我们将拒绝。每个人都了解时间表,每个人都知道发布中将包含哪些内容,并且每个人都知道产品必须像广告宣传的那样正常工作才能交给QA进行测试。所以这意味着什么?你告诉QA“不要测XYZ - 它是坏的,直到发布C才会修复”,如果他们去测试,你可以指向这个声明并告诉他们不要浪费你的时间。有时可能有些严厉,但有时候是必要的。我不是想粗鲁,但所有人都需要知道“规则”,什么应该被测试和什么是“已知问题”。

你的管理层必须同意。如果他们不同意,你会遇到麻烦。QA不能主导,开发组也不能完全主导。所有小组(即使这些小组只有一个人或一个同时扮演多个角色的人)都需要在同一页上:客户、测试团队、开发人员、管理层和其他人。常常,沟通是超过一半的战斗。

也许你在一个迭代中尝试了太多,这可能是原因。为什么会这样?为了满足时间表吗?如果是这样,管理层需要介入解决问题。如果你给QA有问题的代码,他们会把它扔回来。最好给他们三个可以运行的东西而不是八个没完成的东西。目标是在每个迭代中生成完全实现的某些功能,而不是随意拼凑一堆未完成的东西。

我希望这篇文章被理解为一种鼓励而不是抱怨。就像我提到的,我曾经也处于你所处的位置,那并不好玩。但是还有希望。你可以在一个或两个迭代中扭转局面。也许你下一个迭代不会添加任何新功能,只是修复问题。这需要团队决定。

再提一下撰写测试代码的好处:自从采用“先编写测试然后编写代码”的方法后,我发现自己更加放松和自信地开发产品。当所有测试都通过时,我拥有一种信心,如果没有测试则无法达到。

祝您好运!


3
感谢您的肯定。我会尽力将翻译做到准确、通俗易懂,并保留原意。 - Jess Telford
1
我们有一支海外QA团队,其技能水平低至中等,由于我们并不期望他们能够正确识别缺陷,所以完整地测试工作是由我们开发人员来完成的。这对我个人来说非常有效,而且在岸QA团队经理也展现了ismatt的“惊愕”行为。我完全同意我们应该让独立的QA团队失业,但我也同意这是不可能的,因为开发人员也是人。 - ALEXintlsos

15

在需要进行QA功能测试以完成给定特性的情况下,我认为存在资源分配问题。到目前为止,我在任何与QA相关的Scrum讨论中都没有看到有人解决这个问题,而这里的原始问题几乎相同(至少相关),因此我想提供一个部分答案并扩展一下问题。

至于关于开发任务占用整个Sprint的具体原始问题-如果QA的功能测试是您定义“完成”的一部分,则似乎缓解这些任务的一般建议是有道理的。假设一个4周的Sprint,如果需要测试来自多个开发人员的多个特性大约需要一周时间,那么开发任务大约需要3周时间,然后是大约1周的测试任务。当然,QA会尽快开始,但我们意识到从上一组交付的特性中,将会有大约一周的滞后期。我意识到我们希望尽快将特性交付给QA,以便在Sprint中不出现类似瀑布式的情况,但现实情况是,在Sprint的1到3周内,开发通常无法将真正有价值的交付功能交付给QA。当然,这里有零散的部分,但大部分工作是2-3周的开发,然后剩下大约一周的测试。

所以这里就是资源分配问题,以及我对问题的扩展 - 在上述情况下,QA有时间测试一个sprint的计划功能(3周的开发任务,留下最后一周来测试上次交付的功能)。还假设在开发1周后QA开始获取一些可测试的功能 - 但是对于QA的第1周和对于开发的第4周呢?
如果QA功能测试是sprint特性“完成”的定义的一部分,那么看起来这种低效是不可避免的。QA在第1周将基本处于空闲状态,而开发在第4周将基本处于空闲状态。当然,有些事情自然会填补这段时间,比如修复错误和验证、设计/计划等,但我们基本上是把我们的资源安排在75%的容量上。
显而易见的答案似乎是采用交叉迭代来进行开发和质量保障,因为实际情况是 QA 总是会在某种程度上落后于开发。向产品所有者和其他人展示功能的演示将在 QA 迭代之后进行,因为我们希望在展示之前测试功能。这似乎可以更有效地利用开发和 QA 的时间,因为我们没有太多浪费的时间。假设我们想让开发人员继续开发并让测试人员继续测试,我找不到更好的实际解决方案。也许我错过了什么,我希望有人能给我一些启示——否则,这种死板的 scrum 方法看起来是有缺陷的。谢谢。

最大化个人利用率真的是目标吗?还是目标是最大化交付工作、经过测试的软件? - testerab
我认为在开发迭代期间集成QA存在缺陷,而且我认为开发时间比QA功能测试更重要、更昂贵。测试驱动开发(TDD)将是一个更好的解决方案,QA应该帮助进程而不是使其更加困难。您对此话题有任何个人更新吗? - johnlemon

12
希望你通过在每个迭代中处理更少的开发任务来解决这个问题。这引出了以下问题:是谁设定了开发目标?为什么开发总是无法达到这些目标?
如果开发人员没有设置自己的目标,那么他们总是会拖延。这不是实践Scrum的理想方式。这只是具有大型、以截止日期为驱动的可交付成果和开发人员在实际利益相关方责任方面没有实际责任的增量开发。
如果开发人员不能设置自己的目标,因为他们不知道足够多,那么他们必须参与前期工作。
Scrum依赖于四个基本原则,概述在敏捷宣言中。
1. 互动很重要——这意味着开发人员、QA、项目管理和最终用户需要进行更多的交流并相互交流。软件是用计算机的奥秘语言编码知识的过程。为了编码知识,开发人员必须拥有知识。[你为什么认为我们把它称为“代码”?] Scrum不是一种“编写规范-扔到屋檐下”的方法。它是反“编写规范-扔到屋檐下”的方法。
2. 可运行的软件很重要——这意味着每个开发人员处理的部分都必须导致一个可工作的发布。不是一组供QA解决的漏洞修复,而是可工作的软件。
3. 客户协作——这意味着开发必须与业务分析师、最终用户、业务所有者等所有可以帮助他们理解正在构建的内容的人合作。期限并不像交付给客户的下一个东西那么重要。如果客户需要X,那就是每个人做的最优先的事情。如果项目计划说要构建Y,那就是废话。
4. 响应变化——这意味着客户可以重新安排以下迭代的优先级。他们不能重新安排正在进行的迭代(那太疯狂了),但是所有以下的迭代都可以更改优先级。如果客户参与其中,那么截止日期就不再是人工制定的“项目里程碑”,而更像是“我们需要先完成 X,然后完成 Y,在 Z 部分的这个东西不再需要了。现在我们有了 W,Z 是多余的。”

您的描述听起来大致正确。很多时候,截止日期是人为设置的 - 必须要在冲刺回顾中表现良好!在计划会议上,任务数量是基于非开发人员给出的时间估计。由于开发人员缺乏有关任务的信息,因此无法很好地报价。这该怎么做? - Steve
你向开发人员询问估算(粗略的、2倍因子的估算)的部分原因是为了让他们提出问题并达到清晰度。如果没有达到粗略的、2倍因子级别的清晰度,你怎么能称之为“规划”呢? - Alan Hensel

9
Scrum规则要求,在Sprint结束时,所有的Sprint条目必须是“完全测试过、可能可实现的功能”,才能被认为是完成的。Sprints ALWAYS按时结束,如果团队不能在截止日前完成所有内容,包括QA测试,团队将不会获得任何评分,也不能在Sprint回顾中展示任何未完成的内容。
从技术上讲,这就是你需要的全部。团队承诺完成一定量的工作,最终在Sprint结束两天前将其提交给QA,但QA测试没有及时完成。因此Sprint的产出为零,他们必须面对客户,承认他们一个月的工作没有任何成果。
下一次,他们会选择更少的工作量,并找出如何将其交付给QA,以便按时完成。

7
作为一名从事敏捷项目工作了2.5年的QA,我认为这是一个非常困难的问题,我仍然没有所有答案。
我作为“三人组”(两个开发人员进行配对编程+一个QA)的一部分,并参与在两周迭代开始时的任务分配和估算。如上面提到的,像adrianh一样,在初始sprint计划中,QAs发表意见至关重要。这可能很困难,特别是如果你正在与性格非常强烈的开发人员合作,但是QAs必须以真正的意义上断言(即尊重地寻求理解Truth / PO和Developers /技术专家,同时使自己被理解)。我主张在规划期间先制定QA任务,以鼓励测试驱动的心态- QA可能不得不亲自提出来采用这种方法。这与许多人认为软件开发的方式相反,但有几个好处;
1.QA被听取,而不是被降级为在Dev说他们的话后问“那么你要如何测试?”(瀑布模型)。
2.它允许QA提出测试想法,同时检查可接受标准的可测试性,同时Truth / PO存在(我确实说过他们必须在计划会议中出席吗?)以填补任何理解上的差距。
3.它为测试驱动方法提供了基础-在测试方法已被表述和分配后,Dev可以考虑如何生成代码以通过这些测试。
4.如果步骤1-3是你在整个迭代中唯一的TDD活动,那么你仍然比Steve在第一个帖子中假设的情况要好一百万倍;“开发人员试图完成他们的任务。通常任务需要大部分时间来完成。 QA纠缠Dev发布一些可以测试的内容,Dev最终在Sprint结束前一两天发布一些有错误的代码,并花费其余时间修复QA正在发现的错误。”
不用说对于QA而言,这需要遵循一些警告;
  1. 他们必须准备好接受开发人员、产品负责人的测试想法挑战,并达成妥协;在敏捷团队中,“QA警察”的态度行不通。

  2. QA任务必须取得一个艰难的平衡,既不能太详细也不能太泛泛(任务可以写在卡片上放在“散热器板”上,在每日站立会议上进行讨论——它们需要在迭代期间从“正在进行”移动到“已完成”)。

  3. QA需要为计划/估算会议做好准备。不要指望能够仅凭想象力就能产生一个测试方法来解决未知的用户故事!开发人员似乎能够做到这一点,因为他们的任务通常更加明确——例如“将x模块更改为与z组件接口”或“重构y方法”。作为QA,您需要在计划之前熟悉引入/更改的功能,以便了解测试的范围和可能应用的测试设计技术。

  4. 自动化测试几乎是必不可少的,必须在迭代的前两三天内编写并“失败”,或者至少与开发人员准备好代码的时间相一致。然后,您可以运行测试并查看它们是否按预期通过(正确的QA TDD)。这是避免迭代末尾出现小瀑布的方法。您应该在开发人员开始编码之前或同时向他们演示测试,以便他们知道目标。

  5. 我说4是“几乎必要”的,因为有时候可以通过手动检查预期行为的清单(敢于说脚本!)来成功完成同样的事情——关键是与开发人员提前共享;不断与他们交流!

关于上述第2点任务的问题,我试图创建每个任务粒度为1/2小时至2小时,对应于可演示的工作片段,例如“将自动测试的密码错误检查添加到2小时内”。虽然这有助于我组织我的工作,但其他团队成员批评它过于详细,并且在站立会议上的效果是我要么从前一天移动多个任务以完成,要么根本无法移动任何任务,因为我还没有开始。人们真的希望在每日站立会议上看到稳定的进展,因此更有帮助的是创建半天或一天的任务块(但您可能会保留自己的“微任务”列表,以便在站立会议上传达整体进展情况)。

关于上述第4和第5点;您早期准备的自动化测试或手动检查清单应该只涵盖“快乐路径”或关键验收标准。一旦这些通过了,您可以计划在迭代末尾进行额外的“探索性测试”以检查边缘情况。开发人员在此期间所做的事情是有问题的,因为他们认为除非您发现错误,否则他们已经“完成编码”。一些敏捷实践者主张首先处理边缘情况,尽管这也可能存在问题,因为如果时间不足,您可能无法保证已交付验收标准。这是一个依赖于用户故事背景和您作为QA的经验的微妙平衡决策之一!
正如我在开头所说,我仍然没有所有的答案,但希望以上提供一些经过艰苦经验得出的指针!

5
我们通过以下方式解决了这个问题: - 产品待办事项中的每一项都必须有适合标准或验收标准,没有这些标准,我们就不会开始一个迭代。 - 测试人员是我们团队的一部分,对于每一个产品待办事项,他会根据验收标准创建测试任务(1个或多个),并估计时间,并提供一个链接来测试该项。 - 在每日站会期间,所有已完成的任务都被放置在“待测试”列中。 - 我们从不执行超过16小时的任务;估计时间较长的任务将被拆分。

4

看起来你的开发团队在发布给QA之前可能没有进行足够的测试。如果所有的单元测试都通过了,那么QA周期应该相对顺利,是吗?他们会发现一些集成错误,但这样的错误不应该很多,对吧?


4
我认为这里存在几个问题。首先,我认为开发任务可能不够细化,或者估算不足,或者两者都有。Scrum中sprint的整个目的是在sprint结束时展示可工作的代码。我提到的这两个问题都可能导致错误的代码。
如果开发人员在sprint结束时发布了错误的代码,我还会考虑以下几点:
- 产品负责人是否真正要求开发成员完成他们的任务。这是PO的职责,如果没有做到,那么开发人员就会松懈。 - 开发人员是否使用任何TDD。如果没有,那可能会大有帮助。让开发人员习惯测试他们的代码。我们在工作中也遇到过这个问题,我的团队专注于在重要领域进行TDD,这样我们就不必让其他人之后再来做。 - 任务/用户故事是否过于通用?任务分解中的余地将导致开发人员变得懒散。同样,这在某种程度上是PO的问题。
过去听说过一个想法,就是让QA人员担任Scrum Master。他们将出席每日站立会议,并了解开发人员的情况。他们可以与PO一起解决问题(假设PO能够充分履行自己的职责)。
我不能不感到你需要在QA和Scrum团队之间更多的合作。听起来测试只发生在最后,这是一个问题。让QA成为团队的一部分将有助于识别可以更早、更好地进行测试的事项。
我还觉得你们的产品负责人存在问题。他们必须确保每个人都朝着正确的方向前进。他们应该确保有良好的合作,不仅是在QA和开发人员之间,而且在开发人员之间。

4
“如果可发布的开发任务占据了大部分迭代周期,Scrum应该如何运作?” 正如你所发现的那样 - 它并不起作用:-)从你描述的过程来看,它似乎与Scrum无关,或者至少不像是良好实施的Scrum。 从你描述的内容中,我不确定QA人员是团队的一部分还是单独的一组。
如果他们是一个独立的小组,那么这可能是问题的主要原因。他们不会参与团队承诺完成任务以及与产品所有者进行相关范围谈判。在没有QA技能的情况下,我从未见过敏捷小组能够成功。可以通过使开发人员具备大量测试/QA技能,或者将一个或三个嵌入式QA人员放在团队中来实现。
如果他们是团队的一部分,则需要在最初的迭代计划中更多地听取他们的声音。现在,产品所有者和团队应该清楚地知道你们已经超额承诺了。
如果是我的话,我会尝试几件事情:”
  • 如果团队中没有QA /测试人员,请招募他们加入团队
  • 与产品负责人和团队进行充分的交流,明确“完成”的标准。听起来,一些开发人员仍处于“移交给QA”就意味着“完成”的敏捷前期思维模式中。
  • 将故事拆分成较小的块 - 这样更容易发现估算错误
  • 考虑运行较短的Sprint-因为小而经常更容易跟踪和学习。

您可能还会发现这些有关平滑敏捷燃尽图的技巧有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接