软件开发流程主要负责软件开发的已知方面。您只能准确的描述、调度、分配和复审您知道必须完成的方面。风险管理则负责未知方面。风险管理已经存在我们身边很长时间了,正如 Tim Lister
所说的:“所有没有风险的项目都已经完成了。”许多组织仍然工作在“拒绝风险”的方式下:估计和计划已完成,就像所有的变量都已知,它假定工作是机械的,人员是可互换的等等。但是越来越多的组织至少在鼓吹风险管理;如果说得极端一点,可能会发现那只是肤浅的言论,是对风险最小化进行的无力的尝试。
迭代生命周期中的许多决策都是由风险驱动的。为了达到此目的,需要很好的掌握项目所面临的风险,并具有关于如何缓解或处理风险的明确策略。
在每天的生活中,风险都会引起损失或伤害;它是涉及到不确定的危险的因素、事件、元素或原因。但是在软件开发中更加明确:
-
在风险本身的正态分布中,风险是变量,它可以获取一个使项目受到损坏或无法成功的值。
简单来说,风险是可能会阻止我们成功的任何因素,而且当前是未知或不确定的。
-
成功满足所有需求和约束组成的整个集合(这些需求和约束作为项目的预期目标,由执行人员持有)。
我们可以进一步将风险限定为直接风险或间接风险:
-
直接风险:项目能够在很大程序上进行控制的风险
-
间接风险:项目极少控制或没有项目控制的风险
风险的属性:
通常将这两条属性绑定到单个风险量级指示符中:高、显著、中等、微小、低。
风险管理的关键在于不是被动地等到风险演变成问题或危害到项目,而是要决定如何处理。对于每个已察觉到的风险,要提前决定将做些什么。 主要有三种可能的途径:
-
风险规避:重新组织项目,使其不会受到风险的影响。
-
风险转移:重新组织项目,使其他人或事承担风险(客户、供应商、银行、另一元素等)。
-
风险接受:决定将风险作为一种偶然情况来忍受风险。监视风险症状并确定一个出现风险时的应急计划以便必要时做出反应。
在接受风险时,需要做两件事情:
-
风险缓解:采用某些及时的、在活动之前的步骤来降低风险发生的概率或风险的影响
-
定义应急计划:如果风险成为了实际的问题,需要采取哪些行动。
有关风险管理的更多信息,请参阅 [BOE91]、[CAR93]、[CHA89]、[FAI94] 和 [JON94]。
|