64

显然我们使用 Scrum 开发方法。一般是这样的:

开发人员为了完成他们的任务而苦苦挣扎。通常,这些任务需要大部分 sprint 才能完成。QA 缠着 Dev 发布他们可以测试的东西,Dev 最终在 sprint 结束前一两天向 QA 抛出了一些错误的代码,剩下的时间用来修复 QA 发现的错误。QA 永远无法按时完成任务,sprint 很少能按时发布,Dev 和 QA 在 sprint 结束时的日子过得很痛苦。

当可发布的开发任务占据了 sprint 的大部分时间时,scrum 应该如何工作?

感谢大家参与讨论。由于这是一个非常开放的问题,似乎没有一个“答案”——下面有很多很好的建议。我将尝试总结我的一些“带回家”的观点并做出一些澄清。

(顺便说一句 - 这是放置这个的最佳位置还是我应该把它放在“答案”中?)

思考/行动的要点:

  • 需要确保开发人员的任务尽可能小(细化)。
  • Sprint 长度应根据平均任务长度适当调整(例如,1 周任务的 sprint 应至少为 4 周)
  • 团队(包括 QA)需要努力提高估算的准确性。
  • 考虑并行进行单独的 QA 冲刺,但如果这对团队最有效,则可以抵消
  • 单元测试!
4

13 回答 13

40

我的观点是你有一个估计问题。似乎缺少测试每个功能的时间,并且在计划冲刺时只考虑构建部分。

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

  • 将 QA 视为开发团队的成员,并将他们更紧密地包含在 sprint 计划和估算中。

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

  • 您可能需要查看您的积压工作以查看您是否有非常粗粒度的功能。尝试将它们划分为可以轻松估计和测试的较小任务。

总而言之,您的团队似乎还没有找到其真正的速度,因为在为 sprint 进行估计和规划时没有考虑到一些任务。

但最终,估计不准确是您在基于敏捷或基于瀑布的项目中发现的一个棘手的项目管理问题。祝你好运。

于 2008-09-30T21:59:37.717 回答
35

这里的聚会有点晚了,但这是我根据你写的内容的看法。

现在,Scrum 是一种项目管理方法,而不是一种开发方法。但在我看来,关键是要有适当的开发流程。没有一个,您将大部分时间花在反应而不是构建上。

我是一个测试优先的人。在我的开发过程中,我首先构建测试来执行需求和设计决策。你的团队是如何执行这些的?我在这里要说明的一点是,您根本不能“把东西扔到栅栏上”并期望除了失败之外的任何事情。这种失败要么是由测试团队(由于没有很好地测试,因此让问题溜走),要么是由开发人员(由于没有构建解决问题的产品)。我并不是说你必须先编写测试——我不是激进分子或测试优先的布道者——但我是说你必须有一个流程来生成高质量、经过测试、准备好生产的代码,当你达到迭代的结束。

在我称之为死亡螺旋方法的开发方法中,我一直是正确的。多年来,我以这种模式为政府(美国)开发了软件。它不能很好地工作,它要花很多钱,它会产生迟到的代码,糟糕的代码,并且对士气没有任何帮助。当您将所有时间都花在修复本来可以避免的错误上时,您将无法取得任何进展。我完全被这件事打败了。

您不希望 QA 发现您的问题。你真的想让他们失业。我的目标是让 QA 大吃一惊,因为一切正常。诚然,这是一个目标。在实践中,他们会找到东西。我不是超人。我犯错了。

回到调度...

在我目前的工作中,我们做 Scrum,我们只是不这么称呼它。我们在这里不喜欢标签,但我们喜欢按时生产高质量的代码。每个人都在船上。我们告诉 QA 我们将准备测试什么以及何时测试。如果他们提前两周来敲门,他们可以和手说话。每个人都知道时间表,每个人都知道发布中的内容,每个人都知道产品必须按照宣传的方式工作,然后才能进入 QA。那是什么意思?你告诉 QA “不要费心测试 XYZ - 它已经坏了,直到发布 C 版才会修复”,如果他们去测试,你把他们指向那个声明并告诉他们不要浪费你的时间。苛刻,也许,但有时是必要的。我不是要粗鲁,但每个人都需要知道“规则”

