何谓敏捷软件开发?与传统软件工程的对比

Posted superxiaoying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了何谓敏捷软件开发?与传统软件工程的对比相关的知识,希望对你有一定的参考价值。

大家好,下面的内容将阐述我对于敏捷软件开发的产生背景、理解以及在实际运用中对于敏捷开发的误解。如果有理解阐述不正确的地方,欢迎指正!

敏捷软件开发 Agile software Development

敏捷开发是一种软件开发方法,基于迭代和增量开发,通过自组织,跨团队,沟通协作完成开发工作。[1]

想必大家会看到过下面这张图,对于整个庞大的复杂的软件项目,在背景知识需求了解的基础上,首先要尽可能的将项目进行模块的划分,并且尽量减少耦合,对于每一个小的模块

进入该部分的冲刺阶段,通过不断的交付可以使用的软件(可能只有最终所有功能的一小部分)面对面的讨论,而给予开发者正能量的反馈(包括可以运用的小的demo和用户给的有

效建议)和用户可以部分使用的软件产品,从而使得整个开发过程有效而不死板。

诶?照我这么说,敏捷软件开发让开发者和用户皆大欢喜,以后都用敏捷软件开发好啦?

其实,敏捷软件开发对于开发者本身的经验素质要求比较高,如果不是一个条理很清晰以及有经验的项目开发者,恐怕很难做到抽取用户需求(很多时候,用户对于自己的需求是表

达不清楚滴~),并将项目有效的划分的。

 

 

敏捷软件开发有一个宣言和12条准则,大家可大概看一下12条准则好对敏捷软件开发的具体有个了解,我们详细阐述对于宣言不等式的理解。

敏捷开发的12条准则

 

这个链接中有详细的对于12准则的阐述 http://blog.csdn.net/joeyon1985/article/details/42266135  ,目前给我们的感觉是,这是我们一个强大的团队,具有主动性,可以

不断的交付部分功能的产品,并能调整好团队状态接受建议和未知的改变。

 

敏捷软件开发宣言 

个体和互动 高于 流程和工具

工作的软件 高于 详尽的文档

客户合作 高于 合同谈判

响应变化 高于 遵循计划

O(∩_∩)O~ 接下来是对于敏捷软件开发宣言这四个不等式的理解,首先请允许我强调一下:

1.敏捷软件开发!= 快速完成项目

  只要你的老板一天还觉得敏捷就是快,我觉得这发展情况就一天好不起来。

  敏捷软件开发是面对复杂长期的项目,具有可扩展性的开发方式,实现的是全局最优,而不是局部最优哦~

2.右边比左边更重要,但不代表左边的方法不好

  左边右边是指敏捷软件开发宣言中的四个不等式,即 个体和互动 > 流程和工具 等。左边和右边的准则只不过是在不用量级的项目背景下的选择而已,没有好与坏!

3.强调面对面交流!=没有开发文档

  任何事情都请不要理解的辣么绝对嘛~

4.长期开发实践项目!长期开发实践项目!长期开发实践项目!

  • 个体和互动 > 流程和工具  

  人是一种需要持续能看到行动的正反馈的动物,只有持续地有正反馈人才能坚持重复一个过程。嗑瓜子就是持续有正反馈,长期学习计划之所以很难坚持也是因为没有足够快的

正反馈。[2]想想你更愿意在有小小成就感和正能量的环境下努力完成任务,还是强大压力看不到进展的模式下前行?

  敏捷编程就是想办法制造尽可能快的正反馈给程序员,这样他们不至于很快疲掉,以至于没有人想继续工作在这个项目上了。

  敏捷开发强调把关注点回归到“人”上,其背后的哲学思想可追溯到康德的“人即目的”。

  同时,主张面对面交流和客户参与开发, 弥补了缺少文档而产生信息流通不畅问题, 认为开发人员之间、开发人员和客户之间相互协作、相互信任、彼此尊重是保证沟通成功的

