用户故事驱动的敏捷开发 – 2. 创建backlog
本系列的第一篇【用户故事驱动的敏捷开发 – 1. 规划篇】跟大家分享了如何使用用户故事来帮助团队创建需求的过程,在这一篇中,我们来看看如何使用这些用户故事和功能点形成产品backlog。产品backlog是敏捷开发中用来管理需求列表,排定优先级,形成迭代计划,组织开发/测试和交付过程的工具。可以说,产品backlog是一个敏捷团队管理开发过程的核心,所有的活动和交付物都围绕backlog来进行。一旦需求明确,我们就必须在开发过程中持续的跟踪backlog内容的实现和交付过程,确保我们的想法可以按照我们希望的时间和质量交付,及时了解偏差并做出调整。
从这个时间点开始,我们需要引入电子化工具来管理我们的开发过程。其实,每个开发团队都会或多或少的使用某种电子化工具,用最多的估计是Word/Excel/Project这种办公软件,还有就是如Jira, Redmine, Bugzilla 等工具。对于软件研发来说,我们需要管理内容包括:1)需求/任务/测试用例/Bug/问题等工作事项;2)源代码;3)各种计划,包括迭代计划,发布计划,测试计划等;4)各种工件(包括:依赖包/在制品/交付物),如:JAR包,WAR包,NuGet包,NPM包,安装包,交付包等;5)人员/团队。所以,对于软件研发管理系统来说,我们至少需要这些功能:1)工作项跟踪;2)计划制定和跟踪;3)人员(包括权限)管理;4)源代码管理;5)自动化引擎。
很多敏捷教练其实对电子化工具持保留态度,觉得电子化的backlog或者kanban等工具会影响团队的参与感和灵活性。对这一点,我也同意,特别是在进行创造的过程中,我也不赞成使用电子化工具。主要原因是创造的过程需要集思广益,需要每个团队成员都有参与感,需要每个人可以随时对于用户故事做出改变,这样的过程如果使用电子化工具会很受限制。
但是,电子化工具仍然有其不可替代的用武之地,特别是我们需要进行持续的跟踪和数据分析的时候,电子化工具就显示出它的优势;同时,如果你的团队分布在不同的物理地点,那么使用电子化工具就成为一种必然。因为这些场景都是物理板无法发挥作用的时候。另外,考虑到软件开发过程的复杂性和各个部分只见关联性很强,如果没有电子化工具的辅助,是很难支撑一个团队的开发工作的。
在我带领团队使用用户故事地图的过程中,随着用户故事数量的增加,我发现团队开始迷失功能点与故事之间关联性,分解出来的功能点被淹没在不同的模块之中了,用户故事已经开始慢慢消失了。这是个非常不好兆头,所以我在这个时候开始要求团队引入电子化工具。
样例程序和用户故事列表
为了能够更好的说明这个过程,在这个系列中我使用【凤凰项目:一个IT运维的传奇故事】这本书为背景的ASP.NET 5样例应用,创建了一些用户故事
关于【凤凰项目:一个IT运维的传奇故事】:本书讲述了一位IT经理临危受命,在未来董事的帮助和自己“三步工作法”理念的支撑下,最终挽救了一家具有悠久历史的汽车配件制造商的故事。 小说揭示了管理现代IT组织与管理传统工厂的共通之处,让读者不仅能对如何管理IT组织心领神会,更重要的是将以完全不同于以往的视角看待自己的工作环境。
可以通过以下链接购买这本书的中文版:http://item.jd.com/10034038960.html

这个样例应用可以通过以下地址访问:
http://pucd.chinacloudsites.cn/

这是一个简单的电子商务网站原型,具备产品列表,购物车,后台管理,促销和订单处理等电子商务网站的基本功能。你可以浏览一下这个网站,对其中的功能简单了解一下。
用户故事列表
以下是我使用影响地图和用户故事地图整理出来的故事列表,每张图片的左侧是影响地图,列出一个故事;右侧是这个故事所分解出来的功能点摆放在用户故事地图上的的效果。





上面5个用户故事所分解出来的功能点我分别使用不同颜色在故事地图上进行了标注,你可以看到当故事不停增加的时候,这个地图会慢慢变得非常庞大而繁杂,分辨出用户故事变得越来越难。
使用Team Foundation Server来管理用户故事
Team Foundation Server (TFS)是微软公司的研发管理平台,其中提供了从需求管理,项目管理,配置(源代码)管理,测试管理,代码编译持续集成,自动化测试,自动化发布及部署环境管理在内的研发运维一体化(DevOps)的完整工具链。微软自己的大多数产品都在使用这个平台进行研发管理,其中也对敏捷开发提供了很好的支持。
在整理用户故事的过程中,我们可以先使用Excel来记录这些用户故事和功能点,同时记录每个功能点所属的功能区域,形成类似以下的文档。

