任何项目都和其它经济活动一样,带有一定的风险,软件开发项目自然也包含各种各样的风险,其中比较典型的一类就是软件外协项目的风险。完全避开或消除风险是不可能的,但是我们可以尽量的减少损失,将威胁化为机会,这就要求项目主体充分了解和掌握风险的来源、性质以及发生规律,进而实行有效的管理。
项目风险管理一般包含以下几个环节:风险管理计划编制、风险识别、定性风险分析、定量风险分析、风险应对计划编制以及风险监督和控制。其实这也就是一个对项目风险进行识别、分析和应对的系统的过程。
笔者组织开发过一个国家大型灌区信息化系统项目,在实践中对项目的软件外协部分的风险以及风险管理感触颇深。根据这个信息化系统项目的实际情况,对待开发软件系统中的用水配水子系统进行了外协。外协项目启动以后,经过几天短暂频繁的接触,几个特殊的问题引起了注意。首先,之所以对这个子系统进行外协主要是因为协作方行业知识造诣颇深、业务精通。但是充分沟通后了解到协作方技术方面相对较差,包括比较重要的数据模型设计能力。其次协作方对需求不够清晰,人力资源缺乏,项目投入人力不能让人满意。再加之项目工期要求很紧,上述问题就显得突出,项目风险对项目目标构成了相当的威胁。认识到这种风险,在项目实施初期就有针对的制定出了应对办法,例如积极提供强有力技术支持、要求协作方在开发初期提供详细的开发计划、高频率的核实开发进度、辅助协作方进行版本控制、辅助协作方制定预见性的后续工作计划等。最后经过双方共同努力,使得外协软件顺利开发完成。
应该说这个实例比较明显的体现了一个项目风险管理过程,包括项目周期开始认识到项目风险的存在,了解风险的详细状况以及分析风险原因,直到最后形成风险应对方案。这个过程对于项目目标而言就是将正面事件的概率和影响结果扩到最大和把负面事件的概率和影响结果减少到最小。那么怎样才能顺利利用项目风险管理的关键环节达到风险管理目的呢?对于从事项目管理的人而言,首先应该明确什么是风险?风险同人们有目的的活动有关。如果对预期结果没有十分把握,则认为该项活动有风险;风险也同将来的活动和事件有关。已经结束的后果无法改变,对于将来的活动、事件或项目,总是有多种行动方案可供选择,选择不同方案形成不同的结果。一般认为风险就是活动或事件消极的,人们不希望的后果发生的潜在可能性。项目风险事件本身是获取许可所花费的时间比计划的要长,或是可能没有充足人员来完成项目工作。其实,项目风险既包括对项目目标的威胁,也包括促进项目目标的机会,我们这里只探讨普通意义上的项目风险。
风险管理中第一个环节是风险管理计划编制,这个环节是决定如何采取和计划一个项目的风险管理活动的过程。风险管理的水平、类型和可见度不仅要与风险相称,也要与项目对组织单位的重要性相称,为了保证这一点,对随后进行的各种风险管理过程做好计划是非常重要的。一般做项目风险管理计划编制依据项目的章程、组织单位的风险管理政策、明确的岗位和职责以及项目干系人的风险承受限度等因素。项目队伍通过召开计划编制会议来制定风险管理计划,计划中不阐述单个风险的应对,其内容包括以下几点:一是对可能用于项目风险管理的方法进行明确的定义。例如针对本文中的例子,确定使用什么办法在早期发现协作方存在的问题;当可能出现协作方技术不足的情况下我们应该怎么处理;对工期的节点监控办法等。
二是明确岗位和职责,明确定义每一类别行动的领导、辅助和风险管理小组人员。例如明确甲、乙双方的小组负责人和成员,谁负责项目风险发现;谁负责进行质量控制;谁负责进度监督等。第三点为承受度,即风险承受度以谁为标准,采取何种方式。项目业主、客户、或赞助者会有不同的风险承受度,可接受的风险承受度是项目队伍衡量风险应对计划执行效果的标准。对于本例而言,灌渠信息化系统的业主方在工期方面的承受能力比较强,因为如果保证在灌期前系统到位,则顺利进行一个灌季的试用,合同完成。否则可能要再多试用一个灌季,但业主可以接受。对于承接方的项目组而言则在这方面承受能力弱,项目目标是必须按工期、按质量完成,否则项目延期,成本增加。这其中也包含软件外协部分对项目工期的影响,虽然对协作方有合同制约,但如果外协部分不能按期完成,协作方是会产生一定的、较小的损失,但损失最大的还是项目组,因为外协软件影响了整个合同的进度。当然这其中还有很多其他因子,笔者认为这是比较重要的几个方面。
有了概要的风险管理计划,在实际管理过程中,首要的就是进行风险识别。项目风险识别是一项贯穿于项目实施全过程的项目风险管理工作,这项工作的目标是识别和确定出项目究竟有哪些风险,这些项目风险究竟有哪些基本的特征,这些项目风险可能会影响项目哪些方面。确定项目的风险是属于工期的风险、成本的风险还是质量的风险、有预警信息还是无预警信息风险、风险会给项目的工期、成本、质量造成什么影响等。那么识别风险主要依据是什么呢?
以下三点应该是比较重要的要素:一是项目产出的描述,因为项目风险识别最重要的内容是识别项目的工作能否按时、按质、按照预算限制去最终生成项目的产出物。二是项目的计划信息。三是历史资料,以前完成的项目实际发生的各种意外事情的历史资料,对于识别和确定新项目的风险和威胁是非常重要的信息和依据,其实这就是经验。比如本例中笔者首先是依据经验意识到该外协项目风险的存在,意识到行业知识的欠缺导致对产出物质量评价的风险。其次项目的产出物要求是完整的软件产品,提示项目组意识到强有力的软件技术支撑是保证获得预期产出物的前提。最后根据项目的整体进度计划,外协软件的工期风险也显现出来。项目风险识别包括其他很多种方法,例如系统分解法、流程图法、头脑风暴法以及情景分析法等,这里不作详细描述。
项目管理者已经识别到了项目中存在的风险,接下来就是要对风险进行分析,分析包括定性分析和定量分析。包括风险分析在内,基本上所有事务的分析方式都是先进行定性分析,然后进行定量分析,我们这里也先讨论定性的风险分析。定性的风险分析是评估已识别风险的影响和可能性的过程,使用已有的定性分析方法和工具来评估风险的概率和后果。根据什么进行定性的风险分析呢?大致包含以下几个方面:项目初期已经形成的风险管理计划、已经识别的风险、项目的状态、项目的类型、概率范围和后果等,特殊情况还包括假设,假设可以甄别出潜在的风险。通过定性风险分析,我们可以了解项目总体风险等级、可以得到风险优先次序清单、需要进一步分析和管理控制的风险清单、以及风险趋势等。[NextPage]
定量风险分析过程的目标是量化分析每一风险的概率及其对项目目标造成的后果,也分析项目总体的风险程度。这一过程涉及的工作包括测定取得某一特定项目目标的概率;量化项目的风险暴露,决定可能需要的成本大小和进度计划应急准备金;通过量化各风险对项目风险的相应贡献,分析出最需要关注的风险;找出理想的和可实现的成本、进度计划及工作范围目标。形成定量风险分析结果有多种途径,一种是访谈,访谈技术用于量化对项目目标造成影响的风险的概率和后果。
将风险变动范围基本原理形成文档是风险访谈的一个重要组成部分,因为它可以使我们在风险应对计划编制过程中形成有效的风险应对策略。一种是敏感度分析,敏感度分析有助于确定哪种风险最有可能对项目产生影响,这种分析是在所有其他不确定性要素保持其基准值的前提下,考察每个项目要素的不确定性对项目目标影响的程度。一种是决策分析树,决策分析通常结构化为决策树形式,决策树是一种图表,它反映了尚在考虑中的一项决策,以及选择一个方案和两个被选方案中的另一个的暗示。决策树将风险概率、事件的每一条合理路径的成本和报酬、以及未来的决策综合在一起。还有一种是模拟,项目模拟采用的模型,可以将详细规定的不确定性转化为对项目总体目标的潜在影响,使用蒙特卡罗技术是进行项目模拟的一种典型手段。我们可以使用一种方法,也可以使用多种途径进行分析,直到最后得到量化的风险优先次序清单。这种量化或许是不准确的,但只要做了,总是可以得到一个大致的趋势,便于项目管理者掌握项目风险状态。
显然,知道了风险,知道了风险的优先次序,必然要针对风险制定风险应对计划。风险应对计划编制是一个开发方案和制定措施的过程,目的是为了提升实现项目目标的机会、减低对项目目标的威胁。它包括确定人员负责每个已经认可的风险应对行动,以保证已识别出的风险得到合适的处置。风险应对计划编制的有效性直接决定项目的风险是增加还是减少。风险应对计划应该与风险的严重性、应对成本的有效性、完成任务的适时性相适应,并且确认由专人负责。风险应对的办法一般包括四种策略:规避、转移、缓解和接受。规避就是通过变更项目计划,从而消除风险和产生风险的条件。
减少项目范围以规避高风险工作;增加项目资源和时间;采用一种熟悉的而不是创新的方法;避免使用一个不熟悉的分包商等都是风险规避的典型例子,本文描述的笔者的状况显然不属于这种方式。风险转移是设法将某风险的结果连同对风险进行应对的权利转移给第三方,转移风险只是将管理风险的责任转移给另一方,它不能消除风险。转移风险几乎总是会伴有向接受风险的一方支付风险成本,应该说本文描述的软件外协就是一种风险转移,将项目组本身由于行业知识限制所造成的软件开发风险转移给第三方,同时伴随了向接受风险的一方支付风险成本。所谓缓解是设法将某一负面风险事件的概率或其后果降低到一种可以接受的程度,早期采取措施降低风险发生的概率或风险对项目的影响,比在风险发生后再亡羊补牢更为有效,对照风险可能的概率和其后果,缓解的成本应是合理的。
本文中描述的例子对于整个软件外协项目来说,它的风险应对计划是进行风险转移,而对于已经外协后发现的类似协作方技术状况弱等情况采取的早期介入,进行强力技术支持则是一种风险缓解。最后一种风险应对计划就是接受,这种手段意味着项目队伍决定以不变的项目计划去应对某一风险,或项目队伍不能找到其他合适的风险应对策略。积极的接受行动包括制定一个应急计划,以备风险发生时用。消极的接受不需要任何行动,仅让项目队伍在风险发生时去对付风险。总的来说,接受是一种没有办法的办法,除非环境所限可能一般都不会采用。对于编制好的风险应对计划,它的每一条包含如下条目:已经识别的风险及其描述,风险成因以及风险可能如何影响项目目标;风险承担人和分派的责任;定性和定量分析过程的结果;针对风险所确定的应对措施,包括规避、转移、缓解或接受;在应对战略实施后,期望的残留风险水平;实施选定的应对战略所需的具体行动;风险应对预算和时间;应急计划和退却计划等。
到这一步,项目管理者应该已经成竹在胸了,因为已经识别到了风险、定性定量的分析了存在的风险、制定了风险应对计划,只要按部就班的按计划执行,就可以达到预期的目的,胜利已在眼前,但越是最后越是不可掉以轻心,要继续重视风险的监督和控制。风险监督和控制是这样一个项目管理过程,它跟踪已识别的风险,监视残余风险和识别新的风险,保证风险计划的执行,并评估这些计划对降低风险的有效性。其实风险监督和控制是项目整个生命周期中一种持续进行的过程,随着项目的成长,风险会不断变化,可能会有新的风险出现,也可能预期的风险会消失。良好的风险监督和控制过程能为我们提供信息,帮助我们在风险发生前作出有效决策。为了定期对项目风险水平的可接受程度做出评估,所有项目干系人之间的沟通是必要的。风险监督的目的包括监控风险应对措施是否已经按计划得到实施;风险应对措施是否象期望的那样有效;未曾识别的风险是否已经发生;项目假设是否依然成立等内容。
对笔者而言,在组织开发这个国家大型灌区信息化系统的过程中,外协部分之所以能按期保质的完成,感触颇深的就是前期全面深入的与协作方进行接触,及时识别到存在的风险,组织项目组详细的分析风险并制定出风险应对方案。这其中也反映出了项目风险管理在项目管理中的重要地位与作用。项目实行风险管理还有一些其他的好处,和大家共勉:通过风险分析,可加深对项目和风险的认识和理解,澄清各方案的利弊;可以提高项目各种计划的可信度,有利于改善项目执行组织内部和外部之间的沟通;能够将处理风险后果的各种方式更灵活的组织起来,在项目管理中减少被动,增加主动;为以后的规划和设计工作提供反馈,以便在规划和设计阶段就采取措施防止和避免风险损失;可推动项目执行组织和管理班子积累有关风险的资料和数据,以便改进将来的项目管理。