【转】来自《轻松scrum之旅》的敏捷开发总结
敏捷开发的核心价值观是,软件开发最重要的是给用户提供有价值的、可以工作的软件。如何保证提供有价值的软件,是通过反馈机制来完成的。这一点,我们体会很深。自从采用敏捷开发以后,我们比以前更有意识地希望得到各种反馈,包括来自外部和内部的。我们产品的大部分功能都直接来自客户的需求,并按优先级排序。我们有Beta 项目,在开发中期就给客户试用并得到反馈。并且我们在公司的内部网上也部署了最新的版本,并不断更新,得到了大量的用户反馈。可以工作的软件,含义就是软件是可交付给客户使用的。我们每4 周一个Sprint,即迭代。在迭代结束的时候,就会产生一个可以交付给客户使用的版本,这个版本里包含所有新增功能的实现,并且通过所有的测试。这样带来的好处就是可以大大缩短软件开发周期,提高软件质量。并且在临近发布的后期,我们也没有出现特别紧张的现象。每个Sprint 即将结束时的Sprint评审会议可以帮助我们关注可以工作的软件,并能及时得到反馈。
每日Scrum 会议,我们觉得是非常有效的。团队所有成员都通过这个会议同步信息,每天的问题都能及时发现,并能用最快的速度解决。另外,能够形成一种相互之间的压力,每个人要对自己当天承诺要完成的事情负责,每天都不敢怠慢。过去我们通常只是一周开一次例会,汇报一下状态,效率就低多了。Daily Scrum 还给整个团队带来了凝聚力,每个人都觉得自己是团队不可缺少的一员。
采用敏捷开发,对于分布式开发的团队来说,沟通也大大加强了。我们就是这种情况。我们有北京和加拿大两个研发团队,还有分散在世界各地的商业合作伙伴协助开发。采用敏捷促使我们不再过分依赖于文档进行交流,我们主要通过电话、视频,甚至现场进行沟通。另外,我们使用了一些Scrum管理工具,如ScrumWorks 和Rational Team Concert 这些可视化的工具,可以清楚地看到每一个远程团队任何时候的状态,比如Sprint Backlog、Task 的分工及完成情况以及燃烧曲线的情况等,这些都大大提高了沟通的效率和效果。即使是本地的团队,沟通也比以前更有效。比如我们特意安排整个团队都坐在一起,大家的交流变得非常方便。我们有意识地简化文档,而更多采用面对面的交流。交流多了,工作也变得更有趣了。
我们采用敏捷开发,测试很早就介入了,这样就再也不会出现半年多测试部门无事可做,一旦介入便疯狂加班的情况。开发人员也不会由于要更改很久以前的Bug,而把很多时间和精力花费在回忆上。而且一旦发现重大的问题,也不会出现疯狂加班的情况。由于测试的提早介入,开发人员可以立即解决问题,还能够有效地调动测试人员的积极性和主动性,让他们也参与到软件的设计中来。在敏捷开发里,测试和开发的交流更多了。测试和开发不再是两个孤立的部门,而是真正意义上的团队,这有效避免了过去测试和开发之间一些消极的争斗和不合作的局面。
在文档管理方面,我们摒弃了过去烦冗的文档管理,节省了大量的时间和精力。需求、计划以及设计文档我们通常只保留一个一页多的版本,并且放在Wiki 这样的敏捷文档系统上,任何人、任何时候都可以更新它。而且,由于文档只记录必要的信息,所以不需要再像过去那样花大量时间保持同步,不断修改。
由于采用敏捷开发,测试人员的积极性大大提高。过去测试人员一直处于被动的角色,而现在,在开发中就需要测试人员的大量参与,参与需求、参与设计。测试人员对产品的影响力大大增强,也更有利于他们的个人成长。
自我管理的团队是敏捷里的一个比较“酷”的理念,我们也实施得很好。我们的老板也由一开始事无巨细地干预到最后完全变成了教练的角色。老板轻松了,从琐碎的项目管理中解放出来,把精力放到了更重要的带领我们进行技术创新和帮助每个人更快地成长上。我们每个团队成员也更放松,没有人指指点点,自己有更多的决策权,可以调动更大的潜能。每个人在召开Spring 计划会议的时候可以领取自己最感兴趣的任务。事实上,真正运行良好并自我管理的团队,效率远远高于过去习惯被动地接受命令的团队。
Scrum 回顾会议也帮助我们不断地提高。我们采用了一个叫做“Team Pulse Survey”的模版作为我们Retrospective 的框架。在每一个迭代结束后,Retrospective 框架都帮助我们总结哪些地方做得不好,哪些地方做得好。当总结成为一种思维习惯的时候,想不提高都难。
现在都讲可持续发展,软件开发也一样。如果加班可以有效果,那也只限于一个短的时间范围内。但是任何公司、任何软件产品都不希望只是短命的。所以,我们必须有条不紊、有张有弛,决不提倡加班。我们也曾经加过班,但是发现效果并不好,出现代码质量下降、人员士气低落、精力无法集中等问题,这些都是得不偿失的。后来我们没有再加班,而且由于代码质量高,人员士气也跟着高涨,总体效率当然会比以前有很大的提高。
由于每个 Backlog 都有预设的Story Point,因此过去每个迭代一共做多少个Story Point 就非常清楚。我们可以通过以往Sprint 的速率来计划当前的Sprint,这些数据会帮助我们制定当前Sprint 需要完成的工作量,即放入多少个Story。
敏捷开发的工具,我们用了很多。Scrum 项目管理工具,向大家推荐IBM Rational Team Concert 和ScrumWorks。这两种工具都可以帮助我们有效地管理Scrum 流程,尤其适合地理位置不在一起的多个团队使用,能够大大增强敏捷流程的可视化。在分布式开发的情况下,如果没有好的管理工具,很难想象会如何敏捷起来。至于敏捷的工程实践、管理Build 方面,我们采用了IBM Rational BuildForge 这个强大的持续集成工具。另外,我们还用了结对编程工具ECF、自动重构和自动单元测试工具JUnit 等。
下面向大家推荐一个我们实施Scrum 这种敏捷方法的清单列表。首先是拥有一个具有优先级顺序的Product Backlog,每个Backlog 用User Story 来进行描述,制定它的优先级和预估完成工作量。其次是确定团队构成,确定团队是地理分布的还是在同一个位置,最好不要把地理位置不同的一群人算作一个团队。团队成员由开发、测试、文档人员组成,选出一个Scrum Master,每个团队人数最好是3~10 人。接下来,确定每个Sprint 的周期。根据项目情况的不同,两周到两个月都是可以的,但最好不要超过两个月。然后,召开Sprint 计划会议,把每个Sprint 的要做的工作从Product Backlog中按照优先级顺序排序,确定需求,将任务进一步分解,如人员分工等。无论是否采用敏捷或者Scrum,从现在开始就可以尝试每日Scrum 会议,每天选择固定的时间和固定的地点,15 分钟就可以了。如果选在下班前开这个会,那么每个人陈述的3 个问题就是:今天我做了什么?明天我打算做什么?我遇到了哪些困难?应该从Sprint 的第1 天就开始准备测试用例。当Sprint 结束时,不但功能完成,测试也将同时结束。在每个Sprint 结束的时候召开Sprint 评审会议和Sprint 回顾会议。根据团队情况,不断采用敏捷的工程实践,比如Unit Test、Code Review、结对编程、持续集成等。多学习别人的经验。网上有很多资源,还有很多书籍。
Agile 并不是银弹,它不可能解决你所有的问题。Agile 本身并不是一种软件开发流程,而是一种理念,一组行为方法。只有真正理解了Agile 的精髓,才能真正Agile。
You don’t do Agile, you are Agile。
【转】来自《轻松scrum之旅》的敏捷开发总结的更多相关文章
- 【转】敏捷开发 Scrum 总结
转:http://www.open-open.com/lib/view/open1330413325514.html 最近把之前学习 Scrum 的资料整理为一篇文档,在接下来的团队和项目开发中,根据 ...
- 敏捷开发-Scrum 真实
近期研究前 Scrum 数据编译的文件,在接下来的团队和项目开发.项目根据该引入 Scrum 一些练习,提高团队成员和项目之间的交付质量的合作. 参考资料: <轻松Scrum之旅-敏捷开发故事& ...
- 敏捷开发方法-Scrum
为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中的各个环节,主要目的有两个,一个是进行知识的总结,另外一个是觉得网上很多学习资 ...
- 敏捷开发 与 Scrum
敏捷开发以用户的需求进化为核心,采用迭代.循序渐进的方法进行软件开发.在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视.可集成和可运行使用的特征.换言之,就是把 ...
- 编程心法 之 Scrum - Agile 敏捷开发
Scrum是一种敏捷开发的方法 先定一个能达到的小目标 Scrum 团队 包括产品负责人.开发团队和Scrum Master Product Owner 产品负责人:管理代办事项和优先级的唯一负责人. ...
- 敏捷开发与Scrum
敏捷开发以用户的需求进化为核心,采用迭代.循序渐进的方法进行软件开发.在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视.可集成和可运行使用的特征.换言之,就是把 ...
- XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化
XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化 我们现在用的就是典型的XP+devOps模式,已经放弃scrum了 现在还很多公司弄docker虚拟化docker非常复杂,当然 ...
- 小谈Scrum敏捷开发流程
一晃眼,有两年没有写博客了,回顾前两年,各种奔波,各种忙碌,也有不少的收获.从今天开始,我要把这些收获都分享在这里. 其实这两年,对我影响最大的是开发流程.总所周知,一个好的开发流程,对于项目的进行, ...
- [敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum
[敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum 1,Scrum概述 上篇中提到敏捷开发有两种主流的方法,一个是XP,另一个是Scrum,本篇简要介绍Scrum方法.Scrum是 ...
随机推荐
- .NET下文本相似度算法余弦定理和SimHash浅析及应用
余弦相似性 原理:首先我们先把两段文本分词,列出来所有单词,其次我们计算每个词语的词频,最后把词语转换为向量,这样我们就只需要计算两个向量的相似程度. 我们简单表述如下 文本1:我/爱/北京/ ...
- 【转】tomcat下jndi的三种配置方式
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...
- sharepoint 2010 如何给文档库或自定义列表添加评论功能
转:http://www.cfanz.cn/?c=article&a=read&id=40924 最近公司在知识库中,有一个需求,就是想要给文档添加评论功能,在sharepoint 2 ...
- 清理vs工程文件(python2.7)
本文记录了两种方法,用于对vs目录的清理工作,这两种方法都是用python2.7实现的,一个是基于文件的扩展名,一个是基于文件的大小: 基于文件大小的清理脚本: #-*- coding:utf-8 - ...
- JqueryTips小实验,浏览器滚动条不限制
最近做公司的项目有些地方可能需要一些小提示,于是自己建立项目研究tips.在此之前看到过一些别人写的JqueryTips,于是借鉴了一些别人的经验在此基础上我做出了一些改进. 有的同学可能使用过其他一 ...
- jvm 漫谈 笔记
1.Jvm到底是什么呢? Jvm其实就是模拟一台计算机,每种cpu都有自己的指令集,jvm自己设置一套指令集,这就是我满看的的字节码,然后jvm需要执行这些字节码,其实这些字节码最终直接对应到cpu的 ...
- lua协程实现简析
协程,简单来说就是新创建一个协助程序(co = coroutine.create(func)),然后需要手动去启动它(coroutine.resume(co)),在它最终退出之前,它有可能暂停多次返回 ...
- mysql fetch 系列函数
浏览器输出内容同上. 当使用 MYSQL_BOTH 或省略该参数是,将同时具有 MYSQL_NUM 与 MYSQL_ ASSOC 的特性. MySQL mysql_fetch_array 函数取得查询 ...
- 检测是否安装了 .NET Framework 3.5
此脚本是为 Internet Explorer 设计的. 其他浏览器可能在 UserAgent 字符串中不包含 .NET CLR 信息. <HTML> <HEAD> &l ...
- OpenCV - Operations on Arrays 对数组(矩阵)的一些操作
Function (函数名) Use (函数用处) add 矩阵加法,A+B的更高级形式,支持mask scaleAdd 矩阵加法,一个带有缩放因子dst(I) = scale * src1(I) + ...