没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论

















User Story 在敏捷开发过程中的应用
《User Stories Applied: For Agile Software Development》
http://space.flash8.net/space/?610884/viewspace-370260.html
suy_98@hotmail.com (苏小补丁)
敏捷开发已经越来越受到人们的关注,User Story 作为敏捷需求分析的一种重要工具
和方法,也越来越受到敏捷开发团队的重视,但是市面上关于 User Story 的资料目前较少,
而且多为英文资料,所以将我自己读的这本《User Stories Applied: For Agile Software
Development》翻译如下。
User Story 在敏捷开发过程中的应用
By Mike Cohn
Publisher:Addison Wesley
Pub Date: March 01,2004
ISBN: 0-321-20568-5
Pages:
Translator:Yan Su,Peng Zhou
敏捷开发团队的彻底审查和努力实践证实了 User Stories 应用提供了一种节省时间、
减少重复工作、并且能够做出更好的软件需求过程。
构造满足客户需求的软件的最好方法就是从简短的、清晰的、扼要的并且对最终用户
有价值的 User Stories 开始。,在这本书中,Mike Cohn 提供了一种如何编写 User Stories 以
及如何在软件开发生命周期中运用它们的详尽蓝图。
你将会学习到,怎样编写一个好的 User Story,而怎样又会导致一个坏的 User Story 产
生呢?你还将会学习即使在你无法和客户交谈的情况下,仍能获取到 User Stories 的实用方
法。如果你已经编写完 User Stories 了,Cohn 将会指导你怎样去组织他们,怎样来划分优
先级,以及怎样运用他们来进行计划、管理和测试。
u 用户角色模型:理解用户的共同和不同之处
u 获取 stories:用户访谈、调查问卷、观察和讨论会(译者注:此处作者使用了
workshop,但是翻译成工作场所,此处不合适,难道他的本意是到客户工厂去工
作几天,这确实是个好方法)
u 同客户中的管理者、培训人员、销售人员和其他代理商等一起工作
u 编写可测试的 User Stories。
u 根据 User Stories 来划分优先级,制定计划,估算成本
u 章尾问题和练习
User Stories 应用对于使用任何敏捷开发方法的软件开发人员、测试人员、分析人员和
管理者都是极其有价值的。
1

序
90 年代中期,大多数时间我都觉得很有罪过感。我所在的公司每年都会并购一家新公
司。每次并购以后,我都被指派去运作那个公司的开发团队。每一个并购的开发团队都会
带来一些很壮观的、漂亮的、很长的需求文档。我不可避免的会因为我的团队没有生产出
如此漂亮的需求详细说明而感到罪过。然而,我的团队的软件开发一直都比他们成功的多。
我知道我们当时做的有了成效。然后我仍然觉得头疼的是,如果我们当时做了这些很
详细的需求文档,我们应该会做得更成功。毕竟,我当时读的书和文章中都是这么写的。
如果一个成功的软件开发团队写了这些壮观的需求文档,似乎我们也该那么做,但是,我
们从来都没有这个时间。我们的项目通常都是非常重要和非常急迫的,以至于我们不能在
开始的时候有任何延迟。
因为我们没有时间去写一个漂亮、很长的需求文档,我们采用和我们的客户讨论这种
工作方式,而不是把他们写下来,自前而后互相传递,然后讨论,我们只交谈。我们在纸
上画一些界面,有时候我们会做些原型,还经常编写一小段代码,并把我们编写的东西展
示给目的用户。我们去经常找一些有代表性的客户,并把我们真正编写的东西给他们看,
通常至少每月一次。通过和我们的客户呆在一起并给他们看我们每一小块的工作进程。我
们找到了一种不需要写那些漂亮的需求文档也能成功的方法。
但是,我仍然有罪恶感,我们没有按照我们应该按照的那种方式去做。
1999 年,Kent Beck 发表了一本具有革命意义的小书“Extreme Programming Explained:
Embrace Change”,一夜之间,我所有的罪恶感消失了,书中有一种说法,说开发人员和客
户交谈而不是写、讨论然后再写是可以的。Kent 阐述了很多东西也给我提供了更多的工作
方法。但是,最重要的是,他证实了我自己学到的一些经验是有道理的。
前期的那个大的需求收集和文档很多情况下都会扼杀一个项目,最常见的就是当我们
把需求文档本身当成一个目标的时候。其实需求文档只有在他引导软件达到最终目标的时
候才应该被写下来。
第二种需求文档会扼杀一个项目的情况就是不准确的书面描述语言。我想起来很多年
前听过的一个关于小孩洗澡的故事,爸爸倒好了洗澡水,帮助他的小孩儿洗澡,这个两三
岁的孩子,刚把脚趾头放到水里,就迅速的收了回来,然后跟他的爸爸说“再暖和点
(make it warmer)”。爸爸把手放到水里,惊奇的发现,水不但不冷,而且已经比她女儿洗
澡用的热多了。
当他想了一会儿他儿子的要求以后,他意识到他们缺乏交流,他们使用同一个词错误
的表达了不同的意思,小孩所说的“再暖和点儿”通常被大人们理解为“提高水的温度”。但是,
对小孩儿来说,“更暖和点儿”的意思是“把水温调到更接近于他所认为的暖和”(译者注:水
温应该更低一点儿)。
词,尤其是书面词语,当他来表示像软件这么复杂的需求的时候是非常单薄的。为了
避免对书面词语的曲解,我们需要用开发人员和客户之间频繁的交谈来替代书面词语。
User Stories 提供了一种方法,仅仅写下我们记得的,能指导我们进行估算和计划的就够了,
同时鼓励更多的交谈。
到现在为止,你已经读完了本书的第一章节,你将开始一种转变,远离传统的记录下
每一个需求细节。当你读完这本书的时候,你会学到怎样在你的环境中运用 user story 驱动
2

