一、学习的目的与要求
进行合理的风险管理、制定及时的风险计划是预防软件项目失败的一种重要手段;了解软件项目中存在的风险;掌握集中常用的风险识别方法、风险评估方法理解风险规划的主要内容
二、学习内容
1. 软件项目风险管理概述(重要)
1. 风险(损失的可能性)
目标:在初期人们总有一个或者一些目标和期望,因此有明确的目标是出现风险的一个必要条件;损失:风险是潜在的损失或损害等不好的结构或机会的丧失,因此造成损失是风险的一个最本质的特征;或然:什么时间发生、什么条件下发生大都难以把握,因此或然是风险的一个显著特征。
2. 软件风险类型
1. 项目风险:潜在的预算、进度、人力、资源、客户和需求等方面的问题以及对项目的影响;
2. 技术风险:潜在的设计、实现、验证和维护等方面的问题;
3. 商业风险:威胁到开发软件的生存能力,如市场降温、公司运营战略转变及资金链断裂。
3. 软件项目风险管理
风险管理是一种涉及到社会科学、工程技术、系统科学和管理科学的综合性多学科管理手段,它是涵盖风险识别、分析、计划、监督与控制等活动的系统过程,也是一项实现项目目标机会最大化与损失最小化的过程。
风险识别:识别风险和风险来源;风险分析与策划:在建立的标准基础上分析;估计风险的可能性与后果;评估风险的严重程度;策划如何解决风险;制定风险解决方案,并为选择的方法定义行动计划;建立起点,帮助解决合适执行风险行动计划;风险跟踪:监视计划的起点和风险的状态,比较他们来决定变化;使用触发器提供风险的早期警告;风险应对:对触发的事件做出反应,执行风险行动计划,报告风险应对措施的结果,直到风险降到可接受范围;风险管理验证:保证项目实践无偏差地执行风险管理计划。
4. 软件项目风险管理的意义
通过风险管理可以使决策更科学,从总体上减少项目风险,保证项目目标的实现;通过风险识别,可加深对项目和风险的认识和理解,分析各个方案的利弊,了解风险对项目的影响,以便减少或分散风险;通过风险分析替身项目计划的可信度,改善项目执行组织内部和外部之间的沟通;使编制的应急反应计划更有针对性,即使风险无法避免,也能减少项目承受的损失;能够将处理风险的各种方式有效组织起来,在项目管理中增加主动;为以后的规划与设计工作提供反馈,以便采取措施防止与避免风险造成的损失;为制定项目应急计划提供依据,有利于抓住与利用机会;可推动项目管理层和项目组织积累风险资料,以便改进将来的项目管理方式和方法;
2. 风险识别(重点)
(1)概念:风险识别是寻找可能影响项目的风险以及确认风险特性的过程;
(2)参加人员:项目组成员、风险管理人员、学科专家、项目其他管理人员以及外聘专家;
(3)目标:辨识项目面临的风险,揭示风险和风险来源以及记录风险信息。
1. 风险识别依据
项目计划:包括项目的各种资源及要求,项目目标、计划和资源能力之间的配比关系;历史经验:具有参考价值;外部制度约束:如法律缓解变化等;项目内部的不确定性:如需求规格说明中,有关待定的部分。
2. 常见软件风险
人力资源风险:人员配备不合理,无合作精神和进取心,过分自信,不切实际的高要求,缺乏项目分析时间;需求风险:模糊和变化的用户需求,文档没有记录需求,接口文档不统一,客户人员变动导致需求变更,验收标准与需求定义不清楚;不切实际的期望,产品定位不清晰;项目接口风险:需要等待其他软件产品交付,外包技术能力不够,硬件没有检验,文档记录不全,外包的方法论、软件过程与客户要求的标准不符;设计风险:粗略的概要设计,未经检验的设计;管理风险:责任不明确,角色与责任未被充分理解,无人员激励机制,无内部评审,报告不真实或重点不突出,管理制度不落实;开发过程风险:不切实际的进度与成本要求,无经验资深人员,用未验证的新技术,调整计划未考虑实际情况,开发工具未全集成,客户文件格式和维护能力与现有开发环境不合;项目集成与测试风险:受进度和成本压缩,缺少测试用例和计划,存在难以测试的模糊需求,时间不够可靠性测试不充分。
3. 风险识别过程
风险识别过程是将项目的不确定性转变未风险的陈述过程。
风险活动如下:
1. 进行风险评估:适合在项目初期进行;
2. 系统地识别风险:用有效的方法识别;
3. 风险定义及分类:多次被识别的风险反映了风险的重要性;
4. 确定风险驱动因素:风险驱动因素是引起软件风险的可能性和后果剧烈波动的变量;
5. 将风险编写成文档:对每一项风险进行管理。
4. 风险识别方法与技术
1. 核对清单(常用):用历史数据对照当前项目;
2. 头脑风暴法:项目组全体成员对项目风险进行自由讨论;
3. 匿名风险报告机制:匿名发表意见;
4. Delphi法(常用):进行匿名发表意见,并进行调整,直到意见统一;
5. SWOT分析法:分析项目内部又是、弱势、项目外部机会以及威胁等方面。
3. 风险分析(次重点)
(1)概念:风险分析是分析每种风险可能发生的时间和概率;
(2)目标:评估项目可能结果的范围,有助于确定哪些风险需要应对,哪些风险可以接受以及哪些风险可以忽略,可以加深对风险的认识和理解;
(3)过程目标:提炼风险背景,确定风险来源,确定行动时间框架,确定前10项首要风险名单。
1. 风险分析过程
风险分析的过程包括确定风险的类别、找出风险驱动因素
判定风险来源、确定风险度量标准、预测风险造成的后果和影响以及评估风险的等级以便对风险进行高低排序。
风险分析过程步骤:
定义风险度量规则:按照重要性对风险进行排序的基本依据,风险度量准则包括:
(1)可能性:极低、低、中、高、极高;
用概率表示风险的可能性
可能性概率极低0.1低0.3中0.5高0.7极高0.9(2)后果:极低、低、中、高、极高;
后果按照线性分级
后果概率极低1低3中5高7极高9(3)行动时间框架:采取有效措施规避风险的时限。
预测风险影响:风险影响=风险发生的可能性 × 风险后果;
评估风险:风险的严重程度是随着时间而动态变化的;
风险严重程度时间框架风险影响低中高短521中等743长986
风险排序:依据评估标准确定风险排序;
制定风险计划:风险计划是实施风险应对措施的依据和前提,风险计划内容如下:
(1)确定风险设想;
(2)选择风险应对途径;
(3)设定风险阈值;
(4)编写风险计划。
2. 风险分析技巧与工具
因果关系分析法:用于揭示结果与原因之间的联系;决策分析法:用于构建决策,用决策模型来代表真实世界里的问题;差距分析法:确定变量的差距;Pareto分析法:所有项目风险的80%能够通过20%的已识别风险来说明;敏感度分析法:改变每一个输入变量,其他变量保持正常值。
3. 风险分析成果
风险可能性影响组织财政问题导致项目预算削减低灾难性的招聘不到所需技能的人员高灾难性的关键的人员在项目关键时刻生病中严重的拟采用的系统组件存在缺陷,影响系统功能中严重的需求变更导致主要的设计和开发重做中严重的组织结构发生变化导致项目管理人员变化高严重的数据库处理速度不够中严重的开发所需时间估计不足高严重的CASE工具无法集成高可容忍的客户无法理解需求变更带来的影响中可容忍的无法进行所需的人员培训中可容忍的缺陷修复估计不足中可容忍的软件规模估计不足高可容忍的CASE工具生成的代码效率低中可容忍的4. 风险跟踪与应对
1. 风险跟踪的目的和依据
风险跟踪的目标
(1)监视风险设想的事件和情况;
(2)跟踪风险阈值参数;
(3)为触发机制提供通知;
(4)获得风险应对的结果;
(5)定期报告风险度量结果;
(6)使风险状态保持可见。风险跟踪的依据
(1)风险设想:动态检测哪些将导致异常的结果的事件与情况;
(2)风险阈值:定义了风险发生的端倪;
(3)风险状态:动态记录了项目有关风险的详细信息。
2. 风险跟踪的成功
风险度量:提供了用于表示项目风险级别的客观和主观数据;触发器:启动、解除或延缓风险计划活动的装置。
3. 风险跟踪过程
监视风险设想:确定风险发生的可能性是否增大;对比项目状态与风险阈值:风险示警系统;风险信息的通知:通过触发器发出;报告风险度量。
4. 风险应对策略(重点)
1. 避免:通过改变项目计划或条件完全消除项目风险或保护项目目标不受风险影响;
2. 转移:将风险转移给另一方去承担;
3. 缓解:寻求降低一个不利于风险事件的发生概率或产生的后果使它达到一个可接受的水平;
4. 接受:有意识的选择承担风险后果;
5. 研究:通过调查研究以获得更多信息的风险应对策略;
6. 储备:对项目意外风险预留应急费用和进度计划;
7. 退避:风险影响巨大或采取措施不完全有效时使用
5. 风险应对过程
对触发事件作出反应;执行风险计划:应对风险准则如下:
(1)考虑更巧妙地工作;
(2)挑战资金,找出更完美的方式;
(3)充分利用机会;
(4)适应新情况;
(5)不要忽略常识。对照计划,报告进展修正与计划的偏差
5. 风险管理验证
1. 评审风险计划
计划要素:
(1)完整性;
(2)可理解性;
(3)详细程度;
(4)一致性;
(5)现实性。
2. 审计管理过程
质量审计标准:ISO9000、SEI-CMM、MIL-STD-498;审计报告目的:记录评审和审计结果
3. 风险管理回报
ROIRM=∑节约成本ROI_{RM} =\cfrac{\displaystyle\sum节约} {成本}ROIRM=成本∑节约
三、小结
软件风险是导致软件项目进度延迟、预算超支或项目部分或整体失败的原因之一;不确定项和损失是风险的两大属性;软件项目风险管理过程是一个不断识别风险、分析风险、计划风险、跟踪风险和应对风险的过程;风险计划包括确定风险管理的目标,制定风险管理策略,定义风险管理过程依据风险管理验证。