软件项目都存在着这样那样的风险,尤其是数据分析项目这就需要我们在进行软件开发项目时更加注重风险管理,注重风险分析,做好风险管理计划,积极寻求风险应对方法,从而提高项目成功的机会。
一、风险识别
软件项目由于其本身的创造性,注定了其风险的复杂性,在具体的风险识别过程中,我们应重点注意以下风险:
1. 需求风险。主要是指需求不确定性的风险,比如:由于系统使用者对系统将要实现的目标是模糊的、笼统的,而对于具体的需求不能准确描述;而且系统受使用者的个人习惯、知识背景影响较大,在系统范围和系统性能方面也存在着很多不确定性因素;另外,由于企业在发展过程中不断进行的业务流程调整等,都会给系统带来较大的需求不确定性风险,甚至是陷于需求膨胀的状态,便系统难以满足使用者的需求,难以适应企业发展的需要。
2. 管理风险。软件项目的管理本身就是一项具有风险性的工作,而数据分析项目由于是通过对其他系统的整合,来获取分析所必需的数据,其数据来源可能是多个相关系统,对项目的协调管理工作要求更高。因此,其管理风险主要表现在:工作缺乏计划性或是有计划而不能严格执行;管理工作的随意性、盲目性比较大;没有充分意识到风险管理的重要性,因而没有充分分析可能存在的风险和应该采取的风险应对策略;项目团队内部沟通不够,导致开发人员对系统设计的理解存在偏差等等。
3. 技术风险。软件技术飞速发展,各种新技术、新应用层出不穷。而数据分析项目不仅涉及到数据交换、数据仓库等技术,还需要依靠大量的数学分析模型,这就要求系统分析、设计人员要具有较好的软件技术、数学背景知识,同时还要对所分析的行业业务非常了解。因此,系统分析、设计人员的个人素质以及项目团队的整体素质将会影响到项目实施的成败。
二、风险分析
前述数据分析项目的三大风险对项目的影响都是非常大的,如果按定性的风险分析方法,其影响都是“高”级。
1、需求风险。需求风险的形成,可以从三方面进行分析:首先是由于应用部门的介入与参与程度不深,考虑需求往往从部门或局部的角度出发;其次是项目组对需求的调研目标不明晰,分析不透彻,缺乏有效的需求变化管理所造成的。这大都是因为从事软件开发的都是“高科技人员”,都具有“从专业或学术角度出发”的特点,而往往忽视了对业务知识的深入了解,不能很好地理解甚至是误解客户的需求。第三,是由于缺乏与决策层进行深层次的交流,难以掌握企业的发展趋势,对需求的延伸性不明确。这些需求不确定性的风险,都可能会造成大量工作“跑题”浪费,甚至是到项目都快要完成时,依然出现应用部门对系统提出一些基本的业务需求,或是软件功能实现了,却发现实际业务已发生了变化,导致软件失去了应有的价值等等,使时间和成本的投入成倍增长,甚至是系统无法正常投入使用。
2、管理风险。管理风险大都是由于项目经理或管理人员缺乏项目管理知识,对项目的工作范围不明确,对总体计划、阶段计划的作用认识不足,对项目的风险估计不足,而造成计划与控制脱节,无法进行有效的项目进度管理;而且,由于项目管理人员的协调管理能力不足,执行力度不够,使得项目协调成本、时间成本大大增加,造成工作延误等。
3、技术风险。技术风险可以直接导致项目失败。选择没有成功案例、不熟悉行业业务的开发商;项目的目标、范围超过了项目组的实现能力;采用不熟悉或是欠成熟先进的开发工具、不符合行业特点的数据分析模型等等,都无疑会使项目处于毁灭性的风险之中。
三、风险应对
风险分析活动分析的目的在于建立处理风险的策略。而风险规避的最好方式是把风险控制在项目启动阶段,把损失减小到最小程度。基于以上对数据分析项目风险的识别与分析,可以采用以下措施来规避或减小风险:
1、建立畅通的沟通渠道和沟通策略。需求的不确定性风险很大程度上是由沟通不畅引起的。因此,在需求调研阶段,要多和应用部门沟通,了解他们真正的需求,最好能将目标系统的模型向应用部门演示,并得到反馈意见,直到双方都达成共识;形成双方认可的验收方案和验收标准,并做好变更控制和配置管理,尽量降低需求不确定性风险。
2、配备高素质的项目管理人员。最好是具有丰富的项目管理经验,或是经过系统的项目管理知识的人员来担任项目经理,通过制定有效的项目管理计划,并认真执行落实,提高项目的可控性。同时,风险不是静止的、一成不变的,它会随着项目状况的变化而变化,因此,风险管理必须被作为一个日常的正式活动列入项目工作计划,成为项目管理人员的一个重要工作。
3、建立一支协作高效的项目团队。技术部门有技术,业务部门有需求,因此,项目组中不仅要有开发商、技术部门的参与,更要有应用部门的参与,形成一个合作的项目工作团队,共同理解企业的战略规划和业务发展,从整体全局的角度,提出有效的信息化需求,共同研讨项目进展中出现的问题,共同控制项目进度,共同为项目质量把关。
4、制定科学的风险管理计划。从风险管理的角度对项目规划或计划进行审核,建立“风险清单”,对每个可能存在风险的表现、范围、时间做出尽量准确的判断并对风险进行监控,提前做好应对准备。如针对需求风险,要制定相应的需求变更控制;针对技术锁定风险,要安排的核心技术人员全程参与开发等等。
5、选择合适的开发技术。虽然在系统设计时需要考虑新技术的发展和技术的先进性问题,但“最好的不一定是最合适的,最合适的才是最好的”,如果项目组的人员对所需开发技术不熟,在满足业务需求的前提下,尽可能采用熟悉的技术来减轻项目在成本或进度方面的影响,也可以事先进行培训来减轻对项目的影响,以避免因技术瓶颈导致的项目失败。
6、采用快速原型和迭代模型进行开发。尽管前期会对应用部门进行需求调研和需求分析,但应用部门的需求往往会随着时间的推移、业务发展的变化而有所变化,因此,技术部门要强调敏捷开发,缩短软件第一版本的上线周期,尽快给用户一个快速原型启发用户的需求,并持续为用户提供有价值的软件。同时,以迭代法取代传统的瀑布法开发过程,加强各阶段与用户的沟通,对各个功能逐步完善,可以降低各种不确定因素带来的实现风险,每个迭代过后,软件都向目标接近一步,即使目标发生改变,迭代模型也比其他筛选和建立目标的开发模型,更便于转向新目标。
软件项目风险管理是一种特殊的规划方式,对任何一个软件项目,我们可以有最佳的期望值,但更应该要有最坏的准备——只有正视风险,我们才能更好地管理风险,规避风险,直至消除风险,获得项目的成功。 |