近几年来软件开发技术、工具都有了很大的进步,但是软件项目开发超时、超支、甚至不能满足用户需求而根本没有得到实际使用的情况仍然比比皆是。软件项目开发和管理中一直存在着种种不确定性,严重影响着项目的顺利完成和提交。但这些软件风险并未得到充分的重视和系统的研究。直到20世纪80年代,Boehm比较详细地对软件开发中的风险进行了论述,并提出软件风险管理的方法。Boehm认为,软件风险管理指的是“试图以一种可行的原则和实践,规范化地控制影响项目成功的风险”,其目的是“辨识、描述和消除风险因素,以免它们威胁软件的成功运作”。
在此基础上,业界对软件风险管理的研究开始慢慢丰富起来,理论上对风险进行了一些分类,提出了风险管理的思路;实践上也出现了一些 定量管理风险的方法和风险管理的软件工具。虽然业界对风险管理表现了极大的兴趣,做出了不少努力,但似乎很少开发项目的组织真正积极地在软件开发过程中使用风险管理的方法。1995年IWSED(International Workshop on Software Engineering Data)会议做出的调查显示:风险管理技术没有得到广泛应用的原因并不是大家不相信这种技术的 实效性,而是对风险管理的技术和实践缺乏了解。因此,我们认为很有必要对风险管理进行研究。
管理概念
软件开发中的风险是指软件开发过程中及软件产品本身可能造成的伤害或损失。 风险关注未来的事情,这意味着,风险涉及选择及选择本身包含的不确定性,软件开发过程及软件产品都要面临各种决策的选择。风险是介于确定性和不确定性之间的状态,是处于无知和完整知识之间的状态。另一方面,风险将涉及思想、观念、行为、地点等因素的改变。
当在软件工程领域考虑风险时,我们要关注以下的问题:什么样的风险会导致软件项目的彻底失败;用户需求、开发技术、目标计算机以及所有其他与项目有关的因素的改变将会对按时交付和总体成功产生什么影响;对于采用何种方法和工具,需要多少人员参与工作的问题,我们如何选择和决策;软件质量要达到什么程度才是“足够的”。当没有办法消除风险,甚至连试图降低该风险也存在疑问时,这些风险就是真正的风险了。在我们能够标识出软件项目中的真正风险之前,识别出所有对 管理者和开发者而言均为明显的风险是很重要的。
风险管理在项目管理中占有非常重要的地位。首先,有效的风险管理可以提高项目的成功率。其次,风险管理可以增加团队的健壮性。与团队成员一起进行风险分析可以让大家对困难有充分估计,对各种意外有心理准备,大大提高组员的信心,从而稳定队伍。第三,有效的风险管理可以帮助 项目经理抓住工作重点,将主要精力集中于重大风险,将工作方式从被动救火转变为主动防范。
被动风险策略是针对可能发生的风险来监督项目,直到它们变成真正的问题时,才会拨出资源来处理它们。更普遍的是,软件项目组对风险不闻不问,直到发生了错误才赶紧采取行动,试图迅速地纠正错误。这种管理模式常常被称为“救火模式”。当补救的努力失败后,项目就处在真正的危机之中了。
对于风险管理的一个更聪明的策略是主动式的。主动策略早在技术工作开始之前就已经启动了。标识出潜在的风险, 评估它们出现的概率及产生的影响,对风险按重要性进行排序,然后,软件项目组建立一个计划来管理风险。主动策略中的风险管理,其主要目标是预防风险。但是,因为不是所有的风险都能够预防,所以,项目组必须建立一个应付意外事件的计划,使其在必要时能够以可控的及有效的方式做出反应,任何一个系统开发项目都应将风险管理作为软件项目管理的重要内容。
在进行软件项目风险管理时,要标识出潜在的风险,评估它们出现的概率及产生的影响,并按重要性加以排序,然后建立一个规划来管理风险。风险管理的主要目标是 预防风险,但不是所有的风险都能够预防。所以必须建立一个意外事件计划,使其在必要时能以可控的和有效的方式做出反应。 风险管理目标的实现包含三个要素。首先,必须在项目计划书中写下如何进行风险管理;第二, 项目预算必须包含解决风险所需的经费,如果没有经费,就无法达到风险管理的目标;第三, 评估风险时,风险的影响也必须纳入项目规划中。
风险管理涉及的主要过程包括: 风险识别,风险量化, 风险应对计划制定和 风险监控,如图1所示[1][3]。风险识别在项目的开始时就要进行,并在项目执行中不断进行。就是说,在项目的整个生命周期内,风险识别是一个连续的过程。
风险识别:风险识别包括确定风险的来源,风险产生的条件,描述其风险特征和确定哪些风险事件有可能影响本项目。风险识别不是一次就可以完成的事,应当在项目的自始至终定期进行。
风险量化:涉及对风险及风险的相互作用的评估,是衡量风险概率和风险对 项目目标影响程度的过程。风险量化的基本内容是确定那些事件需要制定应对措施。。
风险应对计划制定:针对风险量化的结果,为降低项目风险的负面效应制定风险应对策略和技术手段的过程。风险应对计划依据风险管理计划、风险排序、风险认知等依据,得出风险应对计划、 剩余风险、次要风险以及为其它过程提供得依据。
风险监控:涉及整个项目管理过程中的风险进行应对。该过程的输出包括应对风险的 纠正措施以及风险管理计划的更新。
每个步骤所使用的工具和方法详见表1:
风险管理步骤 所使用的工具、方法
风险识别 头脑风暴法、面谈、Delphi法、 核对表、SWOT技术
风险量化 风险因子计算、PERT估计、决策树分析、风险模拟
风险应对计划制定 回避、转移、缓和、接受
风险监控 核对表、定期项目评估、挣值分析