敏捷开发思想之拥抱变化

简介:

秉承敏捷宣言的精神(个体与交付重于过程和工具;可用的软件重于完备的文档;客户协作重于合同谈判;响应变化重于遵循计划),我认为,敏捷开发大致应该体现如下的思想:拥抱变化、自我组织、简单最好、客户至上、有效沟通、精益求精。

1、拥抱变化

 

 Kent Beck和Martin Fowler在介绍极限编程(eXtreme Programming)时,最先提到的就是要拥抱变化。这基本上代表了敏捷阵营对于变化的一种态度,那就是不拒绝,而且还要主动求变。有一句经典的论断说得好:“在软件开发领域中,唯一的不变就是变化。”其实,不仅仅是软件开发领域,世间万事万物都处在永恒的变化之中,这是宇宙的基本规律。奥巴马在竞选美国总统的时候,提出的口号就是“变化”。变化才是真正的常态。

传统的软件开发过程由于过分强调文档的完整,重视与客户的谈判与签订合同。所以,开发团队最希望的一件事情是冻结需求规格说明书。只要双方签字,需求就确定下来,不可更改。若要更改,必须经过需求变更委员会,走非常严格的需求变更流程。如果软件开发真能如此,倒也算是我们开发人员的幸事。但现实总是残酷的,需求总是会变化。变化的原因有以下几种: 
1)业务发生了变化; 
2)客户对业务的理解发生了变化; 
3)需求分析人员对需求的理解出现了偏差,需要修正。

对于第一点,或许我们还能够根据合同与客户讨价还价,而对于后两点,尤其是第三点,我们显然是不可拒绝的。而敏捷方法则要求团队随时响应客户的需求,针对变化给出相应的解决方案。

如何拥抱变化呢?我想可以通过如下方式来实现: 
1)现场客户

很多开发团队并不喜欢客户对他们指手画脚,甚至认为他们不停提出的需求变化让他们疲于应对。但现场客户给团队开发带来的益处还是要远远超过他带来的坏处。无论团队中聚集了多么权威的领域专家,但真正了解客户需求的还是客户自己。也许他们很难用语言来表述自己的想法,但有了和现场客户的及时沟通,我们才能够在发生变化的初始就能够获得第一手的资讯。如果事情总要发生,早解决绝对比晚解决要好,而且要好得多。

如果在开发中,没有办法让客户成为团队的一员,那么我们也应该指定一位客户代表,退而求其次,也应该在团队中指定一位业务专家负责业务事宜,也就是Scrum中Product Owner的角色。总之,我们需要在项目开发中,能够让开发人员在对需求理解发生困惑时,能够明确地知道由谁来负责。而一旦需求发生变化,也必须有专门的角色负责向整个团队或者相关人士传达。至于业务功能的优先级和重要程度排定,也必须由这个角色指定。

2)定期迭代和小版本交付

不仅要定期迭代,而且要尽可能地让迭代周期短,并及时交付可以工作的小版本发布。XP的迭代周期通常为一周,而发布一个小版本大约是一个月。而Scrum则将迭代称之为Sprint,持续时间推荐为一个月。Sprint结束就需要向客户展示当前迭代完成的版本。

敏捷方法绝对不可闭门造车,因为需求总是可能存在二义性,且需求总是处于不断的变化中。若能定期交付一个可以工作的小版本,一方面可以给与开发团队和客户以信心,另一方面也有助于我们及时获得客户的反馈。而衍生带来的还有一个好处是我们可以免费找到最优秀的测试人员了,那就是我们的客户。如果没有现场客户,则小版本的交付则显得尤为重要,因为它给了我们及早修订错误的机会。

3)持续改进

开发过程总是会出现错误,无论是开发方法、技能,还是团队管理与团队合作。持续地改进我们的开发方法、管理方法与开发过程,才能够及时而有效地解决错误,避免重蹈覆辙。一个能够持续改进的团队是一个成长的团队,同时必然会是一个拥抱变化的团队。

在Scrum中,每个Sprint完成并结束了评审会议之后,都会召开一个回顾会议,即使总结优秀经验,检讨错误与教训,团队方能够从错误中成长起来。此外,回顾会议还能够帮助团队正确地认识自己,帮助团队成员进行交流与沟通。作为“鸡”角色的客户若能参加回顾会议,可以让客户更直观地了解团队,比提出自己的看法,有助于在后面的开发过程改善合作的质量。

敬请期待第二篇《敏捷开发思想之自我组织》







本文转自wayfarer51CTO博客,原文链接:http://blog.51cto.com/wayfarer/280167,如需转载请自行联系原作者

相关文章
|
11月前
|
敏捷开发 监控 数据可视化
敏捷开发的6大方法与模型,帮助你快速适应项目需求变化
3分钟了解6种常见的敏捷开发方法,包括Scrum,看板Kanban,极限编程(XP),DSDM、特征驱动开发和水晶法等方法。
1721 5
敏捷开发的6大方法与模型,帮助你快速适应项目需求变化
|
前端开发
ThreeJs通过canvas和Sprite添加标签
这篇文章介绍了在Three.js中利用Canvas和Sprite实现动态文本标签的方法,使得标签可以跟随模型并在3D空间中始终保持面向摄像机。
665 0
ThreeJs通过canvas和Sprite添加标签
|
数据采集
LabVIEW Actor架构特点与适用范围
LabVIEW Actor架构特点与适用范围
237 1
|
存储 监控 关系型数据库
解密MySQL中的临时表:探究临时表的神奇用途
解密MySQL中的临时表:探究临时表的神奇用途
1229 3
|
Web App开发 测试技术 API
playwright使用:启动浏览器与多种运行方式
本文介绍了Playwright,一个用于浏览器自动化的强大工具,支持Chrome、Firefox和WebKit。展示了如何同步和异步启动浏览器,以及使用`with`语句和`start/stop`方法。通过设置`headless=False`可显示浏览器界面。Playwright的等待机制不同于Selenium,采用`slow_mo`全局减速或`wait_for_timeout`进行等待。文章还展示了填写表单和点击元素的示例,并预告下文将讨论元素定位方法。
|
网络虚拟化
VLAN实现二层流量隔离(mux-vlan)应用基础配置
VLAN实现二层流量隔离(mux-vlan)应用基础配置
363 1
|
编解码 计算机视觉 索引
使用ffmpeg MP4转 m3u8并播放 实测!!
使用ffmpeg MP4转 m3u8并播放 实测!!
1042 1
|
存储 缓存 算法
ffmpeg 音视频同步进阶 剖析:ffmpeg音视频同步中特殊情况处理策略
ffmpeg 音视频同步进阶 剖析:ffmpeg音视频同步中特殊情况处理策略
672 0
|
监控 网络安全 数据安全/隐私保护
|
数据可视化 测试技术 定位技术
全链路压测(14):生产全链路压测SOP
从实践经验的角度出发,生产全链路压测在技术实现上没有太多新花样,但要在不同的业务和企业落地,就各有各的实践路径。对于没有太多经验的同学来说,全链路压测的落地,大多还是基于个人的经验和熟悉的领域,即都是在局部作战,缺乏全局的视角和可视化地图。从全局来讲,缺少适用于自己的全链路压测最佳实践。
全链路压测(14):生产全链路压测SOP

热门文章

最新文章