ISSN1000-9825,CODENRUXUEWE-mail:jos@iscas.ac.cnJournalofSoftware,Vol.21,No.12,December2010,pp.3029−3041:+86-10-62562563©byInstituteofSoftware,theChineseAcademyofSciences.Allrightsreserved.风险驱动的软件项目缓冲分配方法∗谢利子1,2,王青1+,肖俊超11(中国科学院软件研究所互联网软件技术实验室,北京100190)2(中国科学院研究生院,北京100190)ReducingPlanChange:ARiskDrivenSoftwareProjectBufferAllocationMethodXIELi-Zi1,2,WANGQing1+,XIAOJun-Chao11(LaboratoryforInternetSoftwareTechnologies,InstituteofSoftware,TheChineseAcademyofSciences,Beijing100190,China)2(GraduateUniversity,TheChineseAcademyofSciences,Beijing100190,China)+Correspondingauthor:E-mail:wq@itechs.iscas.ac.cnXieLZ,WangQ,XiaoJC.Reducingplanchange:Ariskdrivensoftwareprojectbufferallocationmethod.JournalofSoftware,2010,21(12):3029−3041.:Thispaperproposesariskdrivenprojectbufferallocationmethodwhichwillallocateprojectbufferaccordingtorisks,scheduleconstrainsandresourceconstrainsbetweentasks.TheresultofsimulationbasedexperimentsshowsthatcomparedwithCriticalChain,theproposedmethodcanremarkablyreducethefrequencyofplanchangeandminimizethenegativeimpacttoprojectduration.Themethodandthetoolcanhelpprojectmanagerstodecideappropriateprojectbufferlengthandmakebetteruseofthelimitedbuffer.Thestabilityandtrustworthinessofprojectplanschedulecanbeenhanced.Keywords:softwareprojectmanagement;planchange;risk;projectbuffer;processsimulation;resourceconstrain摘要:提出一种风险驱动的项目缓冲分配方法,并开发了相应的项目模拟执行工具对方法进行验证.方法旨在通过综合考虑软件项目的风险因素、任务之间的进度约束和资源约束对项目的可用缓冲进行合理分配.模拟实验的结果表明,在风险较高的软件开发项目中,该方法相对于关键链项目管理中尾部集中的项目缓冲分配方法,可确保在对项目平均执行工期产生较小影响的同时,显著降低项目执行时计划变更的发生频率.该缓冲分配方法与项目模拟工具可以帮助软件项目经理确定合适的项目缓冲时间长度以及缓冲分配方案,进而提高软件项目计划的可信性和执行的稳定性.关键词:软件项目管理;计划变更;风险;缓冲分配;过程模拟;人力资源约束中图法分类号:TP311文献标识码:A随着信息技术的应用领域不断扩展,软件产品的规模不断增大,复杂度也越来越高.这导致软件项目管理的∗SupportedbytheNationalNaturalScienceFoundationofChinaunderGrantNo.90718042(国家自然科学基金);theNationalHigh-TechResearchandDevelopmentPlanofChinaunderGrantNos.2007AA010303,2007AA01Z186(国家高技术研究发展计划(863));theNationalBasicResearchProgramofChinaunderGrantNo.2007CB310802(国家重点基础研究发展计划(973))Received2009-04-08;Accepted2009-08-123030JournalofSoftware软件学报Vol.21,No.12,December2010难度也越来越增加.软件项目进度滞后、成本超支的情况依旧屡见不鲜.近年来,软件开发的主流模式已由小规模的手工作坊式开发转向诸如软件外包等形式的跨地域、跨组织的协作软件开发.软件产品与生俱来的高复杂性导致软件开发过程相对于传统工业生产过程具有更高的不确定性.频繁的计划变更将严重影响软件开发效率,增加额外的工作量和沟通成本.同时,计划变更所带来的大量沟通协调工作也会给项目带来新的风险.如何制定出符合项目特点的、稳定的进度安排是项目经理们的首要任务,也是确保软件项目成功的关键.关键链项目管理方法[1]是约束理论在项目管理中的成功应用[2,3].关键链是指“相关任务所连成的耗时最长线路,相关性既可以由任务之间的逻辑性造成,也可以由资源约束造成”[4].在对具体的项目和任务进行进度安排时,从项目经理、任务负责人到具体的开发人员都会考虑可能存在的风险而为自己的进度安排争取一定的安全时间,该安全时间称为可用缓冲[1].关键链项目管理方法取消了里程碑概念,它将项目缓冲设定为项目关键链长度的一半,并将其集中放置在项目尾端,通过监视缓冲消耗情况来监督项目进展.近年来,关键链项目管理技术在世界范围内被传统的工业企业广泛采用.通过实施关键链项目管理可以显著缩短企业生产周期,加快资源流转.但是,关键链方法在缩短工期的同时带来了高频率的计划变更[5],并不适用于风险较高、不确定性较高的软件开发项目.如何减少计划变更、提高项目执行的稳定性是项目管理领域的热点问题.稳定的项目计划将极大地提高协作开发效率,降低开发成本.尤其对于软件外包等协作型软件开发公司而言,稳定的项目进度安排和执行能力将提高其行业竞争力.本文提出一种风险驱动的项目缓冲分配方法.该方法通过综合考虑软件项目的风险因素、任务之间的工作产品约束和人力资源约束,将有限的可用项目缓冲分配到各个任务中.同时开发了风险驱动的项目执行模拟工具对方法进行了验证.实验结果表明,在风险较高的软件开发项目中,风险驱动的项目缓冲分配方法相对于当前流行的关键链项目管理中尾部集中式的缓冲分配方法,在对项目平均执行工期产生较小影响的同时,能够显著降低项目执行时计划变更的发生频率.方法相对关键链管理理论中尾部集中的缓冲分配而言,更适用于风险较高的软件开发项目.方法和工具可为软件项目经理确定合适的项目缓冲长度和缓冲分配方案提供有力的决策支持,提高了软件项目计划的可信性和执行的稳定性.1相关研究风险是指“可以对项目目标造成负面或正面影响的不确定因素”[6],通常情况下的风险指负面因素.风险管理作为IT项目管理的9个重要领域之一[7],是确保软件项目成功的关键.由于软件开发项目不确定性较高,项目在执行过程中实际进度和成本经常偏离计划,此时对项目计划进行的调整称为计划变更[4].过于频繁的计划变更会对项目执行造成严重影响,会带来额外的沟通成本和风险.缓冲是指为了应对风险对进度造成的影响,在项目或任务的理想工期之外所预留的可用安全时间.通过设立缓冲来应对风险,在4个风险处理方式(规避、接受、转移、减缓)中属于风险接受的范畴,既接受风险发生,提前做好准备以降低风险发生时对项目进度、任务进度所造成的影响.在项目管理领域,有一些针对关键链项目管理方法的研究和改进工作,如通过分析项目风险来对项目缓冲长度进行估算[8]和通过模糊逻辑估算项目缓冲长度[9]等.以上研究旨在获得更好的项目缓冲长度估计,并未涉及具体的任务缓冲分配方法,也没有考虑计划变更对项目的影响.文献[10]指出,项目经理应该根据项目特点在生产率和项目稳定性上做出均衡,而不能盲目地套用关键链管理方法.项目管理的实践者们意识到有必要通过为具体的任务设立可用缓冲来提高项目进度的稳定性.比如微软公司内部的一些开发小组为应对软件开发过程的高风险和高不确定性,采用50%缓冲方法[11]安排项目进度.该方法易于实施,只需统一地对每个任务的进度增加任务理想工期长度一半的缓冲时间,但其缺点是没有考虑任务之间的差别和联系,也没有对任务进行细致的风险分析.基于价值的软件工程[12]思想指出,软件工程中各因素不能等价视之,2/8原则[13]同样适用于软件工程.因此,不同的任务根据其风险情况应该具备不同级别的不确定性,分配缓冲时应该对这种区别予以考虑.关键链项目管理中,尾部集中的缓冲分配和管理方法会得到最佳的平均项目执行工期,但是项目执行过程谢利子等:风险驱动的软件项目缓冲分配方法3031中的计划变更频率也是较高的[5].我们在软件项目管理、风险驱动的需求管理和项目计划制定等领域做了广泛而深入的研究[14−17],本文基于以上研究基础,试图通过风险驱动的缓冲分配方法在计划变更和项目平均完成工期之间寻求均衡,以提高软件项目执行的稳定性.提出如下研究假设:在风险较高的软件开发项目中,根据任务风险的不同分布和风险的影响程度对项目缓冲进行合理分配,相对于关键链项目管理中尾部集中的缓冲分配方法,可以在对项目平均执行工期造成较小影响的同时有效降低计划变更发生的频率.本文提出一种风险驱动的项目缓冲分配方法,并通过项目模拟对方法的效果进行验证.第2节介绍软件项目模型和缓冲分配方法.第3节通过模拟实验对缓冲分配方法进行实验分析.最后是研究工作的总结和对未来工作的展望.2风险驱动的项目缓冲分配和项目模拟方法2.1整体框架本文研究工作的整体框架图如图1所示.框架分为应用层、工具层和模型层.在应用层,项目经理首先整理和分析项目信息和风险信息,然后通过工具获得在给定可用项目缓冲范围内的项目进度安排,并对项目进度安排进行模拟执行.最后,项目经理根据模拟执行的结果做出相关决策.在工具层,风险驱动的项目缓冲分配模块提供自动的项目缓冲分配和进度安排功能,风险驱动的项目执行模拟模块则提供项目模拟执行和数据统计分析功能.在底部的模型层中,软件项目模型对框架中各个模块的实现和具体运作提供底层的描述支持.ApplicationlayerRiskdrivenprojectbufferallocationRiskdrivenprojectsimulationProjectmanagerProjectinfomationProjectscheduleSoftwareprojectmodelSimulationresultSetCheckInputOutputOutputInputRiskinformationSetInputInputToollayerModellayerFig.1Mainframeworkoftheresearch图1研究工作的整体框架图2.2软件项目模型软件项目模型描述了软件开发项目中的要素(项目、任务、人力资源和风险)及要素之间的关系.该模型是实现缓冲分配和项目模拟执行的基础.软件项目P定义为如下可扩展的五元组:P(project)={PN,PS