软件项目风险管理方法在上世纪60年代,西方世界的软件危机使人们开始清醒得认识到软件开发过程的高复杂性,许多学者致力于通过软件标准化,并提出一系列软件过程模型,将系统的、可量化的、规范化的方法应用到软件开发中,以减少软件开发的无序状态,降低软件风险,提高软件质量。其中,Boehm在1989年提出的螺旋模型,便是一个可降低软件风险的模型,该模型强调在软件项目的每个阶段都要考虑风险因素,随后,他在1991年发表的《软件风险管理:理论与实践》一文中,将软件风险管理程序进一步划分为两个阶段,即风险评价和风险控制,每个阶段都又具体细化为三个步骤,进一步完善了软件风险管理理论。此后,软件风险管理的研究进入了一个百家齐放的时期,国外许多学者都从不同角度对软件风险管理进行了探索,如其中Charette就构造了一个六阶段的风险管理方法,将软件项目风险分为风险分析和风险管理两部分,其中,风险分析包括风险识别、风险估计、风险评价,风险管理包括风险计划、风险控制、风险监控。他强调风险管理的战略思想和技术手段,以及循环的风险管理。总的来说,软件项目风险管理作为一个过程,是软件项目管理的重要组成部分。在软件项目生命周期中持续不断地识别、评估和控制风险是非常重要的。(一)风险识别。它是风险管理的第一步,是对软件项目所面临的和潜在的风险加以分析、判断和归类的过程。一般软件项目在实施过程中存在的风险是多种多样,既包括项目外部的和内部的风险,还包括技术的和非技术的风险。这些风险存在于什么地方?发生的条件是什么?发生的可能性有多大?发生后的损失又是如何?这些在风险识别中均应有初步的分析和判断。(二)风险评价。它是在软件项目风险识别和风险分析的基础上,对风险发生的概率、损失程度和其他因素进行综合考虑,得到描述风险的综合指标。风险评价通过?用定性风险评估方法(包括主观分析法、故障树分析法等)和定量风险评估方法(包括层次分析法、模糊综合评价等),对风险进行评估,得到风险的严重等级,进而为后续风险控制提供依据。(三)风险控制。它是在软件项目风险发生时实施风险管理计划中的预防措施。风险控制措施一般包括两类:一类是在风险发生前,针对风险因素采取控制措施,以消除或减轻风险,其具体措施包括:规避、缓解、分散、抑制和利用等;另一类是在风险发生后,通过财务安排来减轻风险对项目目标影响的程度,其具体措施有:自留、转移等,这里更强调的是前者。一、软件项目风险识别对于软件项目风险的识别,研究者从各自的角度挖掘了许多风险因素,但依据只有一个,那就是威胁软件开发项目成功的各种不确定因素。传统的项目风险识别方法有很多,常见的有:头脑风暴法、德尔菲法、情景分析法、故障树分析法、检?吮矸ā⒘鞒掏挤ā?SWOT分析法和敏感性分析法等。对于软件项目风险管理中的风险识别研究,从已有的研究成果来看,大致有以下几种方法:(一)风险清单法Boehm认为,采用风险清单法可以帮助识别大多数严重的风险因素,他通过对美国几个大型航空和国防系统软件项目进行深入调查,发现软件开发项目中最常见的前十大特定风险项是:人员短缺、不合理的进度安排和预算、不断的需求变动、开发了错误的软件功能、开发了错误的用户界面、过多的不必要的性能要求、缺乏特别的外购组件、完成?A任务不及时、实施时性能过低和计算机能力有限。此后,Boehm进一步对一些经验丰富的软件项目管理人员进行了调查,并对这种方法进行了扩展,提出在软件项目开发生命期的每个里程碑阶段都可进行风险清单的调查和修改,并将风险管理加入到软件开发项目生命周期的螺旋式模型中。(二)基于分类的风险识别法该方法主要是从项目分类学角度,将项目的风险进行分类,从单纯的清单列表走向了由分类树和问卷识别过程的统一,从而使软件项目风险识别具有了结构性的特点。另外,它也秉承动态管理的特点,从前一时期的一次性静态描述走向了阶段性重复更新,使风险识别及后续处理有计划、有步骤地在项目生命周期内进行。有人按项目风险来源将风险分为:产生于开发环境内,即开发者缺乏分析这一系统环境类型的经验;产生于系统环境内,即用户没有使用开发中的软件系统类型的经验;产生于管理环境内,即由于管理者的偏见、偷懒、无知或不作为以致忽略了有价值的信息。自这一时期以来,“基于分类的风险识别”思想占据了主流,并使软件项目风险管理的各项研究都达到了一个新的高潮。(三)问卷调查表法该方法是一种与管理人员交互的方法,主要由专家根据项目特点设计风险管理问卷调查表,对有关人员进行问卷调?耍?并根据调查结果对统计数据,进行分析。如Carr在问卷调查基础上提出了一种所谓的“簇分析(Clusteranalysis)”方法,对507个软件项目管理人员进行了问卷调查,通过统计分析工具,识别出软件项目的风险因素;Wallace等在此基础上进一步扩展,提出了一种软件风险和性能的层次模型,并对调查结果作了统计分析。国内学者也开始尝试采用问卷调查法和统计分析法,对项目风险进行识别,如刘书庆就采用这种方法对虚拟企业项目合作设计风险进行识别。但学者们很少有采用这种方法对软件项目风险进行分析的,大多相关研究仍停留在基于风险清单法和基于分类的风险识别法等定性分析方法上。二、软件项目风险评估风险评估是软件项目风险管理的研究焦点,也是企业进行风险防范的重要前提,风险评价是风险管理的关键环节,其结果是为项目的高层人员和项目经理等提供决策依据。由于企业风险的特征及指标类型并不相同,风险评估方法也呈现出多样性的特点。(一)基于经验和历史数据以Pressman为代表的学者,认为不依赖于项目开发过程,而是基于与发者或客户方讨论风险,然后采用简单易用的配套工具,对软件项目风险进行评估。而Yacoub等认为,项目风险评估不仅依赖于专家经验,更应充分考虑项目的属性,这就需要尽可能得?用项目度量体系来获取量化数据,同时掌握好风险评估的时机,通过借用UML规格说明工具,融合了可靠性分析中失败模式和有效性分析方法设计出了风险评估模型和一个风险分析算法。