UDAD 用户故事驱动的敏捷开发 – 演讲实录
敏捷发展到今天已经在软件行业得到了广泛认可,但大多数敏捷方法都是为了解决某一特定问题而总结出来的特定方法或实践,一直缺乏一个可以将整个开发过程串接起来的成体系的方法。用户故事驱动的敏捷开发(User Story Driving Agile Development – UDAD)就是这样一套方法和实践,希望能够在软件开发的各个过程都提供最有效的方法让希望采用敏捷的团队能够有一个整体的方法论作为指导。
如何你对敏捷还缺乏了解,可以阅读以下文档:
UDAD中采用了以下几个已经被广泛认可的方法和工具:
- 影响地图
- 用户故事地图
- 视觉引导
- Scrum
- Kanban
- 持续集成
- 探索性测试
- 自动化部署
另外,配合以上方法也提供了可以为团队和方法提供支撑的工具支持,在当前的版本中所使用的是微软的Team Foundation Server作为软件全生命周期管理平台。
1 – 重新认识软件开发过程

相对于传统工业化生产中已经标准化的生产制造过程,大多数人所理解的软件“生产制造”过程其实相当于制造原型车的“设计”过程。这也是为什么使用管理标准化的汽车装配生产线的方法(瀑布模式)来管理一直处于设计阶段的软件开发过程是从根本上错误的。

要让软件开发这个“创造”过程变得靠谱(可管理),我们要解决就是内容-实践-质量这3个维度上的平衡问题,而这种平衡必须是在目标不明确,多快好省的交付的前提之下。



敏捷开发的过程管理方法论都是建立在利用变化来适应变化的方法,让我们在面对“复杂”项目的时候可以提高项目成功的可能性。
2 – 什么是用户故事

用户故事是随着敏捷被提出的一种需求管理方法,它既是一种对需求的描述方法,也是协助团队理解需求和管理后续开发过程的基点。

我们必须牢记的是用户故事不用用来写的,而是用来进行讨论,记忆和跟踪的。人类的大脑从来都不擅长记忆大量繁杂的信息,但是我们却可以对很多的场景记忆犹新。采用可视化的方法来讨论需求,并通过结构化的方法帮助团队成员建立对需求的统一理解才是用户故事的核心。

除了协助我们进行需求的设计和规划,在开发过程中我们也要使用用户故事作为我们跟踪整个过程的线索,来组织后续的所有过程,以及团队成员的写作方式,工具的使用,以及最终用户的反馈。
3 – 设计与规划过程

设计过程中我们主要解决的是如何产生需求的过程,这部分内容可以参考以下文章:
这里主要使用了2个工具:
影响地图:请参考以下这几篇文章
用户故事地图:请参考以下这几篇文章
4 – 计划过程

进入到项目的运作过程中,敏捷中成熟的Scrum和Kanban方法就是团队最好的选择,同时由于之前的规划过程建立的良好基础,后续运行Scrum和Kanban的时候就都有了很好的起点。解决了初次接触这些过程方法的团队不知如何入手的难题。
对这一过程的详细描述可以参考:
关于Scrum和Kanban方法请参考:
5 – 迭代开发过程

开发过程中,各种角色的交互会变得越来越复杂,我们需要有一个可视化的方法来让各种不同的角色清楚知道自己所做的事情与其他人的关系,这里Kanban就成了最好的方法。以上列出了TFS中的电子看板的一些主要特性,但是电子化工具与物理工具之间永远各有优势,建议团队要根据情况酌情使用。

开发过程中的coding flow是影响开发人员效率的关键过程,以上列出了一个使用feature branch结合pull request和CI的coding flow。
关于这个过程可以参考以下这篇文档:
6 – 持续交付及反馈过程

有个持续集成作为基础,我们就可继续建立发布管道。能够将应用快速稳定的进行部署是衡量一个团队DevOps实践的重要能力指标,也是大幅缩短MTTR的重要手段。同时,借助探索测试工具,我们可以让用户/业务人员和开发团队紧密结合,形成快速反馈机制。
关于这一过程可以参考以下文档:
总结
至此,UDAD就完成了一个软件开发的闭环。

请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

