您如何在Scrum中处理设计?


26

您如何在Scrum中处理设计?对于每次Scrum迭代,您是否还有写得很好的设计文档?您是否只是以UML图为特色进行设计说明?或者,您是否拥有注释良好的代码?

每次迭代都可能涉及更改设计,所以我只想知道人们是如何捕捉到这一点的,因此新开发人员可以轻松地了解领域并尽快入职。


无论是在冲刺之前还是在冲刺期间,团队都应逐步处理设计。大多数团队将积压工作细化为一项持续活动,以审查即将到来的积压项目。这是团队构建和设计足够的解决方案以估算工作量的最佳时机。创建的任何文物都应附加到故事中。在冲刺期间,应进行更细粒度的体系结构和设计活动。还要附加这些工件。故事完成后,应该提供有关所提供解决方案的大量信息。
treefiddy

Answers:


11

仅仅因为它是Scrum,并不意味着每个Sprint都会改变!

Scrum是关于做必要的事情(但仅此而已)。您仍然需要进行设计,并且仍然需要记录文档。它只是数量不固定,也不是固定的。

每个冲刺计划的一部分是决定需要做什么。如果由于积压中的某些事情会影响其他事情而需要进行设计,那么您需要为设计流程添加一个特定的任务,并在实现任务之前执行。


9

关于这个话题,我有很多话要说。我已经看到许多案例,其中公司/团队/人员说他们正在使用敏捷方法进行软件开发,但实际上,他们希望在不遵守原则的情况下获得敏捷方法所带来的回报。

为了使快速迭代生效,您应该进行测试驱动的开发(我不得不说您必须勉强地执行TDD)。在TDD中,您的测试表达了代码的设计和意图(当他们说“代码就是文档”时,他们应该说的是“测试就是文档”)。通过编写表示您对现有功能的理解的单元测试,您可以明确说明您认为代码需要做什么。然后,编写执行此操作的代码。然后,您重构该代码,以便遵循良好的架构原则“ Red-Green-Refactor”。

在每次签入(甚至在每次签入之前)运行单元测试,都可以验证您编写的新代码不会破坏应用程序其他部分的预期功能。这提供了一个安全网,使您可以毫不留情地更改代码。随着对现有需求的了解的增加,您可以修改测试以反映该新知识。真正的设计在于单元测试。其他所有内容(包括未涵盖的代码)都是谎言。

这是一些推荐的阅读

这些是开始学习如何真正实现敏捷开发的好地方。


4
@Murph:想法是该体系结构是新兴的,您应该通过测试找到它,而不是预先定义它。
Martin Wickman

