设计文档作为敏捷的一部分


25

在我的工作场所,我们面临的挑战是“敏捷”常常意味着“含糊的要求,不良的接受标准,好运!” 我们正在努力解决这一问题,作为一项总体改进工作。

因此,作为其中的一部分,我建议我们生成设计文档,这些文档要超出用户故事级别,并且能准确反映对系统中给定功能的效果进行初步调查的结果,并包括对我们所遇到问题的解答问生意。

有没有有效的标准呢?

我们目前面临的情况是,一项新功能可能会影响我们的“大泥巴”系统中的多个区域,并且由于这种技术债务,估计开始上升。希望更多周到的设计过程可以提供帮助。


4
敏捷的解决方案是沟通。开发人员应始终与负责了解WHAT的人员进行磋商。另外,您应该进行单元测试并经常进行重构,以检查“大泥巴”。
欣快的2012年

3
我知道我们应该拥有那些东西。我们没有。我试图帮助我们到达那里,并且试图建立一个可靠的,可重复的通信框架(毕竟,文档就是通信)。问题是,现在我们陷入沉重的“立即完成!” 循环,并且我们依赖于临时交流,这会导致人们陷入知识孤岛,因为没有关于用户故事后出现的功能的真实信息的参考。
asthasr

4
敏捷不是针对文档,而是针对无用的文档。根据需要编写尽可能多的文档,仅此而已。具体来说,请记住,文档只是对您(团队)头脑中的心理模型的参考。后者是真正重要的东西-但是,您永远无法完整记录它。取而代之的是,通过大量的通信使其保持同步,并仅写下对其的足够引用以确保模型长期保持一致。
彼得Török

我认为您应该问的问题与此不同。对于此类问题,您将获得通用的“ ..时文档确定”,这对您没有太大帮助。您应该询问您的问题解决方案是否正确,并询问其他可能的解决方案。
欣快的2012年

4
“敏捷不是针对文档,而是针对无用的文档。”:每个开发过程都针对无用的文档(根据它们对有用和无用的定义)。
乔治

Answers:


18

“含糊的要求,不良的接受标准,祝您好运!”

是的,即使您也尝试将其确定下来,这也是您获得的相同要求!(例如,花费10,000美元的需求文档花费了政府客户4年的创建时间,仍然充满了不一致,含糊甚至内部矛盾的陈述。如果4年的需求文档不能使您获得像样,准确的需求,您是否曾经想过可以得到任何含糊的内容?)

因此...发明了一种敏捷方法来了解这种情况的发生并与其一起工作,而不是试图与之对抗。

您首先询问“您想要什么”,然后客户回答“有点类似”。您做了一些工作,然后回到客户那里说“这就像您想要的吗?”,而客户通常说“是,但是...”,然后您问“您想要什么”。

最终,即使他们不知道那是什么,您也能确切地获得客户想要的东西!(地狱,他们从不知道自己想要什么,不完全是)。


该政府设计文件轶事很有趣,有资料吗?或者只是您亲身经历过的事情?
user145400

@ user145400我经历过的事情:-(
gbjbaanb

13

在我们的团队中,自敏捷以来,我们还一直在尝试缩小范围并了解实际需要多少文档。我可以与您分享我们到目前为止所学到的知识。

在进行其他任何操作之前,请务必先阅读敏捷/精益文档上的这篇文章。很好读。

其次,我强烈建议您在故事的初步工作之后重新考虑制作设计文档。我们之前曾尝试过,事实证明这是浪费。在上一发行版的中间,我们决定仅在提供故事代码后才更新设计文档。现在我在想,这还为时过早。

您需要问自己为什么要在编码之前做设计文档。对我们来说,这些是原因:

  1. 我们作为一个团队需要了解故事将如何影响设计。
  2. 当新的(或临时的)成员加入团队或返回到一年多没有工作过的代码时,拥有设计文件被证明是有用的。因此,它们对于组织存储很有用,有助于理解代码的工作方式。
  3. 设计文档对维护工程师很有用,他们可能需要在发布后对代码进行故障排除。

满足(1),您无需产生实际的设计文件。您的团队在编码之前仍然应该有一个设计阶段,但是该阶段可以像在白板或餐巾纸上进行15分钟的会议一样简单。您无需编写实际的文档就可以讨论设计更改,而实际的文档将花费数小时(如果不是几天的话)。

在当前故事的开发过程中不需要(2)或(3),很有可能在随后的多个迭代中也不需要它们。

还请记住,每当团队成员编写/更新设计文档时,即是不编写代码的时候。当您在实际代码之前编写文档时,几乎有100%的机会需要更新文档,因为一旦开始编码,设计总是最终被更改。而且,即使您在代码后编写设计文档,正如我们的团队所了解的那样,从后续故事中进行重构仍然会改变设计。

所以我建议:

  1. 最初产生足够的临时设计/模型,以便您的团队可以在编码之前进行明智的对话。不要指望保留这些内容,也不要浪费时间将它们正式化。
  2. 仅在有人需要时才提供官方设计文档(即,您的团队确实需要组织记忆)
  3. 仅针对已稳定的代码生成设计文档。试图记录每次迭代中不断变化的模块是没有意义的。
  4. 制作完整描述模块(或产品的一部分)的设计文件。过去,我们曾经编写过设计文档,其中记录了必须进行的更改。发布完成后,这些文档完全一文不值。
  5. 保持文档非常高级。如果您撰写20页的内容涵盖体系结构和非常高级的设计,则该文档将a)实际上被其他人阅读,并且b)将帮助人们熟悉您的代码的一般布局。有关详细信息,人们可以直接进入代码。如果您编写700页的详细规格说明,它们几乎总是与现实不符,那么任何人都将无法阅读,并且最终您将不得不维护和更新700页而不是每当将来进行更改时要更新20页。

