为什么敏捷开发难于成功?

敏捷开发 - 知识普及 Scrum 仪式 - Sprint 回顾会议(Retrospective Meeting)团队的定期自我检视,发现什么是好的,什么是不好的一般控制在15~30分钟每个Sprint结束都要做全体参加Team可能的客户或其它干系人。 阅读详情

前言: 这不是一篇介绍敏捷开发的入门文章, 而是我学习、实施敏捷的一些感想, 如果你没有实践过敏捷软件开发, 不妨到文末看看书籍推荐。

我大概是在2003年接触敏捷软件开发这个概念,之前无论是在学校的小打小闹项目,还是工作后的项目都是典型的瀑布式开发模式, 设计上自顶向下逐层分解, 设计、实现、测试、上线有条不紊。

除了大学时做的某个人项目, 客户在不停的提需求之外, 基本上没遇到多少需求剧烈变更的情况(可能和做的项目有关,不是定制化软件开发),所以觉得瀑布也挺好啊, 大学里《软件工程》这么课讲的瀑布开发还是很有用的嘛。

但是看到敏捷宣言以后,内心还是被狠狠的震撼了一下: 原来软件开发还可以这么做!

这个宣言是这么说的:

0?wx_fmt=png

注意下面的小字:尽管右项有其价值,我们更重视左项的价值。

这17位软件开发的领军人物所做出的呐喊绝对刷新了我的软件开发三观: 

我们的终极目标是按时高质量的交付可以工作的软件, 不是编写那些非常容易过时的文档,也不是遵循严格的评审流程。  

客户要深度的参与到开发中来,我们会经常的给他们做演示,获取他们的及时反馈, 而不是到最后一刻才得知,我们做的并不是客户想要的。

我们欢迎需求变化(即使在项目的后期!) ,为了达到这个目标, 我们会采用迭代化的开发方式,经常的交付可以工作的软件。

了解理念之后, 很快我就接触到敏捷开发的一个重要流派: 

XP(极限编程), 提出者是Kent Beck, 这哥们搞的更绝:如果一个编程实践很好, 我们就把它做到极致!

测试不是很好吗? 那我们就测试先行, 用测试来驱动代码的生成, 这就是TDD。

代码评审不是很好吗? 那我们就一边编程,一边评审, 两个人同时在一个电脑上编程,这就是结对编程。

......

我被XP给迷住了, 开始自学JUnit,   测试驱动开发, 重构代码这些编程层面的实践。

毫无疑问,这些实践确实能提升代码的质量,但是一直没有机会在一个团队中大规模的铺开使用。

到了2008年, 公司突然间要做敏捷转型,要实施Scrum, 于是又开始了新一轮学习,我这个XP粉丝刚开始还有点小抵触, 后来发现Scrum仅仅是一个框架而已, 我以前学的一些敏捷实践仍然可以运用到其中去。

有了新东西,大家忙活的热火朝天,设立product owner, scrum master。

学习把需求改成用户故事,拆分task,  创建燃尽图。

开Sprint计划会议, 每日站会,Sprint评审会,反思会等等符合Scrum的东西。

当然自动化测试,  自动化Build这些工程层面的东西也少不了。

热乎劲儿过了以后,我不由的困惑起来:这真的

是敏捷吗?

我们并没有因为采用Scrum而变得更好更快的交付软件,仍然是按照原来的节奏每年发布几个release。

我非常期待的特性团队,即一个团队中既有需求人员, 又有开发人员,还有测试人员,文档人员等并没有建立起来。负责需求的业务分析师和开发团队若即若离,测试团队还是按照自己的步点来干活, 无法深度的参与到完成一个用户故事的活动中来。

每个Sprint结束以后很难产生一个可供客户演示、甚至发布到产品环境的软件。

开发团队的本质仍然是老一套,还是依赖项目经理、或者team leader 去驱动各个developer去干活, 看不到自组织(self-directive)的力量。

对用户故事进行工作量评估的时候,大家还是关注资深开发和架构师的意见,做不到全员参与。

那个每日站会完全变成了一个汇报会,向项目经理汇报。

Sprint 说的是橄榄球比赛中的冲刺, 大家团结一致,为了完成该Sprint的目标疯狂向前冲。 实际开发中却很难体会到。