您的管理层必须参与其中。如果他们不是,你就会遇到麻烦。QA 无法运行该节目,开发组也无法完全运行它。所有的组(即使这些组每个组只有一个人或一个戴多个帽子的人)都需要在同一页面上:客户、测试团队、开发人员、管理层和其他任何人。通常,超过一半的战斗是沟通。

也许你在 sprint 中的努力超出了你所能完成的范围。情况可能就是这样。你为什么这样做?满足时间表?如果是这样,那就是管理层需要介入并解决问题的地方。如果您要提供 QA 错误代码,请期望他们将其扔回去。最好给他们 3 件有用的东西,而不是 8 件未完成的东西。目标是产生一些在每次迭代中完全实现的功能,而不是把一堆半途而废的东西放在一起。

我希望收到它的本意——作为鼓励而不是咆哮。就像我提到的那样,我一直在你所在的地方,这并不有趣。但有希望。你可以在一个 sprint 中扭转局面,也许两个。也许您不会在下一个 sprint 中添加任何新功能,而只是修复损坏的部分。你必须作为一个团队来决定。

编写测试代码的另一个小插件:自从采用了“先编写测试”的方法后,我发现自己对我的产品更加放松和自信了。当我所有的测试都通过时,我就有了一种没有它们就无法拥有的自信。

祝你好运!

于 2008-09-30T23:05:14.157 回答
15

在我看来,在需要 QA 功能测试以便在 sprint 中“完成”给定功能的场景中存在资源分配问题。到目前为止,在我发现的任何与 QA 相关的 scrum 讨论中似乎都没有人解决这个问题,而且这里的原始问题几乎是相同的(至少是相关的),所以我想提供一个部分答案并稍微扩展这个问题。

至于关于完成完整冲刺的开发任务的具体原始问题 - 如果 QA 的功能测试是您对“完成”的定义的一部分,那么放松这些任务的一般建议似乎是有道理的。假设一个 4 周的 sprint,如果测试多个开发人员的多个功能需要大约一周的时间,那么似乎开发任务需要大约 3 周,然后是延迟一周的测试任务大约需要 1 周是答案。QA 当然会尽快开始,因为我们认识到从最后一组交付的功能开始,会有大约一周的延迟。我意识到我们希望尽快为 QA 提供功能,这样您就不会在 sprint 中遇到这种类似瀑布的场景,但现实情况是开发通常无法实现,值得在 sprint 的 1 到 3 周之前向 QA 交付功能。当然,这里和那里都有一些零碎的东西,但大部分工作是 2-3 周的开发,然后剩下大约一周的测试。

所以这是资源分配问题,也是我对该问题的扩展——在上述场景中,QA 有时间测试 sprint 的计划功能(价值 3 周的开发任务,最后一周用于测试最后交付的功能)。还让我们假设 QA 在 1 周的开发后开始获得一些可测试的功能 - 但是第 1 周的 QA 和第 4 周的开发呢?

如果 QA 功能测试是 sprint 中某个功能“完成”定义的一部分,那么这种低效率似乎是不可避免的。QA 将在第 1 周大部分闲置,而开发将在第 4 周大部分闲置。当然,有一些事情自然会填补这个时间,比如错误修复和验证、设计/计划等,但我们基本上是以 75% 的容量调度我们的资源。

显而易见的答案似乎是开发和 QA 的冲刺重叠,因为现实情况是 QA 在某种程度上总是落后于开发。在 QA 冲刺之后向产品所有者和其他人进行演示,因为我们希望在展示之前对功能进行测试。这似乎允许更有效地使用开发和质量保证,因为我们没有浪费太多时间。假设我们想让开发人员继续开发和测试人员测试,我找不到更好的实用解决方案。也许我错过了一些东西,我希望有人可以为我阐明这一点——否则,这种僵化的 scrum 方法似乎是有缺陷的。谢谢。

于 2008-11-07T18:23:40.573 回答
12

