什么是用户故事?
用户故事(user story)是一个用来确认用户和用户需求的简短描述,做为何用户,但愿如何,这样作的目的或者价值何在。用户故事在软件研发中又被描述为需求。用户故事一般的格式为:做为一个<角色>, 我想要<功能>, 以便于<商业价值>。
测试
所以,一个好的用户故事就包括了这三个要素:
1.角色:使用者。
2.功能:须要完成什么样的功能。
3.价值:为何须要这个功能,这个功能带来什么样的价值。 lua
另外,用户故事还须要遵循3C原则:卡片(Card)、会话(Conversation)和确认(Confirmation),用户故事的3C原则由Ron Jeffries在2001年提出,直到今天仍被奉为用户故事的基本原则。
1.卡片:
用户故事描述的传统形式是手工书写的用户故事卡,卡片上应该只有几句话来捕获需求的精髓或目的。
.net
后来产品经理们经过写需求设计文档或者规格说明书,经过一个很是完整的word文档将某一个产品的需求定义出来。因为产品需求文档涉及到的内容从项目到实现效果,很是庞大,以致于后来的项目管理中出现了摒弃繁杂的需求文档的作法,或将需求文档仅做为一个参考标准。如知名项目管理软件 禅道提倡将需求文档中的需求点摘出来,录在禅道的【需求描述】里面,做为一个个独立的功能点。
这其实跟卡片做用是一致的,用简洁凝练的语言,完整呈现用户故事的三要素。
设计
2.会话:
会话指的是卡片上所记录的用户故事是能够进行讨论和细化的,它包括利益相关人(客户/用户)、产品负责人及开发团队之间进行更细化地讨论用户故事的可行性。用户故事通过会话确认后,才能正式进入开发阶段(用户故事实现)。敏捷开发的流程完总体现了用户故事(需求)的流转过程。 排序
以敏捷开发中的Scrum为例:
项目管理
scrum的基本流程如上图所示:
1.产品负责人负责整理user story,造成左侧的product backlog。 ——用户故事整理
2.发布计划会议:product owner负责讲解user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表,sprint backlog。 ——用户故事确认
3.迭代计划会议:项目团队对每个story进行任务分解,分解的标准是完成该story的全部任务,终每一个任务都有明确的负责人,并完成工时的初估计。 ——用户故事分解
4.每日例会:天天scrum master召集站立会议,团队成员回答昨天作了什么今天计划作什么,有什么问题。 ——用户故事实现
5.演示会议:迭代结束以后,召开演示会议,相关人员都受邀参加,团队负责向你们展现本次迭代取得的成果。期间你们的反馈记录下来,由po整理,造成新的story。 ——用户故事的二次整理 开发
敏捷开发中用户故事的细化为开发提供了可执行标准,敏捷开发的特色是快速迭代,一个用户故事的大小和复杂度应该在一个迭代中开发完毕为宜。若是用户故事太大,可能会致使对它的开发横跨几个迭代。,此时就应该将这个用户故事分解。每一个任务的时间最好不要超过8小时,就是要保证1个工做日内完成,若是作计划时发现有些任务的时间超过了8小时,就说明任务的划分有问题,须要进行子任务的分解。
文档
3.确认:
用户故事确承认以理解为对用户故事是否达到验收标准的检测。用户故事须要一系列的验收测试用以保证故事功能的完成及软件按照咱们的预期运行。同时要保证这个用户故事最后实现是能够带来商业价值的。 get
用户故事的确认由测试人员完成。测试人员在测试版本所关联的用例列表里执行用例,完成测试,而后生成测试报告。测试报告是对用户故事实现程度的最直接体现。 产品
若是一个用例执行失败,能够直接由这个测试用例建立一个Bug,由开发人员进行二次开发和修复,直到测试经过。
写好用户故事除了要以3C原则为基础,同时须要考虑到用户故事须要具有的六个特征(也叫INVEST原则):
Independent:独立性
用户故事之间应该具备独立性,不该该依赖于其余的用户故事。通常能够经过组合用户故事或者分割用户故事来减小用户故事间的相互依赖性。
Negotiable:可协商
用户故事是由客户或者PO同开发小组的成员共同协商制定的,用户故事表明了一个用户群体的需求,而这个需求是零散的,经过相关人员的沟通,协商常常能够丰富用户故事。
Valuable:有价值
用户故事对于最终的用户是有价值的,所以应该站在用户的角度去编写,描述的是一个一个的feature,而非一个一个的task。
Estimable:可评估
对于一个用户故事的划分须要足够的领域知识,使得在划分故事之时就能大体了解故事开发的周期,为了减小估算的不肯定性,故事自己不能太大。
Small:短小
故事应该尽可能的短小,固然也不是说越小越好。短小的故事能够减小分解过程当中估算的偏差,最好的故事是可以在一个迭代周期以内完成的。若是太大就应该考虑将其拆分为多个粒度更小的用户故事。
Testable:可测试
若是一个用户故事没法进行测试,那么也就没法判断该故事是否真的完成。因此,用户故事必须在定义了验收测试经过的标准后才能认为用户故事开发完毕。