总而言之,我们似乎只是改了形式, 而没有改变精神。

2009年和2010年, 我也有幸走出去实施了几次敏捷咨询服务,包括工行广州开发中心,华为杭州研究所,鼎桥等等。 我发现不仅是我们, 大家都有类似的问题, 实施了敏捷形式而缺乏灵魂。

听起来很美好的敏捷软件开发很难落地,生根发芽,开花结果, 这些情况引起我的反思: 难道理想中的敏捷开发根本就不存在?  为什么敏捷开发这么难于实施?

经过一段时间的思考,我觉得实施敏捷最重要的有以下几点, 如果做不到这几点,敏捷是很难真正成功的:

1.  组织结构一定得变革

如果还是维持那种需求/产品团队, 开发团队,测试团队的方式,各个团队各自为政,老死不相往来的方式,敏捷肯定要失败。

由多种技能人员组成的特性团队是非常重要的,对小公司来说, 建立特性团队相对容易, 但对大公司来说,这简直就是一场革命,肯定要触动不少人的利益,有既得利益者的阻挠, 这是非常难的。

所以很多大公司也了解敏捷的好处, 在小范围内做了试点,然后说敏捷不错, 但现阶段还不适合我们, 最后不了了之。

2. 人的技能和意识一定得提高

先说技能,敏捷开发对团队成员的要求是提高了,而不是降低了。

开发人员要能写代码、写测试、做重构、做Build, 还得具备处理遗留代码的能力。 


写出的代码质量一定得高,扩展性强, 这样才能“拥抱”客户的变化,这比以前随便写代码,完成功能的要求不知道要高了多少。 

敏捷之前的团队有人专门做设计, 有人专门做开发, 敏捷之后这个界限模糊了, 大部分人设计和开发都得做, 对那些习惯做最基本开发的程序员是重大挑战。 

同样,开发角色和测试角色的界限也开始模糊,开发人员要能做些测试工作, 测试人员也要能协助做点开发工作。这样才能够在打仗的时候互相掩护, 奋勇冲锋。 一个人出了状况很快就有人能补上去。 

特性团队中的成员,最好是像军队中的特种兵那样强悍。

其次是意识,正如我前边所提到的,现在的很多团队成员主动性并不强,都是在被动的等待任务的分配, 也不敢大胆的提出自己的观点和见解, 这和敏捷开发的要求是相悖的。

有些公司在大量使用外包人员参与开发, 这些人在工作中就会出现上面的情况,  并不是贬低外包, 我也见过非常优秀的外包人员,  但是大部分人的主动性都不够,  敏捷开发是搞不起来的。

我记得华为有个很强悍的小团队,就几个人, 总是能把事情做的漂漂亮亮, 我相信无论用什么样的开发方法对他们来说都不是问题。 归根结底,还是人的问题。

对于想了解敏捷开发的同学,推荐几本书:


《硝烟中的Scrum和XP》:短小精悍,迅速了解敏捷软件开发。

《敏捷软件开发:原则、模式、实践》: 除了面向对象的设计之外,里边那个打保龄球的例子是个非常好的TDD案例。

《重构 : 改善既有代码的设计》: 敏捷编程实践中最基本技能。

《解析极限编程:拥抱变化》:XP的大师Kent beck的经典。

《用户故事与敏捷开发》 : 描述用户故事的经典图书。

《敏捷估计与规划》: 主讲如何规划一个敏捷项目

《持续集成》:有点老,但是了解下敏捷开发的基石还是不错的。

(完)

你看到的只是冰山一角, 更多精彩文章,尽在“码农翻身” 微信公众号, 回复消息"m"或"目录" 查看更多文章

有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577

0?wx_fmt=jpeg

公众号:码农翻身

“码农翻身”公众号由工作15年的前IBM架构师创建,分享编程和职场的经验教训。

什么是敏捷开发流程? 大家好,我是IT修真院武汉分院第15期学员,一枚正直善良的JAVA程序员。 今天给大家分享一下,java项目中需要使用的敏捷开发流程   1.背景介绍   在很久以前,软件项目的开发都是以年来计算的,这代表什么意思呢 ?需求设计了半年多,方案设计做了半年多,开发了三年多, 测试了半年多,修改Bug用了半年多。总计花了很长很长的时间,然后上线后发现有很多需求已经不存在了,同时又出现了很多新... 阅读详情