希望您通过在每个 sprint 中处理更少的开发任务来解决此问题。这导致了以下问题:谁在设置开发者的目标?为什么 Dev 始终未能实现这些目标?

如果开发人员没有设定自己的目标,那就是他们总是迟到的原因。这不是练习 Scrum 的理想方式。这只是增量开发,具有大型的、按期限驱动的可交付成果,开发人员没有实际的利益相关者责任。

如果开发人员因为知道的不够多而无法设定自己的目标,那么他们必须提前更多地参与进来。

Scrum 依赖于敏捷宣言中概述的四个基本原则。

  1. 交互很重要——这意味着开发人员、质量保证、项目管理和最终用户需要更多地交谈并相互交谈。软件是用计算机的神秘语言对知识进行编码的过程。要对知识进行编码,开发人员必须具备知识。[为什么你认为我们称它为“代码”?] Scrum 不是一种“编写规范 - 跨越横梁”的方法。这是 ANTI-“编写规范 - 抛出横梁”

  2. 工作软件很重要——这意味着开发人员咬掉的每个部分都必须导致一个工作版本。不是一组供 QA 处理的错误修复,而是工作软件。

  3. 客户协作——这意味着开发人员必须与业务分析师、最终用户、企业所有者以及所有能够帮助他们了解他们正在构建的东西的人合作。截止日期并不像接下来交给客户的事情那么重要。如果客户需要 X,那是每个人最优先要做的事情。如果项目计划说构建 Y,那就是一堆乱七八糟的东西。

  4. 响应变化——这意味着客户可以重新安排后续冲刺的优先级。他们无法重新安排进程中的 sprint(这太疯狂了),但以下所有 sprint 都是更改优先级的候选者。

如果客户开车,那么最后期限就会变得不那么人为的“项目里程碑”,而更多的是“我们首先需要 X,然后是 Y,Z 部分的这个东西,我们不再需要那个了。现在我们有了 W,Z 是多余的。”

于 2008-09-30T21:56:22.777 回答
9

Scrum 规则说,所有 Sprint 项目都需要在 Sprint 结束时经过“全面测试,可能实现的功能”才能被认为是完整的。Sprint 总是按时结束,团队没有获得荣誉,也不允许在 Sprint 审查中展示任何不完整的内容 - 包括 QA。

从技术上讲,这就是您所需要的。一个团队承诺一定数量的工作,最终在 Sprint 结束前两天将其提交给 QA,而 QA 没有及时完成。所以 Sprint 的输出为零,他们必须走到客户面前,承认他们一个月的工作没有什么可展示的。

下一轮,你会打赌他们会选择更少的工作,并弄清楚如何将其提交给 QA,以便按时完成。

于 2008-11-13T04:12:25.220 回答
7

作为一名从事敏捷项目工作 2.5 年的 QA,这是一个非常困难的问题,我仍然没有所有答案。

我作为“三人组”的一部分工作(两名开发人员配对程序 + 一名 QA),并且我参与了在两周迭代开始时的计划会议中分配故事和估计。正如 adrianh 上面提到的,对于 QA 来说,在最初的 sprint 计划中让他们的声音被听到是很重要的。这可能会很困难,特别是如果您与个性非常强大的开发人员一起工作,但是 QA 必须在真正意义上保持自信(即不咄咄逼人或强硬,但尊重地寻求理解真相/PO 和开发人员/技术专家,同时让自己明白了)。我提倡在计划期间首先制定 QA 任务,以鼓励测试驱动的心态——QA 可能必须真正提出自己才能得到采用。

  1. QA 被听到,而不是被降级为被问到“那么你将如何测试它?” 在开发人员说出他们的作品(瀑布心态)之后。

  2. 它允许 QA 提出测试想法,同时检查接受标准的可测试性,而真相/PO 存在(我确实说过他们必须出席计划会议,不是吗?!)填补任何理解上的空白。

  3. 它为测试驱动方法提供了基础——在测试方法被阐明并分配给开发人员之后,开发人员可以考虑他们将如何生成代码来通过这些测试。

  4. 如果步骤 1 - 3 是您在其余迭代中唯一的 TDD 活动,那么您仍然比 Steve 在第一篇文章中假设的场景好一百万倍;“开发人员为了完成他们的任务而绞尽脑汁。通常这些任务需要大部分 sprint 才能完成。QA 缠着 Dev 发布他们可以测试的东西,Dev 最终在 sprint 结束前一两天向 QA 抛出一些错误代码并花费其余时间修复 QA 发现的错误”

