「敏捷开发」用户故事:需求敏捷化
wxin55 2024-10-28 20:25 17 浏览 0 评论
需求敏捷化
Kanban及Scrum的敏捷开发方法论无法解决需求敏捷化;但是「用户故事」能很好地解决
用户故事是一种轻量级的敏捷分析方法
- 对用户有价值的功能点进行简单描述
- 用户故事不能使用技术语言来描述,要使用用户可以理解的业务语言来描述
一个好的用户故事包括三个要素:
- 角色 Who
- 活动 What
- 商业价值 Why
用户故事的5C特性
「Card 卡片」用户故事通常写在故事贴/卡片上;可能写上故事的简短描述/工作量估算等
「Conversation 交谈」用户故事的细节来源于与客户或者产品负责人的交流沟通
「Confirmation 确认」通过验收测试用例,验收「用户故事」被确认完成
「Construction构建」团队通过技术手段实现这个用户故事的功能或要求
「Consequence 后果」交付给用户真正使用,获得反馈
用户故事的优点
- 「用户故事」强调面对面的直接沟通,而不是文档的交流;因为文档很难应对用户需求的频繁变化;导致最后没人去阅读那些文档
- 「用户故事」易于开发人员与客户/用户的共同理解(没有用技术用语,而是采用用户的语言来简单描述需求)
- 「用户故事」可以分割成颗粒度比较小的用户故事,非常适合迭代开发
- 「用户故事」鼓励推迟考虑细节;可以很快地写出独立的用户故事,非常适合时间有限的项目
使用故事点进行工作量评估
Sprint计划会议里,有一个很重要的技术环节「故事点的估计」:对要开发的用户故事进行一个粗量级的估算,对用户故事的复杂度有一个具体的了解
- 传统软件团队通常用工时估算工作量:工时是一种绝对估算的方式;它的估算方法,通常依赖于历史经验信息;对流程较为固定,需求较为稳定的团队来说,工时估算方法是适合,但是工时估算难以应对客户需求的频繁变更,
- 敏捷估算方法是相对估算的概念,没有绝对的估算天数和小时数;故事点是敏捷开发过程中,常用的一种相对估值方式:针对不同需求,可以估算一个需求比另一个需求更大,大多少倍;但是不确定每个需求的准确工作量;一旦对某个故事点的相对规模达成共识,就可以快速分配,而无需太多辩论故事点让团队基于难度而非时间来解决问题,这使得团队成员更关注于创造价值;而不是专注于花了多少时间
- 故事点估算软件规模可以使用近似斐波那契数列: 「0,1?2,2,3,5,8,13」 或 T-恤尺码: 「XS,S,M,L,XKL 」来估算;帮助团队围绕工作规模,做出更好的决策
【Tips:实际工作中,工时或故事点规模估算没有优劣之分;只有适不适合;总而言之,良好的估算实践 1??有助于团队掌握项目的成本和盈利能力 2??还有助于团队对于要交付的需求规模,优先级,价值达成共识;从而更好的做出业务决策」
用户故事分析的典型步骤
- 用户角色:不仅是人的岗位,角色,还包括周边系统
- 业务流程:用户与被实现系统之间的交互流程;但不包括系统内部各部件之间的交互流程(各系统之间的交互还有数据库等,在用户故事里面是感知不了的;在实现用户故事时,如果有涉及到系统之间的交互,也要想好要什么样的旅程「用户故事地图」:点击跳转新的,还是直接打开页面。而且作为产品,有时候有监控数据需求时,还需要明确哪些信息怎么存,或者存不存)
- 提取用户故事:根据用户故事可以感知的层次,从交互步骤中提取出一个个的用户故事
- 整理用户故事:如果用户故事太大,则需要进一步分割;如果用户故事太小,则可以跟其他用户故事合并
优秀用户故事的六个特征(INVEST原则)
- 「Independent 独立性」一个用户故事尽可能独立于另一个用户故事;用户故事之间的依赖性使得确定计划,确定优先级,工作量估算变得很困难;通常会通过组合用户故事或者分解用户故事,减少用户故事得依赖性
- 「Negotiable 可协商」一个用户故事得内容,要是可协商得;用户故事不是合同,只是对需求的一个简短描述;不包括太多细节;具体的细节在沟通阶段产出,如果一个用户故事带有太多的细节;实际上它限制了和用户的沟通
- 「Valuable 有价值的」 每一个用户故事必须对客户有价值;一个让用户故事有价值的好方法是让客户写下它们;让用户意识到这是一个用户故事,而不是一个契约;而且在可以协商的时候,他们是乐于写下用户故事的
- 「Estimable 可估算的」 开发团队需要去估算,以便确定优先级,工作量,和安排计划
- 「Small 短小」 一个好的用户故事,尽量短小,最好不要超过10个人日的工作量;至少要确保能在一个Sprint里完成;因为用户故事越大,安排计划工作量的风险也就越大
- 「Testable 可测试性」一个用户故事要是可测试的,以便于确认是可以被完成的;如果不能被测试,那就无法知道它什么时候可以完成【Tips: 用户故事也是测试/验收驱动开发的实践』
相关推荐
- Java中List 和 Map、Set 的区别(list和set和map)
-
hello,大家好,我是霖仔java集合的大家了解,我再给大家说一下他们的区别,希望能够帮助到大家结构特点:List和Set是存储单列数据的集合,Map是存储键和值这样的双列数据的集合;Lis...
- Java 集合框架全面解析:选对数据结构,提升开发效率
-
上一章我们详细介绍了各种常用的数据结构情况(参考:数据结构复杂度全览:如何选择最优结构?),本文结合关键数据结构,从列表(List)、队列(Queue)、集合(Set)、映射(Map)四个维度,深入解...
- LinkedList竟然比ArrayList慢了1000多倍?(动图+性能评测)
-
数组和链表是程序中常用的两种数据结构,也是面试中常考的面试题之一。然而对于很多人来说,只是模糊的记得二者的区别,可能还记得不一定对,并且每次到了面试的时候,都得把这些的概念拿出来背一遍才行,未免有些麻...
- LinkedList 底层源码深度解析(linkedlist底层数据结构)
-
目录1.引言2.LinkedList概述2.1类继承体系图2.2各个接口作用3.与ArrayList的对比4.底层数据结构5.核心方法源码解析5.1add()方法5.2a...
- List的用法和实例详解——Java进阶知识讲义系列(四)
-
序欢迎来到全网最完整的Java进阶知识系列教程!!!每天定时更新!!!本期是Java进阶知识系列的第四讲,将分享Java常用的数据容器——集合类。集合类也分很多类型,比如:List、Set、Map、Q...
- Rust高效集合操作(rust基本操作)
-
集合的分类Rust的集合类型主要分布在标准库的std::collections模块中,同时也包括语言内置的数组和字符串类型序列容器序列容器维护元素的顺序,适合需要按索引访问或顺序遍历的场景向量(...
- Java八股文:核心知识点梳理(java八股文是啥)
-
一、Java基础1.Java基本数据类型8种基本类型:整型:byte(1),short(2),int(4),long(8)浮点型:float(4),double(8)字符型:char(2)布...
- 为什么我不推荐研发人员使用 LinkedList?
-
在Java集合框架中,LinkedList作为List的实现之一,经常被认为是ArrayList的替代方案。然而,在大多数实际场景下,我们并不推荐使用LinkedList,原因主要集中...
- ArrayList 、 LinkedList、Vector的区别
-
ArrayList、LinkedList、Vector的区别如下:ArrayListLinkedListVector结构动态数组双向链表动态数组是否线程安全否否是效率遍历查找快,插入删除慢插入删除...
- (2020 )Java最新面试笔试题答案解析(一)
-
Java中的集中基本数据类型是什么?各占用多少字节?【数值型】—(整数类型)byte(1字节)short(2字节)int(4字节)long(8字节)拓展:Java中的数据类型除了上面的基本...
- 超简单五步实现Linux虚拟机CentOS 7系统Root密码忘记重置
-
环境:CentOS7.5重置root密码:1.CentOS7虚拟机开机,将鼠标光标移动至虚拟机内。2.在虚拟机中使用键盘上↑和↓键将选择行设置为第一行(背景高亮即为选中),按下键盘上的e,进...
- 吊轨门和推拉门哪个好?北京今朝区别介绍看完不入坑
-
厨房到底使用什么门好?相信这是大多数业主都比较抓狂的事情,其实在装修中材料的选择最终还是要依据空间而定,那么吊轨门和推拉门哪个好呢?下面就跟随北京装修网一起来看看吧!吊轨门与推拉门介绍吊轨门吊轨门的特...
- 〖省钱宝典〗不花冤枉钱,少走弯路!居家中推拉门如何设计?
-
想要空间最大程度的显大?想要充足的光线?又想拥有合理的区域划分?那么推拉门是你绝对不能错过的好选择。推拉门的设计轻盈简洁,绝对是室内每个空间的福音。它不仅可以最大化地节省空间,方便了居室的功能划分和利...
- 吊趟门与推拉门有什么区别?(吊趟门贵还是推拉门贵)
-
吊趟门与推拉门的区别很多人在购买的时候并不清楚,有些客人甚至根本分不清吊趟门和推拉门,今天小编就给大家讲讲吊趟门与推拉门的相关内容,看看吊趟门与推拉门的区别有哪些?1、推拉门采用以门扇下滑轮为主支撑点...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Java中List 和 Map、Set 的区别(list和set和map)
- Java 集合框架全面解析:选对数据结构,提升开发效率
- LinkedList竟然比ArrayList慢了1000多倍?(动图+性能评测)
- LinkedList 底层源码深度解析(linkedlist底层数据结构)
- List的用法和实例详解——Java进阶知识讲义系列(四)
- Rust高效集合操作(rust基本操作)
- Java八股文:核心知识点梳理(java八股文是啥)
- 面试题:ArrayList和LinkedList有什么区别?
- 为什么我不推荐研发人员使用 LinkedList?
- ArrayList 、 LinkedList、Vector的区别
- 标签列表
-
- hive行转列函数 (63)
- sourcemap文件是什么 (54)
- display none 隐藏后怎么显示 (56)
- 共享锁和排他锁的区别 (51)
- httpservletrequest 获取参数 (64)
- jstl包 (64)
- qsharedmemory (50)
- watch computed (53)
- java中switch (68)
- date.now (55)
- git-bash (56)
- 盒子垂直居中 (68)
- npm是什么命令 (62)
- python中+=代表什么 (70)
- fsimage (51)
- nginx break (61)
- mysql分区表的优缺点 (53)
- centos7切换到图形界面 (55)
- 前端深拷贝 (62)
- kmp模式匹配算法 (57)
- jsjson字符串转json对象 (53)
- jdbc connection (61)
- javascript字符串转换为数字 (54)
- mybatis 使用 (73)
- 安装mysql数据库 (55)