软件项目风险管理研究[内容摘要]随着软件产业的迅速发展,软件的规模越来越大,复杂性也越来越高,风险变得更加难以控制,最终导致软件项目失败的结果越来越常见。如何对软件项目风险因素进行分析并有效地规避风险,从而致使项目顺利成功是进行软件风险管理的主要课题之一。只有充分地理解和学习软件风险管理的理论知识,同时在实践中不断地积累经验才能有效地进行风险防范和控制,达到减少风险的影响程度和实现利益最大化追求的目的。本文从分析国内外软件风险管理的发展现状入手,详细地按照软件生命周期各阶段将软件项目风险进行分类,并总结对比分析了国外经典软件风险管理模型,同时介绍了软件风险管理全过程,同时基于经典软件风险管理模型,提出了改进的软件风险管理模型和方法,并根据自身经验对如今国内企业提出软件风险管理一些建议和意见。[关键词]项目管理;软件风险;风险管理1.研究背景随着经济全球化的不断深入,以信息技术为依托的知识经济初见端倪,各国都在实施信息化带动工业化的发展战略,软件行业成为许多国家的支柱产业,软件业的发展程度从某种意义上体现了该国的综合国力,决定着国家未来的国际竞争地位。软件是一种特殊的逻辑产品,不具备实体的可见性,它是人经过智力劳动而产生出来、具有特殊性质的复杂事物川。一些调查表明,约的软件项目开发超出估计时间,大型项目平均超出交付时间,以上的软件项目开发费用超出预算。软件项目成功的几率要远远低于其它任何工程项目,软件行业面临着所谓的“软件危机”。在软件产品开发过程中存在着众多不确定因素,这些因素使得软件项目比其它工程项目具有更高的风险。从学科发展角度来看,软件工程的形成得益于人们用工程化思想看待软件产品的开发,软件工程的产生又使得软件项目管理学科应运而生。软件项目管理的出现使所谓的“软件危机”得到了一定程度的缓解和控制。项目管理的目标是在有限资源标注条件下,保证项目时间进度、质量、成本达到最优化。软件项目管理的主要目标是确保软件产品能够按预期方案交付,同时还要满足用户需求。软件项目风险管理的目的是要找出导致项目需求不明晰、不能按进度计划及时交付、产品质量存在缺陷、开发费用超支等各种不良后果的风险因素,对风险因素及可能造成的后果和危害进行定性和定量分析,从而为软件项目管理人员等提供有效的风险控制方案和措施,使其对软件项目的损失或影响降到最低程度或使决策者可以接受的程度。因此,软件项目风险管理是软件项目管理的重要部分。软件项目风险管理经过近三十年发展,已从理论、方法乃至实践都取得了一定进展。随着软件工程实践深入和软件企业的不断成熟,软件项目风险管理逐渐成为当前软件工程领域研究的热点问题,受到广泛关注。2.国内外研究现状2.1软件项目风险管理理论框架模型研究情况美国学者BarryBoehm在1989年出版的著作《软件风险管理》奠定了软件项目风险管理的理论基础。在随后的时间里,随着计算机技术和软件工程的的深入发展,软件项目风险管理的发展逐渐趋于体系化。下面简要介绍几种软件项目风险管理的理论框架模型。2.1.1Boehm和Charette的风险管理框架Boehm在其著作《软件风险管理》中将软件项目风险管理分为风险评估和风险控制两大部分,其中风险评估又分为风险识别、风险分析和风险的优先级排序,风险控制又分为风险管理计划、风险解决和风险监控。Boehm和Charette风险管理框架表如下:在此框架中,风险识别主要指出一个潜在破坏项目成功的风险列表,这个风险列表将作为风险控制的基础。风险分析是指评估每个风险出现的可能性及其影响,判定风险的级别。风险优先排序是指按风险影响大小排出一个风险优先级。风险控制是由风险管理计划、风险化解和风险监控组成。风险管理计划是指制定一个应对每个重要风险的方案,同时应确保每一个单独的风险管理计划之间以及与整体项目计划之间相一致。风险化解是指每个重要风险所对应计划的执行。风险监控是指对解决风险的过程进行监控,风险监控还可以包括识别新的风险并将其反馈到正在进行的风险管理过程中。2.1.2Higuera和Haimes风险管理框架Higuera和Haimes提出的软件项目风险管理框架是美国卡内基·梅隆大学软件工程研究所提出的风险管理理论体系的一部分。它将风险管理分为风险识别、分析、计划、追踪、控制五个步骤,风险管理方式是连续循环的,核心是风险交流,要求在软件项目生命周期所有阶段都关注风险管理的各项活动,即所谓持续风险管理框架模型(CRM)。如下图,持续风险管理框架模型。图2持续风险管理框架模型(ContinuousRiskManagementParadigm)在各种软件项目风险管理理论框架研究中,每一理论体系都具有结构完整、内容完善的特点,并附带有与结构和内容相配套的方法和技术,它们借用运筹学、决策理论等思想、方法和工具,秉承了经典风险管理理论体系的优点,同时又体现了软件项目的某些特点。这些研究成果对于奠定整个软件项目风险管理学科的基础起着非常重要的作用。3.软件项目风险管理基本内容3.1软件项目风险管理定义软件项目的风险管理更是软件项目管理中的重要内容。大量的统计表明,实行有效的风险管理是软件项目开发过程中减少损失的一种重要手段。软件项目风险管理出现在上世纪年代末,到现在只有三十多年的历程,在软件项目风险管理领域中,人们多是借鉴于工程项目的管理方法来解决软件项目开发中出现的风险问题,并且对于软件项目的风险管理概念的理解是来自于其他工程项目的风险管理,并在其基础上有所讨论和改进。因此,软件项目风险管理是指项目管理团队通过风险识别、风险量化和风险控制,采用多种管理方法、技术和工具,对软件项目所涉及的各种风险实施有效的控制和管理,采取主动行动,尽量使风险事件的有利后果带来的机会最大,而使风险事件所带来的不利后果威胁降到最低,以最少的成本保证项目安全、可靠的实施,从而实现项目的总目标。3.2软件项目风险的特点软件项目管理的风险来自于软件项目自身的特点:(1)软件产品不可见。开发的进展以及软件的质量是否符合要求难于度量,从而使软件的管理难于把握;(2)软件的生产过程不存在绝对正确的过程形式。不同的软件开发项目应当采用不同的或者说是有针对性的软件开发过程,而真正合适的软件开发过程是在软件项目的开发完成才能明了的。因此项目开发之初只能根据项目的特点和开发经验进行选择,并在开发过程中不断的调整;(3)大型软件项目往往是“一次性”的。以往的经验可以被借鉴的地方不多。回避和控制软件管理风险的惟一办法就是设立监督制度,进行有效的风险监控和管理。3.3软件项目风险的分类按照风险的内容,可分为五个方面:(1)社会环境风险:国家政策、新技术发展、自然灾害、国际形势等。(2)技术风险:技术的复杂性、兼容性、承受性以及与其他项目的相关性等。(3)费用风险:成本预算准确性、任务要求明确性、进度和技术因素制约、合同类型和报价制约等。(4)进度风险:项目人员经验、进度因素制约、计划合理性和资源充分性等。(5)管理风险:领导素质、组织结构、研发人员的素质、各阶段的协调沟通等。按风险性质分类,可以分为三个方面:(1)己知风险,是通过仔细评估项目计划、开发项目的商业及技术环境、以及其它可靠的信息来源(如不现实的交付时间,没有需求或软件范围的文档、恶劣的开发环境)之后可以发现的那些风险。(2)可预测风险,能够从过去项目的经验中推测出来(如人员调整,与客户之间无法沟通,由于需要进行维护而使开发人员精力分散。)(3)不可预测风险,它们可能、也会真的出现,但很难事先识别出它们来。一般来讲,软件项目过程是一个不断识别风险、分析风险、计划风险、监控风险和应对风险的过程。一个大型软件的开发大约存在30至40种风险。如果每种风险都需要3至7个风险管理步骤,那么风险管理本身就可以构成软件开发过程的一个子项目。一个好的风险管理过程体现了组织在风险管理上的知识和经验,这种知识和经验通过组织制定的过程规范得以确定,组织在风险管理基础结构上的投入,往往也会获得理想的回报。4.软件项目风险应对和监控4.1软件项目风险应对过程定义风险应对就是处置风险的过程。风险无法被完全避免,对于某些风险也无需完全避免。重要的是把风险置于人们的控制之下。风险应对活动主要有两部分内容事前、事中和事后。事前控制主要是降低风险发生的可能性,事后控制则主要是减小风险造成的损失。事中主要是对风险状态的监控,并随着风险状态的改变而做出不同的风险反映。风险应对模型如图:图3风险应对过程定义(1)过程控制如同控制风险识别过程一样,项目资源、项目需求和风险管理计划同样约束着风险应对过程。(2)过程输入风险行动计划是风险应对过程的输入。它包括风险应对的目标、约束和决策,记录了选择的途径、需要的资源和批准权利。计划提供了高层次的指导并允许达到目标过程中的灵活性。(3)过程输出风险状态、可接受的风险、减少的重复劳动、校正行动和问题防范是风险应对过程的输出。风险状态是对照风险行动计划所取得或缺乏的进展。报告风险状态,即是报告计划的实施结果。可接受的风险意思是指你可接受风险后果,甚至是最糟糕的后果。当你在风险应对方面取得足够进展时,项目状态指标就会得以改进。当状态指标回落到可接受范围内时,将触发解除或延缓风险应活动。重复劳动是第一次做某事时没有做对所付出的代价。通过减少重复劳动,不必再次工作,因为你第一次做对了没有浪费时间。用节省的成本计算减少的重复劳动,需要将劳动成本翻两倍,再加上一般管理费用。校正行动是解决问题所需的活动之一。通过校正行动,可以找到问题的己知解决方案。使用这些过程找出大家普遍能接受的解决方案、然后执行某些活动来解决问题。问题防范发生于避免问题时。避免了问题,便消除了问题将带来的后果,它包括问题发现成本,重复劳动成本和机会成本。我们将问题定义为风险的发生,所以必须同时考虑风险发生的后果。用节省的成本计算问题防范,合计发现和解决问题的成本、重复劳动的成本、机会成本和风险发生的后果。(4)过程机制机制可以是方法、技巧、工具或其他为过程活动提供结构的手段。风险应对技巧、风险应对工具和风险数据库都是风险应对过程的机制。风险应对技巧是对风险应对细节有帮助的方法。风险应对工具利用电脑使风险应对技巧自动化,如做原型和模拟。风险数据库包含负责人的姓名和风险应对活动的结果,它还包含重要结果的完成日期。4.2软件项目风险应对依据软件风险应对的依据,是软件风险分析过程的结果,主要包括以下两个方面:(1)风险管理计划,包括风险应对的目标、约束、决策、资源等。(2)风险登记清单,指风险分析的结果。4.3软件项目风险应对活动根据风险分析的结果和风险管理成本对制定的项目实施计划和方案进行风险评估,选择风险收益比较小的方案,或按风险收益原则对原计划方案进行修改。从而达到对风险的事前控制。风险管理对于复杂的软件项目,还有一个重任务是,协调各管理过程间的关系。运用决策理论选择行动方案,对方案进行评估,使一方面的风险得到控制是否会引起其它风险。对不同方案的风险进行评估,选择风险较小的方案。为风险应对方案做作出成本预算。对风险触发事件做出反应,执行风险行动计划,报告风险行动计划的执行情况,结合风险应对的效果和风险管理成本对风险行动计划进行修正。最后,软件风险应对的输出结果是,更新的风险登记册、更新的项目管理计划、与风险相关的合同协议。软件风险应对的目标是风险得到有效的防范、风险指标回落到可接受范围内、校正风险行动计划,积累风险经验。4.4软件项目风险应对策略和方法风险应对策略包括主动策略和被动策略,被动策略是指当风险不利结果发生后采取的,而主动策略是以预防为主,如前文所说先识别出主要风险项,再制定出风险管理计划,对风险进行化解和监控。采取主动型风险应对策略主要包括四种方法避免、限制、减轻和监控。(1)避免:通过制定风险管理计划,重新规划项目或者改变项目中的一些设计和计划,使一些风险得到避免。(2)限制:对某些无法避免的风险进行约束和限制,使风险只影响到项目的一小部分,以至于不会影响到项目的总目标。(3)减轻:采取一些积极的措施,使得风险发生的时候不利结果降到