敏捷软件开发(Agile Software Development)简介之:什么是敏捷软件开发?

敏捷软件开发(Agile Software Development)简介之:什么是敏捷软件开发?

本文部分内容来自:http://en.wikipedia.org/wiki/Agile_software_development
缩略词说明:
ASD: Agile Software Development、 敏捷软件开发

什么是敏捷软件开发?
  敏捷软件开发是一个概念意义上的框架,用来取代软件工程项目的概念;它强调在项目的整个生命周期中,拥抱并促进由于软件进化式的发展所带来的变化。
Agile software development is a conceptual framework for undertaking software engineering projects that embraces and promotes
evolutionary change throughout the entire life-cycle of the project.
  这段定义来自wikipedia,我认为是我接触ASD以来,对ASD最精辟的论述。
  请注意其中的三个关键词:
  在项目的整个生命周期中:这就涉及到了【敏捷项目管理】、【敏捷需求获取】、狭义的【敏捷软件开发】三个主要的领域和过程。要注意的是,上述三个过程并不是互相分开的,而是你中有我,我中有你。
  拥抱并促进变化:世界上唯一不变的是变化。不论在任何领域,漠视、甚至否认、抗拒变化,都不是一个理性,严肃的人所应有的态度。学会如何识别变化的大势,并在可能的时候,促使变化向好的方向发展。这才是面对变化的正确应对之法。
  软件进化式的发展:虽然上面提到促进变化的发展,但是软件的演化过程,我相信是有其自身内在逻辑的,存在一些根本规律和指导方针;并不是完全以人的主观意识为主导。
  老子讲“顺势而为,无为无不为”,我认为是对上述后两点的精确概括与指导。

  了解了这三个方面,下面就要引入大名鼎鼎、如雷贯耳、耳朵都要磨出糨子来的敏捷宣言(Manifesto for Agile Software Development)了,让我们看看2001年提出的第一版的敏捷软件开发宣言怎么说:
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.

我们正在通过实践和帮助其他人实践,揭示更好的开发软件的方法。我们从实践中得出的价值观是:

☆ 人和交互重于过程和工具。
☆ 可以工作的软件重于求全责备的文档。
☆ 客户合作重于合同谈判。
☆ 随时应对变化重于循规蹈矩。

虽然右项也具有价值,但我们认为左项具有更大的价值。

经过六年的演变,敏捷大师们又提出了敏捷宣言的重构版本,由于尚未形成共识,暂不在此提出。

在敏捷宣言的背后,有其遵循的12条原则
Principles behind the Agile Manifesto

We follow these principles:
☆ Our highest priority is to satisfy the customer through early and continuous delivery of vaphp?name=lua" onclick="tagshow(event)" class="t_tag">luable software.

☆ Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.

☆ Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

☆ Business people and developers must work together daily throughout the project.

☆ Build projects around motivated individuals. Give them the environment and support they need,
and trust them to get the job done.

☆ The most efficient and effective method of conveying information to and within a development
team is face-to-face conversation.

☆ Working software is the primary measure of progress.

☆ Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

☆ Continuous attention to technical excellence and good design enhances agility.

☆ Simplicity--the art of maximizing the amount of work not done--is essential.

☆ The best architectures, requirements, and designs emerge from self-organizing teams.

☆ At regular intervals, the team reflects on how to become more effective, then tunes and adjusts
its behavior accordingly.


★ 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
★ 即使到了开发的后期,也欢迎改变需求,敏捷过程利用变化来为客户创造竞争优势。
★ 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
★ 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
★ 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
★ 在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交流。
★ 工作的软件是首要的进度度量标准。
★ 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
★ 不断地关注优秀的技能和好的设计会增强敏捷能力。
★ 简单--使未完成的工作最大化的艺术---是根本的。
★ 最好的构架、需求和设计出自于自组织的团队。
★ 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。

公司正准备进行CMMI3的实施呢,不知道在bryanzk看来,CMMI和ASD是不是背道而驰?
我没有接触过cmmi,所以先google了一下:
引用:
3级包含的问题域:RD(需求开发)、TS(技术解决)、PI(产品集成)、RISKM(风险管理)、IPM(集成项目管理)、VER(验证)、VAL(确认)、DAR(决策与分析)、OPF(组织级过程焦点)、OPD(组织过程定义)、OT(组织培训)。
CMMI三级,定义级。在定义级水平上,企业不仅能够对项目的实施有一整套的管理措施,并保障项目的完成;而且,企业能够根据自身的特殊情况以及自己的标准流程,将这套管理体系与流程予以制度化这样,企业不仅能够在同类的项目上生到成功的实施,在不同类的项目上一样能够得到成功的实施。科学的管理成为企业的一种文化,企业的组织财富。
我并不了解CMMI以什么为核心,Agile讲究的是以人为本,讲究沟通,讲究协作,讲究创新,我想这三点是符合人的本性的,所以Agile才能发展到今天的地步。现在很多人都对Agile有误解,此处举一例:很多人都觉得ASD是一种cowboy coding, 其实不是这样的。在某些方面,ASD对纪律的要求更加严格;比如测试优先,比如持续集成等等。人的本性之一就是对自己不熟悉的事物,保有敌意,甚至经常要通过攻击他们来保护自己;我认为这是一种怯懦和无知的表现。只有亲身实践过,有了切身的体会之后,这时的意见,才有可能是比较靠谱的。

[ 本帖最后由 bryanzk 于 2007-7-31 15:34 编辑 ]
首先,不是我的公司。呵呵。是偶的公司的话,我就请敏捷开发的讲师过来讲Agile了。:D

另外,公司准备实施这个的目的也是为了开发规范化,让1+1>2,这点我是理解的。但就是像你所说的,完全按CMMI 3的规范实施下来,文档是可以堆成山的。所以现在CMMI的讲师也一直在强调我们不必要生搬硬套CMMI的规范,而是要在实施过程中结合企业自身的特点来建立适当的文档等等。这点我认为还是可行的。

但是一点始终是不可改变的,CMMI注重前期规划,对于需求变更反应肯定没有Agile快。而且CMMI是注重过程的,这点与Agile不太一样。

CMMI听过一些课程,还有一点理解,不过对于敏捷开发,目前的经验仅限于自己的个人项目。
hehe, 我是说您所在的公司。不过我不知道您对您公司的决策层的影响有多大,如果他们能够听取您的意见的话,不妨就Agile多向他们吹吹风。“最好的员工是能够管理领导的员工”慢慢向身边的人灌输,说不定哪一天就会收到成效。