相关推荐

2、敏捷开发:理念、成功与失败

本文深入探讨了敏捷开发的理念、成功与失败的原因,以及如何避免陷入形式主义的陷阱。文章回顾了敏捷开发的起源,包括软件危机、轻量级方法的兴起以及敏捷宣言的诞生,分析了敏捷开发的本质在于适应性和以人为本。此外,文章还总结了敏捷开发成功的关键因素,如学习和响应变化、以工作软件展示进度,并提出了避免敏捷开发失败的具体建议,帮助团队真正践行敏捷哲学,实现软件开发的价值最大化。

aa123的博客 102

使您的敏捷开发项目失败的5件事

太多的敏捷开发项目失败了。 即使如此,由于许多软件开发项目最终都“完成”并交付使用,因此即使准确地衡量故障数量也非常困难,即使: 他们花了太长时间才建造 我们建造的建筑质量 很差 建造的不是客户想要的 开发成本 超出了应有的水平 多年以来,我曾在许多不同的敏捷团队中工作,并就敏捷开发向许多团队提供咨询和培训。 这一次, 我发现了5个常见问题,如果不解决,很可能导致项目...

danpu1174的博客 631

敏捷开发十大错误

敏捷开发十大错误 经验总结 经验分享 经验交流

敏捷开发(初探)

此文章为个人培训理解总结,如有错误望及时指出,谢谢 一、敏捷开发是什么 敏捷开发是一种管理模式或者说是管理者对员工的开发模式制定一种开发规则,从而使用敏捷的方式将产品开发出来。 不是所有项目都适合敏捷开发,敏捷开发适合需求会不断产生变化的项目 敏捷开发分为多种 团队性敏捷 项目性敏捷 fas(集团性敏捷) 敏捷开发与传统开发的区别 传统:指令试管理【leader向团队人员分配任务...

fox_bert的博客 382

使用QGIS提取天地图遥感影像中的建筑物轮廓,及AI方案

用QGIS的插件提取遥感影像中的建筑轮廓,并提供了几个AI提取建筑轮廓的方案。

cky_123的博客 2万+

Mplus实战:三变量随机截距交叉滞后模型(RI-CLPM)语法详解与扩展

本文详细解析了Mplus中三变量随机截距交叉滞后模型(RI-CLPM)的构建原理与语法实现。通过将变量分解为稳定的个体间差异与动态的个体内波动,模型能更纯净地揭示多变量间的纵向交互影响。文章以工作压力、睡眠质量与工作满意度为例,提供了完整的语法模板、关键参数设置(如NOCOV命令、残差相关)及结果解读指南,帮助研究者避开常见误区,稳健分析复杂动态关系。

wdx0123456的博客 930

敏捷开发失败的五个原因以及解决方案

鉴于需要反复不断规划、测试、集成以及其他进行中的开发方式,敏捷开发在某些情况下行不通。

西门子Intelligence Center X的博客 1513

微信支付开发之平台给用户转账到零钱的功能

请求消息中应包含商家批次单号、转账名称、appid、转账总金额、转账总笔数、转账openid、收款用户姓名等信息。批次已受理成功,若发起批量转账的30分钟后,转账批次单仍处于该状态,可能原因是商户账户余额不足等。【转账场景ID】 该批次转账使用的转账场景,如不填写则使用商家的默认场景,如无默认场景可为空,可前往“商家转账到零钱-前往功能”中申请。【转账总笔数】 一个转账批次单最多发起一千笔转账。【商家批次单号】 商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一。

程序员weixin_sodomany的博客 3456

敏捷开发和项目管理

以下文章转载自知乎,暗灭-京华九月秋近寒,浮沉半生影长单.暗灭京华九月秋近寒,浮沉半生影长单366 人赞同了该回答前言================================================1.本回答从属于“IT修真院”收藏夹系列第二篇,第一篇是IT职业介绍。第一篇对IT职业做了一个相对深入的介绍,给了想从事互联网职业的人一个了解各个职业的机会,已经有4000+赞了,我想是...

