浅析软件项目管理中的风险管理张尧摘要:在项目的建设过程中,风险几乎无处不在。
如何有效地分析、控制和管理风险,对项目的成功起着至关重要的影响。
本文通过对当前软件项目的风险状况进行分析,列举软件开发项目的风险来源,并进行分析,最后给出如何合理管理软件项目风险的建议。
关键词:风险管理;Boehm模型;CMU/SEI模型0.引言软件行业是二十一世纪发展较快的行业,同时基于软件项目具有连续性、复杂性、少参照性和无标准规范等特点,该项目的开发过程总会遇到各种各样的风险。
鉴于这种情况,我们提出软件项目的风险管理,其管理内容包括风险识别、风险量化、风险对策和风险控制等,当然,还有一系列的管理模型,比如:Boehm 模型、 CMU/SEI模型。
做这些,目的只有一个,那就是:使软件项目的潜在机会或回报最大化,使其潜在风险最小化。
1.风险管理概述每一个项目的完成,都是克服各种困难的结果,困难来于人、财、物。
仔细观察不难发现,整个困难过程狭义的说就是各种风险的集合,风险无处不在,我们所要做和能做的便是采取一定的方式方法对风险进行管理,使事件能顺利朝我们的目标发展。
软件中的项目风险管理是指为了最好的达到项目的目标,识别、分配、应对项目生命周期内风险的科学与艺术1.1. 风险的来源风险来于国家制度。
一切工作都在按计划顺利的进行着,突然国家实施宏观调控,物价上涨,工人要求加工资,或者国家发布声明,这款软件不能研发,我们的软件项目要么不能按时完成,要么直接得从做,风险由此产生。
风险来于项目实施过程。
软件项目具有一般项目的特点,那就是需要人力、物力的投入,还有就是自然环境的参与。
整个过程,每一环境产生与目标相悖的行为,这对项目都会产生不可预知的挫折,风险由此产生。
风险来于我们的用户,工程都是按计划顺利完成的,可到和最终用户交接的时候,用户临时提出修改意见,顾客是上帝,在这个竞争尤为激励的年代,我们只能选择满足用户,风险由此产生。
1.2. 风险的分类常言到,眉毛胡子一把抓,只能是费力不讨好的事情,做每一样事情,我们都该分门别类的进行处理,在对软件项目的风险管理过程中也不例外,我们首先需要对软件项目的风险进行分类。
产品规模风险。
项目的风险是与产品的规模成正比的。
与软件规模相关的常见风险因素有:(1)估算产品规模的方法(包括:代码行,文件数,功能点等),(2)产品规模估算的信任度,(3)产品规模与以前产品规模平均值的偏差,(4)产品的用户数,(5)复用的软件有多少,(6)产品的需求变更多少等。
一般规律,产品规模越大,以上的问题就越突出,尤其是估算产品规模的方法,复用软件的多少,需求变化。
需求风险。
很多项目在确定需求时都面临着一些不确定性。
当在项目早期容忍了这些不确定性,并且在项目进展过程当中得不到解决,这些问题就会对项目的成功造成很大威胁。
如果不控制与需求相关的风险因素,那么就很有可能产生错误的产品或者拙劣地建造预期的产品。
每一种情况对产品来讲都可能致命的。
与客户相关的风险因素有:(1)对产品缺少清晰的认识,(2)对产品需求缺少认同,(3)在做需求中客户参与不够,(4)没有优先需求,(5)由于不确定的需要导致新的市场,(6)不断变化需求,(7)缺少有效的需求变化管理过程,(8)对需求的变化缺少相关分析等。
相关性风险。
许多风险都是因为项目的外部环境或因素的相关性产生的。
经常我们在控制外部的相关性上做的不够,因此缓解策略应该包括可能性计划,以便从第二资源或协同工作资源中取得必要的组成部分,并且觉察潜在的问题。
与外部环境相关的因素有:(1)客户供应条目或信息,(2)交互成员或交互团体依赖性,(3)内部或外部转包商的关系,(4)经验丰富人员的可得性,(5)项目的复用性。
技术风险。
软件技术的飞速发展和经验丰富员工的缺乏,意味着项目团队可能会因为技巧的原因影响项目的成功。
在早期,识别风险从而采取合适的预防措施是解决风险领域问题的关键,比如:培训、聘请顾问以及为项目团队招聘合适的人才等。
主要有下面这些风险因素:(1)缺乏培训,(2)对方法、工具和技术理解的不够,(3)应用领域的经验不足,(4)新的技术和开发方法应用等。
管理风险。
尽管管理问题制约了很多项目的成功,但是不要因为风险管理计划中没有包括所有管理活动而感到惊奇。
在大部分项目里,项目经理经常是写项目风险管理计划的人,他们有先天性的不足——自己检查自己的错误,这是最难的。
然而,像这些问题可能会使项目的成功变得更加困难。
如果不正视这些棘手的问题,它们就很有可能在项目进行的某个阶段影响项目本身。
当我们定义了项目追踪过程并且明晰项目角色和责任,就能处理这些风险因素:(1)计划和任务定义不够充分,(2)实际项目状态,(3)项目所有者和决策者分不清,(4)不切实际的承诺,(5)员工之间的沟通等。
安全风险。
软件产品本身是属于创造性的产品,产品本身的核心技术保密非常重要。
但一直以来,我们在软件这方面的安全意识比较淡薄,对软件产品的开发主要注重技术本身,而忽略了专利的保护。
软件行业的技术人员流动是很普遍的现象,随着技术人员的流失、变更,很能会导致产品和新技术的泄密,致使我们的软件产品被它公司窃取,导致项目失败。
而且在软件方面关于知识产权的认定目前还没有明确的一个行业规范,这也是我们软件项目潜在的风险。
2.风险管理的现状软件产业是 21 世纪拥有最大产业规模和最具前景的新兴产业之一,也是创业门槛较低的一个行业。
在实际的工作中,软件项目经常会出现各种各样的问题,这些问题都是软件项目的风险。
前面我们了解了软件项目中的风险管理的来源及分类这些基本情况,现在来谈谈软件项目的风险管理现状。
如何管理好项目中的风险,已经成为项目取得成功的关键因素。
在我们周围存在着很多的软件公司,这些公司以做软件项目来维持他们的生存、发展。
项目的成败对他们意味着生存还是消亡。
然而现实生活中软件开发项目的成功率却并不理想。
据美国软件工程实施现状的调查,大约只有 9%-10%的项目能够在预定的费用和进度下交付。
在商用软件产业中,这一现象尤为严重。
究其原因,大体有以下几点:1)缺乏真正的风险管理,整个项目工程没有风险管理计划,基本都是遇到风险情况了再做处理。
2)项目管理者缺乏必要的风险管理意识,或者想对项目进行风险管理,但感觉很难操作。
市面上虽然有很多书籍在介绍软件项目的风险管理,但它们大多数讲述的是怎样使用专业的管理工具来管理软件项目中所发生的尽可能多的风险,这样的风险管理对于这类公司来说,既消耗了大量的人力物力,实用性、可操作性却不强。
3)没有严格执行风险管理方案,现实工作中,很多项目进行后期,针对项目的风险管理往往容易疏忽,或者说没有使用风险监督,这样也容易导致风险管理人浮于事。
3.风险管理的内容和几种管理模型一个软件项目的成败,其风险的管理至关重要,这不用多说,然如何进行有效的管理,首要工作我觉得应是明白软件项目的风险管理的内容,其次就是掌握几种管理模型,然后具体实施风险管理。
3.1. 风险管理的内容项目风险管理是指对项目风险从认识到分析直至采取应对措施等的一系列过程,包括风险识别、风险量化、风险对策和风险控制等,如下图所示,从而将积极因素所产生的影响最大化并使消极因素产生的影响最小化,或者说达到消除风险、回避风险和缓解风险的目的。
对项目进行风险管理,就可以最大限度的减少风险的发生。
图1 项目风险管理的基本内容(1)风险识别:风险识别要确定影响本项目的风险来源、风险产生的条件,并描述其风险特征。
风险识别不是一次就可以完成的事,应该在项目的整个生命周期内持续进行。
识别风险的方法常用的有现场观察法、座谈法、流程图法、财务报表法、相关部门配合法和环境分析法等。
(2)风险评估:风险评估时对风险影响力进行衡量的活动,即衡量风险发生的概率和风险发生后对项目目标的影响程度,从而为后面制定风险对策提供依据。
对已识别的风险要进行估计和评价,风险估计的主要任务是确定风险发生的概率与后果,风险评价则是确定该风险的经济意义及处理的费/效分析,常用的方法有:概率分布、外推法、多目标分析法等。
(3)风险计划:风险计划是根据风险评估的结果,为降低项目的负面效应而制定方法、措施和技术手段的过程。
风险计划将指导项目如何做好风险管理,包括风险处理的优先级、如何避免风险、如何消除风险等。
(4)风险应对:风险应对就是风险计划的实施,以设法避免、消除和降低风险,包括风险预防,风险发生的监视和控制。
在整个项目管理过程中,首先要预防风险的发生,在风险发生之前就将它消灭在萌芽状态之中。
其次,一旦风险发生,就要设法最大限度地缓解风险,降低风险所带来的后果。
一般而言,风险应对有三种方法,①风险控制法,即主动采取措施避免风险,消灭风险,中和风险或采用紧急方案降低风险。
②风险自留,当风险量不大时可以余留风险。
③风险转移。
3.2.几种风险管理的模型如今这个数字时代,什么都讲究建模,也是,通过模型的参考,我们的很多问题都能迎刃而解,在软件项目的风险管理过程中,也有几种很好的模型可以供我们参考。
3.2.1. Boehm模型Boehm认为,软件风险管理是将影响项目成功的风险形式化为一组易用的原则和实践的结合,在风险成为软件项目返工的主要因素并由此威胁到项目的成功运作前,识别、描述并消除这些风险项。
Boehm的风险管理模型Boehm的风险管理模型,从制定技术与管理流程开始,然后完成风险计划、管理项目风险特征库、风险分析,风险处理和风险控制,最后评估风险管理流程,以不断完善风险管理流程。
3.2.2. CMU/SEI模型CMU/SEI模型要求在项目生命周期的所有阶段都关注风险识别和管理,将风险管理划分为5个部分——风险识别、分析、计划、跟踪和控制,并强调风险管理的各个组成部分的沟通,将沟通视为风险管理的核心,不断地评估可能造成恶劣后果的因素,决定最迫切需要处理的风险,实现控制风险的策略,评测并确保风险策略实施的有效性。
CMMI风险管理模型3.2.3. MSF风险管理模型MSF强调风险管理必须是主动的、规范的,是不可缺少的管理过程,应持续评估、监控和管理风险,直到风险被处理或消除。
MSF风险管理模型,强调风险知识库、掌握风险列表和学习。
如下图所示:MSF风险管理模型4.风险管理的控制软件项目的风险管理,具有一般管理的特点,那就是计划、组织、领导和控制,其中,风险管理的控制在整个风险管理的工程中,地位尤其重要。
如何实现良好的风险控制,通过查阅资料我了解到,有以下一些步骤的实施可以参考。
(1)与现在在职的项目成员协商,确定人员流动的原因(如,工作条件差,收入低,市场竞争等);(2)在项目开始前,把缓解这些原因(避开风险)的工作列入已拟定的控制计划中;(3)当项目启动时,做好人员流动会出现的准备,采取一些办法以确保人员一旦离开时项目仍能继续(削弱风险);(4)建立项目组,以使所有项目成员能及时了解有关项目活动的信息;(5)制定文档标准,并建立一种机制以保证文档能及时产生;(6)对所有工作组织细致的评审,以使更多的人能够按计划进度完成自己的工作;(7)对每一个关键性的技术人员,要培养后备人员;(8)在项目里程碑处进行事件跟踪和主要风险因素跟踪,以进行风险的再评估;(9)在项目开发过程中保持对风险因素相关信息的收集工作。