摘要:软件项目的开发有很高的失败率。从20世纪80年代后期开始,软件理论界和产业界开始重视软件的风险管理,并产生了一系列的风险管理过程模型,这些模型对风险管理的规范有积极的意义。文章回顾了风险管理模型的发展,发现目前的软件项目开发风险管理模型只强调承包工程方过程,而较少关注建设方的参与。这将带来二方面的不足:第一,建设方对项目的参与是成功的重要保证,没有建设方的参与的管理过程是不完整的。第二,在信息不对称的情况下,软件项目的开发风险被转移到建设方身上。为了有效解决目前模型的不足,文章在原有的风险管理模型基础上建立软件项目的建设方和承包商风险管理的协同过程模型,并设计了相关的数据结构和项目干系人在项目周期的不同阶段的参与情况。
关键词:软件项目;风险管理;协同;过程
一、 引言
世界银行的统计表明:在发展中国家的政府信息系统项目中,只有15%是完全成功的。因此,加强软件项目开发中的风险管理是软件开发中的最重要的工作之一,尤其对于大型的软件项目,软件风险管理的奠基人之一,Charatte认为大型软件项目的管理就是风险管理。Microsoft的量化研究表明,在风险管理中投入5%的项目工作可以获取50%~75%的如期完成的机会。可见风险管理在软件开发中的重要性。风险管理的研究在起源于20世纪80年代末,经过二十多年的发展,产生了大量的理论成果并对软件项目的开发起到积极的作用。其中,风险管理的过程研究是风险管理的框架和基础,为风险管理提供规范的模式。本文在分析现有研究的基础上建立软件项目的建设方和承包商风险管理的协同过程模型,以实现更加完整的规范的风险管理。
二、 风险管理过程模型的比较
1. Boehm模型:Boehm于1991年详细描述了他的思想体系。Boehm认为:软件风险管理这门学科的出现就是试图将影响项目成功的风险形式化为一组易用的原则和实践的集合,是在风险成为软件项目返工的主要因素并由此威胁到项目的成功运作前,识别、描述并消除这些风险项。他将风险管理过程归纳成二个基本步骤:风险评估和风险控制。其中风险评估包括风险识别、风险分析、风险排序;风险控制包括制定风险管理计划、解决风险、监控风险。
Boehm风险管理理论的核心是维护和更新十大风险列表。他通过对一些大型项目进行调查总结出了软件项目十大风险列表,其中包括人员短缺、不切实际的工期和预算、不合时宜的需求、开发了错误的软件功能、开发了错误的用户界面、过高的非实质性能要求、接连不断的需求改变、可外购部件不足、外部已完成任务不及时、实时性能过低和计算机能力有限。在软件项目开始时归纳出现在项目的十大风险列表,在项目的生命周期中定期召开会议去对列表进行更新、评比。十大风险列表是让高层经理的注意力集中在项目关键成功因素上的有效途径,可以有效地管理风险并由此减少高层的时间和精力。
2. Charette模型:1989年Charette设计的风险分析和管理的体系分为两大阶段,分别为分析阶段和管理阶段,每个阶段内含三个过程,这是一个相互重叠和循环的模型。Charette同时为各个过程提供了相应的战略思路、方法模型和技术手段。
3. CMU/SEI的CRM(Continuous Risk Management)持续风险管理模型:CMU/SEI的软件风险管理原则包括:(1)全局观点;(2)积极的策略;(3)开放的沟通环境;(4)综合管理;(5)持续的过程;(6)共同的目标;(7)协调工作。具体来说是要不断地评估可能造成恶劣后果的因素;决定最迫切需要处理的风险;实现控制风险的策略;评测并确保风险策略实施的有效性。CRM模型要求在项目生命期的所有阶段都关注风险识别和管理,它将风险管理划分为五个步骤:风险识别、分析、计划、跟踪、控制。它强调的是对风险管理的各个组成部分的沟通。
4. IEEE风险管理标准:IEEE风险管理标准定义了软件开发生命周期中的风险管理过程。这个风险管理过程系统地描述和管理在产品或服务的生命周期中出现的风险。包括以下活动:计划并实施风险管理、管理项目风险列表、分析风险、监控风险、处理风险、评估风险管理过程。
5. CMU/SEI的CMMI(Capability Maturity Model Integration)风险管理过程:CMMI是由SEI在CMM基础上发展而来。目前,CMMI是全球软件业界的管理标准。风险管理过程域在CMMI的第三级,即已定义级中建立一个关键过程域(KPA,Key
Practice Area)。CMMI认为风险管理是一种连续的前瞻性的过程。它要识别潜在的可能危及关键目标的因素,以便策划应对风险的活动和在必要时实施这些活动,缓解不利的影响最终实现组织的目标。CMMI的风险管理被清晰地描述为实现三个目标,每个目标的实现又通过一系列的活动来完成,如图1示。
该模型的核心是风险库,实现各个目标的每个活动都会更新这个风险库。其中活动“制订并维护风险管理策略”与风险库的联系是一个双向的交互过程,即通过采集风险库中相应的数据并结合前一活动的输入来制订风险管理策略。
6. Microsoft的MSF风险管理模型:MSF(Microsoft Solutions Framework)的风险管理思想是,风险管理必须是主动的,它是正式和系统的过程,风险应被持续评估、监控、管理,直到被解决或问题被处理。该模型最大的特点是将学习活动溶入风险管理,强调了学习以前项目经验的重要性。
它的风险管理原则是:(1)持续的评估;(2)培养开放的沟通环境:所有组成员应参与风险识别与分析;领导者应鼓励建立没有责备的文化;(3)从经验中学习:学习可以大大降低不确定性;强调组织级或企业级的从项目结果中学习的重要性;(4)责任分担:组中任何成员都有义务进行风险管理。
7. Riskit模型:Maryland大学的Kontio提出Riskit方法,该方法对于风险管理中的每个活动都提供了详细的活动执行模板,包括活动描述、进入标准、输入、输出、采用的方法和工具、责任、资源、退出标准。Riskit方法包括以下内容。(1)提供风险的明确定义:损失的定义建立在期望的基础上,即项目的实际结果没有达到项目相关者对项目的期望的程度;(2)明确定义目标、限制和其它影响项目成功的因素;(3)采用图形化的工具Riskit分析图对风险建模,定性地记录风险;(4)使用应用性损失的概念排列风险的损失;(5)不同相关者的观点被明确建模。
8. SoftRisk风险管理模型:Keshlaf和Hashim提出SoftRisk模型,其主要思想是,记录并将注意力集中在高可能性和高破坏性的风险上是进行风险管理的有效途径。目标是在有效地减轻风险的破坏性的前提基础上,节省软件开发过程中的时间成本和人力成本。该模型包括以下步骤:(1)风险识别;(2)风险发生的可能性和由此造成的损失估计;(3)文档化识别的风险;(4)风险评估,依据公式:RE=风险发生的概率*风险造成的损失;(5)排序,按照上述公式对风险排序,找出十大风险;(6)监控,利用图形表示风险的级别、状态;(7)控制,再估计——再评估——再排序;(8)统计操作,如果有新的风险,则再转到步骤1。
三、 软件项目风险管理协同过程模型
1. 风险管理模型的对比较。以上八个软件项目风险管理模型虽然在表达形式上有所不同,但基本按照风险的识别,估计,分析,计划,控制和监督六步来完成的。在这个共同的基础上,有些模型强调量化的数据库的建立,有些则强调沟通和学习的重要性。各模型特点比较分析如表1示。
另外,从上述软件项目风险管理模型的比较当中,我们不难发现,目前这些风险管理模型只是强调承包工程方的努力,而比较少关注建设方的参与。这将带来二方面的不足:第一,建设方对项目的参与是成功的重要保证,没有建设方的参与的管理过程是不完整的。第二,在信息不对称的情况下,软件项目的开发风险被转移到建设方身上。这种风险的转移是隐秘的,在软件项目中容易被忽略,难以被识别、控制与消除,由此可能导致软件项目只有产出没有效益。联合国在2003年“处于十字路口的电子政务”的报告中,把电子政务划分为三类:第一类,浪费的电子政务,即“有投入,无产出”;第二类,无目标的电子政务,即“有产出,无效益”;第三类,有意义的电子政务,即“有产出,有效益”。造成第二类无目标的电子政务的一个根本原因就在于缺乏从建设方的角度考虑软件项目的风险管理。
2. 软件项目风险管理的协同过程模型。为了从项目的风险管理过程上解决以上问题,使软件项目既有产出又有效益,我们对广州地区的二十位项目经理和软件产业界专家,包括软件承包方项目经理,软件客户方项目领导和第三方咨询顾问。其中包括完整的三方参与即包括承建方、建设方和第三方的项目实例共有九个,其余由于项目太小没有第三方参与。这些软件项目产出在系统质量,用户满意度,组织影响和按计划的时间和费用交付都比较令人满意。这些成功的项目有共同的特征,即强调项目三方协同与沟通。我们尝试根据访谈建立软件项目风险管理协同的过程模型。
在风险管理的基本过程中,协同过程模型与现有模型是一致的,分识别、估计、分析、计划、控制和监督六步,但是,协同模型与现有模型的一个重要区别在地强调建设方,承包方和第三方的介入。其模型如图2所示。
被访问项目在整个软件项目的风险管理过程中,项目的参与者包括建设方、开发承包商,实施顾问公司,管理顾问公司,监理公司。项目的全流程和各个项目参与者在项目的生命周期如表5所示。在这九个项目中全部为外包项目,其中有九个项目有八个引入了项目顾问,八个项目进行了项目监理,如表2所示。
四、 结论
本文在回顾目前的软件项目风险管理过程模型的基础上,发现其不足,并建立了软件项目风险管理的协同过程模型。协同过程模型由关键风险域、关键风险域的表达特征以及项目干系人三个维度组成。协同过程模型的建立,对软件项目承建方、建设方以及第三方实现全方位的风险管理,一方面,有利于建设方在信息更完全的条件下进行项目建设,利于项目的成功;另一方面风险管理协同过程模型可以打破组织内外和组织部门之间的边界,在信息更加充分和透明条件下进行项目的管理,有利于利益的协调,实现软件项目的双赢。此外,协同过程模型的建立有利于管理资源的整合,以保证风险管理的效率,项目风险管理的参与者可以在全盘的视角对项目的风险进行识别和管理,利于项目的交流,利于资源的整合和风险的管理。
|