什么是User Story其实我觉得要对User Story做一个定义还是挺难的。
曾经的我以为,所谓User Story是User来讲述的Story。
你看啊,User Story的编写范式:
As a role, I want to do something or a piece of functionality, so that I can achieve some business value or statement of intent.
但是,随着真正的实践,我发现,User总是一个缺席的定义者。
我们指望User来定义User Story,而大部分情况下是由我们这群BA来定义的。
我曾经和一名敏捷教练讨论,我们BA总是在臆想用户的需要而写User Story,这样有意义吗?
这名来自美国的副总裁回答我说,至少你们从用户的角度来思考了,不是吗?
不过,并没有解答我的疑问,我也相信有很多人和我有同样的问题:User Story到底是从哪里来的?谁来写?
也有很多人认为需求提出方应该来写User Story,至少也应该来确认User Story是否恰当。
但实际情况是,很多时候我们真的只能靠想象,充分利用我们的“同理心”来想象。
我翻了一下BABOK中对于User Story的定义:
A user story represents a small, concise statement of functionality or quality needed to deliver value to a specific stakeholder.
——《BABOK 3.0》
这样看来,User Story只是用来描述可以带给User的价值的功能或质量需求,而非必须由User提供。
后面这段描述更加明确的指出了这点:
With a focus on stakeholder value, user stories invite exploration of the requirements by promoting additional conversations with stakeholders and grouping functional requirements for delivery.
——《BABOK 3.0》
这里,我们暂停一下,敲个黑板:价值。
User Story是强调给用户带来价值的。
OK,我们继续。
广为人知的拆分原则User Story写起来并不复杂,但是从敏捷的小步快走的角度出发,大部分的User Story是需要进行拆分的。
而各种敏捷著作中都有写明 User Story拆分的INVEST原则:
Independent:独立性User Story必须高内聚,也就是拥有独立性,不依赖于其他User Story的实现而实现。
如果你将一个User Story拆成前台和后台,那肯定不符合这个原则,因为这两个Story的依赖性非常高。
Negotiable:可协商User Story并不应该是一个人的一言堂。
之前有个小伙伴问我,是不是应该由BA来写User Story。我说,BA提供的是初稿,最终稿需要让团队所有相关人员达成一致。
Valuable:有价值再次敲黑板,价值!
价值是User Story的关键所在,这个Story如果对用户是没有价值的,那就需要重新拆分或者重写。
Estimable:可评估在之前的Scrum文中,其实我提到了关于User Story的Point评估问题。
我们必须保证User Story的可评估,因为User Story是所有实现的基础,我们需要根据评估的结果进行计划、追踪和回顾。
Small:足够小这个原则也决定了User Story要拆得足够小,至于要拆多小,这个我个人觉得应该由团队协商一致,至少也应该是在一个Sprint可以完成的程度。
我在之前的团队里,当评估的点数大于3的时候,我们就一定要拆。
因为根据我们以往的经验,5点及以上的User Story会导致我们的Sprint失败,非常可能做不完或者测不完。
而拆分的过程也是一个再次思考和讨论的过程,大家很有可能会发现之前被隐藏和遗漏的地方。
Testable:可测试为用户带来价值的User Story必须是可以测试的。
请反复读一下我上面这句话。
之所以称以上原则为“广为人知”是因为大家都知道拆User Story的时候要遵循这些原则,但是依旧不知道要怎么拆。
怎么拆都怪怪的?还记得我上面敲黑板的两个字吗?
价值
所有User Story的拆分都要以价值为导向,在拆完后也需要通过“这个小的User Story有给用户带来业务价值吗?”来校验是否拆的合适。
这么说可能有点抽象。我来举个例子。
有这么个图书馆借阅系统的User Story:作为一个用户,我希望可以找到满足条件的书籍信息,以便我可以在书架上找到它。
这个User Story有点大,好吧,不是有点大,是非常大。
如果你拿这个User Story去和大家讨论,会面临以下问题的解答:
?这个用户是注册用户,还是访问用户?
?不同类型的用户操作是一样的吗?
?所谓的“满足条件”指的是哪些条件?书名?作者?ISBN……
?要展示的书籍信息包括什么?书名?索书号?馆藏状态?
……
于是大家讨论了下,决定要拆。那这个User Story给你,你怎么拆呢?
以下是一种拆法,拆成两个User Story:
第一个:建立图书信息表,里面包括书籍的各种属性。
第二个:按照原型,画三个前台界面,包括:搜索界面和搜索结果界面,以及图书信息展示界面。
还嫌大?
那我就把第二个拆成三个,每个界面一个User Story,够小了吧?
有没有觉得哪里不对劲?
有人说,因为没有按照User Story的格式来写,没有写:作为一个用户,我希望可以查看搜索界面,这样我就可以开始准备搜索了。
更奇怪了,是吧?
来,想一下,这些被拆出来的Story对用户来说有业务价值吗?
你提供一个前台页面给用户,不能搜索,只能看,是准备打印出来挂到美术馆里面“供人瞻仰”去吗?
那么应该怎么拆呢?
我这里提供一个思路,大家可以揣摩一下。
大的User Story:
作为一个用户,我希望可以找到满足条件的书籍信息,以便我可以在书架上找到它。
第一个 User Story:
作为一个用户,我希望可以通过图书名称找到图书的书名、作者、馆藏状态以及索书号信息,以便我可以在书架上找到它。
第二个 User Story:
作为一个用户,我希望可以通过图书作者找到图书的书名、作者、馆藏状态以及索书号信息,以便我可以在书架上找到它。
或者这么拆:
大的User Story:
作为一个用户,我希望可以找到满足条件的书籍信息,以便我可以在书架上找到它。
第一个 User Story:
作为一个用户,我希望可以通过图书名称找到图书的书名以及索书号信息,以便我可以在书架上找到它。
第二个 User Story:
作为一个用户,我希望可以通过图书作者找到图书的书名、作者、馆藏状态以及索书号信息,以便我可以在书架上找到它。
有感觉到什么吗?
嗯,这样就万事大吉了嘛?
我只能说,图样图森破……
因为这里还有一个延伸的问题,就是程序猿GG看到这样的User Story拆分,很想打人。
为什么?
因为在代码实现的时候,其实在做第一个User Story的时候,可以“顺手”把第二个User Story的逻辑实现了。
而如果不顺手实现,那么意味着在做第二个User Story的时候会需要改才交付完成的第一个User Story的代码。
就好像我们装修房子。
之前的拆分方法是:水电进场开工、瓦工进场开工、木工进场开工、漆工进场开工、家具及软装进场。
而我后面的两种拆分方法是:先把客厅的水电、地砖、墙面、家具软装都搞定后,再来依照这个顺序搞一遍卫生间,再搞一遍卧室……
但是,看出差别了嘛?
前面的拆分方法一个工种干完,下一个接着干,只有当所有的都干完了,房子才能交付。
而后面的拆分方法至少保证第一个User Story可以交付一个完整的客厅给用户,这对用户来说是有价值的。
这也是敏捷的奥义所在。
但是,工人们肯定不乐意了,我水管先铺一段到客厅的,后面我还要把铺到客厅的一部分拆了再铺到卫生间去……
哈,也从另外一面说明了敏捷方法明显不适合工程装修。
那么你要怎么说服大家接受User Story的价值导向的拆分方式呢?
关键在于,敏捷的另外一项重要工作:重构。敏捷的开发过程其实很强调重构、自动构建等等。所以,这也是为什么我一直觉得敏捷的框架和流程是一个完整的体系。你不能抛开重构谈User Story拆分,你也不能无视价值来写User Story。
我大概花了两三年的时间才摸索出来写和拆User Story的感觉,当然这和业务熟悉程度也有一定的关系。
我想要说的是,想要拆好User Story是需要自己不断的去摸索的过程,没有办法说我今天看了一篇文章或者听了一堂课,我就能把User Story写好、拆好了。
重点是要亲自动手去拆,去写,去试错。
说了这么多,你在拆User Story的时候遇到了什么问题?
这篇文可以解答你的问题吗?

