项目管理的过程观是把任何的项目,或项目内的任何部分,都看作是一个过程(Process,或称为流程)。过程的概念有很多种提法,一般把过程表述为一组将输入转化为有价值的输出的相互关联或相互作用的活动。任何项目都是生产和交付产品或服务以满足客户需求的过程,过程通过资源与人的作用把项目的投入转换为项目的产出。敏捷软件开发认为过程是将人的精力集中于结果的组织化结构,这种组织化结构引导工作并影响产品和组织中人的关系的发展。 过程管理(Process Management)是一种建立在过程观基础上的管理体系。过程管理从过程切入,关注于过程的绩效,建立起一套“认识过程、建立过程、运作过程、优化过程”的体系。软件项目的过程管理是在软件项目中对产品开发活动的工作过程进行的管理,目标是在生产产品的同时提高组织的能力,以便生产更好的产品。
软件过程管理发展的几个阶段: 软件过程管理的发展与软件项目过程观的演变密切相关。总的来说,从上世纪60年代开始,对软件项目管理的认识,经历了一个“混沌——有序——复杂”的历程,软件过程管理研究的核心问题则同时经历了“无序——繁重——敏捷”的演变。
1.混沌无序的软件开发 软件项目的高度不可预知性使软件开发的计划、监督与控制非常困难,这被称之为“软件危机” 。早期的软件项目基本上是一种手工艺生产的方式,软件项目的过程和结果难以捉摸。每个项目都有特定的过程与工具,反映了定制的开发、专门的过程和规模不经济所主宰的产业,严重影响了软件产品的规模和质量。
2.严格有序的软件过程 软件危机推动了软件工程思想成熟,20世纪80、90年代,软件项目开始使用可重复的规范过程,产生了以质量管理为核心、以软件工程理论为基础的严格有序的过程管理理论体系。以瀑布模型为代表的传统软件过程在软件开发项目管理理论中占据了很重要的地位。软件项目被定义为一个有序的、可重复的、可度量的、可严格控制的过程,软件过程改进的核心是以统计过程控制(Statistical Process Control,SPC)为基础的优化方法,过程管理目标是使过程处于统计控制之下,使受控的稳定过程得到可预测的结果。SEI的CMM模型是这一阶段过程管理思想的结晶,而且CMM成为一套适用面很广的通用过程实践标准,为软件组织的过程改进指出了一条清晰的途径。 CMM及与其类似的ISO 9000、SPICE等通常被认为是重载(Heavy Weight)过程,为使软件项目能应对不可预知的变化,采取繁复的管理工作抵御风险。CMM重视系统性、制度化、文档化和度量,强调提高过程的可靠性、可见性、可预测性和可管理性,实施CMM要求组织在过程制度化建设上付出大量努力。重载过程的工作集中在防止和跟踪错误上,大量工作流程的制定,是为了保证项目不犯错误,因此,软件过程越来越复杂,越来越庞大,重载过程的繁文缛节、组织臃肿、办事低效、形式主义等等副作用越来越明显。
3.敏捷软件开发 工程化、流程化的软件生产方式与软件产品和软件开发过程特性的矛盾日益明显,快速变化的外部市场环境也在向传统的软件工程管理理论提出挑战。 建立在收益递减、平衡和确定性的动力学假设基础上的旧商业世界被收益递增的、不稳定的、无法预测其原因和影响的新的商业世界所代替。旧的商业环境的特征是商业环境可以预言,核心观点是预测和效率的最优化。新的商业环境以高度不确定性和未来的不可预测为特征。 软件业经历了无数次的项目失败之后,人们开始反思软件开发的工程特性,反思计划和控制的有效性,反思过去对于不确定性的态度和反应。学术界和企业开始把软件项目看作一个复杂系统进行分析,软件项目管理的研究开始以自适应性的、以人为本的核心理念提出各种思想。 软件项目管理一直以来都致力于提供一种更轻便、更快、更灵活的软件开发方法以满足现在更快速发展变化的商业情况。上世纪九十年代兴起了众多的轻载(Light Weight)过程,最终发展为敏捷软件开发(Agile Software Development,ASD)。 敏捷软件开发(Agile Software Development,ASD)是2001年提出的软件项目管理思想,而关于敏捷性(Agility)和新一代软件开发过程的研究则可以追溯到10年之前。软件项目管理的一个特点是专注于软件过程(Software Process),从1984年第一届国际软件过程会议正式提出“软件过程”的概念,软件工程就进入到了软件过程时代,但是,由于处于一个年轻的产业,软件项目管理始终在寻找一个更加适合其行业特点的软件过程,敏捷软件过程为软件项目管理思想带来了一次新的革命。
人们对软件过程的认识日渐深刻:软件过程不是混沌的、随机的、即兴的活动,也不只是一个严格有序的因果联系的工作流,软件项目是一个复杂系统,而软件过程是一种处于混沌边缘的非平衡状态下的系统行为。
|