作为开发人员,我如何起草用户故事?


10

我正在编写一个系统,其中系统所有者和我本人都是开发人员,并且我们目前是系统的“请求”或需求的唯一来源,我想从与功能相关的用户故事中捕捉到它们{1}。我现在的当务之急是获取可管理的积压订单。我应该如何捕捉用户故事中我习惯使用的技术规范水平,这些故事应该不太技术性。

{1}我正在评估敏捷项目管理服务TargetProcess,并且每个用户故事都必须绑定到父功能。该系统似乎很合适,所以我宁愿使用这个小约束而不是解决它。

Answers:


14

典型的故事模板非常容易可视化:

As a [ROLE] I need to [WHAT] so that/because [WHY].

有趣的是,组件的重要性相反。

为什么什么更重要,那比角色更重要

使用此问题的示例

作为软件开发人员,我需要学习如何编写用户故事,以便可以用草稿填充待办事项列表,以开始对功能的讨论并获得分配给它们的点。

除此之外,还有使用户故事的意图和实现复杂化的所有事情。

附加工具(最佳集成)

工具可以用来捕获更多细节关于他们的讨论到指定点/估计时所拍摄的故事信息,但细节应该不会是故事本身的一部分。像Wiki一样简单,每个故事只有1页,可以放置讨论的详细信息/记录,这是一个很好的解决方案。Excel电子表格是一个糟糕的解决方案。


5

专注于什么为什么的,避免了怎么样了编写用户故事的时候。

实际上,对于所有开发人员来说,这都是一个很好的练习。能够以简单的业务术语表达需求是一项重要技能。

您应该关注一般要求,例如“需要能够从对象的下拉列表中进行单个选择,以便用户可以启用Foo操作”,而不是使用组合框或列表框或触发特定例程的任何东西来指定。

解决此问题的另一种方法是假装,就像基础代码库/框架几乎是完整的黑匣子一样。每当您发现自己说“使用对象XYZ”时,都可以通过询问是否知道黑匣子系统中的内容来进行自我检查。

更新:
IMO,可以将详细信息放入用例中,以指示信息所需的详细程度。例如,对于一个注册系统,要指定
-姓氏;必填字段
-名;必填字段
-帐户ID;系统无需产生任何输入
-星座。可选字段-(建议)从输入生日开始提供查找?
-等等...

关键是您没有指定该信息的技术方法。如果您发现自己的姓氏说“使用String类/字符数组/或varchar字段”,那么您就知道您的说明过多了。

如果您使用多种语言,请使用两种不同的语言作为石蕊测试。例如,C语言中的字符串通常是char(acter)数组,而C ++,Java和C#(好了,几乎其他所有人...)都有一个类似于String的实际对象。如果您发现使用这些语言之一使规范无效,那么您就会知道自己已经过度指定了。

值得注意的是,尽管我最终使用的变体是两者的混合体,但我使用的是用例而非用户故事。我用例的目的是概述正在发生的事情(最严格的意义是一个用户故事),然后通过所需的参与者,系统和常规功能进行工作。我的方法更接近Fowler在该维基百科文章中的建议,而不是Cockburn的方法。

因此,我将为注册方案或工作项提供一个(或多个)用例。如果真的很复杂,我会将其分解为多个,但这没什么大不了的。然后可以根据需要将用例分解为单独的任务。投入到特定Scrum中的内容取决于很多变量,但是这种方法没有什么可以阻止您在Scrum的末尾拥有可证明的组件。


3
甚至说“下拉列表”也可能过于具体。
Donal Fellows

@DonalFellows-很好,我仔细考虑了一下。之所以选择它,是因为下拉列表是一个非常标准的通用UI元素,您将在线框中看到它。列表框和组合框是下拉列表的特定语言构造。+1评论。

@ GlenH7我理解这一点,但是我的问题是我不知道在哪里捕获技术资料。如果例如新员工需要某些字段,我不想为每个字段使用一个故事,而是“作为用户,我需要捕获字段x和y”,而“可以选择捕获字段q和z打字的东西。如果我的简单示例是正确的方向,我将尝试通过这种方式进行更多的练习。
ProfK 2012年

@ProfK 作为HR管理员,我需要输入有关新员工的信息,以便我可以将他们注册到工资单,401K和保险福利系统中。这应该是一个好故事,关于其他所有内容的详细信息仅应记录在Wiki页面或其他文档中。如果需要在此故事中添加其他新功能的情况,则那些缺少特定需求的新故事将成为系统中的新故事。当可以由ROLE完成此活动并征得客户批准时,将完成故事。

2
@ProfK-更新了我的回答以回答您的问题。海事组织,我认为你的方向正确。我已经使用了许多不同的方法,需要记住的关键方面是使其适合您的情况。听起来您需要的不仅仅是正式的用户故事所提供的内容。因此,请调整您生成用户故事的方式并继续前进。有些人可能会激怒我的评论,但老实说,重点在于编写代码并保持项目的发展。
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.