不用说,这对 QA 有一些警告;

  1. 他们必须准备好让他们的测试想法受到 Devs 和 Truth/PO 的挑战并达成妥协;“QA 警察”的态度不会在敏捷团队中流行。

  2. QA 任务必须达到一个艰难的平衡,既不能太详细也不能太笼统(任务可以写在卡片上,然后在“散热器板”上进行讨论,并在日常站立会议上讨论——它们需要从“进行中”转移到在迭代期间“完成”)。

  3. QA 需要为计划/评估会议做准备。不要指望能够为看不见的用户故事突然出现并产生一种测试方法!开发人员似乎确实能够做到这一点,因为他们的任务通常更加明确 - 例如“将 x 模块更改为与 z 组件的接口”或“重构 y 方法”。作为 QA,您需要在计划之前熟悉引入/更改的功能,以便了解测试的范围以及您可能应用的测试设计技术。

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

  5. 我说 4 是“几乎必不可少的”,因为有时可以通过预期行为的手动清单(我敢说脚本!)成功实现相同的目标 - 关键是提前与开发人员分享这一点;继续和他们说话!

关于上面关于任务主题的第 2 点,我尝试创建大小为 1/2 小时到 2 小时的任务,每个任务对应于可演示的工作,例如“添加检查不正确密码到自动测试 - 2小时”。虽然这有助于我组织我的工作,但其他团队成员批评它过于详细,并且在我站起来时会产生影响,要么从前一天开始完成多个任务,要么根本无法移动任何任务,因为我还没有接触到它们。人们真的希望在每日站会中看到稳步进展的感觉,因此在 1/2 天或 1 天的块内创建任务更有帮助(但您可能会保留自己的“微任务”列表以完成您在站立时用于沟通整体进展的较大任务的一部分)。

关于上述第 4 点和第 5 点;你早早准备的自动化测试或手动检查表应该只涵盖快乐的路径或关键的验收标准。一旦这些通过,您就可以为迭代结束时的最后一轮“探索性测试”计划额外的任务,以检查边缘情况。开发人员在此期间所做的事情是有问题的,因为就他们而言,除非并且直到您发现错误,否则它们是“代码完整的”。一些敏捷从业者主张首先选择边缘案例,尽管这也可能存在问题,因为如果时间用完,您可能无法保证已经交付了验收标准。这是取决于用户故事的上下文和您作为 QA 的经验的精细平衡决策之一!

As I said at the beginning I still don't have all the answers but hope the above provide some pointers born out of hard experience!

于 2014-02-18T23:38:50.480 回答
5

我们解决了这个问题如下: - 产品待办事项中的每个项目都必须有适合标准或验收标准,没有这些,我们不会开始冲刺 - 测试人员是我们团队的一部分,对于每个产品待办事项项目,他都会创建测试任务(1 个或多个,基于验收标准)以及估计和要测试的项目的链接 - 在每日 Scrum 期间,所有完成的任务都放在“待测试”列中 - 我们从不做任务耗时超过 16 小时;估计较长的任务被拆分

于 2009-12-10T23:00:16.183 回答
4

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

于 2008-09-30T22:07:17.853 回答
4

我认为这里有几个问题。首先,我认为也许开发人员的任务要么不够精细,要么估计不好,或者两者兼而有之。Scrum 中 sprint 的全部目的是能够在 sprint 结束时展示可行的代码。我提到的两个问题都可能导致代码错误。

