原作者:李艺兰

软件开发项目的风险管理

众所周知,软件开发过程可分为:需求分析、设计、编码、测试、安装及维护等几个过程(在RUP方法中:业务建模、需求、分析设计、实施、测试、部署),实际上一个完整的软件项目前后还有其它过程,在这里列出的只是和软件开发相关的核心过程。

软件项目的生命周期可以分为四个阶段(不同行业的项目生命周期不同),即初始阶段、设计阶段、实施阶段、收尾阶段。软件开发过程在软件项目的这四个阶段中的分布情况如下(括弧里面表示RUP方法中的过程):
初始阶段:大部分需求分析,少部分设计(大部分业务建模和需求,少部分分析设计)
设计阶段:大部分设计,少部分编码(大部分分析设计,部分实施及测试,开始考虑部署)
实施阶段:大部分编码和测试,少部分设计(大部分实施及测试,部分部署)
收尾阶段:安装及维护(大部分部署)

而项目管理则贯穿在整个生命周期的每个阶段。

根据PMBOK,项目管理可以从范围管理、时间管理、费用管理、质量管理、人力资源管理、沟通管理、风险管理、采购管理和整体管理等9个方面考虑,对于软件项目管理来讲软件配置管理(属于整体管理)、软件质量管理、软件风险管理及开发人员管理(属于人力资源管理)等四个方面的管理尤为重要,软件开发的每个阶段、每个过程都要重视这几方面的管理。
下面就以软件项目的风险管理为主题展开讨论。

软件项目管理的四个阶段中,在初始阶段项目成功的可能性最小,风险发生的概率也就最高,但是这时候一旦预计的风险发生了,损失是最小的,比如:在这个阶段如果某种原因突然资金来源断了(这在需求阶段是很有可能的),以至于不能继续进行项目,不得不终止项目,那么这时候的损失只是需求分析阶段的投入。随着项目的进展项目成功的可能性变大,风险发生的概率逐渐变小,风险对项目的损失逐渐变大,快到收尾阶段的时候风险对项目的损失最大,随着收尾阶段的进行风险又逐渐变小。

风险管理是对项目风险进行识别、分析和应对的过程。我们先看看项目风险可以怎么分类,然后再对风险管理的这三个过程逐一进行讨论。

1.风险的分类

按内容分
范围风险:与范围变更有关的风险
质量风险:没有按照要求的技术性能和质量水平完成任务
进度风险:没有在预算的时间范围内完成任务
成本风险:没有在预算的成本范围内完成任务
技术风险:技术变化
法律风险:许可权、专利、合同失效、诉讼、不可抗力
外部可预测风险:市场风险(原材料可利用性、需求)、日常运作(维修需求)、环境影响、社会影响、货币变动、通货膨胀、税收
外部可预测风险:规章(不可预测的政府干预)、自然灾害
内部非技术风险:战略风险(公司的经营战略发生了变化)、管理风险(公司管理人员是否成熟等)

按可确定性分
已知风险(Knowns):员工离职
已知-未知风险(Known-unknowns):可预知风险
未知-未知风险(Unknown-unknowns):不可预知风险

2.风险识别
风险的识别就是确定何种风险事件可能影响项目。在项目开始、每个项目阶段中间、主要范围变更批准之前都要进行风险识别,实际上它在整个项目生命周期内都是一个连续的过程。

要识别风险,首先我们应该了解在软件开发的各个阶段都有可能发生哪些风险(风险事件或风险来源)。

初始阶段
在这个阶段进行大部分需求分析、少部分设计(大部分业务建模和需求、少部分分析设计)。
可能的风险事件:
l 项目目标不清
l 项目范围不明确(范围太大太小都不可以)
l 用户参与少或和用户沟通少
l 对业务了解不够
l 对需求了解不够
l 没有进行可行性研究

设计阶段
在这个阶段进行大部分设计、少部分编码(大部分分析设计,部分实施及测试,开始考虑部署)
可能的风险事件
l 项目队伍缺乏经验,如缺乏有经验的系统分析员
l 没有变更控制计划,以至于变更没有依据,该变更的不变,不该变的也变,这样得来的设计势必会失败或者偏离用户需求
l 仓促计划,可能带来进度方面的风险
l 漏项,由于设计人员的疏忽某个功能没有考虑进去

