第7章软件项目风险管理.ppt
第 7 章 软件项目风险管理,本章内容提要,7.1 软件项目风险管理概述,风险定义与分类 美国软件工程研究所将风险定义为损失的可能性。风险同人们有目的的活动有关,同未来的活动有关,同人们变化的行为方式有关。风险具有两大属性:可能性和损失,可能性是风险发生的概率,损失是指预期与后果之间的差异,我们用可能性(Likelihood)和损失(Loss)的乘积来记录风险损失。风险的根源在于事物的不确定性,虽然无法避免不确定性,但是可以通过适当的方法对其进行控制与管理。 从范围角度上看,风险主要分为下述三种类型:项目风险、技术风险和商业风险。 软件风险是有关软件项目、软件开发过程和软件产品损失的可能性。软件风险又可区分为软件项目风险、软件过程风险和软件产品风险。,软件项目风险管理概述,风险管理 风险管理是指在项目进行过程中不断对风险进行识别、评估,制定策略,监控风险的过程。通过风险识别、风险分析和风险评价去认识项目的风险,并以此为基础合理地使用各种风险应对措施、管理方法、技术和手段对项目的风险进行有效的控制,妥善处理风险事件造成的不利后果,以最小的成本保证项目总体目标的实现。风险管理可以分为四个层次: 危机管理:是在风险已经造成麻烦后才着手处理它们。 风险缓解:事先制定好风险发生后的补救措施,但不制定任何的防范措施。 着力预防:将风险识别与风险防范作为软件项目的一部分加以规划和执行。 消灭根源:识别和消灭可能产生风险的根源。 风险管理策略有两种:救火模式和主动模式。,软件项目风险管理概述,风险管理的意义 项目实施风险管理的意义可归纳如下:通过风险分析,可加深对项目和风险的认识和理解,澄清各个方案的利弊,了解风险对项目的影响,以便减少或分散风险。为以后的规划与设计工作提供反馈,以便采取措施防止与避免风险损失。通过风险管理可以使决策更科学,从总体上减少项目风险,保证项目的实现。可推动项目管理层和项目组织积累风险资料,以便改进将来的项目管理。,本章内容提要,7.2 风险识别,风险识别过程 风险识别 或称风险辨识,是寻找可能影响项目的风险以及确认风险特性的过程。风险识别的目标是:辨识项目面临的风险,揭示风险和风险来源,以文档及数据库的形式记录风险。风险识别的输入与输出 输入可能是项目的WBS、工作的陈述(Statement Of Work,SOW)、项目相关信息、项目计划假设、历史项目数据,其他项目经验文件、评审报告、公司目标等。风险识别的输出是风险列表。包括以下活动 风险识别方法的确定 ;风险定义及分类;风险文档编写。,风险识别,风险识别的方法 风险条目检查表 风险条目检查表是最常用也是比较简单的风险识别方法,它是利用一组提问来帮助管理者了解项目在各方面有哪些风险。在风险条目检查表中,列出了所有可能的与每一个风险因素有关的提问,使得风险管理者集中来识别常见的、已知的和可预测的风险(如产品规模风险、依赖性风险、需求风险、管理风险及技术风险等)。 风险条目检查表一般根据风险要素进行编写,包括项目的环境、管理层的重视度、技术情况以及内部因素(如团队成员的技能或技能缺陷等)。,风险识别,德尔菲(Delphi)法 德尔菲方法又称专家调查法,它起源于20世纪40年代末期,最初是美国兰德公司首先使用,很快就在世界上盛行起来,目前此法的应用已遍及经济、社会、工程技术等各领域。我们在进行成本估算的时候也用到这种方法。用德尔菲方法进行项目风险识别的过程,是由项目风险小组选定与该项目有关的领域专家,并与这些适当数量的专家建立直接的函询联系,通过函询收集专家意见,然后加以综合整理,再匿名反馈给各位专家,再次征询意见。这样反复经过四至五轮,逐步使专家的意见趋向一致,作为最后识别的根据。,风险识别,情景分析法 情景分析法是根据项目发展趋势的多样性,通过对系统内外相关问题的系统分析,设计出多种可能的未来前景,然后用类似于撰写电影剧本的手法,对系统发展态势做出自始至终的情景和画面的描述。当一个项目持续的时间较长时,往往要考虑各种技术、经济和社会因素的影响,对这种项目进行风险预测和识别,就可用情景分析法来预测和识别其关键风险因素及其影响程度。会议法 定期的项目组会议,如项目转折点或重要变更时举行的会议,项目月、季度总结会,项目专家会议都适宜于谈论风险信息,将风险讨论列为会议议题。,本章内容提要,7.3 风险评估,风险评估过程 风险评估又称风险预测,就是对识别出的风险做进一步分析,对风险发生的概率进行估计和评价,对风险后果的严重程度进行估计和评价,对风险影响范围进行估计和评价,以及对于风险发生时间进行估计和评价。风险评估可采用定性风险评估和定量风险评估来进行。,风险评估,风险评估过程如下 确定风险类别确定风险驱动因素判定风险来源定义风险度量准则预测风险影响评估风险对风险进行排序将风险分析结果归档,风险评估,风险评估的方法定性风险评估 定性风险评估主要是针对风险概率及后果进行定性的评估。例如采用历史资料法、概率分布法、风险后果估计法等。历史资料法主要是应用历史数据进行评估的方法,通过同类历史项目的风险发生情况,进行本项目的估算。,风险评估,定量风险评估 定量风险评估是一种广泛使用的管理决策支持技术。一般,在定性风险分析之后就可以进行定量风险分析。定量风险分析过程的目标是量化分析每一个风险的概率及其对项目目标造成的后果,也分析项目总体风险的程度。定量风险评估可以包括以下方法:访谈盈亏平衡分析决策树分析模拟法,本章内容提要,7.4 风险计划,风险计划 针对风险分析的结果,为提高实现项目目标的机会并降低风险的负面影响而制定风险应对策略和应对措施的过程,即通过制定一系列的行动和策略来对付、减少以至于消灭风险事件。降低风险的主要策略 回避风险、转移风险、损失控制以及自留风险。风险计划的结果 项目风险计划或风险管理方案。 风险计划的应该提供一个风险分析表,包括:项目风险的来源、类型,项目风险发生的可能时间、范围,项目风险事件带来的损失,以及项目风险可能影响的范围等。,本章内容提要,7.5 风险控制与管理,风险控制 通过对风险的规划和对项目全过程的控制,保证风险管理能达到预期的目标。风险控制是项目实施过程的一个重要工作,其目的是核对风险管理的策略和实施的实际效果是否与预见相同,同时获取反馈信息,改善风险计划和管理。风险管理描述的是整个项目生存期中风险识别、风险评估、风险规划和风险控制是如何架构和执行的。在项目的进行过程中,需要不断地进行风险控制。,本章内容提要,7.6 案例分析,以一个教育管理系统项目为例。某教育管理系统项目是一个基于J2EE技术的Web应用项目。它主要为个公司或者一个部门的所有员工提供教育培训的管理。这个项目的需求来自一家大型公司,我们要在规定期限内提交产品,并保证软件的质量。这里我们将探讨软件项目风险管理等内容在软件项目管理中的具体应用,总结出一些有价值的软件项目管理经验,为以后在软件项目中实施项目管理提供了有益的借鉴。教育管理系统项目项目被划分成多个较小的模块或单元,分配给项目的各个小组的成员,每个小组成员承担一个或几个任务。首先是子系统和模块的分解,子系统和模块的分解着重于功能,本系统的分解,依据需求所要求的三个角色的不同操作进行划分。系统被划分员工操作子系统、部门领导管理子系统以及系统管理员子系统这样三个子系统。然后,根据功能,将各个子系统又划分成几个模块。整个教育管理系统的功能划分如图7-1所示。,案例分析,案例分析,由于风险是在项目开始之后才开始对项目的开发起负面的影响,所以风险分析的不足,或是风险回避措施不得力,都很有可能造成软件开发的失败。风险分析是在事前的一种估计,凭借一定的技术手段和丰富的经验,基本能够对项目的风险做出比较准确的估计,经过慎重的考虑提出可行的风险回避措施,是避免损失的重要环节。下面主要关注软件开发中的主要风险,但是这只是项目风险中的一部分,在资金、预算、合同等方面都存在风险。,案例分析,项目过程中在几乎每个阶段都会出现风险。因此,正确评估每个阶段可能的风险是保证项目按时按质完成的重要环节。软件在需求分析阶段、设计阶段、实现阶段以及测试维护阶段等,会出现不同的风险。需求分析阶段的风险 软件的开发是以用户的需求开始,在大多数情况下,用户需求要靠软件开发方的引导才能保证需求的完整,再以书面的形式形成 用户需求这一重要的文档。需求分析更多的是开发方确认需求的可行性和一致性的过程,在此阶段需要和用户进行广泛的交流和确认。需求和需求分析的任何疏漏造成的损失会在软件系统的后续阶段被一级级地放大,因此本阶段的风险最大。,案例分析,设计阶段的风险设计的主要目的在于软件的功能正确的反映了需求。可见需求的不完整和对需求分析的不完整和错误,在设计阶段被成倍地放大。设计阶段的主要任务是完成系统体系结构的定义,使之能够完成需求阶段的即定目标;另一方面也是检验需求的一致性和需求分析的完整性和正确性。设计本身的风险主要来自于系统分析人员。分析人员在设计系统结构时过于定制,系统的可扩展性较弱,会给后期维护带来巨大的负担,和维护成本的激增。 设计阶段蕴涵的另一种风险来自于设计文档。文档的不健全不仅会造成实现阶段的困难,更会在后期的测试和维护造成灾难性的后果,例如根本无法对软件系统进行版本升级,甚至是发现的简单错误都无从更正。,案例分析,开发测试阶段的风险软件的实现从某种意义上讲是软件代码的生产。原代码本身也是文档的一部分,同时它又是将来运行于计算机系统之上的实体。源代码书写的规范性,可读性是该阶段的主要风险来源。规范的代码生产会把属于程序员自身个性风格的成分引入代码的比例降到最低限度,从而减小了系统整合的风险。维护阶段的风险从软件工程的角度看,软件维护费用约占总费用的 55%-70%,系统越大,该费用越高。对系统可维护性的轻视是大型软件系统的最大风险。在软件漫长的运营期内,业务规则肯定会不断发展,科学的解决此问题的做法是不断对软件系统进行版本升级,在确保可维护性的前提下逐步扩展系统。,案例分析,在软件系统运营期间,主要的风险源自于技术支持体系的无效运转。科学的方法是有一支客户支持队伍不断收集运行中发现的问题,并将解决问题的方法传授给软件系统的所有使用者。体系结构方面的风险本项目采用J2EE技术和三层结构,在技术的成熟度上来说,不存在风险。但是,在实现上,对开发人员的技术要求,以及在实现良好的软件构架和稳定的组件方面,也存在风险性。软件体系结构影响到软件的如下质量因素:软件的可伸缩性: 软件的可维护性: 软件易用性:,案例分析,项目管理中的风险 项目管理中主要考虑的风险问题有:软件是否能够按工期的要求完成软件需求的调研是否深入透彻软件的实现技术手段是否能够同时满足性能要求软件质量体系是否能够被有效地保证,案例分析,风险管理贯穿于整个项目生命周期。风险管理包括三个阶段:风险标识别、风险量化以及风险规避。和其他的软件项目一样,在教育管理系统项目中也存在着许多风险。我们将风险影响划分为四级,从高到低为:一级、二级、三级、四级,级别越高,表示风险发生后带来的影响越大;同时我们也将风险发生率分为四级,一级最高,级别越高,表示风险发生的几率越大。表7-11显示了本项目一部分风险的风险分析表格。,案例分析,本章内容提要,7.7 本章小结,本章论述了风险及风险管理的概念,提出软件风险是导致软件项目进度延迟、预算超支或项目部分或整体失败的因素。不确定性和损失是风险的两大属性。软件项目是即将或正在进行的生产过程,既然是未来的事情,要在项目计划中确定项目的进度、预算以及采用的技术等,势必与实际情况有所出入,这种不确定性就是项目的风险成分。风险是伴随着软件项目过程而产生的,在软件项目中必须进行风险管理,软件项目风险管理过程是一个不断识别风险、分析风险、计划风险、跟踪风险和应对风险的过程。,本章内容提要,7.7 复习思考题,1. 根据检查表制作一个风险分析工具,根据检查表的条目的输入,确定风险分析的结果,给出需要关注的TOPl0风险表。2. 针对第6章习题中的项目,编制此项目的风险分析计划(给出TOPl0风险表即可)。,