风险是遭受损失的一种可能性,发生在20 世纪70 年代初期的软件危机彻底让人们认识到软件开发过程中存在的风险。1989 年Boehm 首次提出了软件开发过程中风险管理这一概念,如今随着计算机技术的发展,软件的复杂度越来越高,而且针对具体行业的项目日益增多,对软件项目系统化、规范化管理的需求越来越迫切。
风险管理是项目管理中不可缺少的一部分,而软件项目的风险管理更是软件项目管理中的重要内容。大量的统计表明,实行有效的风险管理是软件项目开发过程中减少损失的一种重要手段。风险管理不仅仅存在于项目可行性研究阶段,是贯穿在软件项目开发周期的全过程中。
风险管理是指辨识、分析和控制风险的活动,这组活动不是孤立的,而是一组系统化、持续化的过程。根据美国项目管理学会的报告,风险管理有三个定义: (1)风险管理是系统识别和评估风险因素的形式化过程。(2)风险管理是识别和控制能够引起不希望变化的潜在领域和事件的形式、系统的方法。风险管理是在项目期间识别、分析风险因素,采取必要对策的决策科学与艺术的结合。软件项目风险管理出现在上世纪80 年代末,到现在只有三十多年的历程,在软件项目风险管理领域中,人们多是借鉴于工程项目的管理方法来解决软件项目开发中出现的风险问题,并且对于软件项目的风险管理概念的理解是来自于其他工程项目的风险管理,并在其基础上有所讨论和改进。
因此,软件项目风险管理是指项目管理团队通过风险识别、风险量化和风险控制,采用多种管理方法、技术和工具,对软件项目所涉及的各种风险实施有效的控制和管理,采取主动行动,尽量使风险事件的有利后果(带来的机会)最大,而使风险事件所带来的不利后果(威胁)降到最低,以最少的成本保证项目安全、可靠的实施,从而实现项目的总目标。
软件项目风险管理过程一般包括风险识别、风险分析、风险应对三个过程元素。
Boehm 将软件项目风险管理过程分为两个基本步骤:风险评估和风险控制。其中第一步风险评估包括风险识别、风险分析和风险优先级;就是说首先提出一个风险列表,评估列表中各项风险出现的概率和影响,从而判定风险的级别即风险考虑的优先顺序,这个风险列表是风险控制的基础;当风险因素的优先级判定出来后,第二步就是风险控制,包括风险管理计划、风险化解和风险监控。这一步中,首先要制定一个应对每项重大风险的方案,并按照方案实际执行化解风险的活动,并在过程中进行监控。
项目风险识别是确定何种风险事件可能会影响项目,并将这些风险的特性整理成文档。而软件项目的风险由于软件项目的复杂性、特殊性,可以归纳为以下三个主要方面:
(1)需求风险,就是需求不确定的风险,软件产品是非直观的,是一种一次性独一无二的努力,具有不可重复性,包含了许多不确定性的因素。比如软件系统使用者对于系统将要现的目标即具体需求不能准确地描述。此外,软件项目开发链长,用户的需求不断地在变化。
(2)技术风险,软件开发过程中很多做法没有现成的行业规范和标准,而且软件技术发展飞速,各种新技术层出不穷,潜在的设计、实现、维护等方面的问题,会威胁到软件产品的质量和交互时间。
(3)管理风险,软件项目对协调性的管理工作要求更高,管理和控制更困难更复杂,使得管理者任务承担者很难达成双方一致的目标。项目内部人员沟通不充分,导致开发人员不能彻底了解用户对系统的具体需求,对系统设计的理解存在偏差。
Boehm 博士开发了一套风险分析模式,其中核心是前10 位的风险识别列表,它有助于识别高优先级的对需求、技术和管理方面有影响的风险项目,该