目 录 一、风险管理概述 (4)1.1软件项目风险 (4)1.2软件项目风险管理 (4)1.3软件项目风险管理模型.............................................................................. (6)1.4小结...................................................................................................7 二、软件项目风险管理发展历程 (7)三、经典风险管理模型 (9)3.1 Boehm 和Charette 的风险管理框架 (9)3.2CMU/SEI 的CRM 持续风险管理模型 (10)软件项目风险管理资料【最新资料,WORD 文档,可编辑修改】3.3Riskit方法 (11)3.4SoftRisk风险管理模型 (14)3.5IEEE风险管理标准 (15)3.6基于CMM/CMMI的软件项目风险管理框架 (15)3.7Microsoft的MSF风险管理模型 (16)3.8比较经典风险管理模型 (17)四、软件项目风险管理的研究方法、技术和工具 (18)4.1软件项目风险识别方法 (18)4.2网络分析模型 (21)4.3系统动力学仿真技术 (22)4.4基于成本估算模型的风险评估方法 (23)4.5其他方法体系 (24)五、我国软件项目风险管理的研究 (24)5.1研究现状 (24)5.2思考与建议 (25)【参考文献】………………………………………………………………………………错误!未定义书签。
引言近几年来软件开发技术、工具都有了很大的进步,但是软件项目开发超时、超支、甚至不能满足用户需求而根本没有得到实际使用的情况仍然比比皆是。
软件项目开发和管理中一直存在着种种不确定性,严重影响着项目的顺利完成和提交。
但这些软件风险并未得到充分的重视和系统的研究。
直到20世纪80年代,Boehm比较详细地对软件开发中的风险进行了论述,并提出软件风险管理的方法。
Boehm认为,软件风险管理指的是“试图以一种可行的原则和实践,规范化地控制影响项目成功的风险”,其目的是“辨识、描述和消除风险因素,以免它们威胁软件的成功运作”。
在此基础上,业界对软件风险管理的研究开始慢慢丰富起来,理论上对风险进行了一些分类,提出了风险管理的思路;实践上也出现了一些定量管理风险的方法和风险管理的软件工具。
虽然业界对风险管理表现了极大的兴趣,做出了不少努力,但似乎很少开发项目的组织真正积极地在软件开发过程中使用风险管理的方法。
1995年IWSED (International Workshop on Software Engineering Data)会议做出的调查显示:风险管理技术没有得到广泛应用的原因并不是大家不相信这种技术的实效性,而是对风险管理的技术和实践缺乏了解。
因此,我们认为很有必要对风险管理进行研究。
一、风险管理概述1.1软件项目风险IEEE给出了风险的定义:一种事件、状态发生的可能性,这种可能性会带来严重的后果或者潜在的问题。
风险是一种客观存在,风险与效益同存,只有正视风险才能有效地规避风险。
而软件风险是软件项目管理和开发所出现的不确定事件,并可能会给项目计划和系统质量带来危害或损失.[1]归纳起来,软件项目风险大致可分为3类:[2]◆项目风险:潜在的预算、进度、人力、资源、客户及需求等方面的问题以及它们对软件项目的影响;◆技术风险:潜在的设计、实现、接口、验证和维护等方面的问题,威胁待开发软件的质量和交付时间;◆产品质量风险:指因软件质量问题而造成的风险,涉及各种缺陷、错误及对其进行改进维护的风险。
1.2软件项目风险管理由于软件项目开发和管理中的种种不确定性,使软件业成为高风险的产业。
有调查显示,有l5%一35%的软件项目被中途取消,剩下的项目不是超期就是超出预算,或者无法达到预期的目标。
对很多失败的软件开发项目进行事后分析说明:如果在项目刚开始时就关注于识别或解决项目中的高风险因素,那么就会很大程度地减少甚至避免这种失败。
[1]软件风险管理是一种软件工程实践,它包括过程、方法和工具。
利用这些过程、方法和工具去完成以下工作:持续评估风险、确定风险优先级、实施策略处理风险。
[1] 它是软件项目管理的一个子集。
项目管理方法的精髓是提供了一种结构化的模式,来指导项目经理进行项目管理,来分析和处理项目管理过程中的问题。
风险管理方法,也是这样的一个结构化的模式,指导项目经理展开项目风险管理方面的工作。
风险管理涉及的主要过程包括:风险识别,风险量化,风险应对计划制定和风险监控。
如图1所示,中心是风险管理过程的四部曲,外围是在风险管理过程中发生交互的相关信息。
表1中显示了风险管理四部曲常用的工具和方法。
图1:风险管理过程中与外界的信息交互◆风险识别:风险识别包括确定风险的来源,风险产生的条件,描述其风险特征和确定哪些风险事件有可能影响本项目。
风险识别不是一次就可以完成的事,应当在项目的自始至终定期进行。
◆风险量化:涉及对风险及风险的相互作用的评估,是衡量风险概率和风险对项目目标影响程度的过程。
风险量化的基本内容是确定那些事件需要制定应对措施。
◆风险应对计划制定:针对风险量化的结果,为降低项目风险的负面效应制定风险应对策略和技术手段的过程。
风险应对计划依据风险管理计划、风险排序、风险认知等依据,得出风险应对计划、剩余风险、次要风险以及为其它过程提供得依据。
◆风险监控:涉及整个项目管理过程中的风险进行应对。
该过程的输出包括应对风险的纠正措施以及风险管理计划的更新。
表1:风险管理每个步骤使用的工具和方法1.3软件项目风险管理模型如1.2所述,项目风险管理主要包含四个步骤,在这个共同的基础上有些模型强调量例如,图2典的风险管理模型。
图2:美国项目管理协会提出的风险管理模型1.4小结下面的章节主要从这几个方面展开讨论:第二章我们从历史发展的角度来看风险管理的过程,经典的风险管理模型我们将在第三章介绍,在第四章中,我们将介绍风险管理常用的研究分析方法和工具,最后概述我国的软件项目风险管理的现状,并提出几点建议。
二、软件项目风险管理发展历程[4]◆19世纪50年代,软件伴随着第一台电子计算机的问世诞生了。
早期的软件开发并无系统的方法可以遵循,软件设计是在某个人的头脑中完成的一个隐藏的过程。
大多数软件是由使用该软件的个人或机构研制的,软件往往带有强烈的个人色彩。
而且,除了源代码往往没有软件说明书等文档。
这个时期软件开发基本处于起步阶段,关于软件项目风险的管理研究工作尚未出现。
◆20世纪60年代中期到70年代中期,软件开始作为一种产品被广泛使用。
软件的数量急剧膨胀,软件需求日趋复杂,维护的难度越来越大,开发成本令人吃惊地高,而失败的软件开发项目却屡见不鲜。
“软件危机”就从这时出现了。
为了克服这一危机,在1968,1969年连续召开的两次着名的NATO会议上提出了软件工程这一术语,并在以后不断发展、完善。
◆20世纪80年代,软件已经历了程序设计、程序系统阶段,开始向软件工程阶段发展。
这一时期的开发技术和手段更加先进,对管理水平也提出了较高的要求。
并出现了软件生存周期(Life Cycle)的概念,它包括计划、需求分析、设计、程序编写、测试和运行维护6个步骤。
由于软件危机而引发出的一些对软件负面的结论,因此就存在软件风险问题。
1989年由IEEE出版Barry W.Boehm编写的《Software Risk Management》(软件风险管理)是第一本比较深人地专门探讨风险管理的书籍。
随后,越来越多的机构开始研究软件项目风险管理。
其中美国卡内基一梅隆大学的软件工程研究SEI (Software Engineering Institution)提出T风险管理模型CRM(Continuous Risk Management),还多次举行研究软件风险管理的年会,一些院校也将风险管理纳人软件项目管理中进行讲授。
◆20世纪90年代至今,以网络计算为特征的信息高速公路得到了很快地发展。
软件不仅在规模上快速地发展扩大而且其复杂性也急剧增加,开发的成本和进度变得更加难以预料。
软件开发成功与否已不再仅是技术上的问题。
软件项目管理的地位突显出来。
在此基础上,软件项目风险管理研究开始慢慢丰富起来,理论上对风险进行了一些分类,提出了风险管理的思路;实践上也出现了一些定量管理风险的方法和软件工具。
是否具有专门的风险管理已经成为判断一个软件开发组织成熟与否的主要指标之一。
ISO提出的SPICE(Software Process Improvement Capability Determination)将风险管理作为评估的一部分。
国内学者对软件项目风险的研究也日趋丰富起来,在软件项目管理相关书籍中开始将风险管理作为单独一章,进行探讨。
图3:软件项目风险管理发展历程三、经典风险管理模型3.1 Boehm 和Charette 的风险管理框架Boehm 用公式对风险进行定义,其中RE = P(UO)* L(UO) 表示风险或者风险所造成的影响,P(UO)表示令人不满意的结果所发生的概率,表示糟糕的结果会产生的破坏L(UO)性的程度。
Boehm 将软件项目风险管理分为风险评估和风险控制两大部分,其中风险评估又分为风险识别、风险分析和风险的优先级排序,风险控制又分为风险管理计划、风险解决和风险监控。
Boehm 思想的核心是10大风险因素列表。
虽然其理论存在一些不足,但Boehm毕竟是软件项目风险管理的开创者。
在其之后,更多的组织和个人开始了对风险管理的研“软件危机”就从这时出现了。
为了克服这一危机,提出了“软件工程”这一术语 出现专门关于软件风险管理的书籍,越来越多的机构开始研究风险管理 理论上对风险进行了一些分类,提出了风险管理的思路;实软件项目风险的管理研究工究,软件项目风险管理的重要性日益得到认同。
软件项目风险管理的另一位创始人Charete构建的风险管理框架圈,则直接将其分为风险分析和风险管理两部分,其中风险分析包括识别、估算和评价,风险管理包括计划、控制和监控.二者的理论框架如表1所示.[5]从本质上讲,二者风险管理框架基本相同.从内容上看,与其他工程项目风险管理也没有实质性差别.表2:Boehm和Charette的风险管理框架比较3.2 CMU/SEI的CRM持续风险管理模型CMU/SEI的软件风险管理原则包括:全局观点积极的策略开放的沟通环境综合管理持续的过程共同的目标协调工作具体来说是要:不断地评估可能造成恶劣后果的因素决定最迫切需要处理的风险实现控制风险的策略评测并确保风险策略实施的有效性CRM模型要求在项目生命期的所有阶段都关注风险识别和管理,它将风险管理划分为五个步骤:风险识别分析计划跟踪控制它强调的是对风险管理的各个组成部分的沟通.(如图4)图4:CRM风险管理模型3.3 Riskit方法如果组织在项目早期采用系统化的风险管理过程和技术,那么组织就有能力避免很多问题。