首页 > 代码库 > 何谓敏捷软件开发?与传统软件工程的对比
何谓敏捷软件开发?与传统软件工程的对比
大家好,下面的内容将阐述我对于敏捷软件开发的产生背景、理解以及在实际运用中对于敏捷开发的误解。如果有理解阐述不正确的地方,欢迎指正!
敏捷软件开发 Agile software Development
敏捷开发是一种软件开发方法,基于迭代和增量开发,通过自组织,跨团队,沟通协作完成开发工作。[1]
想必大家会看到过下面这张图,对于整个庞大的复杂的软件项目,在背景知识需求了解的基础上,首先要尽可能的将项目进行模块的划分,并且尽量减少耦合,对于每一个小的模块
进入该部分的冲刺阶段,通过不断的交付可以使用的软件(可能只有最终所有功能的一小部分)面对面的讨论,而给予开发者正能量的反馈(包括可以运用的小的demo和用户给的有
效建议)和用户可以部分使用的软件产品,从而使得整个开发过程有效而不死板。
诶?照我这么说,敏捷软件开发让开发者和用户皆大欢喜,以后都用敏捷软件开发好啦?
其实,敏捷软件开发对于开发者本身的经验素质要求比较高,如果不是一个条理很清晰以及有经验的项目开发者,恐怕很难做到抽取用户需求(很多时候,用户对于自己的需求是表
达不清楚滴~),并将项目有效的划分的。
敏捷软件开发有一个宣言和12条准则,大家可大概看一下12条准则好对敏捷软件开发的具体有个了解,我们详细阐述对于宣言不等式的理解。
敏捷开发的12条准则
这个链接中有详细的对于12准则的阐述 http://blog.csdn.net/joeyon1985/article/details/42266135 ,目前给我们的感觉是,这是我们一个强大的团队,具有主动性,可以
不断的交付部分功能的产品,并能调整好团队状态接受建议和未知的改变。
敏捷软件开发宣言
个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划
O(∩_∩)O~ 接下来是对于敏捷软件开发宣言这四个不等式的理解,首先请允许我强调一下:
1.敏捷软件开发!= 快速完成项目
只要你的老板一天还觉得敏捷就是快,我觉得这发展情况就一天好不起来。
敏捷软件开发是面对复杂长期的项目,具有可扩展性的开发方式,实现的是全局最优,而不是局部最优哦~
2.右边比左边更重要,但不代表左边的方法不好
左边右边是指敏捷软件开发宣言中的四个不等式,即 个体和互动 > 流程和工具 等。左边和右边的准则只不过是在不用量级的项目背景下的选择而已,没有好与坏!
3.强调面对面交流!=没有开发文档
任何事情都请不要理解的辣么绝对嘛~
4.长期开发实践项目!长期开发实践项目!长期开发实践项目!
- 个体和互动 > 流程和工具
人是一种需要持续能看到行动的正反馈的动物,只有持续地有正反馈人才能坚持重复一个过程。嗑瓜子就是持续有正反馈,长期学习计划之所以很难坚持也是因为没有足够快的
正反馈。[2]想想你更愿意在有小小成就感和正能量的环境下努力完成任务,还是强大压力看不到进展的模式下前行?
敏捷编程就是想办法制造尽可能快的正反馈给程序员,这样他们不至于很快疲掉,以至于没有人想继续工作在这个项目上了。
敏捷开发强调把关注点回归到“人”上,其背后的哲学思想可追溯到康德的“人即目的”。
同时,主张面对面交流和客户参与开发, 弥补了缺少文档而产生信息流通不畅问题, 认为开发人员之间、开发人员和客户之间相互协作、相互信任、彼此尊重是保证沟通成功的
必要条件。但注意,敏捷软件开发重视面对面对于项目的讨论,但不是不需要文档。敏捷开发不是没文件没流程的包装纸。
- 可以工作的软件 > 面面俱到的文档
背后的现实——“快鱼吃慢鱼”的竞争模式。
区别于工业社会的利用流水线、规模化的生产模式,信息时代更强调对用户需求的快速响应。标准化生产所带来的低成本、高可靠性的特点不能直接保证市场的高份额。相反,对用户需求的细腻把握和快速响应却是以用户为导向的服务型公司的生命线!
- 客户合作 > 合同谈判
背后的现实——用户无法对其自身需求进行有效描述
诚然,在实际项目开发过程中,用户是无法对自身的需求进行有效的描述,这一点如果有失败,将会导致最终的产品不可能完全满足客户需求。最经典的例子莫过于苹果的iPad、iPhone了。在乔布斯没有推出iPhone之前,用户是不知道他们需要智能机,更准确地来说就是无法对智能机的需求进行有效描述的。这也就是为什么诸如诺基亚、摩托罗拉等公司失败的原因之一。他们不是没有市场部门,不是没有进行市场调研、用户需求分析,问题在于一般用户在缺乏相关知识与指导的情况下是无法对自身需求(特别是潜在需求)进行有效描述。这一缺陷在市场竞争随着节奏的加快显得愈发致命!
- 响应变化 > 遵循计划
背后的现实——试错成本低、执行力要求高
现代社会最重要的特点就是多元化,用所谓的“互联网思维”说就是“去中心化”,具体到个人应该就是 Open mind。这一社会现实反应在软件开发上就是 试错成本变得相当较低。但与此同时,快速变化的商业大环境也对执行力提出了高要求,而执行力的关键指标就是对变化的快速响应!
引用文献
[1].http://www.cnblogs.com/kkun/archive/2011/07/06/2099253.html 敏捷软件开发
[2].http://www.zhihu.com/question/23429937 什么是 Agile Software Development(敏捷软件开发)
另附对于敏捷软件开发反对的一篇文章 http://www.woshipm.com/zhichang/160479.html 为什么我不推荐敏捷开发?
何谓敏捷软件开发?与传统软件工程的对比