1 关于敏捷性的研究 敏捷性(Agility)的概念首先是在制造领域中提出的。敏捷制造最早源于1991年美国里海大学亚柯卡研究所与其合作者共同提交的《21世纪制造业发展战略》研究报告。按照敏捷制造创始人Roger Nagel和Rock Dove给出的定义,敏捷性是企业在不断变化和不可预测的竞争环境中发展壮大的一种能力。敏捷是对迅速变化、不断细分、高绩效、高品质的全球市场、客户定制的商品和服务所产生利润的商业竞争的全面响应。敏捷是动态的、适应于具体情况的、迎合变化的和自我完善的。 软件过程的敏捷性是2001年提出的概念,Marting Fowler较早从敏捷与重载(Heavy Weight)方法的比较中,给出了关于软件项目敏捷性的阐述,提出敏捷的最根本之处在于: (1)敏捷强调自适应,而非预测。本质上重载方法是抵制变化的,而敏捷方法则强调适应变化。 (2)敏捷方法以人为中心,而非以过程为中心。敏捷方法强调软件开发应合乎人类本性,软件开发应带来乐趣。 Alistair Cockburn认为敏捷性是指有效率和有机动性。敏捷的过程是轻且够用的,轻是一种保持灵活机动性的方式,够用则是使游戏能进行下去的条件。 Jim Highsmith对敏捷的概念给出了更深刻的阐述,他强调敏捷不仅仅是一种反应,而且是一种行动;它是一种生命的方式,是以不断的突变(Emerging)和变化(Changing)来回应商业动荡的方式。因此,敏捷性是一种创造变化和回应变化的能力,从而在动荡的商业环境中获得利润。Highsmith提出了三个特性进一步刻画了敏捷的概念: (1)机敏和即兴性(Nimbleness and improvisation); (2)现实一致性(Conformance to actual); (3)柔性与结构性的平衡(Balancing flexibility and structure)。 敏捷软件开发宣言成为迄今为止对软件项目敏捷方法的最权威的阐述,包括了4个价值和12条原则。 敏捷软件开发的四个价值是: (1)个体及其相互作用胜过过程和工具。 (2)可工作的软件胜过面面俱到的文档。 (3)客户合作胜过合同谈判。 (4)响应变化胜过遵循计划。 敏捷软件开发的指导原则包括: (1)用户满意 在快速不断地交付用户可运行软件的过程中,将使用户满意放在第一位。 (2)拥抱变化 以积极的态度对待需求的变化(不管该变化出现在开发早期还是后期)。敏捷软件过程紧密围绕变化展开并利用变化来实现客户的竞争优势。 (3)短迭代 以几周到几个月为周期,尽快、不断地交付可运行的软件供用户使用。 (4)用户团队 在项目过程中,业务人员和开发人员最好能一起工作。 (5)以人为本 以积极向上的员工为中心建立项目组,给予他们所需的环境和支持,对他们的工作予以充分的信任。 (6)直接沟通 在项目组中,最有用、最有效的信息沟通手段是面对面的交谈。 (7)有效进度 项目进度度量的首要依据是可运行的软件。 (8)持续步调 敏捷软件过程高度重视可持续开发。项目发起者、开发者和用户应能始终保持步调一致。 (9)精益设计 应时刻关注技术上的精益求精和设计的合理,这样能提高软件的快速应变力。 (10)简单至上 简单化(尽可能减少不必要工作的艺术)是基本原则。 (11)自组织团队 最好的框架结构、需求和设计产生于自组织的项目组。 (12)持续改进 项目组要定期对其运作方面进行反思,提出改进意见,并相应进行调整。
2 关于软件过程的研究 关于过程的概念,有很多种定义。Gabriel A.Pall认为一个过程可以被定义为一个逻辑组织,是关于人员、原料、能源、设备、规程的逻辑组织,其中规程转化为预设的工作活动用来产生一个指定的结果。PMBOK把过程定义为产生结果的一系列活动。CMM中将过程表述为为了实现某一目标而采取的一系列步骤,过程定义为一系列任务,正确执行这些任务时,将得到预期的结果。 总结传统过程管理对过程的一般表述是:过程是一组将输入转化为有价值的输出的相互关联和相互作用的活动。过程包括至少5个基本要素:输入、输出、活动、活动的相互关联和相互作用、价值。 自适应软件开发(ASD)创始人Jim Highsmith认为过程是将人的精力集中于结果的组织化结构,组织化结构引导活动并影响产品。 由于新软件项目管理思想的倡导者们对传统软件过程管理思想的尖锐批判和对实践的推崇,为了区别于传统的统计过程控制思想,他们在使用“软件过程”这一术语时都非常谨慎,尽量避免传统“过程”概念的影响。 研究者们大多创造性地使用其他一些类似的术语和概念,如:方法论、软件开发生态系统、编程、模式、模型等。“敏捷方法”的称法被最广泛的接受,Alistair Cockburn以方法论(Methodologies)来命名敏捷软件开发。Cockburn所指的方法论是“一组相关的方法或技术”,而对方法(Method)的定义是“一个系统的过程” 。Highsmith认为“方法论”不适合于描述敏捷软件过程的关键点:人才、关系和不确定性,而且容易误导人们把敏捷实践与传统软件开发方法用错误的测度进行比较,认为敏捷软件过程是一个由三个成分——混沌有序的观点、协作的价值和原理、刚好够用的方法论——交织在一起的整体环境,因而采用“敏捷软件开发生态系统”(Agile Softeware Development Ecosystem,ASDE)来描述敏捷软件开发。Kent Beck以独特的方式关注软件项目的执行者(开发者)和他们的活动(编程),而把他提出的软件开发方式称为极限“编程”(eXtreme Programming,XP)。总之,敏捷软件过程的研究者们为了使自己的过程观与传统过程管理思想划清界限,对过程的概念大都进行了革命性的创造和拓展。 本文关注敏捷软件开发项目的过程管理,并不想刻意的排斥“过程”这一术语,文中将采用“敏捷软件过程”和“传统软件过程”的称法以区分两种过程概念。
|