5
@马丁我有点看-但是那里仍然存在可怕的规模问题。我对达到一定的水平感到满意,但除此之外……我想您应该在达到发展的Scrum级别之前就应该这样做(或者至少要有一个初始结构)(其中可能期望团队来改进和发展高层架构以及底层架构。
Murph

2
@Murph:是的,引导程序是一个问题。您至少需要选择编程语言。非功能性需求(如可伸缩性和性能)对体系结构有很大影响,因此必须尽快考虑。但是除此之外,我还希望尽可能简单地开始,然后逐个增量地迭代地添加工作特征(yagni)。专注于重构以保持代码库干净并提取内容,直到出现设计为止。
Martin Wickman

1
Scrum迭代的原因是软件的本质意味着我们永远不会一开始就正确。在很多情况下,利益相关者直到他们面前有东西时才知道他们真正想要的是什么。更好的方法是:花数小时为某个功能创建一个设计(需要完善或最有可能在橡胶碰到人行道时将其丢弃),并将该设计传达给实施者;或花费大量时间实施该功能的第一遍,并通过测试和重构对其进行完善。
迈克尔·布朗

3
顺便说一句,您将无法实现TDD的真正价值,除非您将测试意外地变成红色。那是我与TDD在一起的重要时刻。看着刚刚变成红色的测试,我意识到如果没有测试,在将代码交到测试人员手中之后,很难找到该错误。如果需要查看高级的自顶向下体系结构,可以使用许多工具从代码中生成序列图和类图。使用它们来获取快照报告并进行处理,因为这不是法律。
迈克尔·布朗

2

Scrum是一种项目管理方法,而不是软件开发方法。Scrum通常与敏捷方法结合使用。您的答案就在其中。


4
Scrum是一种敏捷的方法,它专注于开发团队和利益相关者以及迭代地交付工作代码。自上而下的项目管理和Scrum就像石油和水一样。
迈克尔·布朗

1
@Mike同意了,但是我一直觉得Scrum是项目经理的敏捷方法论,而Extreme Programming是开发人员的敏捷方法论。就是说,我已经看到Scrum应用于软件以外的许多项目。有趣的是,Wikipedia提供了Scrum的定义:Scrum是一种在项目管理软件中经常看到的迭代式增量方法,该软件是一种软件工程:en.wikipedia.org/wiki/Scrum_( development
ahsteele 2011年

2
只是意识到我不小心拒绝了你的评论……不是故意的。除非您进行较小的修改,否则他们不会让我取消该投票。我以前从未见过Scrum被描述为项目管理方法。有趣。话虽这么说,我认为期望Scrum在不应用TDD的情况下就可以为软件工作是为什么许多“敏捷”尝试失败的原因。
迈克尔·布朗

1

由于需求经常变化,前期设计不多。因此,进行低级设计通常是浪费时间。但是,值得勾勒出更高层次的体系结构决策。

进行重型设计文档的问题在于,它们几乎在创建后就已过时。因此,最有效的通常是高级文档,这些文档不太可能在短时间内完全更改。


1
我不会说需求在不断变化。实际上,在冲刺期间,需求是静态的,并且没有变化。在每次冲刺之后,可以重新评估需求的优先级。购买您的总体目标不会改变。
马丁·约克

@马丁好点。我想我应该重新表述它们正在从一个scrum变成另一个scrum。
Vadim

1

Scrum是基于敏捷值的迭代和增量模型。这意味着您没有单独的设计阶段。这个想法是,您应该一直在处理设计,就像在整个项目中一直在处理分析,实现,测试和集成一样。

您需要为此做一些计划。进入sprint计划会议,团队将在此评估未来sprint的任务。大多数人没有意识到这不仅是一次估算会议,还是一项设计工作。例如,一个任务可能是“为新汽车模型添加代码”。您尚无法估计,您需要了解更多。因此,团队讨论了设计并提出了一个广泛的解决方案(“子类Car?”),并将其作为对任务的提醒。您很少需要比这更多的手续。您现在有了解决该问题的想法。您尚不具备所有详细信息,这很好,您对设计足够了解可以做出合理的估算。无需创建任何图(此时)。

对于实际的物理文档,我建议在墙上创建系统概览图,以供所有人查看。概述只需要包含最重要的类和模块,并且几乎不需要更新。同样,为系统中最重要的类创建一些状态图也非常有帮助。散布一些典型用例的选择序列图,使人们可以轻松快速地了解事物之间的联系。我假设您可以从代码中生成类层次结构图,因此可以轻松解决该问题。

请注意,所有图都是在实际实现之后创建的。这与“通过综合文档工作的软件”和及时设计保持一致。

是的,可读代码绝对是文档。


1

当项目所有者创建故事时,项目的总体架构和高级设计将在Scrum团队之外完成。

需要以任何形式写下足够的总体设计,以帮助了解故事和客户期望之间的关系。

每个故事所需的一些设计将在计划中进行,并在计划过程中与产品所有者协商。

故事的大部分设计工作将在sprint中完成。

如果故事的定义不足以进行估计,则可以在当前sprint中留出一个时间框来进行足够的设计工作,从而可以为以后的sprint创建合适的故事。


0

我的理解是,您将在项目开始时收集的前期要求进行更高级别的设计。您可以很好地记录此设计。

然后,当您实际实现需求时,可以根据需要更改较低级别的设计,但是避免更改较高级别的设计。

嗯,这就是五分钟前向我解释的方式...


0

如今,在Eclipse社区内部,专注于MDD的传统UML工具(其中模型驱动代码/开发)与Omondo之间存在分歧,Omondo认为迭代应该驱动开发过程,当然不仅限于模型。

我同意他们的观点,因为MDD很烂,而UML实际上是一种极好的方法,因为它可以标准化以便与其他团队成员进行交流。 替代文字

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.