1基于CMM和PSP的软件项目过程管理摘要:随着信息产业蓬勃发展,软件开发过程中管理的规范化及标准化问题日益得到重视。本文在分析了软件产品特点和软件项目管理特性的基础上,介绍了软件项目管理的内容,及软件项目管理的能力成熟度模型(CMM),以及个体软件过程(PSP)。CMM指明为了改进软件过程能力组织必须关注解决的问题;PSP为提高组织成员个体素质和个体能力的过程改进提供了框架。在软件项目管理中应用CMM和PSP的思想,可以为软件企业项目管理能力提供一个可控评框架,对软件企业利用项目管理手段提升CMM等级有一定的帮助.关键词:软件过程;项目管理;CMM;PSP1引言21世纪是信息社会高速发展的世纪,软件作为信息技术的核心,起着至关重要的作用。随着信息产业的发展,人们日益关注软件开发过程中管理的规范化及标准化问题。软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,对成本、人员、进度、质量、风险等进行分析和管理的活动。实际上,软件项目管理的意义还在于,进行软件项目管理有利于将开发人员的个人开发能力转化成企业的开发能力,从而提高企业的移体竞争力。软件项目中,项目的过程管理直接关系项目进度和成本,这些问题直接关系着项目的成败。项目进度问题是整个项目中的主要冲突之一。美国专门从事跟踪IT项目的权威机构Standish发布的调查报告表明,相当比例的项目超出了估算的时间。这反映了软件项目的进度管理并没有得到实质性的改善。自20世纪80年代至今,软件项目管理研究己经取得了很多成果,无论是风险管理,还是人员组织与管理、质量管理、需求管理、项目计划与估算(如规模、成本估算)、进度管理、配置管理、度量与评估及控制等方方面面均有人研究,取得了一系列成就,呈现出一片蓬勃发展的局面。但是,因为项目管理理论缺乏或管理不善造成软件项目失败的事件仍屡屡发生。2软件项目的特点2.1软件产品的特性软件不同于大多数其它工业产品,它是逻辑的智力产品。软件开发过程也不同于其他产品的制造,其开发过程是复杂的逻辑思维过程,需要建立庞大的逻辑体系,软件开发同传统的工业产品制造相比,有以下特性:(1)可见性差。软件作为知识密集型的纯脑力劳动成果,是一种无形的逻辑产品,没有物理属性。因此,软件项目过程的可见性比任何其他产品生产过程都差。(2)高风险。由于软件是一种纯知识产品,其无形、抽象、复杂和受人为因素影响较大,开2发过程中不确定性因素较多等特性,使得软件项目属于高风险项目,因此,风险管理是软件项目管理的重要内容。(3)对人的依赖性很大。软件开发项目完全取决于人的智慧,不需要物理耗材,人员是开发软件的唯一生产资料,因此,人员管理是软件项目管理的核心组成部分。(4)高复杂性。软件具有很高的复杂性,有人甚至认为,软件是人类有史以来生产复杂度最高的工业产品。因此,软件项目管理的复杂性很高,对复杂性的认识、理解、度量和控制是软件项目管理的重要组成部分。(5)需求模糊而且不确定性很大。由于软件抽象、无形、不可见,使得软件需求方在软件项目初期无法描述清楚其需求,而且随着项目进展,用户的需求更改非常频繁。软件项目的需求变更问题比任何其他项目都严重,用户需求在软件项目进程中经常发生变化。2.2软件项目管理的特性基于软件项目的特点,软件项目管理与其他项目管理相比有很大的独特性,主要有以下几点:(1)软件作为智力创造性的产品,其开发的整个过程都是设计过程,因此文档管理(包括程序代码)是软件项目管理的流程基础;(2)成本、进度、质量和风险是软件项目管理的对象;(3)人力资源管理是软件项目管理的基础,团队的和谐配合是软件项目实施的保证。3软件项目管理的内容软件项目管理的根本目的是为了让软件项目尤其是大型项目的整个软件生命周期(从分析、设计、编码到测试、维护全过程)都能在管理者的控制之下,以预定成本按期、按质的完成软件交付用户使用。软件项目管理的内容主要包括如下几个方面:人员的组织与管理,软件度量,软件项目计划,风险管理,软件质量保证,软件过程能力评估,软件配置管理等。这几个方面都是贯穿、交织于整个软件开发过程中的。其中人员的组织与管理把注意力集中在项目组人员的构成、优化;软件度量是用量化的方法评测软件开发中的费用、生产率、进度和产品质量等要素是否符合期望值,包括过程度量和产品度量两个方面;软件项目计划主要包括工作量、成本、开发时间的估计,并根据估计值制定和调整项目组的工作;风险管理预测未来可能出现的各种危害到软件产品质量的潜在因素并由此采取措施进行预防;质量保证是保证产品和服务充分满足消费者要求的质量而进行的有计划、有组织的活动;软件过程能力评估是对软件开发能力的高低进行衡量;软件配置管理针对开发过程中人员、工具的配置、使用提出管理策略。4CMM软件过程管理4.1能力成熟度模型CMM(CapabilityMaturityModel,能力成熟度模型)是由美国卡内基梅隆大学的软件工3程研究所((SEI:SoftwareEngineeringInstitute)开发的软件过程持续改进模型。最初是受美国国防部委托,开发一种模型,用以评估软件承包商能力,并且给出帮助软件组织改进软件过程的过程能力成熟度框架。而后,随着逐步地完善及扩展,现在它已成为在全世界推广实施的一种软件评估标准,可用于软件开发过程和软件开发能力的评估和改进。CMM的基本思想是软件产品是软件过程的结果,软件产品的质量是由软件过程的能力所决定的。软件过程能力代表了通过遵循软件过程而能够实现预期结果的程度。软件过程成熟度则是一个特定过程被明确地定义、管理、测量、控制和有效的程度,它意味着能力上的增长潜力。具有高成熟度的软件组织能够在预期的时间内开发出高质量的目标软件产品,并能够获得更高的生产率。4.2CMM等级描述CMM将企业的软件过程能力从低到高分为初始级、可重复级、已定义级、已管理级和优化级5个等级。它提供了一个进化性的,而不是创新性的过程能力不断改进的框架。在每一等级中部包含一组过程目标,当这些目标满足时,就意味着软件过程能力达到了某个稳定的成熟状态,也就是某个特定的成熟度等级。随着成熟度等级的不断提高,企业的软件过程能力能够相应地不断增长。表1描述了CMM成熟度等级及其对应的关键过程区域。表1CMM成熟度等级描述成熟度等级成熟度等级描述关键过程区域等级1初始级软件过程的特点是无秩序的,偶尔甚至是混乱的。几乎没有什么过程是经过定义的,成功依赖于个人的努力。等级2可重复级企业已建立基本的项目管理过程去跟踪成本、进度和功能。必要的过程原则已经就位,使具有类似应用的项目能重复以往的成功。需求管理软件项目计划软件项目跟踪和监督软件子合同管理软件质量保证软件配置管理等级3已定义级管理活动和工程活动两方面的软件过程均已文档化,标准化,并集成到组织的标准软件过程中。全部项目均采用企业内供开发和维护软件用的标准软件过程的一个经批准的剪裁版本。组织过程聚焦组织过程定义培训大纲集成软件管理软件产品工程组内协调同行评审等级4已管理级已采集详细的有关软件过程和产品质量的数据。无论软件过程还是产品均得到定量的了解和控制。定量过程管理软件质量管理等级5优化级利用来自过程和来自新思想、新技术的前瞻性实验的定量反馈信息,使持续过程改进成为可能。缺陷预防技术改革管理过程改造管理除了等级1以外,每个成熟度等级被分解成几个关键过程区域(KPA),指明为了改进软件过程能力,组织必须关注解决的问题。每一个关键过程区域包括一组目标,当实现这组目4标后,组织就拥有了该关键过程区域所描述的过程能力。关键实践则描述了对关键过程区域的有效实施和制度化贡献最大的政策、过程和活动。每个关键实践能够对该关键过程区域的一个或数个目标的实现做出贡献。关键实践描述了应做“什么”,而不是应“如何”实现目标,其他的替代实践也可能实现该关键过程区域的目标。在《能力成熟度模型的关键实践1.1版》中详细列出了每个关键过程区域上的所有关键实践。每个关键过程区域中的关键实践按一组共同特点加以组织。共同特点是表明一个关键过程区域的实施和制度化是否有效,是否可重复持久的一些属性。同时共同特点也将关键实践分组和排成序列,方便企业使用它们。一共有五个共同特点,分别是:(1)执行约定描述组织为保证过程得以建立和继续起作用所必须采取的行动。(2)执行能力描述为了能实施软件过程,项目或组织中必须存在的先决条件。(3)执行的活动描述为实现一个关键过程区域所必须的任务和过程。(4)测量和分析描述对过程进行测量和对测量结果进行分析的需要。(5)验证实施描述那些能保证实施的活动与已建立的过程标准相一致的措施。4.3CMM的优势CMM没有规定组织所要采用的软件开发模式,而是提供了一组足够详尽的KPA,企业所要做的就是通过满足KPA的要求来达到软件开发过程的改进,可操作性强、弹性大,这使得CMM可以应用到各种开发模式不确定的软件项目中。同时,由于各个软件项目、项目环境的特点不尽相同,无法用一个标准过程去适应所有的软件项目,在CMM中还定义了过程裁剪、裁剪指南的关键需求,要求组织对标准过程进行裁剪。CMM的应用具有很大灵活性。5个体软件过程目前,学术界和工业界公认CMM是当前最好的软件过程,已经成为事实上的软件过程工业标准,其实现有赖于有关人员的积极参与和创造性活动,但CMM并未提供有关实现关键过程域所需要的具体知识和技能时。个体软件过程(PersonalSoftwareProcess,PSP)是一种可用于控制、管理和改进个人工作方式的自我持续改进过程,是一个包括软件开发表格、指南和规程的结构化框架。简单说是提高组织成员个体素质和个体能力的过程改进框架。据统计,软件项目开发成本的70%取决于软件开发人员个人的技能、经验和工作习惯。因此,在软件开发中应用基于PSP的过程管理,对企业软件开发的过程管理是一个有力的支持。主要有以下方面的支持:PSP帮助软件开发人员估算、计划、测量和跟踪自己的工作,在个人数据的基础上计划自己的工作,追求最大效率;PSP把经验量化并做出分析,通过记录项目的估算情况与实际情况,并进行比较分析,既有利于有经验的软件开发人员提高以后项目的估算准确度,也有利于新手人员参考其他工程师的经验;PSP通过记录项目的估算成本与实际成本,提高软件开发人员对项目成本估算的准确度,使其在项目早期就有一个清楚的认识,便于以后工作的规划与开展,达到成本事先控制的效果;PSP通过记录软件开发人员在项目设计、编码、测试及维护阶段出现的错误、缺陷及解决办法,并产生报告,通过分析这些报告,可以在以后项目中预防类似缺陷的发生,达到降低成本的目的。将PSP用于软件项目过程管理,可以起到控制、管理和改进个人工作方式的自我持续改进过程的作用,它可以帮助软件开发人员改善个人性能,使自己日常工作的评估、计划和预5测更加准确、更加有效,进而提高个人的工作质量和产量,降低开发成本。值得注意的是,项目估算的准确度依赖于历史数据的积累。正确的历史数据,在估算新项目时参考价值才会更大。6结论软件项目管理关心的三个方面是时间、成本和质量。实现软件项目管理有利于软件企业整体开发能力和开发水平的提高,将CMM和PSP的思想应用于软件项目管理中,将为软件企业项目管理能力提供了一个可控评框架,并对我国软件企业利用项目管理手段提升CMM等级有一定的帮助。然而CMM和PSP不是万能的,CMM和PSP并未提供实现有关子过程域所需要的具体知识和技能。它们的成功与否,与一个组织内部有关人员的积极参与和创造性活动是密不可分的。7参考文献[1]徐飞汀.软件项目进度计划管理研究[M].北京邮电大学:北京邮电大学.2010.[2]杨安琪.基于CMM过程改进的外包软件项目进度管理研究[M].北京邮电大学:北京邮电大学.2007.[3]梁成才.软件项目进度跟踪方法的综合研究[J].计算机工程,2007,33(3),56-75.[4]王芙蓉.软件项目进度计划与风险控制研究[M].大连海事大学:大连海事大学.2009.[5]石慧.软件开发项目的进度计划与控制研究[M].武汉理工大