软件项目风险管理资料
【最新资料,WORD文档,可编辑修改】
目录
引言
近几年来软件开发技术、工具都有了很大的进步,但是软件项目开发超时、超支、甚至不能满足用户需求而根本没有得到实际使用的情况仍然比比皆是。软件项目开发和管理中一直存在着种种不确定性,严重影响着项目的顺利完成和提交。但这些软件风险并未得到充分的重视和系统的研究。直到20世纪80年代,Boehm比较详细地对软件开发中的风险进行了论述,并提出软件风险管理的方法。Boehm认为,软件风险管理指的是“试图以一种可行的原则和实践,规范化地控制影响项目成功的风险”,其目的是“辨识、描述和消除风险因素,以免它们威胁软件的成功运作”。
在此基础上,业界对软件风险管理的研究开始慢慢丰富起来,理论上对风险进行了一些分类,提出了风险管理的思路;实践上也出现了一些定量管理风险的方法和风险管理的软件工具。虽然业界对风险管理表现了极大的兴趣,做出了不少努力,但似乎很少开发项
目的组织真正积极地在软件开发过程中使用风险管理的方法。1995年IWSED (International Workshop on Software Engineering Data)会议做出的调查显示:风险管理技术没有得到广泛应用的原因并不是大家不相信这种技术的实效性,而是对风险管理的技术和实践缺乏了解。因此,我们认为很有必要对风险管理进行研究。
一、风险管理概述
软件项目风险
IEEE给出了风险的定义:一种事件、状态发生的可能性,这种可能性会带来严重的后果或者潜在的问题。风险是一种客观存在,风险与效益同存,只有正视风险才能有效地规避风险。而软件风险是软件项目管理和开发所出现的不确定事件,并可能会给项目计划和系统质量带来危害或损失.[1]
归纳起来,软件项目风险大致可分为3类:[2]
◆项目风险:潜在的预算、进度、人力、资源、客户及需求等方面的问题以及它们对软件项目的影响;
◆技术风险:潜在的设计、实现、接口、验证和维护等方面的问题,威胁待开发软件的质量和交付时间;
◆产品质量风险:指因软件质量问题而造成的风险,涉及各种缺陷、错误及对其进行改进维护的风险。
软件项目风险管理
由于软件项目开发和管理中的种种不确定性,使软件业成为高风险的产业。有调查显
示,有l5%一35%的软件项目被中途取消,剩下的项目不是超期就是超出预算,或者无法达到预期的目标。对很多失败的软件开发项目进行事后分析说明:如果在项目刚开始时就关注于识别或解决项目中的高风险因素,那么就会很大程度地减少甚至避免这种失败。[1]软件风险管理是一种软件工程实践,它包括过程、方法和工具。利用这些过程、方法和工具去完成以下工作:持续评估风险、确定风险优先级、实施策略处理风险。[1] 它是软件项目管理的一个子集。项目管理方法的精髓是提供了一种结构化的模式,来指导项目经理进行项目管理,来分析和处理项目管理过程中的问题。风险管理方法,也是这样的一个结构化的模式,指导项目经理展开项目风险管理方面的工作。
风险管理涉及的主要过程包括:风险识别,风险量化,风险应对计划制定和风险监控。如图1所示,中心是风险管理过程的四部曲,外围是在风险管理过程中发生交互的相关信息。表1中显示了风险管理四部曲常用的工具和方法。
图1:风险管理过程中与外界的信息交互
◆风险识别:风险识别包括确定风险的来源,风险产生的条件,描述其风险特征和确定哪些风险事件有可能影响本项目。风险识别不是一次就可以完成的事,应当在项目的自始至终定期进行。
◆风险量化:涉及对风险及风险的相互作用的评估,是衡量风险概率和风险对项目目标影响程度的过程。风险量化的基本内容是确定那些事件需要制定应对措施。。
◆风险应对计划制定:针对风险量化的结果,为降低项目风险的负面效应制定风险应对策略和技术手段的过程。风险应对计划依据风险管理计划、风险排序、风险认知等依据,得出风险应对计划、剩余风险、次要风险以及为其它过程提供得依据。
◆风险监控:涉及整个项目管理过程中的风险进行应对。该过程的输出包括应对风险
的纠正措施以及风险管理计划的更新。
表1:风险管理每个步骤使用的工具和方法
软件项目风险管理模型
如所述,项目风险管理主要包含四个步骤,在这个共同的基础上有些模型强调量化的图2险管理模型。
图2:美国项目管理协会提出的风险管理模型
小结
下面的章节主要从这几个方面展开讨论:第二章我们从历史发展的角度来看风险管理的过程,经典的风险管理模型我们将在第三章介绍,在第四章中,我们将介绍风险管理常用的研究分析方法和工具,最后概述我国的软件项目风险管理的现状,并提出几点建议。
二、软件项目风险管理发展历程[4]
◆19世纪50年代,软件伴随着第一台电子计算机的问世诞生了。早期的软件开发并无系统的方法可以遵循,软件设计是在某个人的头脑中完成的一个隐藏的过程。大多数软件是由使用该软件的个人或机构研制的,软件往往带有强烈的个人色彩。而且,除了源代码往往没有软件说明书等文档。这个时期软件开发基本处于起步阶段,关于软件项目风险的
管理研究工作尚未出现。
◆20世纪60年代中期到70年代中期,软件开始作为一种产品被广泛使用。软件的数量急剧膨胀,软件需求日趋复杂,维护的难度越来越大,开发成本令人吃惊地高,而失败的软件开发项目却屡见不鲜。“软件危机”就从这时出现了。为了克服这一危机,在1968,1969年连续召开的两次着名的NATO会议上提出了软件工程这一术语,并在以后不断发展、完善。
◆20世纪80年代,软件已经历了程序设计、程序系统阶段,开始向软件工程阶段发展。这一时期的开发技术和手段更加先进,对管理水平也提出了较高的要求。并出现了软件生存周期(Life Cycle)的概念,它包括计划、需求分析、设计、程序编写、测试和运行维护6个步骤。由于软件危机而引发出的一些对软件负面的结论,因此就存在软件风险问题。1989年由IEEE出版Barry 编写的《Software Risk Management》(软件风险管理)是第一本比较深人地专门探讨风险管理的书籍。随后,越来越多的机构开始研究软件项目风险管理。其中美国卡内基一梅隆大学的软件工程研究SEI (Software Engineering Institution)提出T风险管理模型CRM(Continuous Risk Management),还多次举行研究软件风险管理的年会,一些院校也将风险管理纳人软件项目管理中进行讲授。
◆20世纪90年代至今,以网络计算为特征的信息高速公路得到了很快地发展。软件不仅在规模上快速地发展扩大而且其复杂性也急剧增加,开发的成本和进度变得更加难以预料。软件开发成功与否已不再仅是技术上的问题。软件项目管理的地位突显出来。在此基础上,软件项目风险管理研究开始慢慢丰富起来,理论上对风险进行了一些分类,提出了风险管理的思路;实践上也出现了一些定量管理风险的方法和软件工具。是否具有专门的风险管理已经成为判断一个软件开发组织成熟与否的主要指标之一。ISO提出的SPICE(Software Process Improvement Capability Determination)将风险管理作为评估的一部分。国内学者对软件项目风险的研究也日趋丰富起来,在软件项目管理相关书籍中
开始将风险管理作为单独一章,进行探讨。
图3:软件项目风险管理发展历程
三、经典风险管理模型
Boehm 和Charette 的风险管理框架
Boehm 用公式对风险进行定义,其中RE = P(UO)* L(UO) 表示风险或者风险所造成的影响,P(UO)表示令人不满意的结果所发生的概率,表示糟糕的结果会产生的破坏L(UO)性的程度。Boehm 将软件项目风险管理分为风险评估和风险控制两大部分,其中风险评估又分为风险识别、风险分析和风险的优先级排序,风险控制又分为风险管理计划、风险解决和风险监控。Boehm 思想的核心是10大风险因素列表。虽然其理论存在一些不足,但Boehm
毕竟是软件项目风险管理的开创者。在其之后,更多的组织和个人开始了对风险管理的研“软件危
机”就从这
时出现了。为
了克服这一
危机,提出了
“软件工程”
这一术语 出现专门关于软件风险管理的书籍,越来越多的机构开始研究风险管理 理论上对风险进行了一些分类,提出了风险管理的思路;实
软件项目
风险的管
理研究工
究,软件项目风险管理的重要性日益得到认同。
软件项目风险管理的另一位创始人Charete构建的风险管理框架圈,则直接将其分为风险分析和风险管理两部分,其中风险分析包括识别、估算和评价,风险管理包括计划、控制和监控.二者的理论框架如表1所示.[5]
从本质上讲,二者风险管理框架基本相同.从内容上看,与其他工程项目风险管理也没有实质性差别.
表2:Boehm和Charette的风险管理框架比较
CMU/SEI的CRM持续风险管理模型
CMU/SEI的软件风险管理原则包括:
全局观点
积极的策略
开放的沟通环境
综合管理
持续的过程
共同的目标
协调工作
具体来说是要:
不断地评估可能造成恶劣后果的因素
决定最迫切需要处理的风险
实现控制风险的策略
评测并确保风险策略实施的有效性
CRM模型要求在项目生命期的所有阶段都关注风险识别和管理,它将风险管理划分为五个步骤:
风险识别
分析
计划
跟踪
控制
它强调的是对风险管理的各个组成部分的沟通.(如图4)
图4:CRM风险管理模型
Riskit方法
如果组织在项目早期采用系统化的风险管理过程和技术,那么组织就有能力避免很多问题。Riskit方法就能提供这种系统化的风险管理过程和技术,它是由Maryland大学提出的,旨在对风险的起因、触发事件及其影响等进行完整的体现和管理,并使用合理的步骤评估风险。对于风险管理中的每个活动,Riskit都提供了详细的活动执行模板,包括活
动描述、进入标准、输入、输出、采用的方法和工具、责任、资源、退出标准。
Riskit方法的特点有:
提供风险的明确定义:损失的定义建立在期望的基础上,即项目的实际结果没有达到项目相关者对项目的期望的程度
明确定义目标、限制和其它影响项目成功的因素;
采用图形化的工具Riskit分析图对风险建模,定性地记录风险;
使用应用性损失的概念排列风险的损失;
不同相关者的观点被明确建模。
Riskit风险管理过程如图5所示,在项目生命期内,这些活动可以重复多次。表3列出了Riskit方法的各活动功能概述以及各活动的主要产出物。Riskit方法将近乎完美的理论溶入可靠的过程和技术。
图5:Riskit风险管理模型
Riskit方法
活动名称
活动功能描述活动产出物
风险管理标准定义定义风险管理的范围、频
率、
识别所有的项目相关者
风险管理标准;
为什么、何时、
谁、如何、用什
表3:Riskit方法活动描述及产出表
根据在一些组织中的研究调查显示,Riskit方法在实践中被认为是可行的,它可导致更详细的风险分析和描述,也可以改善风险管理过程的结果。
SoftRisk 风险管理模型
SoftRisk模型是由Keshlaf和Hashim提出的,它基于这样一种观念:记录并将注意力集中在高可能性和高破坏性的风险上是进行风险管理的有效途径。这样可以节省软件开发过程中的时间成本和人力成本,并可以有效地减轻风险的破坏性。此模型确保在软件项目进行中持续地进行风险管理,详见图6,步骤如下:
风险识别
风险发生的可能性和由此造成的损失估计
文档化识别的风险
风险评估。依据公式:RE = 风险发生的概率 * 风险造成的损失
排序。按照上述公式对风险排序,找出十大风险
监控。利用图形表示风险的级别、状态
控制。再估计一再评估一再排序
统计操作。如果有新的风险,则再转到步骤l。
图6:SoftRisk风险管理模型
该模型在项目开始时采用八个步骤来完成一次风险管理流程,一旦发现新的风险则再次启动该八个步骤进行循环。在采取相应措施缓解风险后,启动内部的循环:再估计、再评估、再排序,然后再监控、控制,直到风险缓解或消除。由此可见,该模型的核心是持续地发现和控制风险,并通过更新、维护基于Boehm理论的十大风险列表来管理风险。
IEEE风险管理标准
IEEE风险管理标准定义了软件开发生命周期中的风险管理过程。这个过程适合于软件企业的软件开发项目也可以应用于个人软件开发。虽然这个标准是用来管理软件项目的风险,但也同样适用于管理各种系统级和组织级的风险。这个风险管理过程是一个持续的过程,它系统地描述和管理在产品或服务的生命周期中出现的风险。包括以下活动:计划并实施风险管理
管理项目风险列表
分析风险
监控风险
处理风险
评估风险管理过程
风险管理过程详见图7。
图7:IEEE风险管理模型
基于CMM/CMMI的软件项目风险管理框架
能力成熟度模型(CMM)是SEI 主持研发的一套评估软件能力和成熟度的标准.该标准基于众多专家的经验,侧重于开发过程的管理,是目前国际上流行的软件生产过程标准和软件企业成熟度等级认证标准.CMM主要用5个不断进化的层次来表达,即初始级、可重复级、已定义级、已管理级和优化级,项目风险管理被集成在第3级水平.SEI将CMM扩展为能力成熟度模型集成(CMMD),从内容和特征上对CMM进行完善.
在CMMI中,风险管理作为第3级中的一个独立的关键过程域,是软件工程管理的一个重要方面,体现了风险管理的过程特点,从而使在过程中进行风险管理的原则得以真正体现. CMMI的风险管理被清晰地描述为实现三个目标,每个目标的实现又通过一系列的活动来完成(如图8所示),该模型的核心是风险库,实现各个目标的每个活动都会更新这个风险库,其中活动(制订并维护风险管理策略)与风险库的联系是一个双向的交互过程,即通过采集风险库中相应的数据并结合前一活动的输入来制订风险管理策略.
图8:CMMI风险管理模型
Microsoft的MSF风险管理模型
MSF(Microsoft Solutions Framework)的风险管理思想是:风险管理必须是主动的,它是正式和系统的过程,风险应被持续评估"监控"管理,直到被解决或问题被处理.该模型最大的特点是将学习活动溶入风险管理,强调了学习以前项目经验的重要性。(如图9)它的风险管理原则是:
◆持续的评估
◆培养开放的沟通环境:所有组成员应参与风险识别与分析;领导者应鼓励建立没有责备的文化
◆从经验中学习:学习可以大大降低不确定性;强调组织级或企业级的从项目结果中学习的重要性
◆责任分担:组中任何成员都有义务进行风险管理
图9:MSF风险管理模型
比较经典风险管理模型
以上七个软件项目风险管理模型虽然在表达形式上有所不同,但基本按照风险的识别、估计、分析、计划、控制和监督六步来完成的。在这个共同的基础上,有些模型强调量化的数据库的建立,有些则强调沟通和学习的重要性。各模型的比较分析如表4。
模型特点模型
复杂
度
模型
核心
活动
Boehm&Charatte
强调识别、维护十大风险列表,软件项目
十大风险列表显示,其模型没有充分考虑建设
方的风险,如下的模型基本与该模型相似。
低
风险
识别
CRM
持续风险管理,该模型将沟通视为风险管理的
核心
低通讯
Riskit 对于风险管理中的每个活动都提供了详细的活
动执行模板,是风险管理模型中比较复杂的模
型。
高
风险
管理
标准
定义
SoftRisk用图形化的工具Riskit分析图对风险建模中统计
IEEE
风险统计,有软件支持持续风险管理,持续改
进,高层管理者制订标准中
管理
风险
描述
表
CMMI
可以管理项目级或组织级风险,强化量化管理
和风险库的作用中
风险
库
MSF
持续的、前瞻性的风险管理,持续过程改进持
续的、主动的风险管理,强调学习
中学习
表4 经典风险管理模型对比表
四、软件项目风险管理的研究方法、技术和工具
软件项目风险管理发展近30年中,出现了不少方法、技术和工具.这些成果大多以系统整体的形式出现,并贯穿于风险识别、评估、分析和控制的全过程,各方法和技术之间也有交叉,并因阐述的角度不同而有所侧重.下面就其主要研究成果进行简要评述.
软件项目风险识别方法
风险识别是任何风险管理活动的起点.从已有成果看,软件项目风险识别的研究方法大致有以下几种:
◆风险清单法.(如表5)Boehm给出了top10风险序列团,并提出了顶级十大风险源清单困.随后,他指出在软件项目开发生命期的每个重要阶段,都可进行top10风险清单的
调查和修改,并将风险管理加人软件项目开发生命期模型.Boehm还提出了软件项目开发期的螺旋式模型,使项目管理人员可对软件项目进行动态风险追踪.Barki等通过总结列出了35项风险变量;JoneS描述了60项最常见的风险因素。这些成果对于开展风险识别、提供风险源素材具有很大的帮助.
本周上
周
周数风险风险解决情况
115需求逐渐
增加利用用户界面原型来获取高质量需求,已将需求规约置于明确的变更控制程序下,运用分阶段交付的方法在适当时提供能力来改变软件特征
255有多余的
需求或开
发结果
项目陈述中要说明软件中不需要包含什么
设计的重点放在最小化
评审中有核对清单用以检查“多余的设计与多
余的实现”
324发布的软
件质量差开发用户界面原型以确保满足用户要求,遵循符合要求的开发过程对所有需求、设计和代码进行技术评审,制定测试计划以确保能测试所有的功能,系统测试由独立的测试员执行
475无法按进
度表完成避免在完成需求规约之前对进度做出约定及早进行评审以发现和解决问题在项目进行过程中对进度表反复估算运用积极的项目追踪以确保
及早发现进度表的疏漏之处,即使整个项目将延迟完成, 分阶段交付计划允许先交付只具备部
分功能的产品
542开发工具
不稳定造
成进度延
期在该项目中只使用一两种新工具, 其余都是过
去项目用过的
6-1人员流动
率高鼓励开发人员购买公司股权积极而详细的项目
计划带来了明显的期望
6-1人员流动
率高
生产力环境支持高生产率、高积极性和高凝聚力,定期的再估计支持修订计划以便应付规模的变更而无需大量的加班时间
735开发人员
与客户之
间的摩擦
用户界面原型使开发人员与用户在同一个详细项目前景下统一起来,分阶段交付产品使用户相
信项目正在稳步前进
865缺乏效率
的办公空
间
在完成用户界面原型以后就将开发工作从场内移到有私人办公的场外去,仍然需要批准预算以保证场外开发工作的进行
表5 风险清单法
◆风险识别法(TBI).Marvin等提出的基于分类的风险识别法,主要是从项目分类学的
角度考虑风险,对项目的风险项进行分类,从单纯的清单列表走向由分类树与问卷识别过程的统一,从而使软件项目风险项具有结构性的特点.另外,它也秉承了动态管理的特点,使风险识别及后续处理有计划、分步骤、周期性地在项目生命期内进行.
◆基于分类的问卷调查表法(TBQ).该方法是由专家根据项目特点设计风险管理问卷调查表,对企业有关人员进行问卷调查,并根据调查结果对数据进行统计分析.表6为XX公司项目风险检查明细表。
表6 XX公司项目风险检查明细表
网络分析模型
网络分析技术在项目风险管理中经常使用,软件项目风险管理中很多方法和工具都借鉴了传统的网络技术.其研究方法主要有以下几种:
◆PERT/CPM,GERT和(计划评审技术)(如图10)主要是针对项目进度风险进行评估,通常要求各随机事件都服从三点分布.在实践中,这一假定往往无法满足,这时一般可与蒙特卡洛仿真联合使用.GERT(图形评审技术)可处理活动间的前后逻辑关系受活动结果支配的情况,其活动及活动的先后次序均为随机变量.它既能评估进度风险,又能评估成本和质量等风险.VERT(风险评审技术)是以管理系统为对象、以随机网络仿真为手段的定量风险分析技术.它可根据每项活动的性质,在网络节点上设置多种输人和输出逻辑功能,使网络模型能充分反映实际过程的逻辑关系和随机约束.这类技术最为常用,在软件项目风险管理中多有应用.
图10:计划评审技术
◆关键链技术.Goldrat将其提出的制约理论引人项目管理,提出了以关键链取代关键路径的思想.他出版了企业管理专着《关键链》,提出了关键链项目管理(CCPM).