作者:兰玉明 单位:丹东思凯电子发展有限责任公司
关键字:风险管理,项目管理,风险识别
摘要:《公共事业预付费管理平台》项目,作为项目经理在项目中承担了项目策划、项目控制、业务建模、需求管理、分析设计、现场实施等工作。在项目的进行过程中总会出现大大小小的问题,通过对问题的识别和解决过程。深刻认识到在项目管理中风险管理是支持项目达到目标的必要环节之一。
本文结合在该项目开发中的切身体验,通过识别风险,预判风险,规避风险及风险爆发,风险排除等几方面、浅谈风险管理在项目生命周期内的识别以及防范和应急措施。
引言:
由于每个项目都存在很多不确定因素,参与的人员越多,项目周期越长不确定因素会越多。在这些不确定因素对于项目的影响有的可能有利,有的可能有害,有的还会对项目的成败有着决定性的作用。而且对于那些有危害的风险识别的越早,影响就可能越小,防范的成本就越低。在项目管理中对于风险的管理是至关重要的,也是每个项目经理必须具备的能力之一。
正文
一、项目简介
《公共事业预付费管理平台》项目,我作为该项目的项目经理承担了项目管理、业务建模、需求、分析设计、实施等工作。项目伊始我们对《公共事业预付费管理平台》企业软件项目进行具体分析。该系统为中等规模的交易管理平台,系统采用Microsoft Visual Studio 2005的C#技术开发,结构采用B/S架构。该项目开始于2月份,客户要求交付日期为8月份,项目计划周期为6个月,但因为客户需求变更和开发人员抽调导致项目延期15天,项目实际周期为6个半月。由于我们在前期需求变更时对变更的影响进行了分析,预见了由此带来的延期风险,并采取了与客户沟通的措施,得到了客户的认可,所以在系统上线后还是得到了用户的好评。
由于近些改革开放的不断深入,公共事业这个关系到百姓民生的行业,在政府的大力扶持下也在不断飞速的发展,企业规模逐步扩大,同时由于市场机制的引入,市场竞争也逐年加剧,企业面临较大压力。由于历史原因,公共事业这个行业其信息化水平相对滞后,制约着企业的进一步发展,所以企业迫切需要通过信息化手段来提高其竞争力。由于每个自来水公司的流程不同,处理的方式也不同,所以在前期我们将风险进行了评估和管理。项目周期我们时间预算相对保守,周期为6个月。
二、风险管理早期识别
风险管理是贯彻项目的始终的,在开发《公共事业预付费管理平台》项目期间我们借鉴了公司的风险库。对一些可预见的风险进行了评估并对风险进行了分级,在该项目中,我对风险的严重程度进行了分级分为严重的、中等的、低的。对出现的概率进行了分级分为较大、中等、较低。对风险进行了分类。分为成本、进度、质量、其它。对类别进行了分级分为程序约束、资源、其它。对风险的时限进行了分类分为近期、远期。对风险状态进行了分类分为打开、关闭。需要对风险制定防范措施和应急措施,并对它设定责任人。并定期对风险进行重新评估。
风险是一种不确定事件,一旦发生,会对至少一个项目目标,如:时间、费用、范围或质量目标产生影响。风险的起因可能是一种或者多种,风险一旦发生,会产生一项或多项影响。例如,风险起因之一可能是因为开发环境的一个小小的升级更新,或者是分配给项目的设计人员有限。而风险事件则是这样一个小小的升级与原来的系统不兼容而导致原来系统无法正常运行,或者所分配的设计人员不足无法完成任务。这两个不确定事件无论哪一个发生,都会对项目的费用、进度或者绩效产生影响。风险状况则可包括项目环境或组织环境中可能促成项目风险的各个方面。
项目风险源于任何项目中都存在的不确定性,而软件项目中大量的不确定性更导致了软件项目具有高风险性,技术和管理更是首当其冲。已知风险,意思指已经识别并分析的风险通过对这些风险进行规划。但是无法对未知风险进行积极管理。
三、风险管理分析和策略
在本项目中,我们采用SEI的CRM方法对风险进行持续管理,具体包括技术类风险、管理类风险等主要风险。在此项目中我们所识别的风险和策略有如下两个方面:
1、技术类风险
⑴需求风险
在需求阶段,我们在这个阶段对项目的干系人进行了采集,并对他进行了确认。考虑到用户会有一些功能需要变更,全部纳入需求跟踪表并建立了风险跟踪表。客户的真正需求很难把握,公共事业这个行业虽然我们积累了很多经验,但是将用户的信息等管理纳入到我们平台下,一些业务流程还是经验缺乏,可能导致我们对客户需求的理解不充分、不透彻。我们从高层到底层的逐步调研,形成了文档,有部分不一致的地方,组织专题讨论,并让客户确认需求文档。在对需求进行系统概要设计的时候,采取比较保守的做法,不轻易重组客户的操作流程,充分尊重客户的意见,以控制因为行业经验的缺失而造成理解上的偏差,从而有效减少了这个问题影响而导致的系统设计上的错误。在此阶段我们识别出以下风险:
① 售水终端使用何种数据库,如使用非微软数据库则出现问题,防范措施是在数据库操作设计时要考虑多种数据库的兼容问题。并指定开发人员负责。
② 虽与客户进行多次电话和邮件等沟通,但由于用户无法切身感受系统,无法深入了解系统,在安装后再提出大量的修改意见导致项目拖期。防范措施是对可能变化部分预留变化扩展接口在业务流程确定后,窗体设计完成后,邀请客户来公司确认设计方案。应急措施是给用户修改,投入足够人员。
但在这个项目中由于我们没有及时和自来水公司人员及时沟通和确认自来水公司的部分流程需求变更,导致项目的流程变动很大。一些国有企业中,部分最终使用者因为知识背景或者个人习惯等等方面的原由,造成了软件系统范围和性能无法确定,有时候,甚至有范围蔓延之势;另外,目前还有一种需求风险来自于企业发展的需要,由于企业战略发展到了一定的高度,业务流程在不断地调整、重组、整合、审核,再调整,这样一个螺旋上升的过程,这都会给系统带来较大的需求风险。
⑵技术实现上的风险
信息技术发展日新月异,要跟着走的话,是光着脚也跟不上的。所以,需要我们在开发软件之前就对项目有一个前瞻性的认识和规划。考虑到数据库以及随后的数据挖掘,数据库我们采用了oracle10g,另外还需要依靠大量的数学分析模型进行论证。这对于系统分析,架构设计人员提出了相当高的要求。因此,新技术的挑战,系统开发团队的素质将会影响到软件项目的成败荣辱。对于技术上的风险,我们也有所准备。在此阶段我们识别出以下风险:
① 由于VC编写CPU卡和非接触卡通讯函数无可借鉴经验,进度上有可能延期。防范措施是通过加班保证进度。应急措施是其它部分按已定义接口正常进行,而在通讯函数方面保证接口一致稳定。
② C#和AJAX平台上实现传统的C/S软件的所有功能,可能会带来技术风险,可能部分功能不能实现,导致软件质量下降,用户的部分需求不能实现。开发软件之前就对项目有一个前瞻性的认识和规划。C#开发系统我们有经验但是在AJAX无刷新技术上的使用上我们还是没有经验的。防范措施是我们专门请了老师来给我们讲课。应急措施是招聘懂该技术的新员工加入我们项目组。
③ 导入数据与原数据不同,用户操作出错。防范措施除导库程序外,还要由另外一个人做一个数据检验的程序。应急措施是导库的程序要能单独导一条数据。
⑶系统安全性和使用风险
① 由于采用B/S结构,只要能上网就能使用系统,在带来方便性的同时,也带来了很大的安全隐患,如果有人成功入侵服务器,严重的话可能出现严重后果。虽然B/S结构也做过,但是像这样的收费系统没有实施过。对于安全性问题,我们认为服务器采用托管在电信机房比较好,电信机房安全性高,24小时有人执守,他们的专业的IDC机房可保证服务器物理安全性能。在系统平台上,我们采用机房的硬件防火墙,操作系统采用UNIX并安装网络版杀毒软件。在软件系统里面,增加对网卡MAC地址的控制和校验,只有登记授权的机器才能登录系统。以控制系统的使用范围,防止数据在未经过授权的机器泄露。通过这些措施的实施,使得客户对于系统的安全性信心大大增强。
② 用户拿卡来买水量等操作无法进行,这是最严重的风险。该问题的可能性:首先是本系统自己发的卡。该部分一方面要加强测试,另一方面在做导库程序时要考虑反向导入,将该用户导入到原系统操作。原系统导入数据,要能在老系统中操作。修改老数据库结构,要能区分出这些数据。应急措施是通过原系统进行操作。
2.管理类风险
⑴项目管理本身的高风险性
工作缺乏计划性或者有计划而不能严格执行是很容易发生的风险,因此我和公司高层进行了协商,项目组成员严格按照项目计划工作。而作为项目经理,我的管理工作不能太随意、太盲目;要认真看待风险管理的重要性,由于无法充分分析可能存在的已知风险和及时采取相应的应对策略那就是项目经理的严重失职。不能让团队内部沟通不利,导致大量的理解偏差;要保证我们项目团队与高层之间的有效的沟通。
项目管理本身的高风险性。 “项目管理以人为本”,这话大家都知道吧。可见,错误地人才任免,将会给项目带来无可估量的风险。如果由于项目经理或者相关管理人员缺乏项目管理知识,对工作范围不清晰,没有合理的计划,没有有效的控制,对项目变更认识不足,那么我们将面临项目协调成本、时间成本大大增加,造成工作大量的积压或者延误等等一大堆现象的发生。 在此阶段我们识别出如下风险:
① 人员稳定性问题。在目前的软件企业里面,如果在开发过程中走掉了关键人员而无合适的人员顶上,项目可能直接宣告失败,后果很严重。对于人员稳定性问题,由于本系统开发预期较长,因此在项目人员挑选上也采取了一定的措施。对于参与人员进行了详细的调查和研究,如果在项目期间有人有离职打算的,都不安排参与此项目,对参与项目的人员签订相应的意向书和物质补偿,以保持内部人员的相对稳定。
② 进度风险。我们考虑到由于项目组成员每个人以前都兼职于其它项目,有可能会被抽调出出差或者抽调到别的项目组。防范措施是和高层协商尽量不抽调项目组成员。应急措施是加班来赶进度。
③ 资金风险。一些需求需要到用户现场进行确认,这就需要公司高层同意项目组成员出差,需要费用,公司高层是否同意出差。防范措施是将待确认项能电话解决就电话解决,能邮件解决就邮件解决,实在需要到用户现场,要将问题汇总,一次性解决。应急措施是和公司高层协商同意出差。
四、风险管理总结
通过以上措施的实行,系统的风险得到了逐步化解,项目沿着我们预定的方向一步步进行,并在预期内完成了项目的开发任务,得到了客户的好评。有了本次的项目实践,我对于系统的风险及其控制有了更清楚的认识。虽然不同的系统有各自的风险,但是信息系统的风险却是大同小差异,只是侧重点不一样。信息系统项目经常会遇到很多的风险,主要包括下面这些方面:
1、对用户需求的理解和把握问题
此问题存在原因:满足用户的需求是信息系统最根本的目标,用户对于自己的需求可能自身还不能准确的表述,或者是用户的想法本身就不成熟,都会导致需求变更问题;也可能是系统分析人员工作不到位或者是知识能力不足,直接导致产生了错误的需求文档。
2、技术实现上的风险
此问题存在原因:软件开发机构自身的条件限制,开发人员不足,内部的人员结构不合理,技术研究不够;开发机构内部管理有问题。
3、系统安全性问题
做好系统数据和程序备份;增强安全措施。
4、开发人员稳定性风险
人事管理健全,人性化管理,形成凝聚力。
5、开发环境风险
设施未及时到位,或者是设施不配套;开发工具未及时到位或者是开发工具不如期望的那样有效等。
6、客户风险
客户对于最后交付的产品不满意,要求重新设计和重做;客户没有或不能参与规划、原型和规格阶段的审核,导致需求不稳定和产品生产周期的变更等。
7、产品风险
矫正质量低下的不可接受的产品,需要比预期更多的测试、设计和实现工作;开发额外的不需要的功能(镀金),延长了计划进度等。
8、过程风险
大量的纸面工作导致进程比预期的慢;前期的质量保证行为不真实,导致后期的重复工作等。
9、管理类风险
定量风险分析,是指对定性风险分析过程中作为对项目需求存在潜在重大影响而排序在先的风险进行分析。定量风险分析过程是对这些风险事件的影响进行分析,并给风险分配一个数值。一般,我们都会在做完了风险定性分析后直接进入“风险应对规划”阶段。但我认为,不应该忽视“风险定性分析”这个过程,这个过程能帮助我们认识到软件项目或者软件开发项目中存在的潜在风险。很多时候,表面风险是可以防备的,但潜在风险却会因人们经验的不足,教育背景的不同或者认识度不够而一再的出现,最终导致项目失败。随便举个例子,软件项目实施阶段,我们可能认为只要硬件环境搭建好了,软件就能安装成功,但往往这里就有潜在的风险。有时候,即便是同一家厂商提供的同一个型号的硬件设备都会出现某台设备软件系统安装不兼容的问题;又比方,我们开发过系统的人都知道,同一段代码,在同一个机器里运行,可能昨天正常的,但今天就是不行。
在项目开发的每个阶段,我们都对项目的风险进行评估,列出主要风险和次要风险,对主要风险进行风险分析、计划、跟踪、控制,确保风险策略实施的有效性。
五、结束语
风险管理是一项系统性、综合性极强的工作,不仅其产生的原因复杂,而且后果影响面广,所需处理措施综合性强。在全面分析评估风险因素的基础上,制定有效的管理方案是风险管理工作的成败之关键,它直接决定管理的效率和效果。因此,详实、全面、有效成为方案的基本要求,其内容应包括:风险管理方案的制定原则和框架、风险管理的措施、风险管理的工作程序等;因此,要全面彻底的降低乃至消除风险因素的影响,必须采取综合治理原则,动员各方力量,科学分配风险责任,建立风险利益的共同体和项目全方位风险管理体系,才能将风险管理的工作落到实处。在项目计划时,就要制定一个严密的风险管理计划,并且对于风险情况进行严格的跟踪,这样才可能把风险对项目所带来的影响降低,至最小。才能确保软件项目在规定的预算和期限内完成项目,才能使得公司的实力不断的得到增强。
[2](美国)(Crouhy Michel)科罗赫 (美国)(Galai Dan)加莱 (美国)(Mark Robert)马克编著《风险管理(Risk Management)》中国财政经济出版社 2005年