整个过程。本书包括四部分和两个附录。
第一部分:从这里开始—对于你开始编写 story 之前所要了解的所有事情做了一个描
述。User Stories 的一个目的就是让人们去谈而不是写,第一部分的目的就是让你尽快去谈。
第一节概述了什么是 User Stories 和你如何去使用 User Stories,接下来的章节阐述了更多编
写 Stories 的细节,通过用户模型来收集 Stories,当你无法接触到真正用户的时候怎样编写
Stories。第一部分以一些能改善你的 User Stories 的指导结束。
第二部分:估算和计划—当我们具备了一些 Stories 的时候,我们最常问的就是“我们
需要多长时间来开发”?第二部分揭示了如何通过故事点来评估 Story,如何计划一个跨度
3~6 个月的发布计划,如何更细节的计划接下来的迭代计划,最后,如何去衡量进度以及
衡量这个项目是否按你的预期进行。
第三部分:经常讨论的主题—第三部分通过描述 User Stories 和一些其他的需求分析
方法的区别,例如 User Case、软件需求规格说明书和交互设计场景的区别开始,接下来的
一节阐述了 User Stories 在发现错误和适应敏捷开发方面的优势,最后一章来讨论一些小问
题,例如:Stories 应该写在纸上还是记录在软件系统里,怎样处理没用的需求等等。
第四部分:举例—一个包含了前面所讲述的所有内容的例子。如果我们要求开发人员
能够通过 story 最好的理解用户需求,那么在这本书中增加一个展示 user stories 所有方面的
例子是很重要的。
第五部分:附录—User stories 由极限编程产生。虽然阅读这本书之前,你不需要对极
限编程很熟悉,但是附录 A 仍然为你提供了极限编程的简要描述。附录 B 为你提供了本书
所有章节的习题答案。
1 从这里开始
第一部分我们将快速浏览什么是 user stories 以及如何使用,然后将阐述如何编写 User
Stories;如何通过系统用户模型来定义 Stories;当客户自己本身无法前来的时候,如何同
那些能够充当客户角色的人一起工作;如何来编写测试用例,来证明你的 Stories 已经被成
功编写的细节,最后将阐述几条编写好的 Story 的指导建议。
当你学完这部分之后,你就可以定义、编写、测试你的 Stories,同时你应该准备去看
如何通过 User Stories 去进行评估和计划,也就是第二部分的内容。
1.1 概述
软件需求是一个沟通的问题,想得到(或者使用,或者出售)新软件的人,必须和软
件的生产者进行沟通。项目的成功与否,依赖于从不同的人那里得到的信息:一方面是客
户、用户、分析人员、领域专家以及其他从业务或者组织角度来看待软件的人;另一方面
则是技术团队。
如果任何一方控制了沟通,那么项目注定会失败。如果业务一方控制,则会要求功能
3

