1
 软件工程
1.10.4.1 8.4.1 风险管理

8.4.1 风险管理

软件开发存在着风险。软件风险具有不确定性,可能发生也可能不发生,但一旦风险变为现实,就会造成损失或产生恶性后果。不同的软件,风险也不相同,项目的规模越大、结构化程度越低、资源和成本等因素的不确定因素越大,承担这样的项目所冒的风险也就越大。风险管理是指识别风险、评价风险、估计风险并制定回避风险的方法。它不仅是项目计划中的一个对象,还要求在开发过程中对它进行跟踪、报告及更新。

1.风险识别

风险识别就是要系统地确定对项目计划(估算、进度、资源分配)的威胁,通过识别已知的或可预测的风险,就可能设法避开风险或驾驭风险。

1)风险类型

从宏观上来看,可将风险分为项目风险、技术风险和商业风险。项目风险是指在预算、进度、人力、资源、用户及需求等方面潜在的问题,它们可能造成软件项目成本提高、时间延长等损失。技术风险是指潜在的设计、实现、接口、检验和维护方面的问题,威胁到待开发软件的质量和预定的交付时间。如果技术风险成为现实,开发工作可能会变得很困难或根本不可能。商业风险包括市场、商业策略、推销策略等方面的风险,这些风险威胁到待开发软件的生存能力。有以下5种主要的商业风险。

(1)开发的软件虽然很优秀但不是市场真正所需要的。

(2)开发的软件不再符合公司的整个软件产品战略。

(3)销售部门不知道如何推销的软件。

(4)由于重点转移或人员变动而失去上级管理部门的支持。

(5)没有得到预算或人员的保证。

特别要注意,有时对某些风险不能简单地归类,而且某些风险事先是无法预测的。

2)风险项目检查表

识别风险的一种最好的方法就是利用一组提问来帮助项目计划人员了解在项目和技术方面有哪些风险。因此,Boehm建议使用一个“风险项目检查表”,列出所有可能的与每一个风险因素有关的提问。从如下几个方面识别已知的或可预测的风险。

(1)产品规模:与待开发或要修改的软件的产品规模(估算偏差、产品用户、需求变更、复用软件、数据库)相关的风险。

(2)商业影响:与管理和市场所加的约束(公司收益、上级重视、符合需求、用户水平、产品文档、政府约束、成本损耗、交付期限)有关的风险。

(3)用户特性:与用户的素质(技术素养、合作态度、需求理解)及开发人员与用户定期通信(技术评审、通信渠道)能力有关的风险。

(4)过程定义:与软件过程定义、组织程度及开发组织遵循的程度相关的风险。

(5)开发环境:与用于建造产品的工具(项目管理、过程管理、分析与设计、编译器及代码生成器、测试与调试、配置管理、工具集成、工具培训、联机帮助与文档)的可用性和质量相关的风险。

(6)建造技术:与待开发软件的复杂性及系统所包含技术的“新颖性”相关的风险。

(7)人员数量及经验:与参与工作的软件技术人员的总体技术水平(优秀程度、专业配套、数量足够、时间窗口)及项目经验(业务培训、工作基础)相关的风险。

2.风险估计

风险估计一般包括两方面的内容:估计一个风险发生的可能性;在与风险相关的问题出现后估计将会产生的结果。通常,项目计划人员与管理人员、技术人员一起,进行两种风险估计活动:建立风险发生的可能性尺度,估计风险对项目和产品的影响。

1)建立风险可能性尺度

风险可能性尺度可以用定性或定量的方式来定义,但一般不能用“是”或“否”来表示,较多的是使用概率来表示,即使是定性分析也采用极罕见、罕见、普通、可能、极可能等描述。风险表是一种常用的风险可能性尺度的表示方式。如表8-6所示,第1列列出风险,在第2列对风险加以分类(如PS代表产品规模风险,BU代表商业风险,CU代表与用户相关的风险,TE代表技术风险,DE代表开发环境风险,ST代表人员风险),在第3列给出风险发生的概率,第4列是对风险产生影响的评价。这要求对4种风险构成(性能、支持、成本、进度)的影响类别求平均值,得到一个整体的影响值。

