`
ipioneer
  • 浏览: 47947 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

编写用户故事时常犯的五个错误

 
阅读更多

大多数敏捷软件开发和测试中关于收集需求出现的问题都来源于用户故事。的确,对于很多敏捷团队来说要以如此简洁的形式准确表达出需求并非容易的事。如何编写好的用户故事是很多刚开始接触敏捷开发流程的团队所经常遇到的问题。如果在编写用户故事的时候稍有不慎,很可能会导致开发错误的测试用例和错误地理解需求,然而最糟糕的是实现了与预期不一致的功能最终导致本次迭代宣布失败。接下来让我们来看看在编写用户故事过程中五个最常犯的错误。

用户故事简介

所谓用户故事就是指使用一段简短的描述表达出用户的需求。在很多敏捷方法如极限编程和Scrum中,都使用用户故事来表达需求。任何时候,只要有可能的话用户故事都应该由客户编写,否则,至少要由能够代表客户的商业代表或者能够代表潜在客户的代表来编写。用户故事应该尽量保持简短,而且最好能够写在3×5英寸的卡片上。卡片上的文字应该表明该用户在系统中的角色,从该用户的角度来表述的需求,以及实现了这个功能的好处。

这么做的主要目的是为了能够根据该新功能的达成条件(DoD)来估算团队完成这项功能所需要的时间。用户故事同时也促进了团队的交流,从而挖掘出更多的商业和技术需求,同时也减少了对需求的主观推测。有人会把用户故事和用例以及场景混淆,它们最大的不同就是用户故事更加简短而且不会描述程序的界面、步骤或流程。用户故事的达成要用验收测试来确认,验收测试通常来源于验收标准,验收标准有时也被叫做达成条件。在用户故事级别的估算,我们通常使用点数,理想日数或者其它单位而不是使用实际时间来衡量在某个功能特性上所需要的时间。在编写用户故事的时候,我们通常使用这样一个模板:“作为一个…我希望能够…这样我就可以…”。这里的每个空对于表达和理解需求来说都非常重要。

五个常犯的错误

1. 从用户的角度编写用户故事
例子:“作为一个用户,我希望能够管理广告,这样我就能够移除过期的和错误的广告。”

扎眼一看,你可能会觉得这个用户故事没有什么问题,因为所有需要的元素都有。但是再仔细想一想,这里说的用户到底是谁?这个管理广告的功能要为谁开发?这个用户对广告管理又有多了解呢?他是一个希望进行数据库清理和广告管理的portal管理员?还是一个希望知道自己已经都放了多少广告,并且能够移除不再需要或者有错误内容的广告的广告商呢?正如你能想到的,我只是提到了两个不同角色对系统的不同需求而已。所以,在这个例子中所缺少的是用户的角色。

2. 为Product Owner创建的用户故事
例子:“作为一个Product Owner,我希望系统能够有删除广告的功能,这样用户就能够删除广告了。”

我们从这个例子再次看到了一个拥有所有标准元素的错误的用户故事。首先,这个用户故事是很典型的“你需要一个用户故事嘛,就给你一个好了”形式。很显然,写这个用户故事的人只是为了完成任务,因为通常你只会在你的团队正在开发一个敏捷开发管理软件的时候系统中才会出现Product Owner的角色。如果出现这个问题,就表明了你的公司在实施敏捷流程的时候出现了状况。第二,这里出现的问题和第一点是一样的,就是用户故事中并没有能够代表用户期望的角色出现。

3. 为开发人员创建的用户故事
例子:“作为一个开发人员,我希望能够替换掉文件夹界面,这样我就完成了维护文件夹界面了。”

这是一个技术型待办列表或者技术型需求的典型例子。有时候,这样的用户故事代表着一个所谓的技术债务,也就是说,长期累积下来的没有进行的维护任务,例如软件升级、重构、框架修改等等。这种用户故事要完成虽说没错,但是在这个例子中它并不能表现出其中的商业价值以及对客户的价值,因此Product Owner并不会买账的。另外,从敏捷的角度来看,你需要在每次迭代之后都能够产生可交付的商业价值,而且团队需要在评审会议上展示给股东看。那么我们应该如何编写此类用户故事呢?重新以用户角色的角度来编写。例如:“作为一个商业用户,我希望系统能够同时进行多个搜索,这样我就可以更快地完成我的工作。”然后,在把这个用户故事拆分成任务的时候就可以定义一些如:“重构搜索处理机制,使其能够为单个用户进行多线程搜索”,“升级Java的版本到64位版。”这个时候,验收标准就需要定义成可以量度或者测试的。例如:“单个用户可以同时进行5个搜索。”和“搜索必须在4秒钟之内返回结果。”

4. 没有商业价值或者用户价值
例如:“作为一个商业广告商,我希望能够过滤选项。”

在这个例子中,我们既看到了角色,又看到了需求,但是却没有看到商业价值和原因。我们可以问:“为什么一个商业广告商会需要过滤选项呢?他到底想要干什么呢?”

5. 没有验收标准或者达成条件
在这里你可以使用上面的任何一个作为例子。没有验收标准通常所导致的后果就是低估了工作量,同时也会导致错误地划分任务和错误地估算。用户故事很有可能会因此无法通过测试,或者是由于误解了用户故事而导致测试用例无法覆盖正确的用例。验收标准在确认需求的理解和确定用户故事的完成中扮演着非常重要的角色。验收标准的另外一个作用就是使得Product Owner和团队之间的沟通更加频繁。一个获得验收标准的好办法就是多问“如果…会怎么样?”,“…在哪里?”,“什么时候…?”,“如何…?”等问题。同时也可以举例和画图来消除疑虑。这通常会在提炼、重新计划或者分割用户故事的时候发生。

原文地址:http://www.scrumalliance.org/articles/366--common-mistakes-we-make-writing-user-stories


分享到:
评论

相关推荐

    C语言易犯的错误

    5. **缺少分号**:C语言语句结尾通常需要分号,如`a = 1;`。忘记加分号会导致语法错误,可能会影响到后续的代码解析。 6. **多余的分号**:在复合语句或条件语句(如`if`、`for`)后的分号会改变语句的结构,可能...

    Java 程序员在写 SQL 时常犯的 10 个错误

    以下是根据标题和描述中提到的几点,对Java程序员在SQL编程中常犯错误的详细解析: 1. 忽视NULL的特殊性 NULL在SQL中的含义是未知,与Java中的null不同。Java程序员经常混淆这两个概念,尤其是在使用NULL作为比较...

    解读C#程序员最易犯的7大错误

    以下是从标题、描述和部分内容中提炼出的C#程序员最常犯的7个错误及其解决方案: 1. **格式化字符串**: C#中的字符串是不可变的,这意味着每次对字符串进行修改都会创建新的对象。例如,通过串联字符串创建SQL...

    ASP常犯的错误

    ### ASP常犯的错误知识点详解 #### 一、Form表单语法错误 在ASP开发过程中,经常遇到的一个问题是由于表单语法错误导致的数据提交失败。一个典型的例子是表单元素`<form>`标签中的属性设置不当。例如: **错误代码...

    PHP开发者最常犯的11个MySQL错误编程小技巧共4页

    然而,许多开发者在编写代码时可能会不经意地犯下一些错误,这些错误可能导致性能下降、数据丢失甚至安全漏洞。本篇内容将详细解析PHP开发者最常犯的11个MySQL编程错误,并提供相应的解决小技巧。 1. **未使用...

    总结AngularJS开发者最常犯的十个错误

    以下总结了AngularJS开发者最常犯的十个错误,帮助大家避免这些陷阱,提升开发效率。 1. MVC目录结构不清晰: 开发者通常按照文件类型(如模板、控制器、指令、服务和过滤器)来组织代码,但这可能导致随着项目...

    Oracle错误码大全(CHM).rar

    例如,错误码ORA-00920表示无效的SQL语法,这通常是因为用户在编写SQL语句时犯了语法错误。错误描述会列出错误的具体位置,而解决方案可能包括检查和修正SQL语句的语法。 对于开发者和DBA来说,掌握Oracle错误码...

    c语言易犯错误

    ### C语言易犯错误 C语言作为一门基础且强大的编程语言,在学习过程中,初学者往往会遇到各种常见的陷阱和误区。本文将根据前人的经验和教训,总结出一系列在编写C语言程序时容易出现的问题,并对这些问题进行详细...

    php 编写安全的代码时容易犯的错误小结

    以下是对PHP编写安全代码时容易犯的错误的详细分析: 1. **不转义HTML实体**:不转义用户提供的数据在输出到HTML页面时,可能导致XSS攻击。应使用`htmlspecialchars()`或`htmlentities()`函数转义特殊字符,例如`、...

    日常小错误

    根据提供的文件信息,这里主要关注的是“日常小错误”的总结与分析,以便于避免重复犯同样的错误。虽然这部分内容没有提供具体的错误实例或背景信息,但从IT行业的角度出发,我们可以探讨一些常见的技术性错误以及...

    C语言编程 实例常见编译错误

    1. **语法错误**:如括号不匹配、分号遗漏、关键字拼写错误等,这些都是初学者最容易犯的错误。 2. **类型不匹配**:在赋值或函数调用时,不同的数据类型可能导致编译错误。 3. **未声明的变量**:使用未声明的变量...

    经常见的c语言错误集锦

    然而,C语言的强大同时也伴随着易犯的错误,这些错误往往源于其对程序员的自由度较高,要求程序员具有较高的编程技巧和严谨性。本文将围绕常见的C语言错误,包括编译错误、链接错误及运行时错误,进行深入解析,并...

    Windows程序运行原理及程序编写流程

    初学者常犯的错误包括但不限于:忘记声明函数原型导致的链接错误,不理解指针和引用的区别,滥用全局变量,忽视异常处理,以及不理解动态内存管理(如malloc/free或new/delete)可能导致的内存泄漏。注意这些常见...

    MATLAB常见错误之总结.pdf.zip

    1. **语法错误**:这是初学者最容易犯的错误。例如,忘记在函数调用后添加分号(;),导致输出结果直接打印在命令窗口,而非预期的行为。还有可能是在字符串中误用了单引号和双引号,或者在赋值语句中使用了非法变量...

    如何避免常见的6种HTML5错误用法

    然而,许多开发者在使用这些新标签时容易犯一些常见错误,导致代码质量下降,甚至影响用户体验。本文将深入探讨六种常见的HTML5错误用法,并提供相应的避免策略。 ### 一、误用作为的替代品 错误做法:在HTML5中,...

    编译时常见错误.pdf

    1. **数据类型错误**:这是编程新手最容易犯的错误。确保每个变量和常量都有明确的数据类型声明,并且在进行赋值操作时,变量之间必须是相同类型的。对于`scanf()`函数,要确保用户输入的数据类型与预期匹配,避免因...

    使用 JavaScript 编写的打字速度游戏.zip

    您只需输入所提供的文本,不要犯任何错误。此外,当您犯错时,单词中的错误字母将变成红色,背景也会不断变化。 此外,该项目包含大量 JavaScript,用于对项目的某些部分进行验证。 如何运行该项目? 要运行此项目,...

    CSS网页布局时常犯的几种小错误小结

    总结了以上常见错误和解决方案,前端开发者在进行CSS网页布局时应该注意这些问题,避免犯下影响用户体验和页面呈现的错误。这不仅需要开发者在代码书写时保持细心和耐心,也要求对不同浏览器的兼容性有足够的了解和...

    c语言编程易犯毛病

    以下是从标题“C语言编程易犯毛病”及其描述中提取的一些关键知识点,这些知识点涵盖了C语言编程中容易遇到的错误,帮助读者更好地理解和避免这些常见问题。 ### 1. 忽视大小写敏感性 C语言区分大小写,这意味着`a...

    我做科创项目时用到的浏览器——test错误

    1. **语法错误**:在编写Python代码时,可能会犯一些常见的语法错误,如括号不匹配、缩进错误或变量未定义等。这些错误会在运行时导致程序中断,需要通过阅读错误提示并检查代码来修复。 2. **逻辑错误**:如果测试...

Global site tag (gtag.js) - Google Analytics