1.5 敏捷软件项目管理
挖掘管理价值:企业软件项目管理实战
计算机进入互联网时代后,软件得到了前所未有的普及。人们对软件开发适应度的要求逐渐提高,传统的开发模式面对快速变换的需求显得力不从心。近20年来,很多学者和专家在研究软件的敏捷开发模式,其中Scrum开发、极限编程、迭代开发都是某种形式的敏捷开发方法。
1.5.1 敏捷开发概念
敏捷的英文是Agile,其原意是快速和灵巧地做出反应或动作。经过多年的敏捷实践和探索,在2001年美国雪鸟会议上,敏捷开发概念被真正地提出来,同时发表了《敏捷宣言》。此宣言中,敏捷的定义主要包括1以下4点。
- 人和交互重于过程和工具。
- 可以工作的软件重于求全责备的文档。
- 客户协作重于合同谈判。
- 随时应对变化重于循规蹈矩。
在实践过程中,开发人员对于敏捷概念的理解不尽相同,甚至有些人认为敏捷概念破坏了工作的计划性和纪律性。其实,更确切地说,敏捷的精髓是强调快速的适应性。
1.5.2 常用敏捷开发方法
敏捷开发是一种思想,一种理念,如果要付诸于实现,就需要某些方法。近几十年来,敏捷开发的方法层出不穷,多达22种2,其中常见的方法主要有3:
- 软件开发节奏(Software Development Rhythms);
- 敏捷数据库技术(Agile Database Techniques);
- 敏捷建模(Agile Modeling);
- 自适应软件开发(Adaptive Software Development);
- 水晶方法(Crystal);
- 特性驱动开发(FDD,Feature Driven Development);
- 测试驱动开发(TDD,Test-Driven Development);
- 动态系统开发方法(DSDM,Dynamic Systems Development Method);
- 精益软件开发(Lean Software Develo pment);
- 敏捷统一过程(Agile Unified Process);
- Scrum开发;
- 极限编程(XP Extreme Programming);
- 探索性测试(Exploratory Testing)。
根据2011年中睿软件咨询对敏捷开发的调查,以上主要方法的实际应用比例如图1-2所示。
1.5.3 敏捷软件项目流程
敏捷开发的过程摒弃了传统瀑布式开发过程中的诸多不足,因此其流程的出发点和步骤完全不一样,如图1-3所示。敏捷开发的流程具有步骤精简、并行工作和效率提高几个特点。
(1)步骤精简。减少了重重设计、评估和测试的过程,在有基本设计轮廓的时候,就可以开始先期的编程工作。随着编程的推进,设计也在逐渐细化中,两者保持协调,同步推进,将大大地提高开发过程的适应性和效率。
(2)并行工作。大部分敏捷方法都要求任务细化,以达到并行工作的效果。并行工作的好处是充分利用资源,互不影响,同时又能协同工作。设计、开发、测试得以同步进行。
(3)效率提高。敏捷开发要求团队中的角色更加清晰和明确,没有交集和重叠,以发挥每个人最佳的工作效率。由于敏捷开发对文档的要求有所降低或只要求重要的文档,因此可以节省大量用于文档维护的时间和成本。敏捷开发还强调和用户的互动,紧密的互动可以保障问题在第一时间被发现和解决。
1.5.4 敏捷的价值
根据VersionOne公司42011年的资料,敏捷开发模式与传统开发模式对于软件项目的价值对比如图1-4所示。
在图1-4中,实线为敏捷开发,虚线为传统开发。从图中我们可以清晰地看到,敏捷开发的价值反映在可见性(visibility)、适应性(adaptablity)、业务价值(business value)和风险(risk)4个方面。
- 可见性。传统开发模式下,只有需求和测试阶段是清晰可见的,用户在其他的过程中无法或很有限地见到软件的细节或形态。而敏捷开发则不同,快速响应和及时交付使得用户在所有过程中或多或少有形地看到软件。
- 适应性。传统开发模式要求按部就班,开发过程向一个方向进行。在需求分析阶段,其适应性比较强,可以随着需求的变换而变化,但是随着编程的深入,适应性越来越低,越来越难以改变。相反,敏捷开发的适应性衰退得比较平稳且又可以保持一定的灵活性,有效地提高了软件的竞争力。
- 业务价值。传统开发模式下,软件在开发初期无业务价值可言。只有到软件编程和测试完成,才能体现其价值。由于敏捷开发可以做到快速建模和及时交付,其业务价值提前显现,尽管它体现的不是那么完整和完善,但是随着开发的深入,其价值将充分显现。软件价值体现得越早,对用户越有吸引力。
- 风险。传统模式开发下的软件,其风险一般只有在最后交付时才能消失,成功则成功、失败则失败,几乎没有回旋的余地,风险控制也比较困难。敏捷开发的特点在于,风险通过小批量的阶段性交付提前暴露出来,使得风险可以处于可控的范围内,而不是到最后关头才看到风险。