说到风险,很多人都模模糊糊有一些了解,然而在软件项目中,有风险意识的却不多。比如说:
- 估算一个模块工作量,程序员总是会给出一个乐观的进度,而最终实现这个模块的时候,却发现总是有些其他的事情发生影响了进度;
- 一个关键的程序员,突然离职了,导致项目进度停滞。其实早前就有一些迹象,而项目经理没引起重视;
- 技术负责人很激进的采用了一个最近很流行的新技术,结果做的过程中,发现这个技术还不太成熟,很多坑没法填,导致项目最终失败;
- 服务器突然挂了,才发现硬盘坏了而数据没有备份,造成巨大的损失。
这些问题其实都和风险相关,如果没有及时发现这些潜在的风险,没有应对方案,轻则导致项目进度延迟,重则导致项目失败,造成重大损失。
在软件工程里面,针对这些可能造成风险的问题,对风险进行提前识别和管理,就可以有效地应对。
什么是风险管理?
风险是指不确定的事件,一旦发生,将会造成消极的影响。风险包含两个方面的内容:
- 发生后,会造成什么样的损失?
- 发生的概率有多大?
所以也有人认为:风险 = 损失 x 发生概率。
比如说,有一次我负责一个小项目,激进的采用了刚开始流行的 React 框架,如果使用熟悉的 Angularjs 框架,正常来说一个月就能完成,当时很乐观的觉得 React 和 Angularjs 也差不多,时间应该不会多出来太多,就按照一个月时间来做项目计划。
最后到实际开发的时候,发现 React 和 Angularjs 有很多不一样的地方,必须要现学现用,原本计划一个月完成的,最后加班加点拖到一个半月时间才完成。
在这个项目中,使用了新技术就是一个风险:
- 造成的损失就是导致了进度延误;
- 发生延误的概率,如果项目开始前估算,大概在 60% 左右,项目进行中这个概率就上升到 80% 了。
像软件项目中这样的风险,如果发生后就会变成问题,问题如果没有及时解决,就会影响到项目计划。如果我们能有效的对风险加以识别,加以管理,就能减少对项目的负面影响。
风险管理就是指在项目进行过程中,识别可能的风险,对风险进行评估,并加以监控,从而减少风险对项目的负面影响。