How do you go about organizing user stories?
你如何组织用户故事?
What I did was this for a web application:
我为Web应用程序做了这个:
Made a title for a web page like 'index', then listed all the stores the user can do on this page.
为“index”这样的网页制作了标题,然后列出了用户可以在此页面上执行的所有商店。
I continued on for all the pages.
我继续阅读所有页面。
Is this the most effective way?
这是最有效的方法吗?
5 个解决方案
#1
I personally like the BDD style user stories and tasks. Generally, under BDD/Agile you will create user stories in a planning meeting along the following lines:
我个人喜欢BDD风格的用户故事和任务。通常,在BDD / Agile下,您将在计划会议中按以下行创建用户故事:
As a [role] I need [capability] so that [desired outcome].
A user story really shouldn't be more complex than that, as they are really just placeholders for future conversations (a key aspect of Agile that most companies misunderstand.) Once you get to the point in an iteration where you are ready to implement a user story, you'll generate one or more tasks for that story usually in the form of Concern/Context/Observations:
用户故事确实不应该比这更复杂,因为它们实际上只是未来对话的占位符(大多数公司误解的敏捷的一个关键方面。)一旦你在迭代中达到了准备实现的目的。用户故事,您将通常以关注/上下文/观察的形式为该故事生成一个或多个任务:
Concern: Some Activity
Context: When doing such and such
Observation: This thing should be added to the database
Observation: The thing should get a new unique ID
Observation: The thing should be related to that thing
关注:一些活动背景:当做这样的观察时:这个东西应该加到数据库中观察:这个东西应该得到一个新的唯一ID观察:这个东西应该与那个东西有关
Each task is now written in such a way that it can be directly translated into a BDD-style "specification" test that sets up the context, performs the action of concern, and verifies the observations. (For a great example of how this works with xUnit.NET, see this site.)
现在,每个任务的编写方式都可以直接转换为BDD风格的“规范”测试,该测试可以设置上下文,执行相关操作并验证观察结果。 (有关如何使用xUnit.NET的一个很好的示例,请参阅此站点。)
It is important when creating user stories not to think too technically. You don't really want to break down your stories to highly technical and low level things like "Create a web page with title 'xyz'. Show stores a, b, and c on this page." Thats super technical and doesn't actually portray any useful business requirements. A story should be more fluid and dynamic and represent the real business requirement: "As a customer I need to see all of the stores that contain the products I am looking for so that I may purchase what I need at a great price." From that user story, you would then end up with tasks that define the more technical aspects of creating this page (I am extrapolating a lot from what I read in your question...forgive me for any artistic license I take in expanding the concept):
在创建用户故事时,重要的是不要过于技术性地思考。你真的不想把你的故事分解成高技术和低级别的东西,比如“创建一个标题为'xyz'的网页。在这个页面上显示商店a,b和c。”这是超级技术,并没有实际描绘任何有用的业务要求。一个故事应该更加流畅和动态,并代表真正的业务需求:“作为一个客户,我需要看到包含我正在寻找的产品的所有商店,以便我可以以优惠的价格购买我需要的东西。”从那个用户故事中,你最终会得到定义创建这个页面的更多技术方面的任务(我从你在你的问题中读到的内容中进行了很多推断...请原谅我在扩展概念时所采用的任何艺术许可):
Concern: Finding Stores
Context: When looking for a product with the best price
Observation: The web page should display a grid of store thumbnails that contain the users search product
Observation: The stores should be sorted such that those with the lowest price appear near the top of the page
Observation: Clicking on a store's thumbnail should take me to a page on that stores web site that contains the product the user searched for
关注:寻找商店背景:寻找具有最佳价格的产品观察:网页应显示包含用户搜索产品的商店缩略图网格观察:商店应进行分类,使得价格最低的商店出现在页面顶部观察:点击商店的缩略图应该带我到该商店网站上的一个页面,其中包含用户搜索的产品
The above story is pretty high level, and covers the expected behavior of the whole page. The above specification can be used to verify proper behavior of the resulting page, used as baseline for creating automated UI tests, etc. However, there will also be code that drives this page, and additional tasks should be created for those lower level things as well.
上面的故事非常高级,涵盖了整个页面的预期行为。上述规范可用于验证结果页面的正确行为,用作创建自动UI测试的基线等。但是,也会有驱动此页面的代码,并且应为这些较低级别的事物创建其他任务。好。
Concern: Retrieving Stores
Context: When searching for Store entities containing a specific Product
Observation: A collection of StoreResultDetail should be returned
Observation: The collection of stores may be empty
Observation: Each StoreResultDetail should contain the store name
Observation: Each StoreResultDetail should contain the price of the Product
Observation: Each StoreResultDetail should contain the URL of the store's web site
Observation: Each StoreResultDetail may contain the URL of the Product on that store's web site
关注:检索商店上下文:搜索包含特定产品观察的商店实体时:应返回StoreResultDetail的集合观察:商店集合可能为空观察:每个StoreResultDetail应包含商店名称Observation:每个StoreResultDetail应包含价格产品观察:每个StoreResultDetail应包含商店网站的URL观察:每个StoreResultDetail可能包含该商店网站上的产品的URL
The above task could be implemented by a service method on some service, along with any other behaviors required to implement the specification for the whole page.
上述任务可以通过某些服务上的服务方法以及实现整个页面规范所需的任何其他行为来实现。
Once you have your tasks, you can create visual designs to match, implement code and unit tests (or BDD specifications), and QA test your application with proper, clear, and concise documentation to verify your tests against.
完成任务后,您可以创建可视化设计以匹配,实现代码和单元测试(或BDD规范),并使用适当,清晰和简洁的文档对您的应用程序进行QA测试,以验证您的测试。
#2
Segregating user stories by "web page" seems suboptimal to me -- you should be choosing the set of your pages based on user stories, not vice versa. I would classify by "role" of the user -- in fact, in user centered design, by the "persona" in play.
通过“网页”隔离用户故事对我来说似乎不是最理想的 - 您应该根据用户故事选择页面集,而不是相反。我会根据用户的“角色”进行分类 - 事实上,在用户中心设计中,由游戏中的“角色”进行分类。
#3
In our shop, we write up Use Cases. Examples of Use Cases:
在我们的商店,我们写了用例。用例示例:
Create New Customer Account
Assign User Rights
Receive Order
Accept Payment
We have a form with two columns. The first column is the user, and the second column is the computer system. In the two columns we begin listing actions. The user does this, the system responds like this, etc. We leave gaps between the entries so that the steps flow naturally from left to right, and back again. There's a place on the form that states which roles the use case is applicable to (e.g. Project Manager, Administrator).
我们有一个有两列的表格。第一列是用户,第二列是计算机系统。在这两列中,我们开始列出操作。用户执行此操作,系统会像这样响应,等等。我们在条目之间留下间隙,以便步骤从左到右自然流动,然后再返回。表单上有一个位置,说明用例适用的角色(例如项目经理,管理员)。
From the use cases, we then begin to sketch up web pages.
从用例中,我们开始草拟网页。
You can also make Use Case diagrams:
您还可以制作用例图:
#4
I start with identifying what scenario's the users are going to perform with the application. Normally, these are quite predicatable. A user logs in to a website with a certain task in his/her head and wants to fulfill that task.
我首先确定用户将使用该应用程序执行的场景。通常,这些都是可以预测的。用户在他/她的头脑中登录具有特定任务的网站并且想要完成该任务。
I'd limit myself to a scenario as one list of sequential steps. For example, user logs in, user select product, user chooses quantity, user checks out, end.
我将自己局限于一个连续步骤列表的场景。例如,用户登录,用户选择产品,用户选择数量,用户签出,结束。
Having the scenario's written down can also help you to determine what parts of the application are more important that others, and which scenario's can be easily be implemented "in-between". And finally, which scenario's could be a show stopper for the launch of the application.
记下场景也可以帮助您确定应用程序的哪些部分对其他部分更重要,哪些场景可以轻松地“中间”实现。最后,哪个场景可能是应用程序启动的显示阻止。
#5
We group them by feature - or better - Minimum Marketable Feature (MMF) so that there add value to the product. Indeed, for instance, there is no way to show something that cannot be created, or to create something that cannot be seen yet. So we group the creation/display so that there are delivered together. Updates and deletions can come later, YMMV.
我们按功能 - 或更好 - 最小市场特征(MMF)对它们进行分组,以便为产品增加价值。事实上,例如,没有办法展示无法创造的东西,或创造一些目前尚无法看到的东西。因此,我们将创建/显示分组,以便一起交付。 YMMV可以在以后更新和删除。
#1
I personally like the BDD style user stories and tasks. Generally, under BDD/Agile you will create user stories in a planning meeting along the following lines:
我个人喜欢BDD风格的用户故事和任务。通常,在BDD / Agile下,您将在计划会议中按以下行创建用户故事:
As a [role] I need [capability] so that [desired outcome].
A user story really shouldn't be more complex than that, as they are really just placeholders for future conversations (a key aspect of Agile that most companies misunderstand.) Once you get to the point in an iteration where you are ready to implement a user story, you'll generate one or more tasks for that story usually in the form of Concern/Context/Observations:
用户故事确实不应该比这更复杂,因为它们实际上只是未来对话的占位符(大多数公司误解的敏捷的一个关键方面。)一旦你在迭代中达到了准备实现的目的。用户故事,您将通常以关注/上下文/观察的形式为该故事生成一个或多个任务:
Concern: Some Activity
Context: When doing such and such
Observation: This thing should be added to the database
Observation: The thing should get a new unique ID
Observation: The thing should be related to that thing
关注:一些活动背景:当做这样的观察时:这个东西应该加到数据库中观察:这个东西应该得到一个新的唯一ID观察:这个东西应该与那个东西有关
Each task is now written in such a way that it can be directly translated into a BDD-style "specification" test that sets up the context, performs the action of concern, and verifies the observations. (For a great example of how this works with xUnit.NET, see this site.)
现在,每个任务的编写方式都可以直接转换为BDD风格的“规范”测试,该测试可以设置上下文,执行相关操作并验证观察结果。 (有关如何使用xUnit.NET的一个很好的示例,请参阅此站点。)
It is important when creating user stories not to think too technically. You don't really want to break down your stories to highly technical and low level things like "Create a web page with title 'xyz'. Show stores a, b, and c on this page." Thats super technical and doesn't actually portray any useful business requirements. A story should be more fluid and dynamic and represent the real business requirement: "As a customer I need to see all of the stores that contain the products I am looking for so that I may purchase what I need at a great price." From that user story, you would then end up with tasks that define the more technical aspects of creating this page (I am extrapolating a lot from what I read in your question...forgive me for any artistic license I take in expanding the concept):
在创建用户故事时,重要的是不要过于技术性地思考。你真的不想把你的故事分解成高技术和低级别的东西,比如“创建一个标题为'xyz'的网页。在这个页面上显示商店a,b和c。”这是超级技术,并没有实际描绘任何有用的业务要求。一个故事应该更加流畅和动态,并代表真正的业务需求:“作为一个客户,我需要看到包含我正在寻找的产品的所有商店,以便我可以以优惠的价格购买我需要的东西。”从那个用户故事中,你最终会得到定义创建这个页面的更多技术方面的任务(我从你在你的问题中读到的内容中进行了很多推断...请原谅我在扩展概念时所采用的任何艺术许可):
Concern: Finding Stores
Context: When looking for a product with the best price
Observation: The web page should display a grid of store thumbnails that contain the users search product
Observation: The stores should be sorted such that those with the lowest price appear near the top of the page
Observation: Clicking on a store's thumbnail should take me to a page on that stores web site that contains the product the user searched for
关注:寻找商店背景:寻找具有最佳价格的产品观察:网页应显示包含用户搜索产品的商店缩略图网格观察:商店应进行分类,使得价格最低的商店出现在页面顶部观察:点击商店的缩略图应该带我到该商店网站上的一个页面,其中包含用户搜索的产品
The above story is pretty high level, and covers the expected behavior of the whole page. The above specification can be used to verify proper behavior of the resulting page, used as baseline for creating automated UI tests, etc. However, there will also be code that drives this page, and additional tasks should be created for those lower level things as well.
上面的故事非常高级,涵盖了整个页面的预期行为。上述规范可用于验证结果页面的正确行为,用作创建自动UI测试的基线等。但是,也会有驱动此页面的代码,并且应为这些较低级别的事物创建其他任务。好。
Concern: Retrieving Stores
Context: When searching for Store entities containing a specific Product
Observation: A collection of StoreResultDetail should be returned
Observation: The collection of stores may be empty
Observation: Each StoreResultDetail should contain the store name
Observation: Each StoreResultDetail should contain the price of the Product
Observation: Each StoreResultDetail should contain the URL of the store's web site
Observation: Each StoreResultDetail may contain the URL of the Product on that store's web site
关注:检索商店上下文:搜索包含特定产品观察的商店实体时:应返回StoreResultDetail的集合观察:商店集合可能为空观察:每个StoreResultDetail应包含商店名称Observation:每个StoreResultDetail应包含价格产品观察:每个StoreResultDetail应包含商店网站的URL观察:每个StoreResultDetail可能包含该商店网站上的产品的URL
The above task could be implemented by a service method on some service, along with any other behaviors required to implement the specification for the whole page.
上述任务可以通过某些服务上的服务方法以及实现整个页面规范所需的任何其他行为来实现。
Once you have your tasks, you can create visual designs to match, implement code and unit tests (or BDD specifications), and QA test your application with proper, clear, and concise documentation to verify your tests against.
完成任务后,您可以创建可视化设计以匹配,实现代码和单元测试(或BDD规范),并使用适当,清晰和简洁的文档对您的应用程序进行QA测试,以验证您的测试。
#2
Segregating user stories by "web page" seems suboptimal to me -- you should be choosing the set of your pages based on user stories, not vice versa. I would classify by "role" of the user -- in fact, in user centered design, by the "persona" in play.
通过“网页”隔离用户故事对我来说似乎不是最理想的 - 您应该根据用户故事选择页面集,而不是相反。我会根据用户的“角色”进行分类 - 事实上,在用户中心设计中,由游戏中的“角色”进行分类。
#3
In our shop, we write up Use Cases. Examples of Use Cases:
在我们的商店,我们写了用例。用例示例:
Create New Customer Account
Assign User Rights
Receive Order
Accept Payment
We have a form with two columns. The first column is the user, and the second column is the computer system. In the two columns we begin listing actions. The user does this, the system responds like this, etc. We leave gaps between the entries so that the steps flow naturally from left to right, and back again. There's a place on the form that states which roles the use case is applicable to (e.g. Project Manager, Administrator).
我们有一个有两列的表格。第一列是用户,第二列是计算机系统。在这两列中,我们开始列出操作。用户执行此操作,系统会像这样响应,等等。我们在条目之间留下间隙,以便步骤从左到右自然流动,然后再返回。表单上有一个位置,说明用例适用的角色(例如项目经理,管理员)。
From the use cases, we then begin to sketch up web pages.
从用例中,我们开始草拟网页。
You can also make Use Case diagrams:
您还可以制作用例图:
#4
I start with identifying what scenario's the users are going to perform with the application. Normally, these are quite predicatable. A user logs in to a website with a certain task in his/her head and wants to fulfill that task.
我首先确定用户将使用该应用程序执行的场景。通常,这些都是可以预测的。用户在他/她的头脑中登录具有特定任务的网站并且想要完成该任务。
I'd limit myself to a scenario as one list of sequential steps. For example, user logs in, user select product, user chooses quantity, user checks out, end.
我将自己局限于一个连续步骤列表的场景。例如,用户登录,用户选择产品,用户选择数量,用户签出,结束。
Having the scenario's written down can also help you to determine what parts of the application are more important that others, and which scenario's can be easily be implemented "in-between". And finally, which scenario's could be a show stopper for the launch of the application.
记下场景也可以帮助您确定应用程序的哪些部分对其他部分更重要,哪些场景可以轻松地“中间”实现。最后,哪个场景可能是应用程序启动的显示阻止。
#5
We group them by feature - or better - Minimum Marketable Feature (MMF) so that there add value to the product. Indeed, for instance, there is no way to show something that cannot be created, or to create something that cannot be seen yet. So we group the creation/display so that there are delivered together. Updates and deletions can come later, YMMV.
我们按功能 - 或更好 - 最小市场特征(MMF)对它们进行分组,以便为产品增加价值。事实上,例如,没有办法展示无法创造的东西,或创造一些目前尚无法看到的东西。因此,我们将创建/显示分组,以便一起交付。 YMMV可以在以后更新和删除。