Agile Software Development ——敏捷开发
敏捷?
过去几年中,软件行业中出现了一个新词汇——agile;与此同时,一个关于新的软件开发方式的变革正悄然兴起。
在老师的引导下,我阅读了Agile Guide网站上的几篇文章,并查阅了相关资料。不得不说,这一系列全新的软件工程方法确实给了我在团队作业方面的诸多启发。
个人理解,敏捷开发并不是一种确定的开发方式,而更像是一种软件开发过程中的思路指导。有一些概念,与敏捷开发是分不开的,如:极限编程,持续集成,结对编程,TDD等等。这些概念并不完全隶属于敏捷开发,但又与其有着千丝万缕的联系。因此,我更倾向于将敏捷开发当作一种开发的思路,它有着一些原则,从而衍生出一系列的开发方法。
无论如何,敏捷开发有着两条基本原则:
- Agile methods are adaptive rather than predictive.
敏捷开发具有适应性,而非预见性。
- Agile methods are people-oriented rather than process-oriented.
敏捷开发是面向人的,或者说,以人为核心的。
这是两条很关键的原则,与此相应的是传统开发过程中的两大弊病。首先,传统开发过程中,往往制定了详细同时繁杂的计划。而这些计划很难被遵守,因为需求时常是变动的;毕竟工程的开发并非一朝一夕,不变则跟不上潮流,做出的产品就会过时。于是,在修改功能的同时,又要去更新长篇大论的文档。这种拉锯的过程不能说没有意义,但也颇为——原始。既然需求无法更改,我们就应该更改我们的思路:需求经常变动?那好,我们就不去做详尽的计划,而是灵活变动,小文档,小版本,简洁明了,经常发布,做好改动的准备。有预见性的开发,将更灵活,更直接。
其次,传统工程开发将人作为部件,好像程序中的块:每个人有自己的位置,有自己的功能,其他不需劳神。表面上看,这样的方式清晰明了,只需要像零件一样运作起来就可以了。但实际上,有一个致命的缺陷:人并不是零件。这样的氛围下,人失去了主动性,失去了工作的动力,忽视了思想碰撞火花能够得到的优势。在曾经的工作中,我也碰到过类似的情况:在一次活动的准备中,部里分工不同的小组只是机械地执行了互相间的联系,而没有对一些漏洞提出质疑。虽然,活动依然完成了,但是浪费了很多资源——我们本可以做的更快,更好。这就是当人成为机器的时候产生的可怕后果。我们应该改变传统思路,以人为核心,发挥每个人的主动性,让思想碰撞,让思维交流。这也是敏捷开发中五大价值观力图强调的:沟通,简单,反馈,勇气,谦逊。生物学中存在集智的概念:低智商的蚂蚁聚集在一起竟产生分工这样的社会行为;对人类更要将此发挥至极致。
在这两条原则的指导下,许多开发方法应运而生。这些方法与我们距离并不遥远,事实上在团队协作中触手可及,许多都给予了我启发。在团队作业中,希望能够在我的团队中推进实践。
启发
极限编程(XP)
极限编程严格意义上并不是敏捷开发的一部分,而应该是与敏捷开发平起平坐的一种方法。顾名思义,其宗旨可以总结为:将需求做到极致。例如,我们需要了解客户需求,那就极限为之,与客户形影不离,使其成为团队的一部分,那么对需求的理解与更新势必登峰造极。诸如此类。
对于团队作业,我们可以效仿这种极限的做法:
我们的工作环境要好,极限之:我们选定一个教室或其他场地,布置白板,工作图,桌椅,电源等,工作时间就都处在一起,甚至围坐一张圆桌,随时交流意见;即使吃饭游戏也一同活动,成为标准的死党和忠诚的队友。
我们的编程非常关键,极限之:分为多组,采用结对编程,时刻将精力集中于编程。
我们的协调非常重要:每日进行例会,交流对项目的理解和学习工作进度。
等等……
既然要做,就做到极致吧!
站立会议
这是一种很有趣的会议方式。所有与会者围站成一圈进行会议。这样的会议可以改进坐式会议的许多冗余之处。站立会议更健康,更直观,更活跃,而且更有效率,不会成为“座谈会”。这可以成为我们团队会议的新方式。
持续集成(CI)
团队合作的项目往往是大家闷头做很长时间,最终一集成就跪了。解决这种问题的方式除了写文档,还有一种更直接的方式——从一开始就进行集成,并持续下去——这也是极限编程思想的一种体现。CI减少了风险,减少了重复过程,对于团队效率有着很大提升。
测试驱动开发(TDD)
极限编程又一实践:软件测试过程漫长且错误率高怎么办?将测试用例写在前面!在工程的开始就写好测试用例,在用例驱动下进行编程,这样就万无一失了!
结对编程(PD)
在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力;对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。在心理上,当有另一个人在你身边和你紧密配合, 做同样一件事情的时候,你不好意思开小差, 也不好意思糊弄。在团队管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
结语
以上就是我对于敏捷开发及其相关概念学习之后一些总结和感悟。事实证明,我们是人:无论完成什么类型的工作,我们都需要以人为本,将人性的因素考虑进来——毕竟我们的根本属性。
最后复习一下敏捷开发宣言:
Manifesto for Agile Software Development
We are uncovering better ways of developing
software by doing it and helping others do it.
Through this work we have come to value:
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
That is, while there is value in the items on the right,
we value the items on the left more.
Agile Software Development ——敏捷开发的更多相关文章
- [转] Agile Software Development 敏捷软件开发
原文作者:kkun 原文地址:http://www.cnblogs.com/kkun/archive/2011/07/06/agile_software_development.html 敏捷是什么 ...
- 敏捷软件开发 Agile software Development(转)
原文链接: http://www.cnblogs.com/kkun/archive/2011/07/06/2099253.html 敏捷软件开发 Agile software Development ...
- Agile software Development
转自:https://www.cnblogs.com/kkun/archive/2011/07/06/agile_software_development.html 敏捷软件开发 Agile soft ...
- 关于敏捷开发方法(Agile Software Development)的阅读笔记
对“敏捷开发”(Agile Software Development)这个词,我是在这学期邹欣老师<现代程序设计>课上第一次听到的,刚听到时并不知道其具体指什么,只是从字面上直觉其意思应该 ...
- 谈敏捷,谈开发 --《Agile Software Development》读后感
谈敏捷,谈开发 --<Agile Software Development>读后感 北航计算机学院 110616班 11061171 毛宇 联系方式:maoyu815930@sina.co ...
- 敏捷软件工程(agile software development) VS传统软件工程(traditional software development)
敏捷软件工程(agile software development) VS传统软件工程(traditional software development) Agile principle ...
- 粗略阅读《Agile Software Development》后的感想
大致配合翻译和词典阅读了一下这篇文章之后,我另外还查阅了维基百科.百度百科和MBA智库百科还有一些网络上的文章.对敏捷开发有了一个大致上的浅显的认识. 敏捷建模(Agile Modeling,AM)的 ...
- 软件工程个人作业——Agile Software Development读后感
昨天利用了半天的时间看了下老师给的网页下的8篇文章和一段宣言,将感悟整理为下面的一篇博客. 首先先介绍一下这个网页.记得我们上学期上过一门课叫做面向对象建模方法,在这门课上刘超老师极力推荐的一本教材— ...
- 敏捷开发(Agile development)
敏捷开发(Agile development) 敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征. ...
随机推荐
- Lighttpd虚拟主机和多域名的配置
lighttpd是个轻巧的web服务器组件,在linux系统上较为流行,功能能满足一般网站的需求(虚拟主机,伪静态,防盗链等),而跑起来负载却低于apache. 一般网站地址的形式为www.xxx.c ...
- 【C#基础】System.Reflection (反射)
在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于"自成一体"的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息.在System. ...
- [已解决]EnvironmentError: mysql_config not found
$ pip install MySQL-python==1.2.5 报错: EnvironmentError: mysql_config not found 原因是缺少包 libmysqlclient ...
- centos 6 initctl
在centos6中有initctl 可以启动tty等.此命令在 upstart-0.6.5-10.el6.x86_64 rpm包中 或者 mingetty 命令启动 tty #initctl star ...
- [Reship]如何回复审稿人意见
================================= This article came from here:http://blog.renren.com/GetEntry.do?id= ...
- {VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件
在VS2010中使用C#开发基于WinForm的ActiveX控件 常见的一些ActiveX大部分是使用VB.Delphi.C++开发,使用C#开发ActiveX要解决下面三个问题: 使.NET组件可 ...
- 京东B2B的4种供销模式
B2B的4种供销模式,以京东商城为例: FBP 京东给商家一个独立操作的后台, 商家五地入库(北京,上海,广州,成都,武汉),从仓储 到配送 到客服都是京东来操作, 京东本身自营的产品所有能享 ...
- 关于Eclipse项目中加入jquery.js文件报错(missing semicolon)问题
在使用Eclipse3.7及以后的版本的时候,加入jQuery文件会报错(missing semicolon),文件中会显示红色小X,虽然这个错误并不会影响项目的运行,但是这个却会大大的影响到开发人员 ...
- linux 下tomcat catalina.out日志操作
1. 查看日志 tail -f catalina.out 会动态打印日志. 2. 查看所有日志 less -f catalina.out 打开所有日志后,默认是显示第一页,常用命令用到如下: G:到达 ...
- SQL in与exists
无可置疑,如果in()的结果集非常庞大,那么效率必然是低的. 但EXISTS subquery根据其语法可知在SQL中的作用是:检验查询是否返回数据.如果在 Dictionary 对象中指定的关键字存 ...