商业分析BA:用户故事怎么拆?的更多相关文章

  1. 【DevCloud · 敏捷智库】如何拆分用户故事

    提起用户故事拆分,我们听得最多的就是INVEST原则(关于INVEST原则可以参考文章“用户故事等于需求说明”——你一定没有写好用户故事),但很多人面临的问题是拿到一个较大的用户故事时,该如何拆分才能 ...

  2. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics)之间有什么关系?

    本来我以为不需要解释这个问题的,到底数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)有什么区别,但是前几天因为有个学弟问我,我想了想发现我竟然也回答 ...

  3. 敏捷开发用户故事系列之十一:CSDN博客用户故事分析

    这是敏捷开发用户故事系列的第十一篇.(栏目目录) 经常有人问起有没有完整的用户故事案例.本人在网上找了一下,大约能找到两三篇,但多数只是为了描述用户故事的语法而已,都不涉及用户故事的颗粒度.大量故事的 ...

  4. 产品经理-需求分析-用户故事-敏捷开发 详解 一张图帮你了解Scrum敏捷流程

    产品经理-需求分析-用户故事-敏捷开发 详解 用户故事是从用户的角度来描述用户渴望得到的功能.一个好的用户故事包括三个要素:1. 角色:谁要使用这个功能.2. 活动:需要完成什么样的功能.3. 商业价 ...

  5. 划分用户故事(user-story)的原则

    在敏捷开发过程中是通过用户故事来将需求具体化成可以进行迭代开发的一个个现实的可见的开发任务.因此在敏捷软件的开发过程中,用户故事的划分对于迭代和开发起着举足轻重的作用. 用户故事从其名字来看是站在用户 ...

  6. 【DevCloud·敏捷智库】如何利用用户故事了解需求

    摘要:这篇文章主要解决因为不能很好地理解需求而估算做不好的问题,在这里可以了解下如何利用用户故事了解需求. 背景 很多团队在应用敏捷开发时,对估算经常感到困惑.这里所说的估算是指产品列表条目(PBI, ...

  7. UDAD 用户故事驱动的敏捷开发 – 演讲实录

    敏捷发展到今天已经在软件行业得到了广泛认可,但大多数敏捷方法都是为了解决某一特定问题而总结出来的特定方法或实践,一直缺乏一个可以将整个开发过程串接起来的成体系的方法.用户故事驱动的敏捷开发(User ...

  8. 用户故事驱动的敏捷开发 – 2. 创建backlog

    本系列的第一篇[用户故事驱动的敏捷开发 – 1. 规划篇]跟大家分享了如何使用用户故事来帮助团队创建需求的过程,在这一篇中,我们来看看如何使用这些用户故事和功能点形成产品backlog.产品backl ...

  9. (l老陈-小石头)典型用户、用户故事、用例图

    一.典型用户 老陈 小石头 二.用户故事 老陈:作为一个家长,我希望能利用软件在电脑上储存一些数学题目,以便在繁忙的工作中也能帮助到孩子提高数学. 小石头:作为一个小学二年级的小学生,我希望能利用软件 ...

随机推荐

  1. EasyCode实现数据库到Swagger全自动化

    简介 EasyCode是基于IntelliJ IDEA开发的代码生成插件,通过自定义生成模板可以完成定制化的 Mapper Service Controller 生成,结合数据库 Comment还可以 ...

  2. pynlp报错:pynlpir.LicenseError: Your license appears to have expired. Try running "pynlpir update"解决办法。

    使用pyltp做文本挖掘时报错: pynlpir.LicenseError: Your license appears to have expired. Try running "pynlp ...

  3. 【Android - IPC】之ContentProvider简介

    1.Content Provider简介 Content Provider是Android中提供的一种专门用于不同应用之间进行数据共享的方式,从这一点来看,它天生就适合IPC(Inter-Proces ...

  4. Linux网络相关、firewalld和netfilter、netfilter5表5链介绍、iptables语法 使用介绍

    第7周第3次课(5月9日) 课程内容: 10.11 Linux网络相关10.12 firewalld和netfilter10.13 netfilter5表5链介绍10.14 iptables语法 扩展 ...

  5. Linux命令行初学(一)

    linux命令大全:https://www.linuxcool.com/ 大概了解到有哪些命令,如果有需要的话可以在该网站上查询. 另外在实验楼学习了一些基础,该篇博客就此次对linux命令行的学习进 ...

  6. error Couldn't find a package.json file in

    error Couldn't find a package.json file in解决方法:首先初始化,再安装相应的文件 (1). npm init -f //强迫初始化文件 (2). npm in ...

  7. Python文本转化语音模块大比拼,看看青铜与王者的差别!

    文本转语音 如果把Python比喻成游戏中的一个英雄,你觉得它是谁?对于Dota老玩家来说,我会想到钢琴手卡尔!感觉Python和卡尔一样,除了生孩子什么都可以做的角色.日常生活中,我们会涉及到很多语 ...

  8. mysql的两阶段协议(封锁定理,虫洞事务)

    我们都知道数据库的事务具有ACID的四个属性:原子性,一致性,隔离性和持久性.然后在多线程操作的情况下,如果不能保证事务的隔离性,就会造成数据的修改丢失(事务2覆盖了事务1的修改结果).读到脏数据(事 ...

  9. mysql的安装及命令

    1.先检查系统是否装有mysql rpm -qa | grep mysql 2.下载mysql的repo源 wget     http://192.168.130.150/mysql5.7.26/my ...

  10. luogu P1336 最佳课题选择 |背包dp

    题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同.具体地说,对于某个课题i ...