近 20 年来,随着信息技术的飞速发展,IT 软件项目层出不穷,软件开发技术有了很大的进步,软件企业也不断成熟,但是在开发过程中的风险也越来越大。如何预测、防止和应对风险,这就使得软件项目风险管理的研究逐步成为软件工程的热点问题之一。风险管理意味着危机还没有发生之前,就进行预测、分析并在适当的时机实施应对措施,减少风险所产生的损失,提高了项目的成功机会。
一、风险与风险管理
在 IT 软件项目的整个生命周期中,一直存在着变化,变化带来了不确定性,也就意味着可能会出现损失,而损失的不确定性就是风险。只要是项目,就有风险。风险有狭义和广义两种含义,狭义的风险就是我们日常理解的可能发生的危险,广义的风险则是指一种不确定性。风险包含“不确定性”和“损失”.风险可能发生也可能不发生,一旦风险发生了,成为了现实,就会产生损失。判断风险具体大小时,常会用到“风险当量”的概念,风险当量=风险发生的概率×损失。
风险管理的概念最早是出现在管理科学的项目管理中,在软件开发的早期,基本上都是采用“代码+调试”的过程。但是,调试过程中的困难和高昂的成本引发了 20 世纪60 年代的软件危机。为了应对软件危机,提出了软件工程的概念,随之引入了软件项目管理以及风险管理的概念,这之后软件危机得到了一定程度的缓解和控制。
IT 软件项目风险贯穿于整个项目的生命周期,并且风险会随着项目进展而发生变化。风险管理是项目小组在对整个项目生命周期内的风险识别、风险估计和风险评价的基础上,使用多种管理方法、技术和手段对项目活动涉及的风险实行有效的控制[1].
二、风险管理方法
IT 软件项目风险管理方法主要有: Barry Boehm 理论,SEI 的 CRM 模型,Leavitt 模型,Charette 模型和 Riskit 风险模型等。这里主要选择 SEI 的 CRM 模型和 Leavitt 模型进行对比。
( 一) SEI 的 CRM 模型
SEI 的 CRM 持续风险管理( Continuous Risk Manage-ment) 模型,如图 1 所示。
CRM 模型要求每个风险因素都按顺序经过这五个步骤进行管理,它是一种动态风险管理理论,注重与软件开发过程的结合。从图1 中可以看到,这是一个闭合的圆环,强调在整个生命周期中不断地进行风险的评估,选择最迫切需要处理的风险。CRM 模型的风险管理共有五个步骤,在这五个步骤中贯彻始终的是沟通交流。
( 二) Leavitt 模型
Leavitt 模型将软件项目管理看作一个系统,并把该系统分为四部分: 角色、任务、结构和技术[6],见图2.“角色”
指人员,包括所有与软件项目有关的人,如项目经理、开发人员、用户等等; “任务”表示的是软件项目开发的目标或者是公司期望的交付结果; “结构”指的是管理层面和开发行为层面,表示了规范要求、规章制度、人员架构和行为准则等; “技术”被定义成任何完成目标所使用的开发工具、技术手段和软硬件平台等。这四个部分之间的联系十分紧密,其中任何一个部分的变化都会给其余的部分带来影响。
当这四部分的状态不能保证一致时,就会造成严重的后果。
根据 Leavitt 模型,这四个部分是紧密地联系在一起的整体,其中任何一个变量的变化都会导致其他变量的变化,如果这个变化是不匹配的,继而会导致整个系统性能降低。
比如: 结构的不健全可能会导致任务的无法完成,不合适的技术可能与任务无法匹配,这四部分的配合程度将决定项目潜在风险的高低。
这四个部分之间的相互依赖关系可以描述为: 角色-技术: 不要选择对技术不胜任或者过于胜任的人员; 技术-任务: 选择符合任务要求的技术,性能低下或者过于先进而实现困难的技术都是不合适的; 任务-结构: 错误的组织结构或者要求都无法实现任务; 结构-角色: 人员之间的错误的任命,职责分配以及错误的行为都可能成为风险; 角色-任务: 为任务选择人员时,要着重选择能力与任务相匹配的人员; 技术-结构: 选择合适的技术和与之相匹配的规范、要求等结构。
( 三) 对比与总结
SEI 的 CRM 模型最明显的特点是其与软件开发过程紧密的结合,并且可操作性强。CRM 模型将风险管理过程作为主体,强调管理步骤,认为这是一个项目开发中持续并反复的活动,但由于使用该模型的成本较高,因此比较适合大型公司或者开发大型项目时采用。
Leavitt 模型是从系统的角度对风险管理进行研究,操作简单,定义完善,包容性好,所以目前该设计方法和实现研究已经广泛应用于各类文献和信息系统中。Leavitt 模型具有定义和分析风险管理步骤的特点。
通过两种风险管理方法的分析和对比,提出了一种综合的风险管理方法,见图3.
可以看到在 CRM 模型的基础上,把五个步骤精简到四个步骤为风险识别、风险评估、风险规划和风险监控,并且这四个步骤执行过程中,全部要按照 Leavitt 模型中四个部分角色、任务、结构和技术的一致性要求进行比对,确保每一步都能够保证系统的平衡,原来在 CRM 模型中贯彻的沟通交流被更为细致详尽的 Leavitt 模型的角色、任务、结构和技术所代替,并且仍然要遵从四个部分之间的相互依赖关系。
在这个风险管理方法中,风险识别是第一步,也是风险管理的基础,其目的是减少项目的结构不确定性,包括认识了解风险,分析引发风险的潜在原因,可能带来的损失或者机会等。识别内容可能涉及的环节包括: 市场、技术、制度、人事、财务和生产等方面。常采用头脑风暴法、检查表法、专家访谈法和分解分析法等等。具体见图 4.同时需要关注几个方面: 风险识别内容的完整; 风险识别过程的记录;风险识别技术方法的适宜性; 风险识别活动的评估; 风险信息数据库的完整性和及时更新。
风险评估是对之前已经识别的风险进行估计和评价,它是风险规划的基础。没有客观、充分的风险评估,风险规划将是效率低下、无的放矢的。风险评估的内容包括估算风险事件的可能性( 频率、概率) 及其影响后果的大小,尽可能的量化风险; 对各种风险的后果进行评价,并且按照严重程度排序。在一个项目的过程中,风险识别和风险评估不是截然分开的,往往是结合在一起进行,也可以根据需要反复执行。同时需要关注几个方面: 确定合适的计量单位;评估风险发生的概率; 估计风险事件的影响; 选择适当的风险评估技术; 参与人员的结构和技术要求。见图 5.
风险规划是项目经理针对各种可能出现的风险事件,预测风险并制定出一个预防、规避、降低、转移和接受的行动方案或者是风险的应对计划。其中的风险规避是风险的威胁性太大时,通过变更项目计划或放弃停止开发活动以消除风险或减轻损失的策略; 风险转移并不消除风险,它指的是采取出售、业务外包、购买保险或列出免责条款的合同等方法,将项目风险以及相对应的权力转移给第三方的策略; 风险接受是通过权衡利弊,不准备采取措施降低风险或减轻损失的策略,接受风险时往往已经事先制定了应急方案或措施。需要重点关注: 风险规划策略应建立在充分的风险评估基础上; 风险规划策略的技术可行性; 风险规划策略是否符合项目开发目标和原则; 风险规划策略是否可以使风险处于项目开发可承受的范围内; 风险规划策略中的技术方法创新。风险监控是实施风险规划中制定的计划,在控制过程中,有时会根据经费和进度等调整计划,并且在实施计划后,检查和校验结果是否与预期相一致以及寻找细化和改善计划的机会。
三、展望
纵观以上内容,可以看出软件项目风险管理是一门实践性很强的学科,未来的发展和研究可以从以下几个方面考虑:1、与管理学科相融合借鉴,软件项目管理脱胎于项目管理领域,项目管理中的新方法往往能够给软件项目风险管理带来新参考;2、开发专业的风险管理软件; 3、寻求有效的量化评估工具,目前采用的风险评估技术多是以经验和主观分析为主,这种方法在实践中的效果往往并不是很好,应该采用一种技术手段来解决风险量化,实现更准确、更有效的风险评估。
参考文献:
[1]许成绩。 现代项目管理教程[M]. 北京: 中国宇航出版社,2003.
[2]吴育华,杜纲。 管理科学基础[M]. 天津: 天津大学出版社,2001.
[3]张海藩。 软件工程导论[M]. 北京: 清华大学出版社,2003.
[4]潘春光,陈英武,汪浩。 软件项目风险管理理论与方法研究综述[J]. 控制与决策,2007( 5) .
[5]王强,曹汉平,贾素玲,木林森。 IT 软件项目管理[M]. 北京: 清华大学出版社,2004.
[6]郭红钰,李春贺。 基于 Leavitt 模型的软件本地化项目风险管理研究[J]. 项目管理技术,2012( 12) .
[7]李帅芳,肖果平。 Crystal Ball 在项目管理风险分析中的应用[J]. 项目管理技术,2013( 4) .
[8]吴宗东。 软件项目风险管理理论和方法探究[J]. 电脑知识与技术,2013( 5) .
[9]邱箢华。 现代项目风险管理方法与实践[M]. 北京: 科学出版社,2003.
[10]袁保立。 IT 项目风险管理与案例分析[D]. 天津: 天津大学,2008.
在软件工程领域,软件风险一直都是软件产品质量的重要影响因素,如果在软件开发过程中软件风险得不到控制,那么软件产品会存在较强的危害性,而产品质量也会因此而下降,相反如果软件风险能够得到有效处理,那么软件产品质量自然就会得到提升。...