我正在编写一个系统,其中系统所有者和我本人都是开发人员,并且我们目前是系统的“请求”或需求的唯一来源,我想从与功能相关的用户故事中捕捉到它们{1}。我现在的当务之急是获取可管理的积压订单。我应该如何捕捉用户故事中我习惯使用的技术规范水平,这些故事应该不太技术性。
{1}我正在评估敏捷项目管理服务TargetProcess,并且每个用户故事都必须绑定到父功能。该系统似乎很合适,所以我宁愿使用这个小约束而不是解决它。
我正在编写一个系统,其中系统所有者和我本人都是开发人员,并且我们目前是系统的“请求”或需求的唯一来源,我想从与功能相关的用户故事中捕捉到它们{1}。我现在的当务之急是获取可管理的积压订单。我应该如何捕捉用户故事中我习惯使用的技术规范水平,这些故事应该不太技术性。
{1}我正在评估敏捷项目管理服务TargetProcess,并且每个用户故事都必须绑定到父功能。该系统似乎很合适,所以我宁愿使用这个小约束而不是解决它。
Answers:
As a [ROLE] I need to [WHAT] so that/because [WHY].
有趣的是,组件的重要性相反。
为什么比什么更重要,那比角色更重要
作为软件开发人员,我需要学习如何编写用户故事,以便可以用草稿填充待办事项列表,以开始对功能的讨论并获得分配给它们的点。
除此之外,还有使用户故事的意图和实现复杂化的所有事情。
工具可以用来捕获更多细节关于他们的讨论到指定点/估计时所拍摄的故事信息,但细节应该不会是故事本身的一部分。像Wiki一样简单,每个故事只有1页,可以放置讨论的详细信息/记录,这是一个很好的解决方案。Excel电子表格是一个糟糕的解决方案。
专注于什么和为什么的,避免了怎么样了编写用户故事的时候。
实际上,对于所有开发人员来说,这都是一个很好的练习。能够以简单的业务术语表达需求是一项重要技能。
您应该关注一般要求,例如“需要能够从对象的下拉列表中进行单个选择,以便用户可以启用Foo操作”,而不是使用组合框或列表框或触发特定例程的任何东西来指定。
解决此问题的另一种方法是假装,就像基础代码库/框架几乎是完整的黑匣子一样。每当您发现自己说“使用对象XYZ”时,都可以通过询问是否知道黑匣子系统中的内容来进行自我检查。
更新:
IMO,可以将详细信息放入用例中,以指示信息所需的详细程度。例如,对于一个注册系统,要指定
-姓氏;必填字段
-名;必填字段
-帐户ID;系统无需产生任何输入
-星座。可选字段-(建议)从输入生日开始提供查找?
-等等...
关键是您没有指定该信息的技术方法。如果您发现自己的姓氏说“使用String类/字符数组/或varchar字段”,那么您就知道您的说明过多了。
如果您使用多种语言,请使用两种不同的语言作为石蕊测试。例如,C语言中的字符串通常是char(acter)数组,而C ++,Java和C#(好了,几乎其他所有人...)都有一个类似于String的实际对象。如果您发现使用这些语言之一使规范无效,那么您就会知道自己已经过度指定了。
值得注意的是,尽管我最终使用的变体是两者的混合体,但我使用的是用例而非用户故事。我用例的目的是概述正在发生的事情(最严格的意义是一个用户故事),然后通过所需的参与者,系统和常规功能进行工作。我的方法更接近Fowler在该维基百科文章中的建议,而不是Cockburn的方法。
因此,我将为注册方案或工作项提供一个(或多个)用例。如果真的很复杂,我会将其分解为多个,但这没什么大不了的。然后可以根据需要将用例分解为单独的任务。投入到特定Scrum中的内容取决于很多变量,但是这种方法没有什么可以阻止您在Scrum的末尾拥有可证明的组件。