如果开发人员在 sprint 快结束时发布错误代码,我还会查看:

  • 产品负责人是否真的让开发人员负责完成他们的任务。那是 PO 的工作,如果这没有发生,那么开发人员就会懈怠。
  • 开发人员是否使用任何类型的 TDD。如果没有,那可能会有很大帮助。让开发人员养成测试代码的习惯。我们在我工作的地方遇到了这个问题,我的团队专注于在重要领域进行 TDD,这样我们以后就不必让其他人去做
  • 任务/用户故事是否过于笼统?任务分解中的摆动空间会导致开发人员马虎。同样,这有点像 PO 问题。

我过去听说过的一个想法是使用 QA 人员作为 Scrummaster。他们将出席每日站立会议,并可以了解开发人员的情况。他们可以解决 PO 的问题(假设 PO 可以充分完成他们的工作)。

我不禁觉得你需要在 QA 和你的 Scrum 团队之间进行更多的合作。听起来测试只发生在最后,这是一个问题。让 QA 成为团队的一部分将有助于确定可以更早、更好地测试的东西。

我也觉得你对产品负责人有意见。他们必须在那里确保每个人都朝着正确的方向前进。他们应该确保良好的合作,不仅在 QA 和开发人员之间,而且在开发人员之间。

于 2008-09-30T22:15:56.117 回答
4

“当可发布的开发任务占据了 sprint 的大部分时间时,scrum 应该如何工作?”

正如你所发现的那样——它运行得不是很好:-) 你描述的过程对我来说听起来不像 Scrum——或者至少不像 Scrum 做得很好。

根据您的描述,我不确定 QA 人员是团队的一部分 - 还是单独的小组。

如果他们是一个单独的组,那么这可能是问题的很大一部分。他们不会参与团队对完成任务的承诺——以及与产品所有者相关的范围谈判。如果没有团队中的 QA 技能,我从来没有见过敏捷团队取得成功。通过让开发人员具备大量测试/QA 技能 - 或者通过在团队中拥有一个或三个嵌入式 QA 人员。

如果他们团队中,那么他们需要在最初的冲刺计划中更多地听到他们的声音。到目前为止,产品所有者和团队应该清楚你过度使用了。

如果是我,我会尝试一些事情:

  • 让团队中的 QA/测试人员加入(如果他们还没有)
  • 与产品负责人和团队就什么算是“完成”进行长时间的交谈。听起来有些开发人员仍处于“移交给 QA”的 pre-scrum 心态”== 完成。
  • 将故事分解成更小的块 - 更容易发现估计错误
  • 考虑运行较短的冲刺 - 因为很少和经常更容易跟踪和学习。

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

于 2008-10-05T15:14:03.007 回答
3

将任务拆分为更小的任务。

此外,QA 可以创建测试用例供 Dev 进行测试。

于 2008-09-30T21:53:51.677 回答
2

要考虑的一个想法是让 QA 在主要开发之后进行一次迭代。这在我们的环境中运作良好。

于 2008-09-30T22:21:37.443 回答
0

在这里我想说,一种尺寸并不适合所有人。每个团队处理 QA 的方式都不同。这在很大程度上取决于您正在从事的项目,无论是小项目还是大项目。它是否需要广泛的回归、用户接受和探索性测试,或者您需要测试的场景很少。让我重申一下,在敏捷中,通才优先于专家。那是什么?因为在项目期间有一段时间你没有任何东西要测试,所以那个时候你可能正在做其他事情。即使你是一个铁杆程序员,你也可能在做测试。

我们如何处理它?我们有常规的 2 周冲刺。一周后开始测试开发人员在一周内完成的任务。现在测试人员不断向我们的问题跟踪器添加问题,完成冲刺任务的开发人员开始挑选这些错误。在 sprint 结束时,我们主要完成了我们的 sprint 任务以及所有关键和主要错误。

那么测试人员二在 sprint 的第一周做什么呢?

好吧,总有一些事情要测试。我们在待办事项中有测试任务,其中可能包括一些探索性测试。许多人不重视探索性测试,但这对于打造优质产品极为重要。优秀的测试人员会为自己创建任务并找到出错的可能性并进行测试。

希望有帮助!

于 2013-12-13T21:55:52.120 回答