以上表格中,我们用二维表的方式保存了用户故事地图上的所有关键信息,在导入到TFS的时候需要注意:
- 故事地图实际上是一个二维表格,顶部的功能区域/模块部分是功能点的分类,这部分内容可以使用TFS所自带的区域路径 来进行表达
- 每个故事(左侧的WHY-WHO-HOW/WHAT),与右侧的功能点之间是一种父子的一对多关系,可以用TFS backlog中的不同级别的工作项所代表,TFS可以维护不同级别工作项之间的父子关系,正好可以跟踪这部分信息
- 右侧的每个卡片对应到这个二维表顶部的特定的功能区域/模块,我们在导入的时候只要设置每个工作项的 区域路径 字段的值,完成这种对应信息的跟踪
首先,在TFS中按照功能区域和模块创建区域路径,对应到用户故事地图顶部的分类信息

现在我们就可以将我们的用户故事导入到TFS中,

关于如何使用Excel批量导入和更新工作项,请参考:https://msdn.microsoft.com/en-us/library/vs/alm/work/office/bulk-add-modify-work-items-excel
形成的backlog如下,你可以看到TFS很好的维护了我们的用户故事到功能点之间的联系,同时也保留了每个功能点所对应的功能区域,这样就把用户故事地图上的关键数据进行了很好的维护,便于我们从不同的角度来查看和跟踪。

导入的工作项用不同的字段保留了用户故事地图上的关键信息:

当然,你仍然需要对每个用户故事工作项和功能点工作项进行进一步完善,将团队在讨论过程中所产出的信息进行记录,比如:每个用户故事需要包括用户背景,操作流程图,交互设计原型;每个功能点需要包括数据字典,输入输出,数据验证,界面原型等。这些内容可以直接填写在工作项的 说明 字段,或者使用附件的形式上传到工作项上统一保存。
在规划篇中,我强调过用户故事所注重的是它所驱动的过程,而不是那份文档。但是,我们仍然需要将团队讨论中所产生的关键信息进行详细的记录,这样便于团队在后续的开发中回忆起讨论的细节。这些信息在看板或者白板这种物理工具上是无法表达和保存的,所以这个时候引入电子化工具恰到好处。
我们所导入的故事和功能点将构成后续开发所使用的backlog,便于团队对这些内容进行优先级排序,迭代规划,任务分解,测试计划的制定,测试用例的分解等等。也就是说,后续的软件研发过程均会按照我们导入的backlog作为主线进行。这样,团队既可以按照用户的角度来抽取出相应的功能点,也可以从产品模块的角度查看功能列表和影响这些模块的用户需求,保证团队在满足用户需求与架构优化演进之间做出取舍,为团队建立起完整的需求跟踪视图(有很多团队会称之为需求跟踪矩阵)。
见下图,我们之前所做的其实就是建立的图中的 架构模型 和 条目化需求 部分的内容,同时在这两部分内容之间建立的联系,这些是建立一个软件研发管理系统的源头。