您的意思似乎与我要达到的目的相似;我们有一个复杂的泥潭,我想要简单的文档,以:a)传达特定功能的业务意图(即精心设计的用户故事,并回答问题);b)指出代码和现有API的哪些部分将受到影响;和c)被视为一次性工件,而不是必须永久使用每个新功能进行更新的工件。说20页是“高级”,这对我很有趣-我们什至没有。:)
asthasr 2012年

@syrion:根据您刚才所说的,听起来您想详细记录每个故事并产生一个“设计差距”文档(即,定义当今代码和一旦代码中代码之间的区别)。故事完成了)。您有这类文件的听众吗?根据我的经验,我预计没有人会真正阅读它们。今天从事这个故事的开发人员已经知道需要更改什么(他们要么编写文档,要么参与初步讨论)。而且,如果您尝试捕获将要为一个故事做的所有更改的详细信息,...
DXM

...与实际编码相比,您将花费更多的时间来编写文档。故事完成后,就像您说的那样,这些都是一次性制品。那么,为什么首先需要生产它们?
DXM

因为目前我们的环境充满了知识孤岛。我们知道子系统A的人是因为他们编写了该子系统,而知道子系统B的人是因为他们在上次爆炸时提供了支持,但是从此以后再也没有碰过C,并且D自此以后就被重写过。对于新手和异地承包商而​​言,很难进入或陷入困境。
asthasr

@syrion:听起来确实像您有我们一样的需求。但是,当您说您想要简单的文档……被视为一次性工件时,我感到困惑。因此,假设您有一个与数据库对话的层和6个需要对该层进行更改的故事。您是否打算与每个故事一起制作6个不同的文档?还是要为DB层制定一个单一的设计规范?但是,单一规范是必须与涉及DB层的每个功能进行更新的。
DXM

3

敏捷的“口头禅”并非完全没有文档。

敏捷的口头禅是“ 工作软件胜于全面的文档 ”。但请注意宣言底部的内容。

也就是说,尽管右边的项目有价值,但我们更重视左边的项目。”

鲍勃叔叔有一个很好的文件记录政策

除非需要立即且重要,否则不产生任何文档。

没错,有些人以敏捷为借口而不制作文档,但这是不好的敏捷。它忽略了我在上面引号中突出显示的位。

综上所述,当您说“我们当前面临的情况是,一项新功能可能会影响我们的“大泥巴”系统中的多个区域”时,如果您要变得敏捷,则需要对此做些事情。

当您拥有文档时,可使用它来模块化您的代码。这样,您就可以通过消除对文档的长期需求来消除维护文档的长期需求(不会发生)。

即。使需求变得迫在眉睫。


这个答案是“正确的”,但实际上并没有想到。例如,架构设计呢?开发商/企业营业额如何?许多质量单元测试如何处理?
保罗

@Paul:为新手准备非常高级的架构图以及非常轻巧的编码标准是一个好主意。我发现,使这些文档保持最新的一种好方法是将它们保存在Wiki中,并让每个新来者更新他们发现日期的位置。但是这个问题是专门针对前期设计文档的。
pdr 2012年

我仍然坚持我所说的话。将体系结构更改为业务所需的名称,并将单元测试更改为回归测试(自动化?),然后将其应用。
保罗

@Paul:对不起,我没有关注。您认为我建议的哪些有价值的文件不好?
pdr 2012年

0

关于敏捷的问题是,文档工作确实必须由Scrum团队来推动。如果开发人员认为外部文档不足以满足他们的需求,那么用户故事将被阻止,直到他们这样做为止。如果企业认为开发人员没有提供足够的文档,则产品所有者坚持将其纳入验收标准。因此,自转向Scrum以来,我实际上发现我们的文档更加集中和有效。

我们使用VersionOne跟踪我们的用户故事,但是我确定我们的方法适用于其他系统。它使您可以将文件附加到用户故事。我们发现这是放置设计文档的非常有用的地方。

举一个对我们来说非常有效的例子,我们需要在原型制作后尽快测试一种新的电路板设计。我们为需要测试的所有内容制作了两个用户案例:一个用于设计测试,另一个用于执行测试。设计故事的一项接受标准是测试过程已在执行故事中完整记录。

当我们进入测试部分时,它比我所见过的更加顺利。我们只是打开了用户故事,并按照逐步的步骤进行操作。文档正是我们完成故事所需要的,没有更多也没有更少。

我们的积压订单中还有一个故事,就是要改进我们使用的芯片的文档,以使其他团队更轻松地为自己的产品取货。

总而言之,如果您觉得自己的文档很痛苦,那么解决方案就像为它创建单独的用户故事和/或使其成为接受标准的一部分一样容易。


0

当您谈到较差的要求时,对我而言,第一件事就是确保您具有测试标准。如果可能,请为系统的现有部分创建一些可重用的自动化测试用例。一旦每个人都适应了,那么就可以在编写代码之前着手编写测试用例。好的测试用例可以很好地记录系统的行为。

至于使用哪些特定的设计文件,正如其他人已经说过的那样,它很大程度上取决于团队的需求以及他们将要承担的下一个任务。在可能的情况下,尝试使用可以从您的文档中生成代码的工具,或从文档中生成代码的工具。文档维护可能变得非常昂贵,因此在保留设计文档时应明智地选择。

就个人而言,我从代码和fitnesse测试用例生成的类图上都取得了成功。团队打印出几个类图,与产品负责人进行标记会议,然后从那里制定一个估算。就fitnesse而言,我很幸运地与几个产品所有者合作,他们非常擅长在电子表格中表达他们想要的东西,然后将其转换为适合fitnesse的表。

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.