软件项目风险管理

本文通过文献综述总结了软件项目中的常见风险因素及其分类。

从上个世纪发展到现在,软件早已从解决特殊问题的途径和信息数据分析的工具演化成一门独立的产业,但在提供客户所需要的软件的能力方面取得的进展却十分迟缓,软件行业一直受到无数次进度延迟、交付产品质量差的困扰。同时客户对“更好、更快、更便宜”的需求的期盼和软件复杂程度的增加也大大提高了软件开发人员提高了软件开发人员提高软件性能的标准。软件风险管理研究表明,在行业范围内,只有16.2%的软件项目可以做到按时、按预算进行,其余52.7%是在功能减少的情况下交付的,31.1%是在项目完成之前取消的。

1 风险与不确定性

在大多数情况下以客观的尺度衡量不确定性是非常困难的,不确定性是人主观心理上的一种难以度量的想法,不确定性的范围包括是否发生的不确定性、发生于何时的不确定性、发生情况的不确定性以及发生带来的影响的后果程度的不确定性。在软件项目开发过程中,缺少信息是软件风险管理的必要条件,在大多数情况下也是软件风险管理的普遍特征。缺少信息直接会导致信息的不确定性,从而导致项目管理者的决策产生不确定性,进而造成风险。

不确定性导致风险,即潜在的损失。不确定性可以从不同视角进行分类,下表从三个不同的角度界定了不确定性的类别。

观念

不确定性分类

定义

管理人员

时间

事件可能发生的时间或应对能力的不确定性。

控制

没有权力做出决策,或实施过程中的不一致。

信息

做决策所依据的信息不充分或不准确。

分析人员

描述

没有明确定义系统的变量的标识信息。

量度

缺少将数据赋值给描述系统的变量的信息。

事件结果

缺少关于可能发生的结果的信息。

开发人员

指导价值

缺乏明确的目标。

工作环境

缺乏关于当前决策情况的相关信息。

相关决策

缺乏协调。

软件项目中的风险是来源于软件项目开发过程中及产品本身会带来的损失或危害。风险针对的是还没有发生的未来,即风险来源于各种选择的不确定性。风险处于确定性和可变性之间,是处于混沌和清晰明了之间的状态。进行风险分析时,重要的是量化不确定性的程度以及每个风险可能造成影响的水平。同时,风险还涉及想法、行动、态度、环境等因素的改变,比如项目缺少项目管理者的支持、人员流动、项目组缺乏组织成熟度等等。风险无处不在,只有对风险采取正确的应对措施,才不会让项目开发过程走偏。

风险通常被定量地定义为概率乘上潜在的损害成本。风险的一种定义为:

在该公式中,表示某种损失出现的概率, 表示其损害成本的大小。之后,Charette注意到,每一个潜在的损害都必须对应的定义一个描述了该风险的存在原因或触发该风险的环境或事件,因此他用一个三元组公式改进了风险的定义:

在该公式中, 表示在什么场景下会出现损失, 表示出现该损失的概率, 表示其损害成本的大小。场景E中的触发因素或风险起因即为风险因素, 可以表示为一系列风险因素( )和时间( )的函数:

风险因素是风险发生的潜在因素,是造成损失的间接和内在的原因,比如软件项目开发过程中进度表估算不切实际,相对于软件项目超期交付而言,其就是风险因素。

2 软件项目风险管理

软件项目风险管理简单来说就是管理软件开发项目过程中的风险,即潜在的风险因素。Boehm在1989年提出了软件风险管理的经典模型,即六个步骤。首先将风险管理分为:风险评估、风险控制,其次,风险评估由风险识别、风险分析和风险优先级排序构成,风险控制由风险管理规划、风险处理和风险监控组成。

软件项目风险管理_第1张图片

以下是对Boehm的软件风险管理的六个步骤的简单解释:

(1)风险识别:软件风险管理的第一步,同时也是软件风险管理的基础,只有识别出软件项目自身的潜在风险才能主动的选择策略去应对风险。

(2)风险分析:分析识别出的风险会对软件项目造成什么影响,影响程度会有多大,会耗费多少资源等等。

(3)风险优先级排序:根据风险分析的结果进行优先级排序,结合风险影响和资源供给的客观因素,对风险处理的严重级别进行排序。

(4)风险管理规划:风险管理规划是规划和制定如何进行软件项目风险管理计划的过程,定义了风险应对方案涉及的方法、人员、时间等因素。

(5)风险处理:针对不同种类、规模、特定的风险采取对应的措施使风险损失对软件项目造成的影响最小,比如回避、预防、转移等等。

(6)风险监控:监控项目风险管理计划的实施过程,目的是核对措施的实际效果与预想是否一致,以判断接下来采取什么行动。

3 软件项目风险因素分类

为了更好的归纳整理软件风险因素,各种各样的风险因素分类方法也被提出。分类法为组织和研究软件开发问题的广度提供了一个框架,因此,它是激发和组织整个软件开发风险的基础。根据不同领域的研究需求,软件项目风险因素有多种不同的分类方法:有的根据软件开发过程分为需求风险、设计风险、编码风险、测试风险等等;有的根据项目数据类别分为项目风险、团队风险、任务风险、过程风险等等……SEI在1990年提出了一套软件风险管理的标准,里面提到一种软件风险因素分类的方法,该分类方法在领域内被大多数学者承认并使用,具备很大的参考价值,如下图。

软件项目风险管理_第2张图片

SEI的标准将软件项目风险因素分为三个类别:产品工程类(由构建要交付给客户的产品所需的智力和物理活动组成,包括完整的系统硬件、软件和文档)、开发环境类(用于生产产品的方法、程序和工具)、程序约束类(开发软件的合同、组织和操作因素,但通常不在管理部门的直接控制范围之内,即外部因素)。

 

 

 

你可能感兴趣的:(软件工程,软件过程管理,软件工程,风险,不确定性,软件风险)