`
阅读更多
最近在参与一个棘手项目,居然直接参与到需求阶段了。 虽然,目标是架构师不过,分析师的活看来也是要会的。网上找到一篇(好像也是唯一一篇)讲述use stories的文章。拿来借鉴一下吧。。。。

出处:Extreme Programming 论坛
作者:light

胡乱说说,里面肯定存在着不少的错误,还请高手指正。

Use Stories就是系统要实现的功能。它表述起来非常的简单,一个Use Stories只需要几句话就可以写完。之所以这样是因为用户需求的细节是非常易变的,而其高层描述却是相对稳定的。所以我们可以通过使用Use Stories的方法来从高层确定需要开发的内容,这些单纯的Use Story相当于系统中可能的点,而由我们通过与用户交流所得到的所有Use Stories则构成了一个面,它就是整个系统所需要实现的功能。

深入思考上面这段话的含义就会发现Use Stories在整个项目的初始分析阶段起的作用只是一个占位附。他告诉我们这样功能在实作的时候应该要实现,但是具体需要实现什么,怎么实现则是在迭代 过程中的分析阶段所需要的事情。所以在写Use Stories的时候请切记,一定要简单概括,不可明确描述实现细节方面的问题。

说到这里就不能不说一下Use Story与Use Case的关系,我个人认为Use Story是一个更高层的分析阶段,它的抽象层次非常的高,如前面所说,它是一个占位符,而在具体对一个Use Story进行分析的时候则可以使用Use Case分析技术,将一个Use Story分解成为若干个Use Case。当然上面这段描述的前提是需要开发的系统足够的大Use Story对相对较大,一个Use Story可以折分一系列Use Case。但是如果项目的规则相对较小,那么可以直接使用Use Case来取代Use Story,这个在开发的时候需要灵活的掌握,不可死板追求到底用Use Story还是Use Case。

Use Story中除了包含对功能的简单描述之外,还可以酌情加入对异常情况的描述。虽然在具体分析一个Use Story的时候还需要将其异常情况进行详细的列出,但是在撰写Use Story的时候还是有必要的尽可能的将它们列出,其原因在于,对异常情况的描述可以帮助我们发现一些在正常情况下无法体现出来的Use Story之间的关系。这对我们撰写Use Story的描述部分是有一定的帮助的,另外也可以在这个初始阶段提出一些问题,然后等待进入具体迭代的分析阶段时再进行解答。

Use Story内的描述只是开发者系统的一个最初步认识,所以以后开发者在实际开发时参考这些Use Story时一定要持着一种怀疑态度,再重复一次Use Story只是对高层系统一部分的抽象度非常高的描述。用户在具体开发的时候应该维护一份Use Story列表,如果在实际开发一个Use Story(或者这个Use Story所对应的某一个Use Case)的时候,遇到了对其它Use Story有影响的问题应该在这份Use Story列表当中标出。以便我们在这些受影响功能进行分析的时候可以尽量多的认识到这些影响它的问题。 

用户在对Use Stories进行优先级的排序后,这个顺序虽然不是在未来完成整个系统的过程中实现Use Story的顺序(因为需求是易变的),然而一般情况下这个Use Stories的优先级排序,却决定了第一次 迭代的开发内容。优先级高的Use Story应该先完成,这是直面风险的一种方式,按照XP的描述来看, 用户认为优先级越高的Use Story所存在商业价值就越大,当然其风险和不确定性也就越大,所以我们应该先实现它。

在用户确定了第一次迭代过程中所需要开发 的Use Stories后,那么我们就可以将这些Use Stories分解成相应的任务了,注意,用户虽然为第一次迭代选择了相应的Use Sotries,但是这些Use Stories却未必会在第一次迭代当中完成,因为正如前面所说Use Stories的作用只是一个占位符,我们通过Use Stories所了解的系统功能只是极为抽象的内容,单凭这些内容我们是无法估算出完成一个认识所需要的具体时间的,所以在决定开发一个Use Story的时候需要对这个Use Story进行进一步的分析,将这个Use Story拆解成若干个任务。折解的目的是Use Story所被折解成的任务将都是可以进行开发时间评估的(大小基本可知),只有这样的任务开发人员实际工作起来才会感觉到心里有数,一个Use Story所表示的抽象范围比较广,可以先将这个Use Story折解成若干个Use Case或者更小的Use Story(再强调一次,Use Case要比Use Story的抽象极别低),然后再将具体的Use Case折解成具体可以进行评估的任务。而如果我们对一个任务无法进行评估的话,那么可能就说明我们任务还有细分的余地,我们可以将它拆解成更小的任务 (当然这里有一种情况是由于团队内的开发人员都不清楚任务所涉及到的专业知识,所以造成无法对任务的工作时间进行评估,在这种情况下,可能就需要一个此领 域的专家帮忙了,或者如果没有这样条件的话,那么开发团队在经过对这种专业知识的短时间学习后再对任务进行评估?,或者重新评估使用此技术所付出的代价是 否可以在一定的成本范围之内)。

在对Use Story进行拆解的过程当中经常会遇到的一个问题就是可以从进一步的分析过程当中得到一些浅在的Use Story或者Use Case。可以将这些Use Story或者Use Case加入到列表,然后评估其是否有必要被加入到本次迭代,如果有的话,那么一并进行分析,如果没有的话,那么将其安排到其它的迭代中来完成。

在拆解任务的过程中,我们应该保持对核心 问题的注意力,举个例子来说,比如说我们要处理一个发送信息到指定用户的Use Case,这个Use Case核心的问题就是将信息成功的发送到指定用户处,而在拆解这个Use Case的时候我们发现校验收件人用户是否有效的操作也是一个相对比较复杂且工作量比较大的工作,因为它涉及到与帐号系统的配合工作。在这个时候我们所采 取的策略就应该是将用户校验操作视为完成整个发送信息过程操作当中的非核心步骤,不需要对这个问题太过纠缠。在分析的时候只需要把它当做一步操作,而在实 做的时候也只需要定义一个用户校验的接口,然后使用Mock对象的技术来满足发送邮件时对用户校验系统的需求即可。

另外在拆解任务的过程当中还应该注意的一 点是,不应该让我们所能够承受的复杂度和负载度超标,比如说当我们发现从一个Use Story分解出来的Use Case复杂的足以让我们不能够一次对付他们的时候就应该明智的将对Use Story的分析改成对某一个或者某几个特定Use Case的分析。只有使用客中化整为零,各个击破的策略才能够使我们在面对大型软件的时候保持我们的控制力。 
 
Archie的评价  2004.10.07 
虽然不能准确的对故事进行估算,但是还是要进行估算的,而且团队的速度也是用故事的度量单位来衡量,而不是任务。
要进行估算就要对故事进行比较详细的了解,要和客户进行大量的沟通,了解到什么程度呢?能进行估算了为止。 

分享到:
评论

相关推荐

    use平台简单开发例子

    【USE平台简单开发例子】 USE(Universal Service Engine)普元平台是一个企业级的服务开发和运行平台,它提供了全面的服务管理、服务开发、服务部署和监控等功能。本教程将通过一个简单的开发例子,帮助你理解如何...

    Writing Effective Use Cases

    ### 有效撰写Use Case 的关键方法与实践 #### 标题理解:《撰写有效的Use Case》 本书聚焦于如何高效地编写Use Case文档,旨在帮助读者掌握正确的编写技巧,从而更好地捕捉、分析并表述系统需求。 #### 描述解读...

    netuse命令详解

    ### netuse命令详解 在Windows操作系统中,`netuse`命令是一个非常强大的工具,用于管理网络资源的连接,包括映射网络驱动器、断开网络连接等操作。它允许用户轻松地访问网络上的共享资源,如文件夹或打印机,而...

    UseCase2.0 PPT

    随着敏捷开发方法论的兴起,对用例的需求并未减弱,反而催生了UseCase2.0的诞生,以应对更加复杂多变的项目需求。 ### UseCase2.0:适应与进化 UseCase2.0由Dr. Ivar Jacobson与Ian Spence共同提出,旨在应对更...

    net_use命令详细解释

    ### net_use命令详细解释 #### 一、net_use命令简介 ...掌握其使用方法对于提高工作效率和网络管理水平具有重要意义。在日常工作中,可以根据具体需求灵活运用该命令的不同选项,以达到最佳效果。

    ranger-2.1.0-usersync.tar.gz

    在“ranger-2.1.0-usersync.tar.gz”这个压缩包中,我们关注的是Ranger的用户同步工具(Ranger Usersync),这是一个关键组件,用于将组织的用户和组信息从身份提供者(如Active Directory或LDAP)同步到Hadoop集群...

    UseCase文档模版在面向对象软件开发中的应用

    Use Case驱动的面向对象软件开发方法是一种以用户需求为中心的方法论,由Rational统一过程(RUP)所提倡。在这个过程中,Use Case模型扮演了核心角色,它清晰地描述了系统与用户间的行为交互,为系统分析和设计提供...

    Language in use Story time PPT课件

    本课件是一个优秀的英语ppt课件,课件中的相关知识点,帮助老师更好的完成本科的教学,是很好的教学...该文档为Language in use Story time PPT课件,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看

    net use 远程关机

    特别是针对1326错误和1219错误的处理方法,对于需要进行远程管理工作的技术人员来说是非常实用的知识点。同时,在实际操作过程中还需要注意权限管理和安全性的考量,以确保系统的稳定性和安全性。希望这些信息能够...

    uml - writing effective use cases 带PDF书签版本

    在软件工程领域,Use Case是一种描述系统功能需求的方法,它从用户的角度出发,描述了用户与系统交互的过程以及期望的结果。Use Case通常包括以下几部分: 1. **标题**:简短地描述Use Case的主要功能。 2. **参与...

    遥感图像数据集UCMerced_LandUse

    对于UCMerced_LandUse,由于图像尺寸较小,直接使用像素级别的特征可能不足以区分某些类别,因此,局部二值模式(LBP)、灰度共生矩阵(GLCM)、哈里斯角点检测等高级特征提取方法常被用于增强分类效果。 在模型...

    Language in use Story time PPT课件2

    【Language in use Story time PPT课件2】是一个专门针对英语教学设计的优秀课件,旨在帮助教师更有效地教授语言知识,尤其是英语中的词汇和过去简单时态的使用。本课件聚焦于Module 8的"Story time"部分,通过生动...

    Caniuse用于查看浏览器对各种新特性的兼容情况

    Caniuse是一个非常重要的在线工具,对于前端开发者来说,它是一个不可或缺的资源库。这个工具主要用来查询不同的浏览器对Web开发中新特性的支持情况。在不断发展的互联网技术中,JavaScript和其他相关技术的新特性...

    software testing use case

    标题“software testing use case”指代的是一篇关于软件测试中使用用例方法的文章。用例(Use Case)是软件工程中一种描述软件需求的方法,用于详细说明系统如何响应外部的交互来达到特定的业务目标。在软件测试...

    layui.use模块外部使用其内部定义的js封装函数方法

    本文将详细讲解如何在layui.use模块外部使用其内部定义的js封装函数方法,这对于提升代码复用性和模块化编程至关重要。 首先,我们要理解layui.use模块的工作原理。layui.use是一个异步加载模块的方法,它可以按需...

    Use+Case在嵌入式系统故障问题中的应用

    本文探讨了以Use Case为基础的故障模式分析方法在嵌入式系统中的应用。这种方法能够在系统分析的早期阶段,通过对系统进行结构化分解,减少故障系统分析的复杂度,确保分析过程中不会遗漏重要细节。此外,通过关注...

    《The Barra US Equity Model (USE4)》.pdf

    《The Barra US Equity Model (USE4)》官方正版说明文档是一份关于金融市场投资分析的专业文件,其内容涵盖了巴拉萨股票模型USE4的核心原理与方法论。以下是从文档中提炼出的相关知识点: 1. 现代投资组合理论与...

    Academic Vocabulary in Use

    Academic Vocabulary in Use is the perfect study aid for anyone using English for their academic work. Ideal for students of any discipline, from engineers or social scientists to business students or ...

    DOS下net use 命令详解

    在DOS操作系统中,`net use`命令是一种强大的工具,用于管理和控制网络连接。这个命令允许用户映射网络驱动器、断开连接、添加或删除用户账户,以及建立和查看网络资源的连接状态。本文将详细解析`net use`命令的...

    C语言头文件 USE_ANSI

    C语言头文件 USE_ANSIC语言头文件 USE_ANSIC语言头文件 USE_ANSIC语言头文件 USE_ANSIC语言头文件 USE_ANSIC语言头文件 USE_ANSIC语言头文件 USE_ANSIC语言头文件 USE_ANSIC语言头文件 USE_ANSIC语言头文件 USE_ANSI...

Global site tag (gtag.js) - Google Analytics