qq_41849945的博客 2463

UE4引擎分析获取UWord,GName,GetName,GObjectArray

UE4引擎具有很多固定特征和特性 所以我们在逆向UE4引擎开发的游戏的时候,可以利用这些特征和特性. 当然,正常思路逆向也是没问题的(例如我们的ttw课程全数据逆向),你就当多了一个针对于该引擎逆向的快捷方式 或则多了一个思路即可. 正常逆向+引擎分析,使逆向结果全面且快速.

任鸟飞2217777779的博客 1万+

网格自适应_Comsol案例解析17:自适应网格的使用

本期导读自适应网格细化有许多优势,比如可以不用对网格进行全局加密,增加计算精度,又会降低求解自由度。本期仍然以气泡上升案例为例,在两相流模块中使用自适应网格。【打开案例模型】【修改网格】适当让气泡边界加密,注意,曲率因子越小,曲线上的网格越密【添加自适应网格】使用默认的参数即可,这里的误差指示器用的是水平集phi。可以根据具体求解模型选择适当的自变量作为误差指示器。【口诀】默认的一般是最...

weixin_28726871的博客 5683

什么是敏捷开发?

敏捷开发(Agile)是一种以人为核心、迭代、循序渐进的开发方法。 在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。 简单地来说,敏捷开发并不追求前期完美的设计、完美编码,而是力求在很短的周期内开发出产品的核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品。 是谁这么厉害,提出了敏捷开发思想?是一位名叫 Ma...

好记性不如烂笔头 16万+

【5G全网建设】Option3X和Option2模式建安市、兴城市和四水市核心网、承载网网络设计与部署

拓扑规划: Option 3X网络拓扑图规划 Option 2网络拓扑图规划 设备部署: 建安市核心网 建安市承载中心机房 建安市骨干汇聚机房 建安市3区汇聚机房 建安市C站点无线机房 兴城市核心网 兴城市承载中心机房 兴城市骨干汇聚机房 兴城市2区汇聚机房 兴城市B站点无线机房 数据配置: 建安市核心网 建安市承载中心机房 建安市骨干汇聚机房 建安市3区汇聚机房 建安市C站点无线机房 兴城市核心网 兴城市承载中心机房 兴城市骨干汇聚机房 兴城市2区汇聚机房 兴城市B站点无线机房 业务调试

weixin_67183034的博客 8869

什么是敏捷开发?敏捷开发流程的8个步骤

敏捷开发(Agile)是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简单地来说,敏捷开发并不追求前期完美的设计、完美编码,而是力求在很短的周期内开发出产品的核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品。是谁这么厉害,提出了敏捷开发思想?是一位名叫 Martin Fowler 的美国大叔。

DreamSun的博客 5万+

Ubuntu中snap简单介绍

通过Snap可以安装众多的软件包。需要注意的是,snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是它占用更多的磁盘空间 介绍一些常用命令,有点类似docker 1、查看已经通过snap安装的snap包 snap list可以查看 2、可以搜索想要的snap包,例如tomcat snap search tomcat

icanflying的博客 4万+

华为OD机考双机位A卷 - 流浪地球(Java & Python& JS & C/C++ & GO )