实施阶段
在这个阶段进行大部分编码和测试,也涉及少部分设计(大部分实施及测试,部分部署),如:设计变更或补充设计。
可能的风险事件
l 开发环境没有具备好
l 设计错误带来的实施困难
l 程序员开发能力差,或程序员对开发工具不熟
l 项目范围改变(突然要增加或修改一些功能,需要重新考虑设计)
l 项目进度改变(要求提前完成任务等)
l 人员离开,在一个项目内软件开发工作有一定的连续性,需要移交和交接,有时人员离开对项目的影响会很大
l 开发团队内部沟通不够,导致程序员对系统设计的理解上有偏差
l 没有有效的备份方案
l 没有切实可行的测试计划
l 测试人员经验不足

收尾阶段
在这个阶段进行安装及维护(大部分部署)。
可能的风险事件
l 质量差
l 客户不满意
l 设备没有按时到货
l 资金不能回收

以上只是例具了常见的风险事件,对不同项目可能发生的风险事件不同,应该对具体项目识别出真正有可能发生在该项目的风险事件。而且还要对这些风险事件进行描述,如:可能性、可能后果范围、预计发生时间、发生频率等。
风险识别的有效方法有很多,如:建立风险项目检查表、因果分析图、采访各种项目干系人等。

软件项目的风险可以从以下几方面检查:
产品规模风险
业务影响风险检
与客户相关的风险
过程风险
技术风险
开发环境风险
与人员的模式和经验有关的风险

以上我们讨论了在软件项目各个阶段中可能发生的风险事件和识别方法。下面我们看看如何对这些风险事件进行分析。

3.风险分析
风险分析就是对以上识别出来的风险事件做风险影响分析。
和风险相关的有四个因素:
风险事件,破坏或影响项目的事件
风险概率(%),事件发生的可能性
风险得失量(金额),说明可能造成的损失
风险影响(金额),等于 风险概率 × 风险得失量

通过对风险及风险的相互作用的估算来评价项目可能结果的范围,从成本、进度及性能三个方面对风险进行评价,确定哪些风险事件或来源可以避免,哪些可以忽略不考虑(包括可以承受),哪些要采取应对措施。

4.风险应对
1、应对方法
项目中的风险永远不能全部消除,PMBOK提到三种应对方法:
避免
通过分析找出来发生风险事件的原因,消除这些原因来避免一些特定的风险事件发生。
比如:
如何避免客户不满意?
客户不满意有两种情况,一种情况是没有判断客户满意度的依据,即没有双方互相认可的客户验收标准,还有一种是开发方没有达到验收标准,即没有满足用户需求。不管是哪一种,开发方都有不可推卸的责任,只要做好以下环节完全可以避免:
l 业务建模阶段要让客户参与
l 需求阶段要多和客户沟通,了解客户真正的需求
l 目标系统的模型或DEMO系统要向客户演示,并得到反馈意见,如果反馈的意见和DEMO系统出入比较大时,一定要将修改后的DEMO系统在次向客户演示,直到双方都达成共识为止
l 要有双方认可的验收方案和验收标准
l 做好变更控制和配置管理

减轻
通过降低风险事件发生的概率或得失量来减轻对项目的影响。也可以采用风险转移的方法来减轻风险对项目带来的影响。项目预算中考虑应急储备金是另一种降低风险影响的方法。
比如:
经过风险识别发现,项目组的程序员对所需开发技术不熟。可以采用熟悉的技术来减轻项目在成本或进度方面的影响。也可以事先进行培训来减轻对项目的影响。

接受
接收风险造成的后果。
比如:
为了避免自然灾害造成的后果,在一个大的软件项目中考虑了异地备份中心。

2、开发应对计划
针对需要采取应对措施的风险事件,开发应对计划,一旦发生风险事件,就实施应对计划。
比如:
有一个软件集成项目中包括了设备,而且计划在部署阶段之前设备必须到位,而这些设备从厂家直接进货。经过分析发现有可能不能按时进货,那就应该考虑备选方案,比如能不能周转等。
又比如:
在一个软件开发项目中,某开发人员有可能离职,离职后会对项目造成一定的影响,则应该对这个风险事件开发应对计划,过程可以参照如下:
l 进行调研,确定流动原因
l 在项目开始前,把缓解这些流动原因的工作列入风险管理计划
l 项目开始时,做好计划一旦人员离开时便可执行,以确保人员离开后项目仍能继续进行
l 制定文档标准,并建立一种机制,保证文档及时产生
l 对所有工作进行细微详审,使更多人能够按计划进度完成自己的工作
l 对每个关键性技术人员培养后备人员

在考虑风险成本之后,决定是否采用上述策略。

转载于:https://www.cnblogs.com/GeneralXU/archive/2007/03/15/675651.html