必要条件。但注意,敏捷软件开发重视面对面对于项目的讨论,但不是不需要文档。敏捷开发不是没文件没流程的包装纸。

  背后的现实——开发过程中的人力资本的高企。
 
  一个典型的项目花在人力上的金钱是花在硬件上的时间的20 倍, 这意味着一个项目每年要花2 0 万美元在程序员身上, 而仅仅花10 万美元在电脑设备上。很多聪明的程序员说:“ 我们如此聪明, 发现一种方法可以节省20%的硬件开销” , 然后他们使得源程序大且难懂和难以维护, 他们会说: “ 但是我们节省了20%或者2 万美元每年, 很大的节省” 。但财务事实告诉我们,如果程序简单而且容易扩展,我们将至少节省10%的人力开销,这将是一笔更大的节省。同时,软件开发的职业本身也决定了数量少但精干的团队的效率与产出大于臃肿、混乱的大团队。敏捷开发一般适用于20-40人、甚至更少。
  • 可以工作的软件 > 面面俱到的文档
  区别于传统的软件开发模式,客户只有在系统被开发完成以后才能真正去体会它。敏捷编程通过要求不断交付可用的软件, 周期越短越好,加强客户的反馈来缩短开发的周期, 同时获得足够的时间来改变功能和获得用户的认同。但并不是要求你快速的完成整个项目,开发者不要有太大压力,因为可工作的软件是想要给你小小的成就感,面对面的交谈是想给你更加直接有有效的反馈。

  背后的现实——“快鱼吃慢鱼”的竞争模式。

  区别于工业社会的利用流水线、规模化的生产模式,信息时代更强调对用户需求的快速响应。标准化生产所带来的低成本、高可靠性的特点不能直接保证市场的高份额。相反,对用户需求的细腻把握和快速响应却是以用户为导向的服务型公司的生命线!
  • 客户合作 > 合同谈判

 

  敏捷开发要求在项目过程中, 业务人员与开发人员必须在一起工作,参与开发,采用高效信息的交互平台以及能够减少歧义沟通和交流的方式进行支持。敏捷方法完成了从重视文本到重视对话,从重视书写到重视理解的转换。

  背后的现实——用户无法对其自身需求进行有效描述

  诚然,在实际项目开发过程中,用户是无法对自身的需求进行有效的描述,这一点如果有失败,将会导致最终的产品不可能完全满足客户需求。最经典的例子莫过于苹果的iPad、iPhone了。在乔布斯没有推出iPhone之前,用户是不知道他们需要智能机,更准确地来说就是无法对智能机的需求进行有效描述的。这也就是为什么诸如诺基亚、摩托罗拉等公司失败的原因之一。他们不是没有市场部门,不是没有进行市场调研、用户需求分析,问题在于一般用户在缺乏相关知识与指导的情况下是无法对自身需求(特别是潜在需求)进行有效描述。这一缺陷在市场竞争随着节奏的加快显得愈发致命!

 

  • 响应变化 > 遵循计划
  敏捷开发的口号是拥抱变化,即欢迎对需求提出变更,甚至是在项目开发后期。要善于利用需求变更, 帮助客户获得竞争优势。

  背后的现实——试错成本低、执行力要求高

  现代社会最重要的特点就是多元化,用所谓的“互联网思维”说就是“去中心化”,具体到个人应该就是 Open mind。这一社会现实反应在软件开发上就是 试错成本变得相当较低。但与此同时,快速变化的商业大环境也对执行力提出了高要求,而执行力的关键指标就是对变化的快速响应!
 
写在最后的话
 
实际上,敏捷软件开发方法对“人”提出要求,需要思维模式和价值观的支撑,才能真正理解并运用“敏捷”方法。在《管理3.0》一书中,作者Jurgen Appelo给出了一个具有六只眼睛的异形生物,并取名为“Martie”,代表了运用“敏捷”方法的人应该所具备的六种思维模式,如下图的“六眼怪”,所以要实现敏捷软件开发的路还很长。

 

引用文献

[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 为什么我不推荐敏捷开发?

 

以上是关于何谓敏捷软件开发?与传统软件工程的对比的主要内容,如果未能解决你的问题,请参考以下文章

从找女朋友就可以体会出,敏捷与传统的区别

浅谈敏捷软件开发与传统软件工程的对比与敏捷开发产生的原因

敏捷软件开发VS传统软件工程

敏捷开发与传统开发

敏捷软件开发与传统软件工程

小议敏捷软件开发与传统软件工程