摘要 本文从项目管理者角度出发,以项目风险管理理论为基础,结合软件开发项目的特点,对软件项目全生命周期的风险评估方法与应用进行了深入的研究。 论文以项目风险管理的工作程序为阐述的主线索,主要针对项目风险评估的过程,介绍了风险识别、风险估计、风险评价、风险管理技术的概念和常用方法与工具:综合了相关学科的知识,在风险评估过程的各个步骤中提出了新模型和新方法;结合具体案例介绍了风险评估方法的使用,并给出了风险评估方法在实际使用中的几种模式。 本文提出了以下新模型和新方法: (1)综合项目管理知识领域的TCQR风险评估指标体系模型。该模型是风险因素和风险驱动因子的两层次模型,并结合实际情况引入了反映管理能力的风险放大系数,较好的反映了软件项目的特点。 (2)建立了一般性项目风险驱动因子的标准集,并总结出TBQ调查问卷。TBQ调查问卷使得对风险驱动因子的识别和客观评价项目组的管理能力具有了可操作性,也为TcQR模型的在实际工作中得以应用提供了保证。 (3)结合风险综合评价函数改进了二级模糊综合评价方法,引入了评价项目总体风险水平的项目综合风险系数。 (4)利用成功度评价风险管理的效果,并简要介绍了如何把风险评估方法运用于软件开发项目实践中的几种模式。 上述各种方法简单易懂、适于操作,便于在实际工作中得到应用和推广。通过本文的探索,旨在为项目管理者对软件开发项目的潜在风险的分析、处理、决策提供一套标准化、系统化、定量化和切实可行的方法体系,为进一步研究软件开发项目的风险管理打下基础。 第1章绪论 1.1项目风险管理的现状 1.1.1项目管理与风险管理 经过上个世纪的发展,项目及项目管理已经不再是简单的实践活动,而发展成为一个知识体系,上升到学科、专业体系和职业的高度,其应用也从工程施工业迅速扩展到软件行业,项目的类型也渐渐增多,“一切皆项目”观念己逐渐为许多人所接受。项目管理作为一种有组织的活动,在国际上有突出影响的是1965年创建的国际项目管理协会(InternationalProject ManagementAssociation,Institute,IP姒)和1969年创建的美国项目管理协会(Project№n89ement PMI)。PMI在1987年首次提出了项目管理知识体系(Project ofManagementBody Knowledge,PMBOK),并在1996年和2000年进行了两次修订。IPMA自1987年也开始进行相关的工作,并于1999年提出了“项目管理人的能力基准”IcB,即IP姒CompetenceBaseline。基于上述两大知识体系并结合我国国情,“中国项目管理知识体系”(chinese—PMBOK)研究工作始于1993年,且于2001年7月正式推出项目管理知识体系文件C—P她OK。有关P船0K知识领域的具体内容还会在第二章中具体介绍。 项目风险管理在两大项目管理体系中都是构成知识领域的重要组成部分,是近20年才发展起来的一门综合性边缘科学,是处理由不确定性产生的各种问题的一整套方法。项目风险管理的核心是对风险评估方法和技术的研究,这也是本文的研究重点。 1.1.2风险管理的发展现状 人们在一切社会经济活动中,面临着各种各样的风险。从总体上看,风险是一种客观存在,是不可避免的,而且在一定条件下还带有某些规律性。因此,人们只能把风险缩减到最小的程度,而不可能将其完全消除。这就要求社会经济各部门、各行业主动地认识风险,积极管理风险,有效地控制风险,把风险减至最低的程度,以保证社会生产和人民生活的正常进行。正是在这样的背景下,随着生产力和科学技术的不断发展,风险管理学作为系统的科学产生于本世纪初的西方工业化国家。 风险管理问题最先起源于第一次世界大战后的德国。1931年美国管理协会首先倡导风险管理,并在以后的若干年里,以学术会议及研究班等多种形式集中探讨和研究风险管理问题。风险管理问题逐渐得到了理论探讨和一些大企业的初步实践,但风险管理问题真正在美国工商企业中引起足够的重视并得到推广则始于50年代。1963年,美国出版的《企业的风险管理》一文,引起欧美各国的普遍重视。此后,对风险管理的研究逐步趋向系统化,专门化,使风险管理成为企业管理中一门独立学科。 在西方发达国家,各企业中都相继建立风险管理机构,专门负责风险的分析和处理方面的工作。美国还成立了全美范围的风险研究所和美国保险与风险管理协会等专门研究工商企业风险管理的学术团体,拥有3500多家大型工商企业为会员。 风险管理协会的建立和风险管理教育的普及,表明风险管理己渗透到社会的各个领域。美国的风险与保险管理协会(RIMS)和美国风险与保险协会(ARIS)是美国最重要的两个风险管理协会。1978年日本风险管理协会(JRMS)成立。英国建立有工商企业风险管理与保险协会(AIRMIc)。风险管理方面的课程及论著数量大增。70年代中期,全美大多数大学工商管理学院普遍开设风险管理课。美国还设立了A蹦(Associate inRisk Management)证书,授予通过风险管理资格考试者。协会的活动为风险管理在工商企业界的推广、风险管理教育的普及和人才培养诸方面做出了突出的贡献。 1983年在美国风险与保险管理协会年会上,云集纽约的各国专家学者,讨论并通过了“101条风险管理准则”,作为各国风险管理的一般原则。这标志着风险管理已达到一个新的水平。1986年10月在新加坡召开的风险管理国际学术讨论会表明,风险管理运动已经走向全球,成为全球范围的国际性运动。进入二十世纪九十年代后,随着计算机技术的飞速发展,软件产业获得了爆炸性的增长,与此同时软件项目所涉及的不确定因素日益增多,面临的风险也越来越多,风险所致损失规模也越来越大,这些都促使科研人员和实际管理人员从理论上和实践上重视对软件项目的风险管理。软件项目风险管理与工程项目风险管理相比起步较晚,相关的技术和标准还很不成熟,但是人们已极为重视对项目风险管理理论的研究。在实践中,现已涌现出不少新一代面向项目的企业——项目型公司,国外甚至还出现了专门从事风险管理工作的所谓风险管理公司。 软件项目迫切需要加强风险管理,这主要表现在以下两个方面: 第一,风险管理方法的不断改进及其在许多典型项目中的成功应用吸引了许多项目组进行自身风险管理。一方面,风险管理以对风险的预测、识别、评估和科学分析为基础,为管理人员运用各种对策的最佳组合对风险进行全面、合理地处置提供了可能性,是现代管理风险的一种科学而直接的方法;另一方面,风险管理克服了那种传统的以某种单一手段处置风险的局限性,综合利用各种控制风险的措旖,并使处置风险的方法日益完善,这些都使得越来越多的项目组自觉地争相采用风险管理方法。 第二,风险管理是各项目组的内在要求。由于软件技术的飞速发展和软件系统在社会生产各方面的广泛应用,从而使各种风险因素及风险发生的可能大大增加,并且扩大了风险事件造成的损失规模,这就对各项目组所负担的责任提出了更高的管理要求,使风险管理的各种手段倍受青睐。我国的软件行业为了加紧步伐,非常重视吸取国外软件行业科学的管理理念与方法。软件项目风险管理在整合内外部资源、实施全过程监控、提供决策信息等方面,特别适合行业高动态、高风险的特点。但是纵观国内软件企业的项目风险管理的整体水平,还存在着很多不足和问题,主要表现在以下几个方面: 第一,我国在项目风险管理的研究和实践方面起步较晚,虽然现在项目风险管理受到越来越多软件企业的重视,但是往往停留在概念层面,缺乏具体管理制度和方法的支持。 第二,国内软件企业主要依靠项目管理人员的个人经验,实行以定性分析为主的风险管理。因此,风险管理水平参差不齐,具有一定的随意性,实际效果往往不能得到正确评价和对待,也难以在较大范围内推广。 第三,由于在项目风险管理过程中缺乏定量分析方法的使用,因此有关项目资料和数据的搜集缺乏目的性,从而导致该领域的知识不能得到有效的积累,影响了管理水平的提高。 第四,现有的一些风险识别和分析方法一般只能解决某一方面的问题,对项目风险的管理形不成体系,缺乏系统性。 1.2风险的基本概念 1.2.1风险的定义 风险(Risk)的概念可以从工程学、经济学、保险学、管理学等角度进行定义,然而目前还没有一个为学术界普遍接受的定义。综合有关风险的各种学科的观点,本文采用以下定义:风险是指在特定的客观条件下,特定的时期内,某一事件的实际结果相对预期结果的不利变化。这个定义包括了四层含义: 第一,风险是客观存在的,其大小可以度量。虽然有些风险事件不容易量化,对其的评价依赖风险承受者的主观感受,可能因人而异,但并不能否定风险的客观性和可度量性。 第二,在这里风险主要指不利的影响,而不考虑其中可能蕴涵的机会。 第三,风险伴随着人类的活动而存在,没有人类活动,就不会有预期结果,事件发生的任何后果都不能成为风险。 第四,风险的存在与其客观环境和时空条件有关,当客观条件与环境发生变化时,风险也可能发生变化。这种变化包括风险性质的变化、风险量的变化和在一定的时空条件下某些风险的产生与消除。 仿照风险的定义,可以把软件开发项目的风险定义为:软件项目在整个生命周期内,由于受各种环境的不确定性因素的影响,实际发生的成本、进度、质量等与预期结果的不利偏差。 对于项目来说,项目的一次性使其不确定性要比其它一些重复性的活动大许多,因而项目风险的可预测性也就差得多,而且一旦出现问题就没有机会进行补偿。软件项目的风险具有以下的几个特点: 第一,对于项目各组成部分之间的复杂关系,任何个人都不可能彻底地了解。 第二,项目各个组成部分之间不是简单的线性关系。 第三,项目时刻处于动态变化之中,平衡状态即使出现也只能是短暂的。第四,项目管理者不仅要面对技术和经济问题,还要面临一些非常复杂、非线性和不确定性极高的问题。 为了进行风险识别和风险分析,本文还引入了风险因素和风险驱动因子的概念。风险因素是指一组项目的基本组成部分,这些基本组成部分的性质和功能以及彼此之间的联系和相互作用以及它们组成项目整体的方式能够决定项目整体的性质和功能。风险驱动因子是指能产生或增加损失概率和损失影响程度的潜在原因。图卜1表示了围绕风险的几个概念的关系。 1.2.2风险的属性 1.风险的随机性 风险的发生及其后果都具有偶然性。风险是否发生,何时发生,发生之后会造成何种后果?对大量项目风险的研究结果表明大多数风险遵循一定的统计规律,风险具有随机性。2.风险的相对性风险总是相对项目活动主体而言的。同样的风险对于不同的主体有不同的影响。人们对于风险事件都有一定的承受能力,但是这种能力因活动、人和时间而异。本文基于风险的这个属性引入了管理能力的概念和风险放大系数对管理能力 3.风险的可变性 根据风险的定义,当客观条件与环境发生变化时(如在项目生命周期的不同阶段),风险也可能在性质、后果等方面发生变化。 1.2.3风险的分类 对风险的分类可以从不同的角度、根据不同的标准进行。这里按风险发生的可预测性把风险分为确定型风险、随机型风险和非确定型风险。确定型风险指经过认真、严格地分析后就能够明确的那些风险;随机型风险就是根据经验,可以预见其发生的可能性大小的风险;非确定型风险指即使最有经验的人也无法预见其发生可能性的那些风险。 本文研究的重点是对随机型风险的评估。这是因为在实际应用中,可以把非确定型风险尽量转化为随机型风险后再进行评估。而确定型风险因为发生概率高,因此可以假定出现的概率为l,通过在项目初期对不同的项目方案进行计算和比较,选择出风险不利后果最小的方案来最大程度地避免确定型风险。 1.3广义的风险管理及程序 一般来说,软件工程师总是非常乐观。当他们在计划软件项目时,经常认为每件事情都会像计划那样运行,或者,又会走向另外一个极端。软件开发的创造性本质意味着我们不能完全预测会发生的事情,因此制定一个详细计划的关键点很难确定。当有预想不到的事情引起项目脱离正常轨道时,以上两种观点都会导致软件项目的失败。 目前,风险管理被认为是IT软件项目中减少失败的一种重要手段。当不能确定地预测将来事情的时候,可以采用结构化风险管理来发现计划中的缺陷,并且采取行动来减少潜在问题发生的可能性和影响。风险管理意味着危机还没有发生之前就对它进行处理。这就提高了项目成功的机会和减少了不可避免风险所产生的后果。 在广义上,项目风险管理(ProjectRisk№nagement)是贯穿在项目开发过程中的一系列管理步骤,其中包括风险识别、风险估计、风险评价、风险管理策略、风险规避和风险监控。它能让风险管理者主动“攻击”风险,进行有效的风险管理。在狭义上,项目风险管理是在风险识别和分析后,针对风险做出的决策。风险管理在项目生命周期内表现为一种周而复始的过程, 图卜2风险管理沉程 在项目管理中,建立风险管理策略和在项目的生命周期中不断控制风险是非常重要的,风险管理包括四个相关阶段: 风险识别识别风险的方法常用的有调查问询法、流程图法(图表法)、现场观察法、风险检查表法等。风险分析对已识别的风险要进行估计和评价,风险估计的主要任务是确定风险发生的概率与后果,风险评价则是对项目各风险因素和项目总体风险水平的评价,常用的方法有:风险因子法、概率统计方法、模糊综合评价法等。 风险规避一般而言,风险规避有三种方法, ① 险控制法,即主动采取措施避免风险,消灭风险,中和风险或采用紧急方案降低风险。 ②风险自留,当风险量不大时可以余留风险。 ③风险转移。风险监控包括对风险发生的监督和对风险管理的监督,前者是对己识别的风险源进行监视和控制,后者是在项目实施过程中监督人们认真执行风险管理的组织和技术措施。 在软件项目管理中,应该任命一名风险管理者,该管理者的主要职责是在制订与评估规划时,从风险管理的角度对项目规划或计划进行审核并发表意见,不断寻找可能出现的任何意外情况,试着指出各个风险的管理策略及常用的管理方法,以随时处理出现的风险,风险管理者最好是由项目主管以外的人担任。 1.4本文所做的工作 1.4.1研究内容的约束与假设 1.针对软件开发项目的风险评估方法是本文研究的对象,并且主要面向项目合同签订后的实施阶段的风险评估,项目立项和投标阶段的风险评估不作为主要研究内容。 2.根据风险的分类,本文重点研究随机型风险的评估方法。 3.通过对多种数学算法和模型的综合,建立适合软件项目风险评估的数学模型,使得目前以定性分析为主的风险管理向定量分析发展成为可能。 4.本文对于风险评估方法的研究是要面向实践,立足于应用和推广,使得研究成果具有实际操作和使用的价值。 1.4.2本文内容安排 风险识别的目的是减少项目的结构不确定性。风险识别首先要弄清项目的组成、各项目组成部分的性质和相互关系、项目与环境之间的关系。风险识别是风险评估和风险管理的基础,只有全面、正确地识别软件项目所面临的风险,对风险的估计、评价和对风险管理技术的选择才有实际意义。风险识别的方法有很多,本文将介绍几种常见的方法,并着重探讨了适用于软件项目的TCQR项目风险评估指标体系模型,同时引入了软件项目的四个基本风险因素和一般性风险驱动因子,以及影响风险评估的风险放大系数。 2.1风险识别的程序 风险识别的程序可分为三个步骤。 第一步,搜集资料; 第二步,确定项目风险因素; 第三步,识别并描述项目风险驱动因子。下面就每个步骤进行说明: 1.搜集资料 完整的搜集项目数据和资料是进行有效风险识别的基础,因此任何可能显示潜在问题的资料都可用于风险的识别,这些资料主要包括: (1)生命周期成本分析; (2)计划或工作分解结构; (3)进度分析; (4)文件记录的事件教训; (5)项目的前提、假想分析和制约因素: (6)技术绩效测评计划或分析; (7)模型和影响图; (8)专家判断和头脑风暴结果; 2.确定风险因素 确定风险因素的过程是要明确项目和环境的变数,即项目各组成部分和彼此间的关系。确定风险因素常常与风险形势估计结合在一起,通过风险形式估计明确项目的前提和假设,以便减少许多不必要的风险分析工作。 3.识别风险驱动因子 识别风险驱动因子的过程就是要识别出影响每个风险因素的风险评价指标的过程。风险估计和风险评价都是基于识别出的风险驱动因子进行的。 2.2风险识别的常用方法和工具 1.专家判断 以往先例项目积累起来的资料、数据、经验和教训,项目组成员个人的常识、经验和判断在风险识别时非常有用。对于那些采用新技术、无先例可循的项目更是如此。专家判断不仅适用于风险识别,而且适用于预测及决策过程。专家判断有两种方法,即Delphi方法和集合意见法。如用Delphi方法,其程序如下: (1)挑选专家组成小组,专家们彼此不了解,不会面; (2)要求每位专家对所讨论的问题进行匿名分析; (3)所有专家都会收到一份全组专家的集合分析答案,并要求所有专家在这次反馈的基础上重新分析。如有必要,该程序2、3步骤可重复进行。 2.图表法 图表法主要包括因果图法(也称鱼刺图法)和事故树法,这两种方法都是从结果查找原因。从结果查原因就是先找出项目会有那些事件发生,反向分析发生的原因。图表法常常应用于可靠性工程中。 3.知识领域检查表 美国项目管理协会PMI制订的《项目管理知识体系指南》中为项目管理定义了九个知识领域。通过项目管理知识领域,如进度、成本、质量等来识别可能的风险,可以形成风险识别检查表。本文在下一节中详细介绍了九个知识领域和该方法的具体应用。 4.项目工作分解结构 风险识别要减少项目的结构不确定性,就要弄清项目的组成、各个组成部分的性质、它们之间的关系、项目同环境之间的关系等。项目工作分解结构是完成这项任务的有力工具。项目管理的其它方面,如范围、进度和成本管理要求使用项目工作分解结构。图2一l显示了一个企业内部网项目的工作分解结构。 图2—1企业内部网项目的工作分解结构 5.问卷调查法 风险调查问卷方法是一种基于某种风险分类标准识别风险主要来源的方法。 StandishGroup成功打分表和McFarlanz风险调查问卷都属于问卷调查法。一般来说,当问卷中的问题得到否定的回答或者分值较高的选项,那么通常表明有某个风险存在。本章后面将详细介绍一种基于TCQR模型的调查问卷方法(TcQR—BasedQuestionnaire简称TBQ方法)。 上面介绍了几种风险识别的常用方法和工具,这些方法和工具在实践中要根据具体情况加以灵活运用,在有些时候,不同方法和工具可以组合在一起使用,以获得理想的风险识别的效果。 2.3 TCQR项目风险评估指标体系模型 指标是衡量系统总体目标的具体标志。指标体系是指在评估活动中,由一系列指标构成的有机整体,是测量评估对象的尺度集。用指标体系方法对系统进行综合评价是在社会、经济和管理科学等领越内进行系统分析时经常采用的一种方法。本节的目的就是建立起客观的、全面反映出软件开发项目风险特征的各项目标所要求的评价指标体系,为下~步的风险分析活动打下基础。 2.3.1 建立指标体系的原则 1.完备性原则 完备性是指影响客体效能的所有指标均应在指标集中,指标集具有广泛性、综合性和通用性。 2.低耦合性原则 指标体系中的指标之间相关度小。这里并不排除相关性,因为某些指标虽然不完全相关,但也不完全独立;而且,指标体系中相关性的存在是容许的。 3.简单性原则 指标不是越多越好,在满足完全性原则下,应该尽量减少指标的个数。这样可以避免混乱,抓住关键,便于实施中的操作。 4.客观性原则 指标选择应该符合软件项目的特点,这是与其它类型项目不同的。 5.灵敏性原则 但系统的指标参数发生变化时,系统的性能应相应的发生明显的变化。 6.一致性原则 各个指标应该与分析的目标相一致,所分析的指标之间应不相互矛盾。 2.3.2 PMl的九大知识领域 《项目管理知识体系指南》中定义了IT项目管理的9个知识领域,包括:项目管理框架;范围管理;时间管理;成本管理;质量管理;人力资源管理;沟通管理:风险管理;采购管理。下面分别做简要的解释: 1.项目范围管理是确定和管理为成功完成项目所要做的全部工作。 2.项目时间管理包括项目所需时间的估算,制订可以接受的项目进度计划,并确保项目的及时完成。 3.项目成本管理包括项目预算的准备和管理工作。 4.项目质薰管理是要确保项目满足明确约定的或各方默认的需要。 5.项目人力资源管理关心的是如何有效利用参与项目的人。 6.项目沟通管理包括产生、收集、发布和保存项目信息。7.项目风险管理包括对项目相关的风险进行识别、分析和应对。 8.项目采购管理是指根据项目的需要从项目执行组织外部获取和购进产品和服务。 9.项目整体管理则要发挥项目管理整体上的支撑作用,它与其他项目管理知识领域互相影响。 2.3.3定义TcQR模型 2.3.31 项目的四个基本风险因素 根据上一节中所介绍的九大知识领域,结合风险识别的需要,在实际应用中可以把九个知识领域进行整合,最终确定了如图2—2的四个基本领域,称为“风险因素”。风险因素代表了项目的各个基本组成部分,通过彼此之间的联系和相互作用以及它们组成整体的方式,决定了项目整体的性质和功能。如果这四个风险因素发生变动,则项目整体的性质和功能也要发生变化。因此,通过对这四个风险因素的综合分析和评价,可以反映项目总体的风险水平。 2,3.3.2风险驱动因子 在定义了组成整体项目风险的四个风险因素后,那么需要分别针对这四个风 险因素识别出影响每个风险因素的风险评价指标,称为“风险驱动因子”。风险因素、风险驱动因子以及它们与项目总体风险的关系如图2—3所示: 风险驱动因子可以分为两个不同的类型:一般性风险驱动因子和项目特定的风险驱动因子。一般性风险驱动因子对每个项目来说都是一个潜在的威胁。项目特定风险驱动因子只有那些对当前项目的技术、人员及环境非常了解的人才能识别出来。表2—2中给出了常见的第一类风险驱动因子: (1)项目规模:可以从项目的功能点LOC进行判别; (2)需求可用性:目标是否明确,项目边界是否清楚,需求是否完整和准确; (3)技术复杂性:技术难度大小,算法和软硬件接口的复杂性;(4)进度计划的弹性:进度计划是否合理,灵活,任务分解WBS是否完整和合理; (5)采购时机:采购时间是否具有不确定性; C.成本 (1)项目规模:可以从项目的功能点L0c进行判别; (2)需求可用性:目标是否明确,项目边界是否清楚,需求是否完整和准确; (3)项目先例:是否此前完成过类似项目: (41成本计划的弹性:成本计划是否合理,灵活,任务分解wBs是否完整和合理: (5)实施条件:软件系统的实施、部署和维护是否存在不确定性;(6)采购条件:为采购是否规定了明确的前提条件; Q质量 (1)客户参与程度:客户是否积极参与了项目过程; (2)质量标准:是否有明确的质量标准; (3)配置管理:是否有适合的配置管理体系,管理项目变更:“)测试计划:是否有测试计划和适合的测试流程,具有专门的测试组织或质量保证组织; (5)非功能性需求:项目中是否有特殊的可靠性、安全性、性能等非功能性需求; (1)高层管理的支持:是否得到高层领导的支持; (2)技术能力:是否有相关经验的技术人员,相关的知识积累; (3)员工士气:参与项目的人员的流动性和积极性; (4)开发环境:是否有充分的软硬件设备和开发条件; (5)团队协作:团队的合作精神和沟通能力,相互配合的协调性: 是这样一些共性的标准,其价值在于在一定程度上使得项目风险评估做到明确化、可操作化和优化。风险评估在付诸实施中,会受到具体评估人的意愿、经验等条件的制约和影响,需要通过对其概念、逻辑、方法、知识、观点、价值的理解及实践方面的努力,才能具有合理性。在有限的条件下,尽最大可能的合理利用主要指标,能基本体现风险评估活动中的共同属性,描述出项目风险的主要方面和重要特征,达到“满意”的评估 目的,是本节探讨的主要实质。指标的量化将在后面做进一步的探讨。我们认为软件项目风险指标体系的构建,应该来自定性与定量的有机结合,软件项目风险指标应是选择那些代表性好、可观测、特异性强和灵敏度较高的风险驱动因子。指标体系也应是动态变化的,需要在实践中不断完善和发展,并根据不同的项目选取适合的风险驱动因子。本文不试图对风险指标体系做全面研究,而在于探讨初步的、在实践中简单易操作的,并符合一般项目规律且体现项目风险主要方面的指标体系的构建方法。 2.3.3.3风险放大系数 在实践中,由于不同企业和同一企业中不同项目组的管理能力不同,导致对风险的评估也是不同的。一般的,管理能力强,抗风险的能力就强;管理能力弱,抵御风险的能力就弱。例如:某项目组选用了适合的软件工程管理规范组织开发过程,那么对于来自于需求可用性方面的风险就会减小。根据图2—2的TCQR模型可得到图2—4: 其中,风险放大系数P体现了风险与管理能力的关系。引入风险放大系数的目的,是对这种客观存在关系的反映。下面列出了组成项目管理能力的主要内容: 1.软件工程成熟度:开发规范,适合性,组织的熟悉程度。 2.拥有的质量保证体系和质量观念。 3.使用有效的管理和设计工具的程度。 4.行之有效的组织结构和职能划分,特别是项目经理的权限。 5.组织的制度、文化和激励机制。 2.3.4用TB0方法识别风险驱动因子 上一节中对一般性的风险驱动因子进行了定义。在实际工作中,对于不同的项目、同一项目生命周期的不同阶段,风险驱动因子对项目风险水平的影响是不同的。另外管理能力的不同也影响到最终项目风险水平。因此,需要有一种方法能够针对项目的具体情况对风险驱动因子进行筛选和识别,对管理能力进行客观的评价,且该方法要具有方便快捷、容易操作的特点。通过我们的研究,在整理和提炼30多个的实际软件开发项目数据基础上,并参考基于分类的风险识别方法(参考文献[32]),对风险进行重新分类后给出了由一系列围绕项目的具体问题组成的TBQ(TCQR—BasedQuestionnaire)调查问卷,见表2—3。 表2—3TBQ风险调查问卷 1.项目规模 (1)此前是否经历过与当前项目大小类似的项目? (2)当前项目是否需要建立比以往项目规模更大的项目组? 2.需求可用性 (1)需求是否稳定?是否还有发生变化的外部接口? (2)是否仍有需求未列入SRS?是否采用了适当的方法捕获用户需求? (3)所有外部接口都被定义了吗? (4)需求说明中存在模糊的问题吗? (5)SRS中的条目是否代表了用户的真实需求? (6)客户对需求是否已经确认? (7)采用了何种方式来确认需求?(原型、分析、模拟) (8)从技术角度考虑是否包含可行性有疑问的需求? 3.技术复杂性 (1)是否对算法和系统设计的可行性进行了检验?采用何种检验方法? (2)是否包含过于乐观和不现实的设计部分? (3)是否有不容易进行系统设计的需求或功能? (4)是否定义了所有的内部接口?(软件之间和软件与硬件间的) (5)接口部分是否包含有进程?如果有,进程属于同步还是异步? (6)对于性能是否存在特殊要求?如果有,是否完成了性能分析? 4.进度和成本计划的弹性 (1)计划依据的工作分解结构是否完善和经过确认?是否进行了任务优先级定义? (2)是否所有项目组成员的工作都列入了计划中? (3)是否制订了对计划进行有效的管理的方案? (4)是否采取了计划对关键任务进行跟踪? (5)是否制订了对意外事件的预先行动方案? 5.采购时机与采购条件 (1)采购合同的类型是什么?(固定价格、浮动价格) (2)是否含有进口设备或产品? 6.项目先例 (1)是否开发过同类型的项目? (2)在待开发领域内是否有足够的领域知识? 7.项目实施条件 (1)是否有足够的用于实施的软硬件设备? (2)实施地点和参与实施的用户的水平? (3)是否存在参与实施活动的第三方和实施所依赖的外部条件? 8.客户参与 (1)客户已经完全参与到了需求的定义中吗? (2)顶层的客户管理者和终端用户是否都承诺并采取行动支持项目吗? (3)对于项目的目标和范围以及最终的产品是否达成了真实合意? 9.质量标准 (1) 是否明确了项目的质量标准并以文字的形式确定下来? (2)质量标准是完整和清晰无歧义的吗? 10.配置管理 (1)是否采用了配置管理系统或配置管理规范实旖配置管理? (2)配置管理过程覆盖了所有必要的项目组成员的活动吗? (3)是否存在多个异地开发环境?如果是那么配置管理是否覆盖了所有开发环境吗? 11.测试 (1)是否制订了测试计划?测试工作的组织方式和工作规范是否得当? (2)是否有独立的测试组织?该组织是否在项目分析阶段就参与了? (3)采取得测试方法是什么?(白盒、黑盒、混合) (4)是否采用了适合的测试工具?测试环境是否满足要求? 12.特殊要求 (1)是否存在安全、性能、可靠性和可维护性方面的特殊要求? 13.高管层支持 (1)问题升级的渠道是否畅通? (2)是否可以从高层管理者得到足够支持以便使问题得到及时的处理? (3)高层管理者倾向于委托式管理的这种微管理方式吗? (4)高层管理者是否更喜欢乐观和理想的报告? 14.技术能力 (1)项目组成员拥有合适的技能吗? (2)是否有足够的领域知识和类似项目的经验? 15.工作环境 (1)软硬件设备是否满足开发的需要? (2)项目组在使用开发工具方面熟练吗?这些工具易用吗? (3)当项目组成员遇到问题时是否能够方便的得到帮助? 16.团队协作 (1)项目组成员在交叉功能部分有合作吗? (2)团队在达成普通目标时的效率高吗? (3)成员容易与项目经理进行沟通吗? (4)成员是否能够及时获得影响自身工作的事件通告? 17.员工士气 (1)可能影响项目组成员士气的因素有哪些? 18.开发过程规范 (1)是否使用了适合项目的开发模型和软件工程规范? (2)过程控制是否有效?项目组成员对此熟悉吗? 19.质量保证体系 (1)是否拥有质量保证制度、规范和过程?获得过认证吗? (2)有独立的质量保证组织吗?如果有,在项目中的角色是什么? 20.软件工程辅助工具的使用 (1)是否在使用cAsE工具辅助项目管理和开发过程? (2)使用的熟练程度和工具所覆盖范围的广度如何? 21.组织结构和职能定义 (1)组织结构的效率如何? (2)项目组成员了解自己和他人的职能吗?了解谁对某些事情负责吗? 22.组织制度 (1)组织中是否采取了适合的激励机制?该制度的认可程度如何? 采用TBQ调查问卷对具体项目进行风险驱动因子识别的方法称为TBQ方法。具体应用TBQ方法时,项目经理把TBQ问卷发给项目组的核心成员,把收回的问题答案经过整理后即可得出适合的风险驱动因子和对管理能力的评价。 第3章风险分析 3.1概述 风险识别是风险管理的第一步,只有充分识别了项目所面临的各种风险,才能对其展开进一步的分析与管理。风险分析包括了风险估计和风险评价。风险估计是对风险事件的发生概率和给项目所带来的损失大小进行量化分析的关键环节,科学的风险估计是风险评价以及选择风险管理方案的依据和基础。风险估计有主观和客观的两种。对于软件开发项目,因为很少公开软件开发项目的最新资料和数据,因此主观的风险估计尤其重要。风险估计时必须要做到: 1.确定项目风险评价指标的计量标度。 2.确定估计标准的变化范围及其限定条件。 3.确定风险事件发生的概率。 4.根据选定的计量标度计算风险事件各种结果的数值。 风险评价是在风险估计的基础上,对各风险事件后果进行评价,并确定其严重程度顺序,最终得到各风险因素和项目总体风险的水平。风险评价可分成三步: 1.确定风险评价基准。风险评价基准就是项目主体针对每个风险后果确定的可接受水平。单个风险和整体风险都要确定评价基准,可分别称为单个评价基准和整体评价基准。风险的可接受水平可以是绝对的,也可以是相对的。 2.确定项目整体风险水平。项目整体风险水平是综合了所有的风险因素之后确定的。 3.将单个风险因素与单个评价基准、项目整体风险水平与整体评价基准对比,看看项目风险是否在可接受的范围内。进而确定该项目是要继续、整还是终止。 3.2计量标度与风险估计、评价标准 3.2.1计量标度 计量是为了取得有关数值或排列顺序。计量使用标识、序数、基数和比率四种标度。标识标度是标识对象或事件的,可以用来区分不同的风险,但不涉及数量;序数标度可以标识定性信息和进行排序;基数标度不但可以把各个风险彼此区分开来,而且还可以确定彼此间的差别大小;比率标度可以定量的估计风险,并且为不同项目进行比较时提供了可比的计量起点。 3.2.2风险估计标准 风险估计标准包括对风险发生概率、风险损失影响和风险放大系数的等级标准。在对项目风险进行估计和评价前,需要根据具体的项目情况和项目组能力进行客观的评估,制订针对风险驱动因子的量化标准。注意,风险驱动因子对不同风险因素的影响是有差异的。通过我们对历史项目的研究分析,以下各表给出了应用于多数软件项目的风险估计标准。这些标准实质上是一种经验标准,在具体应用到一个项目中时,可以根据项目的具体情况进行调整。本文后面的例子中将直接使用这些标准。 表3-1风险概率P,等级表 4管理能力弱,经验不足 有~定管理能力和经验管理能力强,经验丰富 3.2.3风险评价标准 对风险的评价一般采用风险因子为衡量标准 3.I,称为等风险图。 利用专家经验,对可能的风险的重要性进行评价,综合成整个项目的风险。这种分析方法适用于项目前期决策,这一时期由于缺乏项目的具体数据资料,往往要依据专家的经验和决策者的主观意向来估计和评价风险。 2.层次分析法 层次分析法是运筹学家T.LSatty于七十年代中期提出的,它把复杂的问题分解为各个组成要素,再将这些要素按支配关系分组,形成有层次的结构,是一种定性与定量相结合的分析方法。通过两两比较方式确定层次中诸多因素相对重要性,然后综合人的判断以决定诸因素相对重要性的总顺序。它一般用于项目前期的风险评价。本章后面介绍了使用该方法对模糊综合评价方法进行了改进。 3.概率统计分析法应用概率统计方法分析项目风险是比较传统的做法,是一种定量分析方法。其优点在于理论基础完善,分析过程简单。但由于历史数据积累和搜集以及估计概率分布的困难,在工程项目中应用较多,而在软件开发项目中使用存在较大的困难。 4.敏感性分析法敏感性分析方法的结果可以为决策者提供这样的信息:风险驱动因子对哪个风险因素的变化最为敏感,哪个其次,可以相应排列出敏感性顺序,这是一种定量分析方法。这种方法的缺点是只知道风险驱动因子对风险因素的影响范围,而不知道发生的可能性大小,无法定量测定风险大小。一般在项目前期的可行性研究工作中较多采用。 5.蒙特卡罗模拟蒙特卡罗模拟是一种概率统计分析方法,属于定量分析方法。应用该技术可以直接处理多种风险驱动因子的不确定性,并把这种不确定性对分析目标的影响以概率分布的形式表示出来。本章后面介绍了使用该方法对模糊综合评价方法进行了改进。 6.CIM模型 cIM模型是对概率或概率分布进行叠加的控制区间和记忆模型。这种方法使用直方图代替变量的概率分布,用和代替概率函数的积分,一般用于估计项目成本的风险,是一种定性与定量结合的分析方法。 7.风险因子法 、 风险因子法也称为等风险图法,详见本章第二节阐述。 8.模糊综合评价法 这是一种定量分析的方法。项目中潜在的各种风险因素和风险驱动因子很大一部分难以用数值来准确的加以定量描述,它们之间的关系和结构也是含糊不清的,无法用单一的准则来判定,但是可以利用历史经验或专家知识,用评价语言生动地描述出它们的性质及其可能的影响结果。模糊数学在处理模糊的变量方面有独到之处,得到的数学结果又能通过一定的方法转为语言 3.4结合风险综合评价函数的模糊综合评价方法 模糊性是人类认识客观事物的认识活动中产生的,它表征的不是客观事物的固有属性,而是人类对客观世界的认识过程中形成的客观关系和客观特征。它反映了作为认识主体的人脑对客观事物认知关系的思维特征。这些特征具有不确定、不分明和似是而非等等模糊特征。从思维上看是主观的,但其反映的事物是客观的。 模糊综合评价方法就是以模糊数学为基础,应用模糊关系合成的原理,将一些边界不清,不易定量的因素定量化,对实际的问题进行综合评价的一种方法。控制论专家LA.zadeh于1965年首先提出了模糊集理论和隶属度函数,开辟了解决模糊问题的科学途径。 在软件项目风险评估过程中,由于对风险驱动因子隶属于各个评价等级的问题往往是不确定的,具有模糊分类的特征,因此较适合于采用模糊综合评价方法解决这类问题。另外,根据多级模糊综合评价方法,不仅可以对风险驱动因子进行模糊分类,还可以对单一风险因素、项目总体风险以及多个项目分别进行评价。 本文在多级模糊综合评价方法的基础上,对单因子模糊评价中的隶属度函数、指标权值向量的确定、评价结果向量的单值化处理问题根据实际应用需要提出了改进的方法。同时,本文提出采用项目综合风险系数来评价项目的整体风险水平,同时给出了计算项目综合风险系数的风险综合评价函数的一般公式。 3.4.1 模糊综合评价的数学模型 34.1.1 模糊综合评价数学模型 1.定义风险驱动因子论域和评价等级论域 一般情况下评价等级m取值范围为[3,7]中的接数,如果m过大,那么评价等级对应的评语难以描述且不容易判断等级隶属,反之又不符合模糊综合评价的质量要求。m取奇数的情况较多,因为这样可以有一个中间等级,便于评价。2.进行单因素评价,建立模糊关系矩阵R无论用什么方法进行单因素评价,都要给出从U到矿的一个模糊映射,模糊关系矩阵反映了评价与评价等级之间的模糊关系。在该矩阵中,模糊单因素评价方法与因素(指标)的属性有关,不同属性的因素可以采用不同的方法,主要分为定性指标和定量指标的模糊评价方法。其中定性的模糊评价常用问卷调查和专家Delplli方法;定量的模糊评价一般采用隶属函数。具体的方法在本章的后面进行详细阐述。 本文针对上述方法的不足,提出了结合蒙特卡罗模拟的改进的模糊单因素评价方法。 3.确定被评价的风险驱动因子的模糊权向量 一般情况下,n个风险驱动因子对被评价的风险因素并非是同等重要的,各 第3苹风险分析 个单方面因素的表现对总体表现的影响也是不同的,因此在进行模糊合成之前要确定模糊权值向量。在模糊综合评价中,权值向量A中的元素口.本质上是风险驱动因子甜。对模糊子集{对被评风险因素的重要等级}的隶属度,并且在模糊合成前还要进行归一化。 向量。具体方法在本章的后面进行详细介绍。 4.模糊合成与模糊合成算子 通过模糊单因素评价可以得到隶属关系矩阵R,R反映了某个被评风险因素在各个风险驱动因子对评价等级论域模糊子集的隶属情况。下一步要通过模糊合成(也称模糊变换)获得模糊综合评价。 从体现权重的作用来说,第一步采用乘法较为合适,从综合的角度来讲,第二步用有界和运算较为合适,这样可以保证充分利用R阵提供的信息。 5.对模糊综合评价结果向量单值化后进行分析 模糊合成后得到模糊评价向量B,其中6.是由A与R的第i列运算得到的,它表示被评价风险因素从整体上看对v.等级模糊子集的隶属程度。如果仅仅评价一个风险因素,那么仅对6.进行排序即可大致评估出某个风险因素的风险大小程度,然而如果有多个风险因素,那么就要再次采用模糊综合评价做进一步评价或采用模糊向量单值化方法对模糊向量B做处理后得到一个点值,便于多个风险因素之间进行排序或参与下一步的运算。 对模糊综合评价结果向量单值化的方法主要包括最大隶属度原则和加权平均原则。其中最大隶属度方法损失的信息较多;加权平均方法则更多的综合了评价等级的信息,比较适合得出总体评价结论。本文对加权平均方法引入了待定系数,以便提高单值化的效果,具体的改进方法在本章的后面进行详细介绍。 4.1.2二级模糊综合评价 上面主要讨论了单级模糊综合评价方法,根据TCQR模型(参见图2—3),软 件项目风险评价属于=级模糊综合评价。一般的,多级模糊综合评价需要经过以下步骤: 3.4.2 对模糊综合评价模型的改进 3.4.21 结合蒙特卡罗模拟的模糊单因子评价 1.专家评分法 假设被评价风险因素集为z, 一般的,权重较大的专家,其评价意见就越重要。 2.常见的模糊分布在模糊数学中,把论域为实数域的隶属函数称为模糊分布,常见的模糊分布有: (1)矩形分布或半矩形分布 (2)梯形分布或半梯形分布 (3)足次抛物线分布 (4)r型分布 (5)正态分布 (6)Cauchy分布 (7)岭型分布 第3章风险分析 通过多次模拟一个模型的结果,从而提供计算结果的统计分布。 蒙特卡罗模拟的基本步骤如下: (1)评估所考虑的变量范围,并确定各个变量的概率分布。具体做法是搜集模型中变量的最可能的、乐观的和悲观的估计值,并给出各个变量落在乐观估计和最可能估计之间的概率。 (2)对于各个变量来说,根据变量发生的概率分布,选择一个随机值。 (3)利用为每个变量选定的数值组合,进行确定性分析。 (4)多次重复步骤2和3,获得各个结果的概率分布。重复次数一般在100到1000之间。 4.结合专家评分和蒙特卡罗模拟计算隶属关系 专家评分法在定性确定隶属关系时是经常采用的方法,特别是经过对专家赋权后能较好体现不同专家的重要性。但是在实际的软件项目开发中,往往由于参与的专家人数有限而影响了该方法的应用效果。隶属度函数方法实质上是一种利用统计的方法,建立符合应用情况的分布函数来计算隶属关系矗。 在软件项目的风险评估中,我们采用如下步骤确定隶属关系: (1)首先采用专家Delplli方法,让专家(根据实际情况选定2到3名)根据 风险概率级别表(表3—1)和风险影响级别表(表3.2)分别确定每个风险驱动因子的发生概率和损失影响的级别。根据三点原则,可以得到每个风险驱动因子发生概率和损失影响的悲观、最可能和乐观的三个级别,并给出任两个级别之间的可能性。 (2)根据公式(3.1),采用蒙特卡罗模拟计算风险因子R的概率分布。(31确定每个风险驱动因子的风险因子R对评价等级论域的隶属度。 通过以上步骤,一方面可以利用专家的经验,同时蒙特卡罗模拟较好的弥补上面提到的专家评分法的~些不足,具有使用方便和适用面广的特点。 3.4.2.2结合层次法的风险驱动因子权值向量计算 1.层次结果模型 根据TcQR模型,得到如图3—2所示的两层次结构模型 其中,风险因素构成了模型的目标层,风险驱动因子构成了模型的准则层。评价者运用知识和经验确定准则层各个风险驱动因子相对于目标层的风险因素的重要性权重。层次法使用了两两比较的方法,表3—6定义了相对重要性的标度: 2.判断矩阵 有了两两比较重要性的标度,就可以具体地确定准则层不同因素的重要性权重。从风险因素的角度,将所有风险驱动因子的重要性两两比较 3.求判断矩阵权重向量 4.结合风险放大系数的模糊权值向量 项目组对不同风险驱动因子的管理能力的不同会影响风险驱动因子相对于风险因素的权重,风险放大系数就是对层次法得到的权重向量的修正。修正后得改进的模糊综合评价结果向量单值化 1.加权平均方法 设模糊综合评价结果向量为B=(61,62,Ak),然后用B中对应的隶属度将分值加权求平均就可以得到一个点值。 2.改进的加权平均方法 3.4.3风险综合评价函数 3.4.3.1 构造风险综合评价函数的思路 采用改进的模糊综合评价方法,首先得到TCQR模型中的四个风险因素的模糊综合评价结果向量,下一步可以继续运用多级模糊综合评价方法对这四个评价结果向量进行模糊评价,但是由于四个风险因素的权值向量在实际应用时难以确定,因此本文提出了构造风险综合评价函数以便对四个风险因素进行进一步的综合,最终得到“项目综合风险系数”,以便对项目总体风险水平进行评价。使用风险综合评价函数的基本思路如下: 1.采用改进的模糊综合评价方法,首先得到TcQR模型中的四个风险因素的模 3.通过构造的风险综合评价函数F(X),可以计算项目综合风险系数旯。A越大 则项目总体风险越大。 3.4.3.3 风险综合评价函数及其性质 由公式(3—6)联想到我们通常会把多目标问题转化为单目标后进行处理的万法,因此这里构造风险综合评价函数 4.3.4风险综合评价函数的应用意义 定义项目综合风险系数丑=F(Z),使用A评价项目的总体风险水平。下面来看旯的几何和实际应用意义。 1.风险综合评价函数的几何意义 2.根据风险综合评价函数的性质,得到以下结论: (1)项目总体风险与项目综合风险系数兄成正比。即五越大,总体风险越大;^越小,总体风险越小。项目总体风险随着TcQR模型中的四个风险因素的风险变大而变大,这与风险综合评价函数的单调递增性质相符合。 (2)当TCQR模型中的四个风险因素的综合评价值均为零时,五=0。即项目总体风险为零,这是与实际情况相符合的。 (3)在实际应用中,s,的含义表示第i个风险因素的风险大小。由风险综合评价函数的性质4可知,通过使每个风险因素的风险评价值落在【0,1)区间内,使得项目综合风险系数五落在【0,1)区间内。 (4)在实际应用中,当J。=1时,即四个风险因素对项目来说同等重要。但也可以令s。取(O,1]区间内的任一值。这样做的应用意义是当需要调整某个风险因素相对于其它三个风险因素的相对重要性时,根据性质l可以通过适当减小s,的值,此时该风险因素对项目的重要性较其它风险因素小。此时项目综合风险系数旯也比调整前变小。 3.5风险分析案例 本章上面几节中对风险分析的方法和过程进行了详细的阐述,本节将结合一个案例具体说明在实践中如何应用这些方法。 3.5.1 1.行业知识2.开发技术 项目组具有一定的行业知识,开发过类似的系统; 采用的是比较成熟的B/S和C/S相结合的开发技术,有大量的报表和证件打印要求; 3.软件工程规范 采用面向过程的开发方式,具有系统设计和数据库设计文档,系统整合在开发基本完成后进行,对当前开发的版本不进行配置管理 4.质量保障体系 版本对外发布前统一进行整合测试,没有预先开发的测试用例和制订测试计划; 5.开发辅助工具的使用 使用设计工具和版本控制工具;项目组采用项目经理负责制,项目经理选择项目组成员。人员技术能力较强,并有人参与过类似系统的开 发,具有相当地经验;开发环境与实施环境在北京的若干个地点进行分散开发,最后在上海统一 实施;不需要向客户提供硬件设备,只提供软件系统;对于实施环境无法事先预知;项目开发时间要求在一个月内开发完成,进入现场调试; 3.5.2项目风险评估过程 1.识别项目风险驱动因子,并定义项目风险标准。 根据表3—7的项目背景情况介绍,可以定义该项目的风险驱动因子和每个风险驱动因子的风险放大系数P,见表3-8。风险驱动因子的估计和评价 需求可用性技术复杂性进度计划弹性需求可用性项目先例 成本计划弹性实施条件客户参与程度质量标准配置管理测试计划技术能力员工士气团队协作 2.利用层次法计算模糊权值向量A。 (1)项目组成员根据表3—6的标度对表3.8列出的风险驱动因子两两进行比 较,得到了针对TCQR四个风险因素的判别矩阵: (2)计算上一步中得到的判别矩阵的特征向量,得到表3_8的权重w列 (3)把第二步中计算得到的特征向量分别与风险放大系数相乘,计算结果进行标准化后得出模糊权向量,得到表3—8的模糊权a列。 3.利用蒙特卡罗模拟计算隶属度矩阵R。首先专家对表3-8中列出的项目风险驱动因子的概率和影响分别进行评分, 具软件Cryst“Ball进行蒙特卡罗模拟,得到风险驱动因子对模糊评价等级的 4.利用模糊变换公式(3.2)计算四个风险因素的模糊综合评价结果向量。 5.采用改进的加权平均方法,把第四步中计算得到的四个模糊综合评价结ar 果向量代入公式(3—4),取待定系数k_2进行单值化后得到四个点值。 6.利用风险综合评价函数计算项目综合风险系数旯,附录中提供了采用 从上面结果可以看出,该信息系统开发项目的进度风险为中等风险,而成本、另外从项目综合风险系数看,该项目的整体风险较大,需要引起公司管理层 3.5.3案例讨论 合评价结果向量如下: 质量和资源方面的风险都比较大。其中成本风险主要是由于该项目的实施条件的高度不确定性,造成成本预算和控制都较为困难:比较低的项目管理和质量保证水平导致了较大的质量风险;资源风险较大是由于该项目采用分散的外包开发方式,导致人员的稳定性和相互的配合能力较差,引发了较大的风险。和项目组的高度重视,采取严格的风险控制政策。 3.6小结 通过以上具体案例的讨论,我们看到风险评估方法在风险识别、风险估计和风险评价方面的一个完整应用。目前此方法已经应用于人民日报网站改造、上海宝山疾病传报系统、海淀购书中心POs系统、首信ERP系统等项目的风险管理工作中,取得了较好的使用效果,并在一定程度上得到了有关项目专家的认可与支持。 虽然在实践中我们发现不同的项目管理者在项目管理经验和对风险认知程度方面的差异也会影响到该方法的使用效果,但是仍然不失为一个进行项目风险评估的有效手段。 第4章风险管理 4.1概述 通过风险识别,发现了项目存在的风险因素和风险驱动因子;通过风险估计和评价,深化了对风险的认识,对其进行了定量的分析和描述;而真正要达到风险管理的目的,关键一环是选择风险管理技术,通过对风险驱动因子的控制以达到减小风险事件发生的概率和降低风险损失程度的目的。以下给出了项目风险管理的一般定义: 项目管理班子通过风险识别、风险估计和风险评价,并以此为基础合理地使用多种管理方法、技术和手段对项目活动涉及的风险实行有效的控制,采取主动行动,创造条件,尽量妥善的处理风险事件造成的不利后果,以最少的成本保证安全、可靠地实现项目的总目标。 风险管理是连续的、多次反复进行的,可以看成是一个更新的过程。在这个过程中,新风险不断产生、成熟和衰亡。因此风险管理还可以看做是在项目生命周期内为控制风险而采取的一个行动序列。风险管理包括风险规划(制订风险管理计划)、风险监控、风险管理及应急计划三个阶段,它们也有交叉和重叠。 4.2风险管理的主要内容 4.2.1风险管理过程 经过风险识别、风险估计和风险评价,项目整体风险有图4.1中表示的两种情况。若是第一种,项目班子有两种选择: (1)当整体风险超过评价基准很多时,立即停止并取消项目; (2)当整体风险超过评价基准不多时,采取挽救措施。挽救措施又有两种。 第一,降低风险评价基准,对项目进行重新评价,看一看风险评价基准降低后项目是否可行;第二,改变项目的目标和策略等。 若项目整体风险水平可以接受,则不必改变项目原定计划,而应集中注意力监控已经识别出的风险、注意尚未显露的新风险,努力提高项目取得成功的可能性。对于各个具体风险驱动因子进行严格检查,必要时采取措施加以规避。这就是风险管理的一般过程。 第一种情况 取消项目项目风险超过了可接受的水平挽救项目改变项目的目标降低现在的风险 4.2.2风险规划 风险规划包括制订风险规避的策略和风险管理计划,下面进行简要介绍:1.风险规避的策略规避风险可以从改变风险后果的性质、风险发生的概率或者风险后果大小三个方面提出多种策略,主要有风险的避免、减轻、转移等。下面给出了常见的减轻风险的策略:f1)经常进行项目监督;(2)使用WBS和PERT,CPM;3)强调团队支持,避免独立的项目结构;(4)改善问题处理和沟通:(5)选择有经验的项目经理,提高项目经理的权限; 2.风险管理计划 风险规划最终将形成风险管理计划文件,不同的项目,内容不同。但是至少应该包括如下内容: (1)所有风险驱动因子的识别,以及关于这些风险对于实现项目目标的影响说明; (2)对于关键风险驱动因子的评估,包括发生概率和影响程度; (3)建议的风险规避策略及其代价; (4)项目风险形势估计、风险规避策略综合后的总策略; (5)实施风险管理所需资源的分配,包括费用、进度和技术考虑的说明: (6)风险管理的组织及其责任; (7)成功的标准,即何时可以认为风险已经被规避以及待使用的监控方法; (8)风险跟踪、决策以及反馈的时间,包括不断修改和更新风险表; (9)应急计划。 4.2.3风险监控 风险监控是项目实施过程中的一项重要工作。监视风险实际是监视项目的进展和项目环境,即项耳风险因素的变化。其目的是,核对这些策略和措施的实际效果是否与预见的相同;寻找机会改善和细化风险规避策略;获得反馈信息,以便将来的决策更符合实际。对那些新出现的以及预先制订的策略或措旌不见效或性质随着时间的推延而发生变化的风险进行控制。x风险监控技术主要有:审核评审法;挣值分析法(对成本和进度进行偏差分析);风险表方法。 4.2.4风险管理及应急计划 当对于风险的规避工作已经失败且风险变成了现实的时候,需要启动风险规划阶段制订的风险应急计划。每当这种情况发生时,我们说项目处于危机当中。有关危机处理方面的内容不属于本文的重点。 4.3风险管理效果评价 每个项目面临的风险都是纷繁复杂的,而应对一种特定的风险可以采用多种多样的方法。为了达到以最小投入获得最大安全保障的风险管理目标,必须在项目进行中的各个阶段,不断检验所采取的风险管理策略是否有效和适合,这就是 第4章风险管理 风险管理效果评价的工作内容。通过风险管理效果评价,决定是否要对原有的风险管理策略进行调整。这里介绍成功度评价方法。成功度评价是一种定性的评价方法,它依靠评价专家或者专家小组的经验,综合待评价项目各项指标的评价结果后,对风险管理的成功程度给出定性的结论。该方法简要介绍如下: 1.成功度的评价标准 评价的成功度一般可以分成五个等级: (1)完全成功的:各项指标都已全面实现或超过;相对风险管理的成本而言,项目取得巨大的效益和影响。 (2)成功的(A):项目风险管理的大部分目标已经实现;相对成本而言,项目取得了预期的效益和影响。 (3)部分成功的(B):实现了项目风险管理的部分目标:相对成本而言,项目只取得了一定的效益和影响。 (4)不成功的(C):项目风险管理实现的目标非常有限;相对成本而言,项目几乎没有产生正效益和影响。 (5)失败的(D):项目风险管理计划的目标是不实际的,无法实现: 2.成功度的测定步骤和方法 成功度评价表(见表4—1)包括评价项目及其主要指标。在评定具体项目的成功度时,评价人员首先要根据具体项目的类型和特点,确定袭4.1中指标与项目相关程度(权重),把它们分为“重要”、“次重要”和“不重要”三类,填充在表中“相关重要性”栏目下(对“不重要”的指标就不用测定)。在测定各项指标时,采用打分方法,即按上述评价标准的第2至5的四个级别分别用A、B、c、D表示。通过对指标相对重要性分析得到的权重和单项成功度结论的综合,可以得到整个项目风险管理活动的成功度指标。具体操作时可以采用一般的专家评分求加权平均的方法,也可采用模糊综合评价方法。如果使用模糊评价综合方法,评价因素论域u包括表4.1中相关重要性不为“不重要”的所有指标;对相对重要性栏标记为“重要”和“次重要”的指标进一步数据处理后得到指标模糊权向量A;评价等级论域v包括了上述评价标准的A、B、C、D四个级别。 表4.1成功度评价表 风险管理计划实施评价指标相关重要性成功度项目总体风险水平预算成本控制进度计划控制计划控制质量保证控制危机事件产生和处理情况风险管理技术运用风险管理的持续性 有关风险管理规范的执行情况成本一效果分析对于机构制度的影响项目干系人的反馈 第5章应用风险评估方法的三种模式 5.1结合工作分解结构使用风险评估 工作分解结构(WBs)是一种以结果为导向的分析方法,用于分析项目所涉及的工作,所有这些工作构成了项目的整个范围,图5—1显示了一般软件开发项目的工作分解结构。 利用第三章中介绍的风险评估方法计算出项目综合风险系数,对项目整体的风险进行评估。这里介绍一种通过对项目工作分解结构中的单一任务的风险分别评估,而后综合得到项目总体风险水平的一种方法。以下是使用工作分解结构进行风险评估的基本思路:在项目的计划阶段,运用系统分析的方法把整个项目层层分解为若干工作包,得到了如图5—1所示的一般软件开发项目的工作分解结构。再逐一考虑每个工作包的风险水平,即对每个工作包采用前面介绍的方法进行风险评估,然后利用层次法逐层综合得到项目的总体风险水平, 注意,由于工作任务不同,风险因素对每个工作任务的影响是不同的,并且需要选择适合的风险驱动因子参与风险评估。 5.2在项目生命周期的各阶段中使用风险评估 项目生命周期指的是这样一系列项目阶段的集合,包括概念、开发、实旆和收尾四个阶段。图5—3表示了一种螺旋式的项目生命周期: 第5章应用风险评估方法的三种模式 项目风险在生命周期各个阶段中是不同的,通常在项目早期的概念和开发阶段整体风险较大,而后期整体风险变小。同时,项目风险因素和风险驱动因子在项目生命周期不同阶段内的表现也有所不同。因此,可以在项目生命周期的各个阶段内使用风险评估方法对项目总体风险水平进行评估。 5.3在RUP迭代式开发过程中应用风险评估 早期的项目生命周期模型主要有:瀑布模型、螺旋式模型和原型模型。但是这些模型都存在着一些固有的问题。比如瀑布模型在处理规模较小且比较有经验的项目时是有效的,但面对一个充满新意、未知和风险的项目就会面临许多问题。于是RIJP迭代式开发方法被越来越广泛的引入到软件开发项目中。图5—4将迭代式开发方法与瀑布方法进行了比较。从中可以看出,瀑布过程有四个阶段,它就像迭代过程的一个开发周期:从开始构想,到完成~个完整的稳定的产品,最终交付给用户。 在每次迭代过程中,可以使用前面介绍的风险评估方法进行项目的风险评估。我们知道项目进行过程中存在着学习曲线(S曲线),通过在每次迭代中进行风险评估,可以不断积累项目经验,改进风险评估的质量,逼近真实的项目情况。迭代过程比其它过程可以更早的缓解风险,因为在其它过程中,集成阶段通常是唯一能发现和解决风险的时候。而在迭代方法中,在早期迭代过程中就已经接触到所有的过程构件并演练了项目的各个方面,包括工具、未成型的软件和人员技能。已经发现的风险将不再是风险,新的、未检查到的风险将在未来迭代中发现。 结论 目前,随着国内IT企业的竞争愈加激烈,软件开发项目的风险管理受到越来越广泛的重视。但是在实际工作中,由于缺乏操作性好,行之有效的方法而更多的停留在经验判断和定性分析的层面。因此本文力求从风险识别、风险估计和风险评价等方面提出一些科学的分析和方法,并初步把这些方法切实地运用到实际工作中来。实际应用中,需要从项目管理的制度上尽可能把这些方法按程序、有步骤地组织起来,使在项目生命周期过程中搜集基础数据的工作能够有目的地进行,使分析和计算工作更简便易懂、易于操作,建立起一套系统的、科学的、适用的并逐步完善的软件项目风险管理的方法体系。 本文把风险管理理论及项目管理的其它相关知识结合到软件工程实践中加以探索,提出了一下的几种新方法、设想和尝试: (1)综合项目管理知识领域的TcQR风险评估指标体系模型。风险识别的关键是建立起符合软件项目特点的风险评价指标体系,本文提出了建立Tc0R模型,该模型是风险因素和风险驱动因子的两层次模型,并结合实际情况引入了反映管理能力的风险放大系数,较好的反映了软件项目的特点。 (2)建立了一般性项目风险驱动因子的标准集。本文主要针对~般性的风险指标进行了探讨,给出了一般性的风险驱动因子标准集。该标准集是动态的,随着不同的项目、项目的不同阶段选择影响风险评估的不同风险驱动因子参与评价。标准集的定义,使得项目风险的评估具有了可操作性,同时为有目的地收集各种项目数据提供了指导。 (3)给出了TBQ调查问卷。TBQ调查问卷使得对风险驱动因子的识别和客观评价项目组的管理能力具有了可操作性,也为TCQR模型的实际应用提供了保证。 (4)改进的模糊综合评价方法。由于风险指标中包含定性和定量的指标,对于指标评价也具有不确定性和模糊性,因此本文基于模糊综合评价的方法,对其不适用和不便于实际操作的部分进行了必要的改进,改进后更能符合软件项目风险的估计和评价,也具有了可操作性。 (5)建立评价项目总体风险水平的项目综合风险系数和风险综合评价函数。 由于各个风险因素之间综合作用影响了对项目风险的评估,因此给出一个能反映项目总体风险水平的数值对于比较不同的项目、同一项目中不同的实施方案、同一项目中不同实施阶段的项目总体风险是十分重要的。通过构造风险综合评价函数计算项目综合风险系数的方法,解决了这一问题。该方法的有效性和通用性还需要在今后通过实践进一步得到检验和完善。 (6)简要介绍了如何把风险评估方法运用于实际软件项目中。未来的软件项目在新的软件工程理论指导下与以往发生了本质的变化。本文提出的风评估包括了评估的过程和方法,并针对如何具体运用的问题进行了探讨。 随着以上方法在实际工作中的应用,其有效性和通用性会得到进一步的检验。值得指出的是,随着项目样本数据的不断积累,有望针对类似的软件项目形成项目综合风险系数的标准,这样可以更快捷和更权威的对项目风险进行评估。另外,风险驱动因子的选取也会随着项目数据的积累,能够相对稳定下来,这样更有助于该方法的广泛推广使用。 由于作者水平及研究时间限制,本文的研究工作及所取得的初步研究成果只局限于项目风险评估的部分难题,且研究方法和所采用的技术仍有诸多不足,并有待于今后进一步研究加以完善。本文的研究工作将为今后进一步研究风险管理打下坚实的基础。
信息发布:广州名易软件有限公司 http://www.myidp.net
|