软件项目中的风险管理
一、从风险识别的输入和以往项目经验来看,我们大致可以将软件项目经常碰到的风险划分为以下大类(后期可不断进行补充完善):
1、项目规模风险:
1)产品规模(代码行数、功能点、与前一产品规模的百分比)比估计的要大;
2)客户要求完成目标日期提前,但没有相应地调整产品范围或可用资源不足;
3)涉足不熟悉的产品领域,花费在设计和实现上的时间比预期的要多;
预防方法:
1)分阶段交付产品,增加项目监控的频度和力度,多运用可行性的质量保证工具和技术;
2)周期性汇报项目工作成果,采用符合项目质量要求的项目流程,安排严格的测试工作,积极配合组织对可交付成果的检查和评审。
2、需求和产品风险:
1)需求已经成为项目基准,但需求还在继续变化;随着项目的进行,额外的需求不端添加;
2)需求阶段客户参与度不够;需求定义欠佳,而进一步的定义会扩展项目范畴;缺少有效的需求变更管理过程;
3)产品定义含混的部分比预期需要更多的时间,开发额外的不需要的功能(镀金),延长了计划进度;
4)严格要求与现有系统兼容,需要进行比预期更多的测试、设计和实现工作;
5)要求与其他系统或不受本项目组控制的系统相连,导致无法预料的设计、实现和测试工作;
预防方法:项目初期与客户书面约定好需求变更控制流程,记录并归档用户的需求变更申请;
3、外部因素风险:
1)基础设施未及时到位;基础设施虽到位,但不配套,如没有电话、网线、办公用品等;基础设施拥挤、杂乱或者破损;
2)客户提供的组件质量欠佳,导致额外的测试、设计和集成工作,以及额外的客户关系管理工作;
3)分包商所承担子项目或工作度进度滞后和质量堪忧,影响总体项目目标;
预防方法:项目分包后指定专人全程监控分包商项目活动,周期性的检查和审计分包商的项目成果等;
4、内部管理风险:
1)项目计划、资源和产品定义全凭客户或上层领导口头指令,并且不完全一致;
2)项目计划是优化的,是“最佳状态”,但计划不现实,只能算是“期望状态”,比如:项目计划基于使用特定的小组成员,而那个特定的小组成员已被其他项目占用;
3)由管理层或市场人员进行技术决策,导致计划进度缓慢,计划时间延长;
4)低效的项目组结构降低生产率,比如:管理层审查决策的周期比预期时间长;
5)由于公司或市场原因,项目预算被削减,项目计划被打乱;
6)项目管理缺乏必要的规范,导致工作失误与重复工作;
7)非技术的第三方的工作(预算批准、设备采购批准、法律方面的审查、安全保证等)时间比预期延长;
8)项目管理过程中缺乏激励措施,士气低下,降低了生产能力;
9)某些人员需要更多的时间适应还不熟悉的软件工具和环境,或是项目期间加入新的开发人员,需进行培训并逐渐与现有成员沟通,从而使现有成员的工作效率降低;
10)由于项目组成员之间发生冲突,导致沟通不畅、设计欠佳、接口出现错误和额外的重复工作;
11)不适应项目工作的团队成员没有调离项目组,影响了项目组其他成员的积极性;或是重要岗位的团队人员离开,导致其他团队成员分摊任务而效率低下;
预防方法:
1)主动争取领导对项目的重视,确保和领导的沟通渠道畅通,经常向领导汇报工作进展;
2)项目在建设之初就需要将项目目标、工作任务等和项目成员沟通清楚,采用公平、公正、公开的绩效考评制度,倡导团结互助的工作风尚等。
3)将项目的核心任务有效的分摊给多人,加强同类型人才的培养和储备;
5、技术风险:
1)开发一种全新的模块将比预期花费更长的时间;依赖正在开发中的技术将延长计划进度;
2)在不熟悉或未经检验的软件和硬件环境中运行所产生的未预料到的问题;
3)过高估计了增强型工具对计划进度的节省量;分别开发的模块无法有效集成,需要重新设计或制作;
4)攻克技术难题耽误较长的项目进度计划;
预防方法:项目前期选用适合项目且必须的技术、在技术应用之前,针对相关人员开展好技术培训工作;
二、通过整理软件项目可能碰到的风险,我们可以分析得到这些风险产生的原因有:
1、产品定位(包括市场定位)——与要建造或要修改的软件的总体规划相关的风险;
2、商业影响——与管理或市场所施加的约束相关的风险;
3、客户特性——与客户的素质以及开发者和客户定期通信的能力相关的风险;
4、开发体系——与软件过程被定义的程度以及他们被开发组织所遵守的程度相关的
风险;
5、开发环境——与用以建造产品的工具的可用性及质量相关的风险;
6、开发技术——与待开发软件的复杂性以及系统所包含技术的“新奇性”相关的风险;
7、团队状况——与参与工作的开发人员的总体素质及项目经验相关的风险;
三、识别与分析风险对项目最大裨益:
1、可以加深对项目风险的认识与理解,澄清各方面的利弊,了解风险对项目的影响,从而减少风险的发生;
2、获得相关信息、数据和资料,明确项目相关的前提和假设;
3、提高各种计划的可信度,改善项目组的内部和外部沟通;
4、为制定应急计划提供依据;编制应急计划更有针对性;
5、将风险结果的各种处理方式更灵活的组合起来,在项目管理中减少被动局面;
6、充分利用机会,把握机会;
7、为日后工作提供反馈,防止和避免风险损失;
8、为决策提供依据,减少风险,保证项目目标的实现;
9、可积累有关风险资料和数据,以便改进将来的项目管理;