表8-6 风险表

img159

风险发生的概率可以使用从过去项目、直觉或其他信息收集来的度量数据进行统计分析估算出来。例如,由45个项目中收集的度量表明,有37个项目遇到的用户要求变更次数达到2次。作为预测,新项目将遇到的极端的要求变更次数的概率是37/45=0.82,因而这是一个极可能的风险。

2)估计风险对项目和产品的影响

如果风险真的发生了,对产品和项目所产生的影响一般与3个因素有关,即风险的性质、范围及时间。风险的性质是指风险产生时可能产生的问题。风险的范围是包括风险的严重性和分布情况。风险的时间是指风险的影响何时开始,会持续多长的时间。

对项目风险进行管理时,应综合考虑风险出现的概率和一旦发生风险可能产生的影响。对一个高影响但发生概率极低的风险不应当占用很多有效管理时间。然而,对低影响但发生概率高的风险及高影响并且发生概率为中或高的风险,就必须优先进行风险的管理,如图8-8所示。

img160

图8-8 风险与管理参与

Robert Charette提出一种主要依据风险描述、风险概率及风险影响等3个因素对风险进行估计的方法,称为风险评价。对于大多数软件项目来说,性能、支持、成本、进度就是典型的风险参照水准。或者说,对于成本超支、进度延期、性能降低、支持困难,或它们的某种组合,都有一个参考值或崩溃点。在这个点上,要公平地给出可接受的判断,看是继续执行项目工作,还是终止它们(超出它就会导致项目被迫终止)。因此,可以建立风险与参考值的对应关系来对风险进行评价,其具体步骤如下:

(1)使用三元组[ri,li,xi]对风险进行描述,其中,ri是风险,li是风险出现的概率,xi是风险产生的影响;

(2)定义项目的各种风险参考值;

(3)找出在各三元组[ri,li,xi]和各参照水准之间的关系;

(4)预测一组参考值点以定义一个项目的终止区域,用一条曲线或一些不确定性区来界定;

(5)预测各种复合的风险组合将如何影响参考值。

如果风险的某种组合所产生的问题超出一个或多个这样的参照水准,工作就要中止。图8-9显示了由成本超支和进度延期所构成的“项目终止”曲线。曲线上的各点为临界点,超过了临界点的区域右上方灰色区域可以表示为项目终止区。

img161

图8-9 风险参照水准曲线

3.风险驾驭和监控

风险的驾驭和监控主要靠管理者的经验来实施。例如,若某开发人员在开发期间中途离职的概率是0.7,且离职后对项目有影响,可采取的风险驾驭与监控步骤如下:

(1)与现有人员一起探讨人员流动的原因(如工作条件差、收入低、人才市场竞争等);

(2)在项目开始前,把缓解这些原因的工作列入管理计划中;

(3)当项目启动时,做好出现人员流动时的准备,采取一些方法以确保一旦人员离开后项目仍能继续;

(4)建立良好的项目组织和通信渠道,以使大家了解每一个有关开发活动的信息;

(5)制定文档标准并建立相应机制,以保证能够及时建立文档;

(6)对所有工作组织细致的评审,使大多数人能够按计划完成自己的工作;

(7)对每一个关键性的技术人员,要培养后备人员。

风险驾驭与监控首先应该建立风险缓解、监控和管理计划(Risk Mitigation Monitoring and Management Plan,RMMMP)。RMMMP叙述了风险分析的全部工作,并且作为整个项目计划的一部分为项目管理人员所使用。

这些风险驾驭步骤带来了额外的项目成本,称为风险成本。例如,培养关键技术人员的后备需要花费金钱和时间。因此,当通过某个风险驾驭步骤而得到的收益被实现它们的成本超出时,要对风险驾驭部分进行评价,进行传统的成本-效益分析。