至此,我们就完成了用户故事到产品backlog的转化,下一篇中将介绍如何完成开发和测试计划的制定,并开始引入Kanban来跟踪开发过程。
注:以上场景是【DevOps敏捷开发动手实验】的一部分,请点击以下链接访问这个动手实验的指导文档:
http://vsalm-hols.readthedocs.org/
参考资料:
有关用户故事地图:
http://devopshub.cn/2016/01/10/user-story-mapping-for-the-first-time/
http://devopshub.cn/2016/01/11/how-to-create-user-story-mapping/
有关Team Foundation Server:
http://vsalm-hols.readthedocs.org/zh_CN/latest/concepts/about-vsalm.html
用户故事驱动的敏捷开发 – 2. 创建backlog的更多相关文章
- UDAD 用户故事驱动的敏捷开发 – 演讲实录
敏捷发展到今天已经在软件行业得到了广泛认可,但大多数敏捷方法都是为了解决某一特定问题而总结出来的特定方法或实践,一直缺乏一个可以将整个开发过程串接起来的成体系的方法.用户故事驱动的敏捷开发(User ...
- 敏捷开发(Scrum)与敏捷测试
1.敏捷测试流程和传统测试流程 软件测试是贯穿整个软件开发生命周期.对软件产品(包括阶段性产品)进行验证和确认的活动过程,也是对软件产品质量持续的评估过程,其目的是尽快尽早地发现在软件产品(包括阶段性 ...
- 菜鸟Scrum敏捷实践系列(一)用户故事概念
菜鸟Scrum敏捷实践系列索引 菜鸟Scrum敏捷实践系列(一)用户故事概念 菜鸟Scrum敏捷实践系列(二)用户故事验收 菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划 敏捷开发 ...
- 敏捷开发 Scrum 综述
敏捷开发 Scrum 综述 这一星期学习了敏捷开发,然后阅读了相关的书籍,从网上查找了很多相关的资料,对敏捷开发scrum有了更加深刻了理解,对敏捷开发做了如下总结: 一.什么是敏捷开发? 敏捷开发提 ...
- 【DevOps敏捷开发动手实验】开源文档 v2015.2 stable 版发布
Team Foundation Server 2015 Update 2版本终于在2周前的//Build 2016大会上正式发布了,借这个东风,小编也完成了[DevOps敏捷开发动手实验]开源文档的第 ...
- 用户故事地图(User Story Mapping)之初体验
北京这几日的天儿真是好的出奇,白天风和日丽,晚上繁星漫天:在这样一个周六的下午,小编参加了一次北京敏捷社区(微信号:Agile1001)组织的活动:<用户故事地图User Story Mappi ...
- 划分用户故事(user-story)的原则
在敏捷开发过程中是通过用户故事来将需求具体化成可以进行迭代开发的一个个现实的可见的开发任务.因此在敏捷软件的开发过程中,用户故事的划分对于迭代和开发起着举足轻重的作用. 用户故事从其名字来看是站在用户 ...
- 如何处理scrum中未完成的用户故事?
你听过柏林新建机场的故事吗?机场原定2006年开工,2007年启用,但由于机场建设过程中到处出现施工和安全问题,补东墙漏西墙,导致工期一拖再拖,预算一涨再涨,以至于2019年了还没开张,预计开业时间已 ...
- 打造Worktile敏捷开发管理工具的思与惑
从2019年初,我们团队准备开发一款适合研发团队使用的敏捷开发管理工具,那时候我们也在思考,到底什么样的工具才算是优秀的研发管理工具,研发管理的场景.方法和流派有很多,市面上关于研发管理工具的产品也是 ...
随机推荐
- [c++] Callable Objects
Five kinds of callable objects: Functions Pointers to functions Objects of a class that overloads () ...
- 包含块( Containing block ) 转自W3CHelp
包含块简介 在 CSS2.1 中,很多框的定位和尺寸的计算,都取决于一个矩形的边界,这个矩形,被称作是包含块( containing block ). 一般来说,(元素)生成的框会扮演它子孙元素包含块 ...
- Markdown 语法整理
Markdown 语法整理 白宁超 2015年7月24日14:57:49 一.字体设置 A First Level Header == A Second Level Header -- # 标题 ## ...
- 分享一下刚刚HP电话面试。。。。。。。。我估计我挂了,不过还是要来分享一下
面试官是个中国人,给我是全英文面试,总之是做HP的外包业务,说得很好的工作环境,里面都是一些老外在工作. 首先是要用英文介绍了下自己,我自己觉得自己也还是不错的吧,然后就说了一通(其实我好久没说英文了 ...
- JAVA中关于锁机制
本文转自 http://blog.csdn.net/yangzhijun_cau/article/details/6432216 一段synchronized的代码被一个线程执行之前,他要先拿到执行这 ...
- cssRules在不同浏览器中的兼容性
在一份HTML文档中可以用三种方式添加样式信息: 1.通过<link>元素引用外部样式表: 2.通过<style>元素在文档的头部添加样式信息: 3.在具体的文档元素上通过st ...
- mybatis入门基础(四)----输入映射和输出映射
一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 1.1.1.需求描述 完成用户信息的综合查询, ...
- Windows Phone 如何振动手机?
1. 导入命名空间. using Windows.Phone.Devices.Notification; 2. 通过调用对 VibrationDevice 类的静态 GetDefault 方法获取对振 ...
- 那些年用过的xUnit.net的简单用法
0x01 前言 单元测试,总是伴随着我们的开发过程,优劣自行google.当然呢,不排除有些公司是不做单元测试的, 但是呢,学多一点东西用来防身还是可以的. 0x02 简单的Demo 写个两数求和的方 ...
- [Q&A] 应用程序清单生成失败
当在 Silverlight 客户端属性里(如下图),添加"允许在浏览器外运行应用程序"和"在浏览器内运行时需要提升的信任"时, 图1 目录下会自动生成如下两个 ...