和日期,而不太担心开发人员是否能全部完成或者开发人员是否明白他们的真正要求;如
果开发人员控制了沟通,技术术语会代替业务语言,开发人员也失去了通过倾听来了解客
户真正需求的机会。
我们需要一种方法让大家一起合作,以至于沟通不会被单方控制,并且资源分配中的
感情因素和原则问题就变成了双方共同的问题。.当资源分配完全倾向一方的时候,项目就
会失败。如果开发人员全权负责(无论怎样都必须在 7 月份之前全部做完),他们可能会
因为一些附加的功能而牺牲质量,或者只实现部分功能,或者独自制定本该客户或用户参
与制定的大量的决定。当客户和用户方全权负责,项目前期就会出现一个漫长的讨论过程,
在这个过程中越来越多的功能被从项目中删除,当软件被交付的时候,甚至实现的功能比
删掉的功能少。
我们已经知道了我们不能够完美的预言一个软件开发项目。当用户看到软件的初版时,
他们会产生一些新的想法,改变一些他们原有的想法,由于软件的不可把握性,开发人员
进行时间估算变得非常困难。由于种种原因,我们无法罗列一个完整的 PERT 图表来显示
我们在项目里所必须完成的全部工作。
那么,怎么办?
我们经常通过手头已经掌握的资料来做决定,会好过在项目初期就做出所有的决定。
我们把做决定分散到整个项目过程中。为了做到这一点,我们要确认已经有一个尽早尽多
获得相关的资料的程序。User Stories 由此而生。
1.1.1User Story 是什么?
User story 是对软件的用户或买主有价值的功能点的描述。User stories 由以下三点组成:
l 用来制定计划和作为提醒的一段书面描述
l 用来充实 story 的细节的谈话
l 测试用例,用来表达和记录细节并且能够在 story 实现的时候对进行验证
因为 User Story 的描述是通过传统的手写记录在卡片上,所以 Ron Jeffies 给这三个方
面起了很好的名字,Card(卡片),Conversation(会话),和 Confirmation(确认)。卡
片是 story 最可见的表现形式,但是他不是最重要的。Rachel Davies 已经说过,卡片“重现
客户需求场景好于记录它们”。思考 User Stories 的完美方法是:card 包含 story 的正文,通
过会话得出细节,并记录在测试用例中。
User story 的例子,请参见 Story Card 1.1
Story Card 1.1 是一个写在卡片上的初期的 User Story
(用户可以在网站上发布简历)
为了保持一致,贯穿剩下的这本书的例子大多都是为 BigMoneyJobs 网站而设计的。其
他的例子故事可能包括:
· A user can search for jobs(用户可以查找职位)
· A company can post new job openings(公司可以发布新的职位)
· A user can limit who can see her resume(用户可以限制那些人可以查看他的简历)
因为 user stories 描述了对客户来说有价值的功能点,所以对这个系统来说下边的例子
就不是好的 user stories。
· The software will be written in C++.(软件应该用 C++来编写)
· The program will connect to the database through a connection pool(软件应该通过连
接池来连接到数据库).
4

第一个例子对 BigMoneyJobs 来说不是个好的 user story 是因为用户根本就不关心使用
哪种编程语言。但是,如果这是一个应用程序接口,用户(他本身就是个程序员)写下
“The software will be written in C++(软件应该用 C++来编写)”就会很好。
第二个 story 在这种情况下也不是个好的 user story,因为系统的使用者并不关心应用
程序如何连接到数据库的技术细节。
也许,你已经读了这些 stories 并且很惊讶地说,“等等,使用一个连接池是我这个系统
的一个需求”如果这样的话,请一定要清楚,编写 stories 的关键点在于让客户认可他们的价
值,我们将在第二部分“编写 story”里看到一些关于编写 Story 方面的例子。
1.1.2 细节在哪呢?
说“A user can search for jobs(用户可以查找职位)”是一件事情,而能否只靠这个作为
指导就开始编码和测试却是另外一件事情。因为,细节在哪里呢?类似于下边的这些问题
怎么办呢?
l What values can users search on? State? City? Job title? Keywords?(用户查询的条件
是什么?州?城市?职位?关键字?)
l Does the user have to be a member of the site?(用户必须是网站的注册用户吗?)
l Can search parameters be saved?(可以保存查询条件么?)
l What information is displayed for matching jobs?(查询页面上应该显示哪些信息
呢?)
许多类似的细节可以当作另外的 stories 来描述。实际上,多做几个 stories 比做一个很
大的 stories 要好。例如整个的 BigMoneyJobs 网站可以用这两个 stories 来描述:
l A user can search for a job(用户可以找工作)
l A company can post job openings(公司可以发布职位空缺(好机会))
很明显,这两个 stories 太大了,大到没有太大用处.,在第二章“编写故事”中,完整的
阐述了故事大小的问题。从一、两个开发人员花费半天或者两个星期来编写和测试一个
story 开始,是一个不错的起点。公平一些来讲(Liberally interpreted),上边的两个
stories 简单的概括了 BigMoneyJobs 网站的大部分功能,,每一个大概要花费程序员多于一
周的时间。
当一个故事太大的时候,他通常会被作为一个 Epic(译者注:此词本意为史诗级的,
我没有找到合适的汉语词汇表达,就是大的故事集的意思)提出.Epics 可以被分割成两个
或更多个小故事。例如,这个 Epic“A user can search for a job(用户可以找工作)”就可以被
分割成这些 Stories。
l A user can search for jobs by attributes like location, salary range, job title, company
name, and the date the job was posted.(用户可以通过地区,薪水,职位,单位名称,和职
位发布日期来搜索)
l A user can view information about each job that is matched by a search.(用户可以查
看搜索出来的每个职位的详细信息)
l A user can view detailed information about a company that has posted a job.(用户可
以查看发布职位空缺信息公司的详细信息)
但是,当我们的 story 能够涵盖所有的细节时,我们就不再去分割 story 了。例如,故
事“A user can view information about each job that is matched by a search”是非常适度和实用的。
我们不需要再去把它进一步的像这样去拆分:
l A user can view a job descrīption.(用户可以查看职位描述)
l A user can view a job's salary range.(用户可以查看职位薪水)
l A user can view the location of a job.(用户可以查看工作地点)
5
剩余37页未读,继续阅读
资源评论

- hitpolen2014-11-11资源不错,就是内容稍微少了点。才38页。。。

joyyingyi
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