软件开发项目的风险管理 (转)相关推荐

  1. 软件开发项目的风险管理

    月27日参加了项目管理联盟组织的'北京项目管理爱好者聚会',我被易风邀请做了一个主题演讲,其实不是什么演讲,只是结合理论谈了自己的一些想法和工作中遇到过的经验教训,更主要的目的是给大家出一个讨论和交流 ...

  2. 软件开发项目风险管理的几点体会

     参与过大型软件项目的人都会认识到许多事情都可能出错,一但出错就可能给项目带来危害.损失或其它不利影响.风险是在项目中发生的一系列事件或不利结果的可能性.软件开发是一项 高风险的活动,在项目开发过 ...

  3. 在一个软件开发项目中进行实际日程安排的十二点提示(转)

    Laura Rose , QE Manager, Rational<?XML:NAMESPACE PREFIX = O /> <?XML:NAMESPACE PREFIX = ST1 ...

  4. 软件开发项目成本控制的7个重点

    1.精细计划预算和管控机制 制定详细的项目计划和预算,包括资源需求.人力资源.时间表和财务预测等,以确保项目不会超出预算.实时跟踪项目的实际开支和进度,并对计划进行调整,以便更好地管理成本. 软件开发 ...

  5. 软件开发项目中进行实际日程安排

    转自:http://www.ibm.com/developerworks/cn/rational/rationaledge/content/sep05/rose/ 你是否有足够的能力领导一个软件开发项 ...

  6. 在一个软件开发项目中进行实际日程安排的十二点提示

    Laura Rose , QE Manager, Rational 2005 年 10 月 19 日 来自 Rational Edge:软件开发团队依赖于严谨的计划日程安排.但除了使用基本的日程安排工 ...

  7. 快速软件开发——项目修复(笔记)

    陷入麻烦的项目的一些特征 没有人对项目何时结束有一点点概念,而且绝大多数人连猜测的欲望都没了. 产品满目疮痍. 开发组人员工作超时,每周多余60多个小时--或者是在非自愿的情况下,或者是同事间引发的压 ...

  8. 软件开发项目文档模版

    这是一份软件开发项目的文档模版,编写给有需要的人. XX系统开发 开发团队: 组长: 组员: 备注:广州大学华软软件学院 目录 XX系统开发.............................. ...

  9. 承接各类软件开发项目

    承接各类软件开发项目.测试项目.培训教学 尊敬的各位来访者,您好! 首先感谢你对在下的关注,我的发展离不开各位的支持与厚爱. 本人的开发技术生涯伴随微软.NET平台发展已有近十年.所谓"知之 ...

最新文章

  1. gcc8之前,coredump文件无法显示正确的函数调用栈信息
  2. 2008台北英特尔信息技术峰会主题演讲精选-王文汉
  3. 关于Ajax 错误:'sys'未定义解决方法.
  4. python拆分excel的sheet为单文件_WPS 2019 多个sheet表拆分成独立的excel文件
  5. JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林
  6. HTML基本教程,及一些基本常用标签。
  7. MySQL+号的作用
  8. 【解题报告】2020蓝桥杯B组模拟 计蒜客 结果填空:苹果
  9. hdu 1466 计算直线的交点数 递推
  10. opa847方波放大电路_电子管放大电路当中阴极电阻的作用和选择
  11. java国际规范标准,国际化 - Java Servlet 3.1 规范
  12. css + div + js 制作HTML tab control
  13. 新站快速收录同时也提高内页的收录
  14. 通信基站能耗综合管理系统
  15. 教你如何测试U盘读写速度?
  16. ios开发 服务器通信协议,iOS开发之网络协议TCP/IP、HTTP
  17. 网站漏洞测试分析查找问题攻防演练
  18. Windows 8系统IE10无法安装Flash Player插件的解决办法
  19. OpenCV 颜色空间RGB 到HSI CMYK的转换 C++
  20. SQL_删除重复项数据

热门文章

  1. 利用OpenCV的inpaint函数实现图像的污点修复
  2. leetcode算法题--连续的子数组的和
  3. 3w最简单led灯电路图_led灯驱动电源电路图大全(六款模拟电路设计原理图详解)...
  4. 笔记本电脑怎么清理灰尘_笔记本电脑维修|笔记本电脑CPU故障
  5. 非常方便的node内置的调试方法
  6. 【ZooKeeper Notes 9】ZooKeepr日志清理
  7. 误删除Exchange默认的会议室如何恢复?
  8. 与癌症作战的 12 家 AI 公司,八仙过海各显神通
  9. Zabbix监控环境的搭建
  10. iOS开发-ViewController的生命周期和切换