华为OD机考双机位A卷 - 流浪地球(OD上机考试双机位A卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 4042

敏捷开发为什么敏捷

以往的开发都是模拟一般的传统工业进行的。人们把软件当做一个产品,一个流水线上的产品。所以就出现了先搞可行性分析(其实真正开发的时候没人去搞这玩意儿,既然都要开发了还分析个什么劲~),然后是需求分析,遇到负责的开发团队偶尔会画画图,要是遇到奇葩的开发团队很有可能一个需求闯天下了。整个软件的开发周期中只有一个需求文档其他的什么都没有的开发团队随处可见,因为没有文档所以做不了升级所以只能推倒重来,于是开

郗晓勇|利己者生,利人者恒 5541

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

为什么要敏捷开发,敏捷开发有什么好处?

     软件开发方法一直处在不断发展过程中。在诸多方法中,敏捷开发以其能持续满足不断变化的用户需求正在受到越来越多人的重视,从中小项目开始进入大型开发项目,近几年来上升势头明显。那么,敏捷开发有什么好处呢?       在软件工业界,敏捷开发已成为众多高效开发团队的制胜之道。在欧美软件企业中,有近半数企业已采用敏捷方法进行开发,而近几年受软件外包和外企的带动,敏捷开发在中国也出现了日渐普及的...

iteye_14109的博客 1975

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

敏捷开发

敏捷开发(agile development)是非常流行的软件开发方法。据统计,2018年90%的软件开发采用敏捷开发。 但是,到底什么是敏捷开发,能说清的人却不多。本文尝试用简洁易懂的语言,解释敏捷开发。 一、迭代开发 敏捷开发的核心是迭代开发(iterative development)。敏捷一定是采用迭代开发的方式。 那么什么是"迭代开发"呢?迭代的英文是 iterative,直...

小黄宝宝的专栏 1199

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

何谓敏捷开发

敏捷开发(agile development)是非常流行的软件开发方法。据统计,2018年90%的软件开发采用敏捷开发。 但是,到底什么是敏捷开发,能说清的人却不多。本文尝试用简洁易懂的语言,解释敏捷开发。 一、迭代开发 敏捷开发的核心是迭代开发(iterative development)。敏捷一定是采用迭代开发的方式。 那么什么是"迭代开发"呢?迭代的英文是 iterative,直译为"重复",迭代开发其实就是"重复开发"。 对于大型软件项目,传统的开发方式是采用一个大周期(比如一年...

sanlyshi's front-end road 2988

AI辅助的自动化测试:如何推动敏捷开发的成功

在当今的技术环境中,敏捷开发已成为软件开发的主流方法。敏捷开发强调灵活性、快速迭代和持续交付,旨在提升开发效率并快速响应市场需求。然而,敏捷开发的成功不仅依赖于开发团队的协作和高效的沟通,还需要强大的自动化测试支持。随着人工智能(AI)技术的不断进步,AI辅助的自动化测试逐渐成为提升敏捷开发效率和质量的关键因素。本文将深入探讨AI辅助的自动化测试如何推动敏捷开发的成功,重点分析AI技术在自动化测试中的应用,如何解决敏捷开发中遇到的挑战,并提供实际案例和技术实践,为读者带来全新的视角和启发。敏捷开发要求开发团

测试者家园 1108

为什么要敏捷开发?

敏捷开发转型前要想明白,为什么要敏捷开发?敏捷开发不是用来解决老板们认为的开发人员开发能力不足的问题,也解决不了开发人手不足的问题,更解决不了开发效率低下的问题,它是用来系统解决企业效益问题的,需要正确对待敏捷,正确评价敏捷,敏捷才有可能落地,转型才有可能成功

人生如旅 8973

【敏捷开发方法论】敏捷开发流程和工具实践

敏捷开发是一种强调灵活性和响应性的现代软件开发方法。其核心在于通过迭代开发和频繁交付,迅速响应用户需求和市场变化,提高软件质量和客户满意度。敏捷开发与传统的瀑布开发模式不同,它更加注重团队合作、客户参与和持续改进。

weixin_39372311的博客 1427

什么是真正的敏捷开发?敏捷开发与瀑布开发有何不同

什么是真正的敏捷开发?敏捷开发与瀑布开发有何不同。从本质上讲敏捷开发的一个重要目标是建立持续价值交付的能力。这种能力最终必须服务于业务的创新,促进业务的成功。

阿里云云栖号 1140

为什么那么多程序员讨厌敏捷开发

在跟程序员聊天的时候,一提到敏捷开发,他们总是会流露出不太高兴的表情。你想知道为什么吗? 他们消极的对待敏捷开发思想以及敏捷相关实践方法的原因是什么?有没有这种可能,他们认为导致方法失败的东西其实完全不是敏捷实践,而误会了敏捷的价值呢? 有这种可能性,但是团队成员认为他们只是敏捷教练的棋子。很容易看出他们为什么会这么想。管理上有一种趋势,要么引进独立的敏捷咨询公司,要么雇佣一个敏捷教练,监督团

sky_dsy的博客 4360
上一篇: Java帝国之拨云见日识回调
下一篇: 小张的Duck Typing
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值