`
bryanzk
  • 浏览: 57399 次
文章分类
社区版块
存档分类

初次实践user story时遇到的实际问题,哪位高人进来指导下?

阅读更多
    打算在部门内部推行XP,也看了一些资料,根据我们部门的实际情况,打算从需求方面采用user story开始。但是在实践了两次之后,有些问题浮现了出来,因此,特地到此宝地求教一二。
    User story,从我的角度来理解,他的好处,显而易见,可以将用户的需求尽快、尽早、尽量详细的向开发团队、以及利益相关者来开放,可以发现需求中不合理的地方,并且可以挖掘出需求中一些真正对客户有价值的东西;也许客户刚开始认为重要的需求,由于某些新的,更加关键或者更加有business value的东西出现,而变得不重要了。此外,对user story的讨论,会对设计者产生潜移默化的影响,user story的INVEST特性中的I(independent)特性,自然的要求系统的各个模块和层次之间,尽量减少耦合。其余的几个特性,虽然说起来很简单,但是怎么做到,真的是挺难的。
    以我最近的实践,我们部门内部打算以xp的方式开发一个图书管理系统(BMS)。我要描述的后面三个user story涉及如下的角色:
     ☆初级读者:只能使用系统的一些基本功能,并且所能查阅到和借阅的书籍也受限制
     ☆资深读者:可以使用系统的一些深入功能,查阅到的书籍范围比初级读者多
     ☆系统管理员:系统的全部功能都对他开放,系统中的数据处理权限对他全部开放

     user story:
1、初级读者对现有全部图书的情况进行查询。
   接受条件:
○ 按照下列查询字段:书籍名称、所属类别、作者、出版社、ISBN;
○ 对查询结果的要求:可以按照书籍名称、所属类别、作者、出版社、价格进行排序;
○ 可以看到书籍当前的借阅状态(是否被借出,归还日期等)
○ 查到的书肯定都是可见的(系统中的书籍,有可能是不可见的,)
○ 不能看到资深级别的书
2、资深读者对现有全部图书的情况进行查询。
   接受条件:    ○ 按照下列查询字段:书籍名称、所属类别、作者、出版社、ISBN、读者级别、借阅人、借阅状态
○ 对查询结果的要求:可以按照书籍名称、所属类别、作者、出版社、借阅人、借阅读者级别、价格进行排序;
○ 可以看到书籍当前的借阅状态(是否被借出,归还日期等),并且可以看到借阅人是谁
○ 查到的书肯定都是可见
3、系统管理员对现有全部图书的情况进行查询。
   接受条件:    ○ 按照下列查询字段:书籍名称、所属类别、作者、出版社、ISBN、读者级别、借阅人、借阅状态、是否可见(包括全部的情况)
○ 对查询结果的要求:可以按照书籍名称、所属类别、作者、出版社、借阅人、借阅读者级别、价格、是否可见进行排序;
○ 可以看到书籍当前的借阅状态(是否被借出,是否处于续借状态,归还日期等),并且可以看到借阅人是谁
○ 可以看到系统中的全部书籍(也可以看到对读者不可见的书)

    就上述三个user story来讲,主干功能是相同的,但是有些细节:书籍的状态,借阅人的状态,能看到的书籍名录,书籍的明细字段等,这些细节不甚相同。当我写出这三个user story的时候,我对自己产生了怀疑,这些是合格的用户故事么?他们之间并不是互相完全独立的啊。是不是能够考虑拆分?如果考虑的话,又该如何拆分呢?这些疑问,哪位实践过user story的兄弟能给指导一下啊?








分享到:
评论
25 楼 hgq0011 2007-03-01  
bryanzk 写道
hgq0011 写道
你们都会有一个好的平台给你们练习或者有一个好的领导。唉,我们就惨。因为提升公司的企业文化,公司买了很多的图书,很多的杂志,很多的影碟,,,,现在准备提供给员工,那么公司就要开发一套图书管理系统。公司根本没有考虑到我们(开发部),索性买了一套系统。巨郁闷!
XP,AMMD这些只能自己慢慢的体会,先学会形。


你们的条件也很不错了,公司能够给你们买那么多的资料,这已经比其他很多公司强太多了。不过,我还听说有的公司把nintedo的最新游戏主机wii作为公司年终晚会的奖品的呢,真是羡慕哇

有好也有不好的一面。如果我是老板,我就会让自己的电脑部来开发这个系统,就不会去买别人的产品了。

24 楼 lane_cn 2007-02-12  
一个合格的“客户”应该是什么样的?
首先是要明确自己的商业价值,为了实现这个商业价值,需要做哪些事情,做这些事情的时候遇到了哪些困难,于是需要有一个方案来解决这一个个的困难,这个方案里面也许需要一个IT系统。到这个地步,事情就可以交给IT公司去看了,这个系统应该事项什么样的功能,设计什么样的界面。
User stroy里面的每一个情节都是要有具体的商业价值的,都是有价值的事情。说得明白一点,每一件事情都和钱有关,这才是User story。他们肯定是和这些东西相关的:企业的客户(不是软件的客户,而是软件使用者的客户)、企业的合作者、企业为他的客户提供的服务。
23 楼 snomile 2007-02-12  
excel...
22 楼 gigix 2007-02-12  
basicbest 写道
gigix 写道
ozzzzzz 写道
use story如果复杂到你写的那个地步,还能叫use story吗?
不要害怕他们简陋,因为他们只是一个开始。你需要的是在迭代中不断的去完善它们,而不是要你在一开始就搞一个大家伙出来吓人。

实际上如果只是一个普通公司的内部图书管理系统,也许需要的只是把所有图书列出来,然后在浏览器页面里用ctrl+f来搜索。


那干脆用Excel就好了

有理……excel+svn,搞定
21 楼 basicbest 2007-02-12  
gigix 写道
ozzzzzz 写道
use story如果复杂到你写的那个地步,还能叫use story吗?
不要害怕他们简陋,因为他们只是一个开始。你需要的是在迭代中不断的去完善它们,而不是要你在一开始就搞一个大家伙出来吓人。

实际上如果只是一个普通公司的内部图书管理系统,也许需要的只是把所有图书列出来,然后在浏览器页面里用ctrl+f来搜索。


那干脆用Excel就好了
20 楼 gigix 2007-02-11  
ozzzzzz 写道
use story如果复杂到你写的那个地步,还能叫use story吗?
不要害怕他们简陋,因为他们只是一个开始。你需要的是在迭代中不断的去完善它们,而不是要你在一开始就搞一个大家伙出来吓人。

实际上如果只是一个普通公司的内部图书管理系统,也许需要的只是把所有图书列出来,然后在浏览器页面里用ctrl+f来搜索。
19 楼 basicbest 2007-02-11  
ozzzzzz 写道
其实我早就发现,至少在中国推行敏捷实际上还是在推行迭代。这方面不仅仅是agile在做工作,up也在做工作,其他很多人也在做工作。但是人们的思维方式已经被瀑布控制了,因此迭代也仅仅是一种形式。
当然敏捷其实根本上来说只是一种态度,是一种方式,而方法论的部分并不是其真正的核心。因此如果大家不能用敏捷的思想来做事情,即使你的方法和形式再xp,你依然不是agile、


这一点我也有强烈感受.我以前的公司就是和Rational合作,我们不仅有Rational的全套工具,还试图使用RUP,使用一段时间之后就说RUP太复杂,然后又要玩XP.可是,在我看来UP和Agile根本没有区别,他们的思想本质上是一样的.
就是这张图:
18 楼 ozzzzzz 2007-02-11  
其实我早就发现,至少在中国推行敏捷实际上还是在推行迭代。这方面不仅仅是agile在做工作,up也在做工作,其他很多人也在做工作。但是人们的思维方式已经被瀑布控制了,因此迭代也仅仅是一种形式。
当然敏捷其实根本上来说只是一种态度,是一种方式,而方法论的部分并不是其真正的核心。因此如果大家不能用敏捷的思想来做事情,即使你的方法和形式再xp,你依然不是agile、
17 楼 ozzzzzz 2007-02-11  
basicbest 写道
ozzzzzz 写道
use story如果复杂到你写的那个地步,还能叫use story吗?
不要害怕他们简陋,因为他们只是一个开始。你需要的是在迭代中不断的去完善它们,而不是要你在一开始就搞一个大家伙出来吓人。


还是“过分追求完美”造成的,这似乎是技术人员的通病,需要慢慢的锻炼。我也一样

完美的其实也是一个过程,追求完美也是一个过程。其实敏捷的基础是迭代,而你的做法的思想基础还是瀑布的。你现在只是起步,如果你还固守这样的思维方式,下面你会做任何事情都觉得别扭。因为你实际上根本就不是在敏捷。
16 楼 basicbest 2007-02-11  
ozzzzzz 写道
use story如果复杂到你写的那个地步,还能叫use story吗?
不要害怕他们简陋,因为他们只是一个开始。你需要的是在迭代中不断的去完善它们,而不是要你在一开始就搞一个大家伙出来吓人。


还是“过分追求完美”造成的,这似乎是技术人员的通病,需要慢慢的锻炼。我也一样
15 楼 ozzzzzz 2007-02-11  
use story如果复杂到你写的那个地步,还能叫use story吗?
不要害怕他们简陋,因为他们只是一个开始。你需要的是在迭代中不断的去完善它们,而不是要你在一开始就搞一个大家伙出来吓人。
14 楼 basicbest 2007-02-09  
bryanzk 写道

其实这个系统的“图书馆管理员”的角色,目前就是我,对于我来说,书籍的新增和报废,目前不是最重要的需求,最要紧的是,先把图书的借阅情况记录下来;而书籍的信息,我可以直接从后台先导入。
我理解您说的这个过程,是不是对一个系统进行敏捷需求的通常情况下,可能发生的情形?
但是我们部门的这个BMS系统有个前提,就是我们要用它来实验、改进我们的一个新的OO开发框架,框架涉及到权限验证、日志记录、业务逻辑与UI分离等目标。所以要尽可能考虑到将来它要服务和支撑的系统涉及的多个大的方面,当然每个方面不需要特别细节的实现。但是要考虑到这些方面对框架的要求。这也是我为什么要在一开始就分离出多个角色的原因


但是这样做便把业务需求和技术目标混杂在一起.因为是一个带有实验性质的项目,相信预算不会很多。开始的时候就为了有角色而加角色的话,会不会使这个系统变的复杂,从而超出原先预订的时程和人力呢?
如果需要测权限验证,并不一定需要预先设定很多的角色,可以在开发过程中增加供测试用的假想角色。
13 楼 clamp 2007-02-09  
bryanzk 写道
clamp 写道
从你的回答来看,我觉得你还没有真正进入“现场客户”这个角色。
现场客户应当是一个熟悉自己业务的图书馆管理员。

如果我是现场客户,早期的四个US草稿可能是这样的。
1、书籍新增登记。一本新的书来了,必须将其主要信息记录下来。
2、书籍报废。一本书不能用了,退出图书馆。
3、借书。有人来向我借书,我登记相关信息,把书给他。
4、还书。借书的人来还书,我应当找的到上次借书的信息,并将书取回。

排一下优先级,1最优先,3/4是一对,优先级其次,2放在后面。

我和开发人员讨论的时候,发现借书的时候应当让借书的人可以看到目前可借书籍的清单。因此将书籍查询/检索的内容加入到3中。

又过了两小时,我想到我应当时刻掌握目前书的情况,某本书是否已借出,在谁的手里,因此增加了一个US。5:管理员查询。关注书的目前状态。并且我把它的优先级排在3/4之后,2之前。

随后开发人员觉得3中的书籍查询/检索 和 5的管理员查询有很多类似,要求进一步的细化,于是你们仔细讨论了从一般用户角度和管理员角度所需要的不同查询条件/查询结果……

其实这个系统的“图书馆管理员”的角色,目前就是我,对于我来说,书籍的新增和报废,目前不是最重要的需求,最要紧的是,先把图书的借阅情况记录下来;而书籍的信息,我可以直接从后台先导入。
我理解您说的这个过程,是不是对一个系统进行敏捷需求的通常情况下,可能发生的情形?
但是我们部门的这个BMS系统有个前提,就是我们要用它来实验、改进我们的一个新的OO开发框架,框架涉及到权限验证、日志记录、业务逻辑与UI分离等目标。所以要尽可能考虑到将来它要服务和支撑的系统涉及的多个大的方面,当然每个方面不需要特别细节的实现。但是要考虑到这些方面对框架的要求。这也是我为什么要在一开始就分离出多个角色的原因


XP说:框架是在不断实现越来越复杂的业务的过程中逐渐形成的,而不是一开始设计好的
12 楼 partech 2007-02-09  
bryanzk 写道
就上述三个user story来讲,主干功能是相同的,但是有些细节:书籍的状态,借阅人的状态,能看到的书籍名录,书籍的明细字段等,这些细节不甚相同。当我写出这三个user story的时候,我对自己产生了怀疑,这些是合格的用户故事么?他们之间并不是互相完全独立的啊。是不是能够考虑拆分?如果考虑的话,又该如何拆分呢?这些疑问,哪位实践过user story的兄弟能给指导一下啊?

既然主干相同,就没必要重复。
问题在于你划分的角色,他们的职责本身就有很大的重复,比如初级读者和资深读者只是查询条件和权限不同而异。
引入读者角色,去掉初级读者角色。这样可以把初级读者和资深读者共同的功能放到读者中,资深读者的故事只包含他特有的功能。管理员如没有特殊需求,只包含独特的管理部分功能。

至于说细节问题,可以放在验收测试中描述。
11 楼 bryanzk 2007-02-09  
hgq0011 写道
你们都会有一个好的平台给你们练习或者有一个好的领导。唉,我们就惨。因为提升公司的企业文化,公司买了很多的图书,很多的杂志,很多的影碟,,,,现在准备提供给员工,那么公司就要开发一套图书管理系统。公司根本没有考虑到我们(开发部),索性买了一套系统。巨郁闷!
XP,AMMD这些只能自己慢慢的体会,先学会形。


你们的条件也很不错了,公司能够给你们买那么多的资料,这已经比其他很多公司强太多了。不过,我还听说有的公司把nintedo的最新游戏主机wii作为公司年终晚会的奖品的呢,真是羡慕哇
10 楼 bryanzk 2007-02-09  
clamp 写道
从你的回答来看,我觉得你还没有真正进入“现场客户”这个角色。
现场客户应当是一个熟悉自己业务的图书馆管理员。

如果我是现场客户,早期的四个US草稿可能是这样的。
1、书籍新增登记。一本新的书来了,必须将其主要信息记录下来。
2、书籍报废。一本书不能用了,退出图书馆。
3、借书。有人来向我借书,我登记相关信息,把书给他。
4、还书。借书的人来还书,我应当找的到上次借书的信息,并将书取回。

排一下优先级,1最优先,3/4是一对,优先级其次,2放在后面。

我和开发人员讨论的时候,发现借书的时候应当让借书的人可以看到目前可借书籍的清单。因此将书籍查询/检索的内容加入到3中。

又过了两小时,我想到我应当时刻掌握目前书的情况,某本书是否已借出,在谁的手里,因此增加了一个US。5:管理员查询。关注书的目前状态。并且我把它的优先级排在3/4之后,2之前。

随后开发人员觉得3中的书籍查询/检索 和 5的管理员查询有很多类似,要求进一步的细化,于是你们仔细讨论了从一般用户角度和管理员角度所需要的不同查询条件/查询结果……

其实这个系统的“图书馆管理员”的角色,目前就是我,对于我来说,书籍的新增和报废,目前不是最重要的需求,最要紧的是,先把图书的借阅情况记录下来;而书籍的信息,我可以直接从后台先导入。
我理解您说的这个过程,是不是对一个系统进行敏捷需求的通常情况下,可能发生的情形?
但是我们部门的这个BMS系统有个前提,就是我们要用它来实验、改进我们的一个新的OO开发框架,框架涉及到权限验证、日志记录、业务逻辑与UI分离等目标。所以要尽可能考虑到将来它要服务和支撑的系统涉及的多个大的方面,当然每个方面不需要特别细节的实现。但是要考虑到这些方面对框架的要求。这也是我为什么要在一开始就分离出多个角色的原因
9 楼 hgq0011 2007-02-09  
你们都会有一个好的平台给你们练习或者有一个好的领导。唉,我们就惨。因为提升公司的企业文化,公司买了很多的图书,很多的杂志,很多的影碟,,,,现在准备提供给员工,那么公司就要开发一套图书管理系统。公司根本没有考虑到我们(开发部),索性买了一套系统。巨郁闷!
XP,AMMD这些只能自己慢慢的体会,先学会形。
8 楼 basicbest 2007-02-09  
clamp这里就很明确的表达出来每个动作的目的,而且,用词也很少见到咋们开发人员的影子. 所谓的神,可以认为你是否能够把自己开发人员的角色忘记,切换到客户这个角色上.

gigix对其中ISBN及出版社查询的疑问,据我了解,这一点在实际中确实是需要用到的.

gigix有提到value,在我理解其实就是我前面提到的目的,这两个应该是一样的.

其实我觉得,从我以及gigix的疑问,到clamp的举例,最重要是clamp概括的这句话:
真正进入“现场客户”这个角色。
7 楼 clamp 2007-02-09  
从你的回答来看,我觉得你还没有真正进入“现场客户”这个角色。
现场客户应当是一个熟悉自己业务的图书馆管理员。

如果我是现场客户,早期的四个US草稿可能是这样的。
1、书籍新增登记。一本新的书来了,必须将其主要信息记录下来。
2、书籍报废。一本书不能用了,退出图书馆。
3、借书。有人来向我借书,我登记相关信息,把书给他。
4、还书。借书的人来还书,我应当找的到上次借书的信息,并将书取回。

排一下优先级,1最优先,3/4是一对,优先级其次,2放在后面。

我和开发人员讨论的时候,发现借书的时候应当让借书的人可以看到目前可借书籍的清单。因此将书籍查询/检索的内容加入到3中。

又过了两小时,我想到我应当时刻掌握目前书的情况,某本书是否已借出,在谁的手里,因此增加了一个US。5:管理员查询。关注书的目前状态。并且我把它的优先级排在3/4之后,2之前。

随后开发人员觉得3中的书籍查询/检索 和 5的管理员查询有很多类似,要求进一步的细化,于是你们仔细讨论了从一般用户角度和管理员角度所需要的不同查询条件/查询结果……










6 楼 bryanzk 2007-02-08  
gigix 写道
粗粗一看,感觉这个需求是有问题的
引用
按照下列查询字段:书籍名称、所属类别、作者、出版社、ISBN;

真的有人会按照出版社或者ISBN来查询吗?或者只是你认为这样列举出来就“完备”了?
管理员的查询也是一样。这个管理员每次登录以后会做什么事情?每件事情的频度是怎样?我相信他不会没事干就掉换着各种条件查询图书玩。
user story的“INVEST”就包括“valuable“。这些story的value是什么?至少在我看来是不清晰的。


很荣幸,gigix先生能够来指导我,像您说的“真的有人会按照出版社或者ISBN来查询吗?或者只是你认为这样列举出来就‘完备’了?” 我以前还真的没有认真想过这个问题,现在想来,应该是为了能够早点应对这样的需求?那么,按照XP的理念的话,是不是先不用管这些“可能”出现的需求?而是到真正发生的时候再做考虑呢?那么类似这样的,查询字段的增加,以什么样的方式处理能够比较优雅呢?具体来说,就是怎么样能够不违背OCP原则?
管理员的查询,是这样,管理员对图书的现状的查询,深入的想的话,可能会总结出来几种特定的不同类型,特定的不同具体业务目的的查询,但是这些类型的查询需求的优先级没有那么高,而且通过对读者使用的图书查询功能的一些简单修改,就可以暂时实现这些查询,分析投入和产出,我个人觉得还是值得的。不知道您怎么想?

XP的一个核心思想就是沟通,尤其对我这个刚入门的XP新人来说,能够与大家讨论,是非常难得的机会。感谢大家的指点!!

相关推荐

    敏捷测试中的User Story 详解

    在实践中,我们可以通过用户角色模型、用户访谈、调查问卷、观察和讨论会等方式来获取 User Stories,编写可测试的 User Story,并根据 User Story 来划分优先级,制定计划,估算成本。同时,我们也可以通过 User ...

    User Story Mapping

    《User Story Mapping》是一本非常适合敏捷团队成员阅读的专业书籍,无论是对于刚接触敏捷方法论的新手还是已经在实践中遇到挑战的经验丰富的专业人士来说,都能够从中获得有价值的洞见和启示。通过学习本书,读者...

    A_good_example_of_user_story

    用户故事(User Story)是一种敏捷开发方法中的需求描述方式,主要用于捕获最终用户的需求,并作为软件开发的基础。它以简短而明确的语言描述了用户期望的功能,使开发团队能够更好地理解用户的需求。 在本篇文档中,...

    story培训ppt

    为什么使用User Story? 什么是User Story? 好的User Story有哪些特点? User Story的生命周期是什么样的? 切分User Story的小技巧

    vanessa-bdd-editor, 具有BDD风格的Epics和 UserStory.zip

    Epics通常用来表示大型、复杂的功能或需求,它们可以被分解成多个更小、更具体的User Stories,这些User Stories代表了实际用户的可交付价值。vanessa-bdd-editor允许用户以BDD的格式来组织和管理这些元素,提高了...

    后台管理模块 User Story.xlsx

    后台管理模块 User Story.xlsx

    SRS -software requirement specification-user story

    用户故事(User Story)是敏捷软件开发中用来表达用户需求的一种简洁的方式,它通常被用来在敏捷开发框架中制定软件需求规格说明书(Software Requirement Specification,简称SRS)。用户故事关注点在于用户和系统...

    UserStory_MICROSAR_Classic_LegislativeDiagnosticsViaOBD.pdf

    UserStory_MICROSAR_Classic_LegislativeDiagnosticsViaOBD

    VectorCast_(user_code)使用教程

    【VectorCast_user_code】使用教程 VectorCast是一款广泛应用于软件测试,尤其是单元测试(UT)...在实际项目中,不断学习和实践User Code的用法,将有助于更好地利用VectorCast工具,从而实现高效、全面的软件测试。

    HI3516 Hardware Design User Guide硬件指导手册

    在进行硬件设计和开发工作时,针对特定芯片和其应用的硬件设计指导手册是不可或缺的参考资料。对于HI3516C这一款产品而言,《HI3516 Hardware Design User Guide》是一份详细描述其硬件设计要点、推荐和方法的官方...

    C# 使用Usercontrol与主窗体进行消息传递

    在C#编程中,UserControl是一种自定义控件,它允许开发者组合多个基本控件以创建复杂的用户界面组件。在Windows Forms应用程序中,我们经常需要在UserControl与主窗体之间进行数据或事件的交互,这通常涉及到消息...

    sid2user&user2sid

    当我们在网络环境中处理权限问题或排查安全事件时,有时会遇到只有SID的情况。这时,sid2user就非常有用,它能帮助我们把SID转换成易于理解的用户名,从而确定该账户的归属和权限。 相反,user2sid工具则是用来将...

    patton-user-story-mapping

    user stories,mainly for agile development

    django 解决扩展自带User表遇到的问题

    本篇文章将详细探讨如何解决在扩展Django自带`User`表时遇到的问题。 首先,为了扩展`User`模型,我们需要自定义一个新的模型来继承Django的`AbstractUser`模型。`AbstractUser`是`User`模型的一个抽象版本,允许...

    User Story在敏捷开发过程中的应用

    用户建模方法的使用,不是很全^_^;但关键部分很明确,是很好的用户为中心的设计的指导材料

    Abaqus Analysis User's Manual.zip

    总的来说,《Abaqus Analysis User's Manual》是一部全面的指南,无论是对于初次接触Abaqus的新手,还是经验丰富的专家,都能从中获得宝贵的知识和指导。通过阅读这个手册的五个部分,用户可以系统地学习和掌握...

Global site tag (gtag.js) - Google Analytics