UDAD 用户故事驱动的敏捷开发 – 演讲实录的更多相关文章
- 用户故事驱动的敏捷开发 – 2. 创建backlog
本系列的第一篇[用户故事驱动的敏捷开发 – 1. 规划篇]跟大家分享了如何使用用户故事来帮助团队创建需求的过程,在这一篇中,我们来看看如何使用这些用户故事和功能点形成产品backlog.产品backl ...
- 敏捷开发(Scrum)与敏捷测试
1.敏捷测试流程和传统测试流程 软件测试是贯穿整个软件开发生命周期.对软件产品(包括阶段性产品)进行验证和确认的活动过程,也是对软件产品质量持续的评估过程,其目的是尽快尽早地发现在软件产品(包括阶段性 ...
- 菜鸟Scrum敏捷实践系列(一)用户故事概念
菜鸟Scrum敏捷实践系列索引 菜鸟Scrum敏捷实践系列(一)用户故事概念 菜鸟Scrum敏捷实践系列(二)用户故事验收 菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划 敏捷开发 ...
- 敏捷开发 Scrum 综述
敏捷开发 Scrum 综述 这一星期学习了敏捷开发,然后阅读了相关的书籍,从网上查找了很多相关的资料,对敏捷开发scrum有了更加深刻了理解,对敏捷开发做了如下总结: 一.什么是敏捷开发? 敏捷开发提 ...
- 用户故事地图(User Story Mapping)之初体验
北京这几日的天儿真是好的出奇,白天风和日丽,晚上繁星漫天:在这样一个周六的下午,小编参加了一次北京敏捷社区(微信号:Agile1001)组织的活动:<用户故事地图User Story Mappi ...
- 划分用户故事(user-story)的原则
在敏捷开发过程中是通过用户故事来将需求具体化成可以进行迭代开发的一个个现实的可见的开发任务.因此在敏捷软件的开发过程中,用户故事的划分对于迭代和开发起着举足轻重的作用. 用户故事从其名字来看是站在用户 ...
- 打造Worktile敏捷开发管理工具的思与惑
从2019年初,我们团队准备开发一款适合研发团队使用的敏捷开发管理工具,那时候我们也在思考,到底什么样的工具才算是优秀的研发管理工具,研发管理的场景.方法和流派有很多,市面上关于研发管理工具的产品也是 ...
- 武林高手?敏捷开发,唯velocity取胜
去年学习软件工程教材,初识敏捷开发.目前所在的团队,也是使用敏捷开发方式.今天读了这篇文章,对于这段时间的效率有所警醒.其次,个人认同文章中的用户故事,结对编程思想. 文章援引:http://gitb ...
- 敏捷开发学习笔记-Agile development(AM)
以人为核心,迭代,循序渐进 项目被切分为多个子项目,每个子项目都经过测试,具备集成和可运行的特征 5个价值观:沟通.简单.反馈.勇气.谦逊 敏捷模型与瀑布模型的区别 相对于瀑布模型,提高开发效率和 ...
随机推荐
- 使用CSS3的box-shadow实现双透明遮罩层对话框
box-shadow介绍 在我之前的一篇文章<从天猫和支付宝身上学习opcity与rgba>中,介绍了实现双透明遮罩层效果的两种方法,分别是opacity和rgba.他们需要分别依赖于不同 ...
- 到爱尔兰敲代码 / Come, Coding in Ireland
这是我在都柏林的第四个月,该办的证也都办完了,该安定下来的也安定下来了,所以也简单介绍下到爱尔兰做IT的相关过程和政策. 如果有兴趣在英语环境工作的话,我也可以帮忙推荐或者找找. 去年15年1月正好开 ...
- 警告: [unchecked] 对作为原始类型IScheme的成员的write(TProt ocol,T)的调用未经过检查
jdk 从8 改成了7 就好了! 或者, 修改源码, 每个响应的地方加上 surppressingWarnings xxx , 或者使用 请使用 -Xlint:unchecked 重新编译. 参照 h ...
- substring的用法
public String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串.该子字符串从指定的 beginIndex 处开 ...
- PDO连接mysql数据库
1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...
- SQL Server 进制转换函数
一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...
- Oracle_数据处理
数据操纵语言 DML(Data Manipulation Language – 数据操纵语言) 可以在下列条件下执行: - 向表中插入数据 - 修改现存数据 - 删除现存数据* 事务是由完成若干项工作 ...
- springMVC+ajax 文件上传 带进度条
前端代码: <form id= "uploadForm"> <p >指定文件名: <input type="text" name= ...
- Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XM ...
- URI编码解码和base64
概述 对于uri的编解码,在js中有3对函数,分别是escape/unescape,encodeURI/decodeURI,encodeURIComponent/decodeURIComponent. ...