与客户相关的风险因素有:(1)对产品缺少清晰的认识,(2)对产品需求缺少认同,(3)在做需求中客户参与不够,(4)没有优先需求,(5)由于不确定的需要导致新的市场,(6)不断变化需求,(7)缺少有效的需求变化管理过程,(8)对需求的变化缺少相关分析等。
3、 相关性风险
许多风险都是因为项目的外部环境或因素的相关性产生的。经常我们在控制外部的相关性上做的不够,因此缓解策略应该包括可能性计划,以便从第二资源或协同工作资源中取得必要的组成部分,并且觉察潜在的问题。与外部环境相关的因素有:(1)客户供应条目或信息,(2)交互成员或交互团体依赖性,(3)内部或外部转包商的关系,(4)经验丰富人员的可得性,(5)项目的复用性。
4、 技术风险
软件技术的飞速发展和经验丰富员工的缺乏,意味着项目团队可能会因为技巧的原因影响项目的成功。在早期,识别风险从而采取合适的预防措施是解决风险领域问题的关键,比如:培训、聘请顾问以及为项目团队招聘合适的人才等。主要有下面这些风险因素:(1)缺乏培训,(2)对方法、工具和技术理解的不够,(3)应用领域的经验不足,(4)新的技术和开发方法应用等。
5、 管理风险
尽管管理问题制约了很多项目的成功,但是不要因为风险管理计划中没有包括所有管理活动而感到惊奇。在大部分项目里,项目经理经常是写项目风险管理计划的人,他们有先天性的不足——自己检查自己的错误,这是最难的。然而,像这些问题可能会使项目的成功变得更加困难。如果不正视这些棘手的问题,它们就很有可能在项目进行的某个阶段影响项目本身。当我们定义了项目追踪过程并且明晰项目角色和责任,就能处理这些风险因素:(1)计划和任务定义不够充分,(2)实际项目状态,(3)项目所有者和决策者分不清,(4)不切实际的承诺,(5)员工之间的沟通等。
6、 安全风险
软件产品本身是属于创造性的产品,产品本身的核心技术保密非常重要。但一直以来,我们在软件这方面的安全意识比较淡薄,对软件产品的开发主要注重技术本身,而忽略了专利的保护。软件行业的技术人员流动是很普遍的现象,随着技术人员的流失、变更,很能会导致产品和新技术的泄密,致使我们的软件产品被它公司窃取,导致项目失败。而且在软件方面关于知识产权的认定目前还没有明确的一个行业规范,这也是我们软件项目潜在的风险。
三、 风险的分析、管理与控制
1、风险分析
以上所说的各类风险都是项目成败的巨大隐患,它们对软件开发项目的成败有多大影响,我们可以利用风险分析工具,对以上各类风险进行分析,并加以控制和管理,将风险将到最低。常用方法有风险条目检查表,它是利用一组提问来帮助项目风险管理者了解在项目和技术方面有哪些风险。在风险条目检查表中,列出了所有可能的与每一个风险因素有关的提问,使得风险管理者集中来识别常见的、已知的和可预测的风险,如产品规模风险、依赖性风险、需求风险、管理风险及技术风险等。 风险条目检查表可以不同的方式组织,通过假设分析、成本效益分析、风险剖面分析、判定树等,给出这些提问确定的回答,就可以帮助
项目管理人员估算风险的影响。
另外,我们可以依据风险条目检查表,制作风险控制概图(见图1),让项目管理和实施人员能很直观的看到在项目开发个阶段的风险存在状况和各风险的大小,并采取相应措施。从风险发生的概率来看,需求风险和管理风险对项目成败影响最大,当一个软件项目开发团队接手项目后,都是按照习惯性的方式来开发软件。需求风险意识比较淡薄,软件需求分析阶段的完成的不够细致,忽略和很多软件开发必要的内容。在整个软件开发过程中需求分析阶段的风险控制尤为重要,如果控制不好,对软件开发项目影响巨大,甚至是失败。管理风险实际上是项目开发管理层,对项目开发的风险的意识反映。国内的软件企业大多规模较小,企业年轻,开发经验不足,软件工程师较年轻,缺少开大型软件项目的经验,在管理方面缺少经验,特别是风险管理,更是缺乏。
2、风险管理
风险管理应是贯穿软件项目开发始末的一项重要任务,其中包括风险识别、风险评估、风险计划、风险解决和风险监控。它能让风险管理者主动“规避”风险,进行有效的风险管理。风险管理模型有:SEI风险管理模型、Riskit风险管理模型、SoftRisk风险管理模型、IEEE风险管理过程模型、CMMI风险管理模型、MSF风险管理模型等。在项目管理中,建立风险管理策略,在项目的生命周期中不断控制风险是非常重要的,风险管理主要包括五个阶段:
(1)风险识别:识别风险的方法常用的有现场观察法、座谈法、流程图法、财务报表法、相关部门配合法和环境分析法等。
(2) 风险评估:对已识别的风险要进行估计和评价,风险估计的主要任务是确定风险发生的概率与后果,风险评价则是确定该风险的经济意义及处理的费/效分析,常用的方法有:概率分布、外推法、多目标分析法等。
(3) 计划进度:按照评估后的风险结果,制定相应的风险管理进度表,为后续的风险管理提供参考。
(4) 风险处理:一般而言,风险处理有三种方法,① 风险控制法,即主动采取措施避免风险,消灭风险,中和风险或采用紧急方案降低风险。② 风险自留,当风险量不大时可以余留风险。③ 风险转移。
(5) 风险监控:包括对风险发生的监督和对风险管理的监督,前者是对已识别的风险源进行监视和控制,后者是在项目实施过程中监督人们认真执行风险管理的组织和技术措施。
3、风险控制
(1)建立有效的风险控制的组织机构
①设置风险管理岗位:在软件开发项目管理过程中设置风险管理岗位,该岗位的主要职责是在制订与评估规划时,从风险管理的角度对项目规划或计划进行审核并发表意见,不断寻找可能出现的任何意外情况,试着指出各个风险的管理策略及常用的管理方法,以随时处理出现的风险,风险管理者最好是由项目主管以外的人担任。风险管理岗位的人数依据项目大小来决定,一般2—3人较为适合。
②双项目经理:为项目开发项目设定两个项目经理岗位,一个负责技术岗位,另一个负责管理岗位。目前,国内的软件开发企业的项目经理一般都是一名,而且是技术出生的占绝对多数,他们主要擅长的是技术研发,在管理方面先天不足,这不利于项目风险管理和控制。通过增加专门的管理经理岗位,可以弥补技术出生的项目经理的不足,提升软件开发项目的管理水平。而且这样的经验也已得到了国外业界大多企业的认可。
(2) 建立有效的风险控制管理过程
风险管理过程包括培训,风险识别、风险分析、风险计划、执行计划、跟踪计划等活动,有效的风险管理过程应是学习型的、持续的和不断改进的。软件企业应建立自己的风险管理数据库作为风险管理的基础,并在实施中不断地更新和完善。
根据企业和项目的实际情况,进行科学的项目风险和控制,对项目的成功研发有着举足轻重的意义。在项目开发的过程中,进行必要的项目风险分析,制定符合项目特点的风险评估和监督机制,特别是要定期对项目的风险状况进行评估和监管,发现意外风险或者是风险超出预期的一定要重点关照。发现问题要立即上报,尽快解决。并建立风险监管日志,实行“岗位负责制”,将软件开发项目的风险降到最低。