敏捷开发方法初窥

引言:本周的软件工程个人博客作业是阅读关于敏捷开发方法的文章(http://martinfowler.com/agile.html),并撰写自己的读后感。文章内容非常丰富,对敏捷开发方法的解释和探讨也较为深入,在这篇博文中我将就我所学习到的知识进行分享,并对自己特别感兴趣的方面做下探讨。


I 介绍

  在我们(指我以及大多数周围的同学)所不知道的时候,软件开发过程发生了很大的变化。而其中最大的变化也许是“敏捷(agile)”这个词出现。对于我们(再次强调:指我以及大多数周围的同学)来说,这都谈不上变化,因为我们之前就不了解原来的软件开发过程是什么样的。但是很遗憾的是,在这篇文章里,我却要对我曾经所不知道的,现在刚刚接触的所谓“敏捷开发方法”大胆地发表想法(年轻人总是这样)。这里我将首先引入“敏捷开发方法”的简单介绍,以防止谈论了半天不知道在说什么。

  总体上来说,敏捷开发方法就是一种新兴的软件开发方法,旨在矫正官僚繁琐过程,以软件的适应性和开发者的人性为方法的出发点和归宿。

  这里所谓的官僚繁琐过程,就是说整个过程太过繁琐,在软件层面外的事情上占用了太多的时间,延缓了软件开发进程。它相比较来说更面向文档,偏向于建造房子一般:首先设计好全部的结构,画好图纸,剩下的,建筑工人干去吧!这种方法放到软件开发上就是,刚开始全部写好设计,剩下的,码代码去吧。但是这个问题就在于,房子是设计好就可以直接盖的,而且以如此长久的历史经验来说,这一点问题没有。但是软件的需求却不是维持不变的。软件开发受到客户需求的约束,而客户并不可能在最开始就完全提供所有需求并保证说再也不改了。那这就存在一个可预见性的问题。建造房子是可预见的,但是软件开发是不可预见的。就比如客户不能在不知道价格的情况下决定选择买下哪种商品,而软件恰恰难以在完成之前定价。这样就存在了矛盾:传统工程性的软件开发方法不接受改变,而现实的软件开发需要适应改变。所有软件开发者以及相关的人士都被这个问题拖累,幸运的是,长期被压制的敏捷开发思想终于在20世纪90年代。

  敏捷型开发方法的两大理念:

  • 面向人:没有任何过程能代替开发组的技能,过程起的作用是对开发组的工作提供支持。
  • 适应性:它的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。

II 敏捷宣言

  1. 我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:
  2.  
  3.   个体和互动 高于 流程和工具
  4.   工作的软件 高于 详尽的文档
  5.   客户合作 高于 合同谈判
  6.   响应变化 高于 遵循计划
  7.  
  8.   也就是说,尽管右项有其价值,我们更重视左项的价值。

  2001年一些新方法的代表人物聚集一堂,最终发表了一份《敏捷宣言》如上。该宣言很好地将整个敏捷开发的含义和理念。这也是我把它单列出来的原因。从这份简短的宣言中我们能看出其两大特征:面向人和适应性。

  “个体和互动”高于“流程和工具”:敏捷开发倡导开发者的个体性和集体性被重视,看重人的存在和作用。尽管流程和工具很重要,但是它们只是工具和手段,它们的价值有局限性。然后个体创造和集体融合,将产生难以预计的价值!  

  “工作的软件”高于“详尽的文档”:与建造业不同,软件开发的需求总在改变,文档只能提供最初的构架,却在变化发生时显得无力脆弱。再详尽的文档,在需求变化的时候,相应的部分将成为一张废纸!而写这些文档的时间如果用来创新和开发将更有价值。敏捷开发倡导“面向源码”,源码便是一份最好的“文档”。

  "客户合作"高于“合同谈判”:敏捷开发在意客户的需求。将客户当做软件开发的重要一环。不是和客户谈完合同,然后开发团队管自己完成任务,而是他们的关系更是一种合作关系。合作完成一个伟大的软件!

  “响应变化”高于“遵循计划”:计划不如变化,软件开发更是如此。如果死死跟着计划走,软件将不如预期实用和适应当前使用环境。对于变化的响应,是敏捷开发一种重要的观点。

  敏捷开发不完全否认右项的价值,但是从对比上来说,你会发现左项的价值发挥得更人性,更长远。


III 极限编程

   五条基本价值观:交流,反馈,简洁,勇气和尊重

  从文章对于极限编程的探讨和介绍中我认为,极限编程就是把有效的方法发挥到极致。就比如结对编程。曾经有人发现两人合作编程非常有效,解决了很多问题,更是诞生了很多公司(比如微软,hp),那这种方法就被发挥到极致:一个人只管码代码,一个人只管想怎么码并告诉另一人。又有人发现测试非常重要,对每个写好的模块进行测试,将有助于后面的集成。那我们再把它发挥到极致:把测试贯穿在全过程中!程序员写一段测一段。对!我们就是要疯狂!


VI SCRUM

  SCRUM是一种高度迭代性的方法,着重点是在软件开发的管理方面。它把一个项目分成若干个为期 三十天的迭代阶段,每一阶段称之为一“冲”。每天有一个短会, 称之为一个scrum,这样管理者能对项目有近距离的观察与控制。

  当一个团队--尤其还不是小团队(在软件开发领域,7个人就该是大团队了吧)--在进行一个项目的时候,最高效的方法就是高度迭代。尤其在攻关阶段,每天都开个短会,交代进程,解决问题。一方面整个团队的氛围非常积极向上,团队成员非常投入,不容易懈怠。一方面大家有问题可以及时解决,每一步都走得踏实!我所在的软件工程课的项目组就是7个人。大家各有所长,但是毕竟课业繁重,也许从一开始就使用SCRUM并不合适,但是我认为在最后阶段还是应该采取这种高效的方法强力推进我们的项目!


V 改变会议方式

 敏捷开发方法还对开会方式提出了创新。不单单向以前那样坐在会议室里开会,可能站着,走着,或者干嘛着。我这一看,真不就是团队建设吗?带一个团队,不止要在业务层面上积极推进,更重要的是协调团队氛围,营造开放积极的环境。改变一下开会方式,大家或许更加投入。找个风景秀丽的地方,公园长凳上,未名湖旁,情人坡,多好的地方哈!

 


VI 总结

 敏捷开发方法到底还是新兴的方法,而且我认为它的这些价值观和特性将使它成为未来的主流。现在的年轻人越来越豪放不羁,不喜欢官僚制度,厌恶一成不变。敏捷方法不仅是一个高效的开发方法,还能提高程序猿的幸福感呢!

 编辑:胡言乱语

【软件工程】week5-个人作业-敏捷开发方法初窥的更多相关文章

  1. 关于敏捷开发方法(Agile Software Development)的阅读笔记

    对“敏捷开发”(Agile Software Development)这个词,我是在这学期邹欣老师<现代程序设计>课上第一次听到的,刚听到时并不知道其具体指什么,只是从字面上直觉其意思应该 ...

  2. 项目的敏捷开发方法(转自MBAlib)

    项目的敏捷开发方法 敏捷方法很多,包括 Scrum.极限编程.功能驱动开发以及统一过程(RUP)等多种法,这些方法本质实际上是一样的,敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作: 按短迭代 ...

  3. 敏捷开发方法(一) Scrum

    Scrum团队:由产品负责人.开发团队和Scrum Master组成. 是跨职能的自组织团队 自组织团队自己选择如何最好地完成工作,而不是由团队外的人指导 跨职能团队拥有完成工作所需要的全部技能,不需 ...

  4. 敏捷开发方法-Scrum

    为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中的各个环节,主要目的有两个,一个是进行知识的总结,另外一个是觉得网上很多学习资 ...

  5. 敏捷开发方法XP的12个最佳实践

    极限编程(eXtreme Programming,简称XP)是一种轻量级.高效.低风险.柔性.可预测的.科学的软件开发方法,其特性包含在12个最佳实践中. 1.  计划游戏 ( Planning Ga ...

  6. iOS开发-VFL初窥

    VFL是苹果为了简化Autolayout的编码而推出的抽象语言,在上一篇博客中我们发现如果使用NSLayoutConstraint来添加约束是非常繁琐的. 一个简单的Frame需要添加四个NSLayo ...

  7. 传统开发模型vs敏捷开发模型——过程模型的变革

    一.概念框架 在了解一个新概念的时候,最好的方法就是把它插入到原有的概念体系中.在不仅有助于对概念的记忆,更利于深刻地认识概念的本质.精髓.下图说明了"敏捷开发"在软件工程理论体系 ...

  8. 敏捷开发的特点(转自MBAlib)

    敏捷开发的特点 敏捷方法主要有两个特点,这也是其区别于其他方法,尤其是重型方法的最主要特征: (1)敏捷开发方法是“适应性”(Adaptive)而非“预设性” (Predictive). 这里说的预设 ...

  9. 敏捷开发(Agile development)

    敏捷开发(Agile development) 敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征. ...

随机推荐

  1. js通过alert查看对象或数组内容

    var arr=new Array("Saab","Volvo","BMW"); for(i in arr ){ alert(i); //获 ...

  2. WPF RichTextBox的使用总结

    RichTextBox内容模型 RichTextBox 支持基于块的内容模型. RichTextBox   的内容属性为 Blocks,这是 Paragraph 元素的集合Paragraph元素可包含 ...

  3. IIS 7.5 配置10W高并发

    原文:    http://www.myhack58.com/Article/sort099/sort0100/2012/35585.htm 原文:   http://www.myhack58.com ...

  4. HTTP协议详解(一直在用可是这篇太好了转一下)

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  5. [bug]The file ‘/xxx/xxx.aspx’ has not been pre-compiled, and cannot be requested

    今天莫名奇妙的出现了这个问题,查找很多资料最后解决了. 发现编译的时候,少了一个dll,导致预编译失败. 参考资料 https://blogs.msdn.microsoft.com/asiatech/ ...

  6. LINUX下 my.cnf php.ini的位置

    my.cnf:/etc/ php.in:/usr/local/php/etc/

  7. C开发基础--函数调用栈

    发现有一些问题几乎是所有的新人都会遇到,而且也常因为缺乏一些基本的知识而无从下手.函数调用栈的内容就是其中之一.于是花点时间把以前写的内容整理出来. 程序在运行期间,内存中有一块区域,用来实现程序的函 ...

  8. 如何实现在已有代码之后添加逻辑之java动态代理

    在上篇博客中讨论到java的静态代理, 就是通过组合的方法,前提是委托类需要实现一个接口,代理类也实现这个这个 接口,从何组合两个类,让代理类给委托类添加功能! 知道java的静态代理,我们又遇到一个 ...

  9. 对target="framename"的理解(实现分页的demo)

    先上图,说明一下我主要想实现什么功能. 一.演示图 演示首页: 演示内容页(包括按钮切换页+模板内容页): 演示首页到演示内容页的一个演变过程:

  10. Android音频播放实例

    MediaPlayer: 此类适合播放较大文件,此类文件应该存储在SD卡上,而不是在资源文件里,还有此类每次只能播放一个音频文件. 1.从资源文件中播放 MediaPlayer player = ne ...