关于敏捷开发方法(Agile Software Development)的阅读笔记
对“敏捷开发”(Agile Software Development)这个词,我是在这学期邹欣老师《现代程序设计》课上第一次听到的,刚听到时并不知道其具体指什么,只是从字面上直觉其意思应该是快速开发之类的。这次从 Agile Guide 、 The New Methodology 以及其他一些中文资料上较为详细地了解了敏捷开发方法及其与传统开发方法相比的优势所在,收获颇丰。下面谈谈在这次阅读中所学习到的东西。
一、什么是敏捷开发方法
通常而言,敏捷开发方法是一种以人为核心的、循环的、迭代的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态(来自百度百科)。我想,其关键之处在于迭代。
二、敏捷开发方法的核心思想:适应变化(Adaptive)和以人为中心(people-oriented)
软件开发方法的发展经历了从没有、到繁重的工程方法、再到敏捷开发方法的过程。早起软件开发方法没有完整的规划,是一个短期的、即时的、边写边改的、组合的过程,当系统很小时这种方法可能很有用但是当系统较大时就无能为力了;为了改变这种状况,引进了”方法论“(methodology)的概念,借鉴工程领域的实践提出了规划驱动的方法(plan-driven methodologies)或工程方法(engineering methods)。为了让软件开发更具可预测性(predictable)和更有效率(efficient),强调在软件开发前制定详细的规划来约束开发过程,但成效也并不显著;后来诞生了敏捷开发方法,这种方法企求在无过程和繁重的过程(no process and too much process),也就是上述两种方法中找到一个平衡点,以不多的步骤过程获得合理的刚刚好的结果。其核心有两方面:
※ 强调适应性(adaptive)而非预测性(predictive):不是先制定详尽的需求计划然后按着计划按部就班地做,而是先做出个雏形,然后根据需求的细化或变化进行迭代开发,对需求做出充分的响应。从某种程度上说,这种开发方法不仅不忌讳需求的变化甚至在开发的过程中需求变化得越细越明确,其产品结果越好。
适应性不仅指在开发过程中修改软件来适应需求的变化,更包括自适应的过程,即通过每个阶段的回顾和总结来(What did we do well? What have we learned? What can we do better? What puzzles us?)来发现自身的问题,继而选择一个更合适的方式或过程来进行开发工作,从而不断完善开发过程。
※ 强调以人面向人而不是面向过程(people-oriented rather than process-oriented):工程方法强调事先制定详尽的过程(process)以便让参与进来的人都能按照计划按部就班地做好工作,而敏捷开发方法断言制定过程不能作为一个开发团队技能的组成部分,其角色是支持团队的开发工作。在开发过程中,应以人为中心,让他们与应用领域的业务专家充分接触来汲取业务方面的专业知识,合理安排成员的工作,合理评价、衡量每个人的工作成果,从而成为一个高效的、有责任的开发团队。
三、敏捷开发的价值观
在极限编程四个价值观的基础上扩展到五个:Communication(沟通), Feedback(反馈), Simplicity(简易), Courage(勇气), Respect(谦逊)
四、具体的敏捷开发方法
xp(extreme programing)极限编程、Scrum、Crystal、Context Driven Testing、Lean Development精益开发、(Rational) Unified Process等
五、对敏捷开发方法与传统工程方法的对比的一些看法
读完这篇文章 (The New Methodology) ,我觉得这两种开发方法最大的不同在于着眼点的天壤之别,即 adaptive process 与 predictive process 的区别。
对于敏捷开发来说,强调适应性
“It is adaptivity in the context of a project adapting its software frequently to meet the changing requirements of its customers.”
而对工程方法来说,着重通过完整的需求制定具有预测性的计划
“Everything else in software development depends on the requirements. If you cannot get stable requirements you cannot get a predictable plan.”
1、开发过程的差异。
传统的工程方法(或如文章中所说,成为规划驱动方法)强调先详细了解客户的需求,然后分析需求并制定周密的开发计划,可称之为 “规划编程”。但是想了那么多、那么全面、那么复杂值得吗?要知道,计划是赶不上变化的。相反,采用敏捷开发的方法,关键是先搭出个总体的框架,不要太在意与细节;然后在实践的过程中不断补充、添加细节,在实践的过程中不断完善,一有新的两点就可以加进来,这样不仅能完成任务,而且灵活性很大,给开发过程中产生的很多奇思妙想以实现到项目中的机会,大大提高了项目的质量,从某种程度上也大大减少甚至避免了规划编程的一个很大的缺点——deadline的压力。积少成多,日积月累、集微致盛的哲理在这里得到现和运用。
2、需求变化所带来的影响的差异。
通常,在开始的时候,客户并不真正知道自己想要什么,他们只是有个相当模糊的想法说自己想要个什么样的、能干什么事的软件,传统开发方法在开始前需要想法设法地去探寻客户到底要什么,在这方面它们投入很多,但是结果往往是他们的产品并不是很贴近用户所需,更甚,这时用户不可避免地有新的需求补充,这对开发者来说是致命的打击,不管是在精神上还是在精力上、开发过程上。敏捷开发则不同,它先把一次两次迭代开发的产品拿给用户初步体验,用户在使用这个产品的过程中越发清晰地体会到了哪些功能是有价值的哪些是可以舍弃的,越发明白他们自己到底想要什么样的东西。与此同时,开发者也越来越清楚地知道用户要什么,在下次迭代中应该侧重于哪些方面的开发,这样就达到了 ”双赢“ !这可以说是对用户需求会不断变化这一令人头疼的现实的充分利用,在这里,!"A late change in requirements is a competitive advantage",用户需求的变化成为了一个优点,与传统开发方法害怕用户需求变化形成了鲜明的对比!!!
3、产品偏离用户需求的程度的差异
传统工程方法design在整个开发时间中所占的比重很大,一旦制定完规划后便付诸实践,这个实践所占的比重一般比 design 少。只要做好design,其开发速度便可以变得很快,因为每一步都规划好了,只要按部就班就可。但也正因为其按初期的需求分析进行开发,在开发过程中缺少与用户需求方面的继续沟通,导致了一个致命缺点——这时,初期需求分析的失之毫厘很可能导致最后产品与用户的需求差之千里,导致”徒劳一场“;而迭代开发则是 ”In an adaptive process“—— 在最后定稿前的每个迭代过程都充分与客户交流,一有偏差就改正,这样就更早地发现了不符合需求的地方并及时解决,把产品与需求的差异扼杀在摇篮中,可以说开发的过程就是不断解决现实与需求之差异的过程,就是不断修正的过程,最后自然而然地非常接近用户真正想要的东西,从这方面来看,敏捷开发甩传统的开发过程几条街!
4、产品的衡量标准的差异
传统开发方法由于是按需求分析来做的,因此衡量一个产品是否成功在于是否很好地符合根据需求做出的计划,是否准时和物符所值(on-time and on-cost);
而敏捷开发则看中经济效益——对客户来说产品的价值是否比其投入更多,即是否物超所值。如问文章中所说:” A good predictive project will go according to plan, a good agile project will build something different and better than the original plan foresaw.“
就个人的理解,我想或许我们可以说,迭代过程中体现出来的适应性(adaptive)是敏捷开发方法的精髓,也是它如此备受推崇的核心优势之所在!
关于敏捷开发方法(Agile Software Development)的阅读笔记的更多相关文章
- 谈敏捷,谈开发 --《Agile Software Development》读后感
谈敏捷,谈开发 --<Agile Software Development>读后感 北航计算机学院 110616班 11061171 毛宇 联系方式:maoyu815930@sina.co ...
- Agile Software Development ——敏捷开发
敏捷? 过去几年中,软件行业中出现了一个新词汇——agile:与此同时,一个关于新的软件开发方式的变革正悄然兴起. 在老师的引导下,我阅读了Agile Guide网站上的几篇文章,并查阅了相关资料.不 ...
- 敏捷软件开发 Agile software Development(转)
原文链接: http://www.cnblogs.com/kkun/archive/2011/07/06/2099253.html 敏捷软件开发 Agile software Development ...
- 敏捷软件工程(agile software development) VS传统软件工程(traditional software development)
敏捷软件工程(agile software development) VS传统软件工程(traditional software development) Agile principle ...
- Agile software Development
转自:https://www.cnblogs.com/kkun/archive/2011/07/06/agile_software_development.html 敏捷软件开发 Agile soft ...
- 【软件工程】week5-个人作业-敏捷开发方法初窥
敏捷开发方法初窥 引言:本周的软件工程个人博客作业是阅读关于敏捷开发方法的文章(http://martinfowler.com/agile.html),并撰写自己的读后感.文章内容非常丰富,对敏捷开发 ...
- 软件工程个人作业——Agile Software Development读后感
昨天利用了半天的时间看了下老师给的网页下的8篇文章和一段宣言,将感悟整理为下面的一篇博客. 首先先介绍一下这个网页.记得我们上学期上过一门课叫做面向对象建模方法,在这门课上刘超老师极力推荐的一本教材— ...
- 项目的敏捷开发方法(转自MBAlib)
项目的敏捷开发方法 敏捷方法很多,包括 Scrum.极限编程.功能驱动开发以及统一过程(RUP)等多种法,这些方法本质实际上是一样的,敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作: 按短迭代 ...
- 敏捷开发方法(一) Scrum
Scrum团队:由产品负责人.开发团队和Scrum Master组成. 是跨职能的自组织团队 自组织团队自己选择如何最好地完成工作,而不是由团队外的人指导 跨职能团队拥有完成工作所需要的全部技能,不需 ...
随机推荐
- VS2013 无法在Web服务器上启动调试。IIS未列出与打开的URL匹配的网站。
出现这个问题的原因是:没有用管理员权限运行VS2013. 本来遇到这个问题的时候,不知道什么原因.后来附加到进程调试的时候,提示要以管理员身份运行.才知道啥原因.
- Android快速开发框架LoonAndroid (转)
1.源码简介: 主要有以下模块: (1) 自动注入框架(只需要继承框架内的application既可) (2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性) (3) 网络请求模块(继承 ...
- Web的结构组件
HTTP代理服务器的作用 Web安全,应用集成,性能优化 1. 代理 In computer networks, a proxy server is a server (a computer syst ...
- 怎么解决mysql不允许远程连接的错误
最近使用Navicat for MySQl访问远程mysql数据库,出现报错,显示"1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connec ...
- Web前端性能优化教程03:添加Expires头
本文是Web前端性能优化系列文章中的第三篇,主要讲述添内容:加Expires头.完整教程可查看:Web前端性能优化 什么是Expires头? Expires存储的是一个用来控制缓存失效的日期.当浏览器 ...
- MAC下Eclipse的常用快捷键
整理Eclipse常用快捷键 开发环境切换到Mac下后原来Window下的快捷键很大一部分是不相容的,习惯了快捷键的生活忽然哪天快捷键不起作用了,跟着的就是开发效率明显降低,频繁录入错误的快捷键让Ec ...
- iOS随机生成数字
有时候我们需要在程序中生成随机数,但是在Objective-c中并没有提供相应的函数,好在C中提供了rand().srand().random().arc4random()几个函数.那么怎么使用呢?下 ...
- C++强制类型转换操作符 dynamic_cast
dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用. >>>>>>>>>>>编译器的RTTI设 ...
- 又爱又恨系列之枚举enum
其实枚举挺简单的,只不过以前没好好学,所以不知道这个东西,恩,现在梳理一下 整体而言,首先枚举是一个数据类型,这个数据类型和结构体有点像 可以分为三个层次 1.枚举数据类型定义 第一种:enum 枚举 ...
- Jenkins 2.x新建节点配置(Windows)
2.0版本以上默认加入了权限插件,所以在进入主界面时是需要登录的. 一.主界面->[系统管理]->[管理节点]->[新建节点],进行节点的添加: 二.输入节点名称,已经选择[Perm ...