0 引言
目前软件开发无论是技术方法还是开发工具都取得了很大的进步,但是软件项目开发超时、超支,甚至开发结果不能满足用户需求而根本没有得到实际使用的情况仍然比比皆是。著名的CHAOS报告(2003)指出:82%的软件项目交付延期,66%的软件项目失败。
KPMG报告(1995)中对项目失控企业的调查显示,55%的失控项目没有实行过任何风险管理,而在38%实行了风险管理(有些调查者不知道是否实行了风险管理)的项目中,有50%的项目在启动之后就再也没有管理过风险。
软件项目失败或失控的重要原因是对软件项目开发过程中自始至终存在着的种种风险认识不够,管理不到位。在很多的情况下,软件开发人员往往会忽略掉软件项目的风险管理,有的不知道风险管理到底应该做些什么。
风险管理作为项目管理中最容易被忽略而且是最难以管理的环节已经日益引起人们的重视。目前国内外的项目管理研究大部分还是针对工程项目的,专门针对软件项目的还很少。因此,对于软件项目中的风险管理仍需要进一步的研究。
1 软件项目的常见风险
美国电气和电子工程师协会(IEEE)给出了风险的定义:一种事件、状态发生的可能性,这种可能性会带来严重的后果或者潜在的问题。风险是一种客观存在,风险与效益同存,只有正视风险才能有效地规避风险。
软件项目开发是带有可能导致损失的风险的生产活动,软件开发过程有可能超出预算或时间延迟,原计划项目开发的方式不一定能保证开发工作一定成功。软件作为一种抽象的逻辑实体,软件产品是智力产品,软件开发受多方面因素的影响。
这些特点使得软件项目具有别于其他项目的复杂性。软件项目有以下五类常见风险:
(1)产品规模风险。项目的风险是直接与产品的规模成正比的。与软件规模相关的常见风险因素有:①估算产品的规模的方法(代码行、功能点、文件的数目);②产品规模估算的可信度;③产品规模与以前产品规模平均值的偏差;④产品的用户数;⑤复用的软件数。
(2)需求风险。很多项目在确定需求时都面临着一些不确定性和混乱。当在项目早期容忍了这些不确定性,并且在项目进展过程当中得不到解决,这些问题就会对项目的成功造成很大威胁。如果不控制与需求相关的风险因素,那么就很有可能产生错误的产品。
与需求相关的风险因素有:①对产品需求缺少认同;②在需求分析过程中客户参与不够;③由于不确定的需要导致新的市场;④缺少有效的需求变化管理过程;⑤对需求的变化缺少相关分析。
(3)相关性风险。许多风险都是因为项目的外部环境或因素的相关性产生的。经常不能很好地控制外部的相关性,当外部环境或因素改变时,必然造成项目成本预算的偏差,造成项目成本风险的增加。
因此缓解策略应该包括可能性计划,以便从第二资源或协同工作资源中取得必要的组成部分,并且预先觉察潜在的问题,规避风险或将风险成本控制在可接受范围内。
与外部环境相关的因素有:①客户供应条目或信息;②内部或外部转包商的关系;③交互成员或交互团体依赖性;④经验丰富人员的可得性;⑤项目的复用性。
(4)管理风险。在大部分项目里,项目经理经常是写项目风险管理计划的人,并且大部分人都不希望在公共场合暴露自己的弱点。然而,这些问题可能会使项目的成功变得更加困难。如果不正视这些棘手的问题,它们就很有可能在项目的某个阶段影响项目。
当定义了项目追踪过程并且明晰项目角色和责任,就能处理这些风险因素:①计划和任务定义不够充分;②实际项目状态与计划的差异;③不切实际的承