软件项目操作风险是指在软件项目生命周期中的各个环节,由于不完善的组织管理或有问题的内部工作流程、人员及系统或外部事件所造成损失的风险。软件研发企业通过实行全面风险管理,特别是加强日常操作风险的管理,及时控制风险、预防风险的发生,可以增加软件研发企业的收入,提高企业应变能力,同时也是软件公司IT治理的一个重要方面。
一、操作风险管理流程
操作风险管理流程包括风险识别、风险分析、风险计划、风险跟踪、风险应对、改进工作和监督考评七个方面。操作风险管理流程用图1表示如下:
操作风险流程含义解释:
第一步:风险识别。就是确定何种风险事件可能影响软件项目研发,在软件项目生命周期中的每一个阶段,都要对每一项工作有一个风险识别的过程,而且是一个连续的过程。要识别风险,首先我们必须了解在软件开发的各个阶段都有可能发生哪些风险及引起风险的原因,风险产生的源头,然后逐一进行分析列表。根据帕累托二八原理,所有风险中只有小部分产生的损失最大。因此,要集中精力找出这些威胁最大的风险。
第二步:风险分析。就是对以上识别出来的风险事件,做如下四方面因素的风险影响分析。1、风险事件,破坏或影响项目的事件,风险概率(%)。2、事件发生的可能性。3、风险得失量,说明可能造成的损失。4、风险影响,等于风险概率X风险得失量。通过对风险及风险相互作用的估算,来评价项目可能结果的范围,从成本、进度及性能三个方面对风险进行评价,做好定性分析和定量分析相结合。确定风险的轻重缓急,哪些可以忽略不考虑(包括可以承受),确定那些风险是可以控制的,控制的方法是否有效,对于不能控制的风险原因是什么等。
第三步:风险计划。对软件项目生命周期中可能存在的每一个风险,都要制定一个预防发生,发现整改完成的工作时间计划表。
第四步:风险跟踪。根据风险应对计划,把这些可以计量的技术风险指标,运用到实际技术风险管理中,持续跟踪、控制技术风险,及时暴露风险事件。
第五步:风险应对。建立可以控制或缓解技术风险的应对政策、方法和处理方案,并详细说明每一种风险实施的步骤。
第六步:改进工作流程。根据上述风险识别、衡量和监控的内容,找出存在漏洞,对现有软件项目研发过程中风险控制流程进行改造,提高风险监控效率,防范风险发生。
第七步:风险监督和考评。风险管理部门要通过定期、不定期的内部审计,检查公司内部在软件项目研发过程中,对各个环节是否按照事先风险防范措施进行落实,落实的是否到位,并把检查结果进行通报,纳入公司项目管理中。
二、操作风险主要内容
软件项目生命周期包括需求分析、软件设计、软件编码、软件测试、软件投产运行五个主要过程,配合完成这五个方面的工作,还需要建立一系列软件研发制度、项目管理制度、培训制度、投产运行制度和文档资料管理制度等多方面。
1、需求风险。主要包括如下几方面的风险。
序号
|
风险类型
|
风险描述
|
发生
概率
|
影响
程度
|
处理方式
|
应对策略
|
1
|
需求内容描述不清
|
需求提出部门只写出一个实现的想法,对如何实现需求没有详细的描述。
|
高
|
大
|
避免
|
1、加强业务与技术的交流,建立业务与科技良好的交流沟通机制,业务人员要讲解需求含义,让技术人员了解整个需求的内容和达到的结果。技术部门要帮助业务部门完善需求内容。
2、建立良好的需求变更管理制度和需求工作处理流程。
3、在应用软件系统设计上尽量对一些可变的需求进行参数化设计,减少修改程序的频率。
4、对形成的需求功能说明书发给业务部门确认内容完整性和正确性。
5、需求分析完成后,要对需求分析报告进行评估后,再提交业务部门交流确认。
|
2
|
需求变化风险
|
由于业务发展或外部市场、政策等方面引起的变化。
|
高
|
大
|
避免
|
3
|
需求内容理解错误风险
|
与客户沟通少、对业务了解不够、对需求了解不够。技术人员对业务需求理解出现偏差,与实际需求描述含义不一样。
|
高
|
大
|
避免
|
4
|
需求分析出现错误
|
对业务部门提交需求进行可行性分析不够深入,导致出现偏差。
|
中
|
大
|
避免
|
2、设计风险。主要包括如下几方面的风险。
序号
|
风险类型
|
风险描述
|
发生概率
|
影响
程度
|
处理方式
|
应对策略
|
1
|
设计方案出现错误
|
在设计方案中,使用的实现方法不当,造成系统处理错误。
|
中
|
大
|
避免
|
1、成立评审委员会,做好对每一个设计方案的评审工作,找出方案设计、功能设计等方面存在的问题。
2、对于设计好的功能说明书,要提交需求提出的业务部门进行审定,审定完毕请需求部门撰写需求确认函。
3、规划和设计好不同应用之间的接口规范。
4、做好技术人员的培训,提高设计人员设计水平。
5、建立变更管理机制,及时处理软件项目研发过程中出现的一些需要变更问题。
6、加强培训学习,提高设计人员素质。
7、对新技术应用事先要研究试用测试,熟练掌握后在应用。
8、对于技术难关,可以成立攻关小组,功课技术难题。
|
2
|
功能设计出现错误
|
具体设计某个功能时,实现方法错误。
|
高
|
大
|
避免
|
3
|
功能设计考虑不周全。
|
功能设计时,只考虑了自身模块设计,遗漏了系统中相关联部分。
|
高
|
大
|
避免
|
4
|
变更计划不周全
|
对于设计过程中出现的变化因素考虑不周,没有及时更改。
|
中
|
大
|
避免
|
5
|
使用新技术风险
|
1、因使用新技术导致方案设计出现问题。
2、选择错误技术实现路线。
3、技术实现遇到难题。
|
低
|
大
|
避免
|
3、编码风险:主要包括如下几方面的风险。
序号
|
风险类型
|
风险描述
|
发生概率
|
影响
程度
|
处理方式
|
应对策略
|
1
|
程序中存在BUG
|
程序员编码的软件中隐藏着错误语句没有发现。
|
高
|
大
|
避免
|
1、加强软件项目管理,在软件公司建立软件项目管理体系。
3、配备专人静态审核程序代码。
4、编制软件白盒测试工具。
5、严格按公司编码规范编码,纳入项目考核指标。
6、公司内部要建立一套完善的变更管理制度和工作流程。
7、做好软件项目检查监督制度。
8、建立专门软件开发用环境。
9、建立问题反映机制和开发变更机制,对于开发过程中出现的问题及时解决。
10、加强员工开发技术培训学习,提高开发人员的技术水平。
|
2
|
故意在程序中设计炸弹
|
故意设计一段错误程序,在某特定条件下激发。
|
低
|
大
|
避免
|
3
|
程序编码不规范
|
程序员在编码时,没有按照制定要求格式编制,而是按照自己的喜好编码。
|
低
|
中
|
避免
|
4
|
变革计划不周全
|
程序员对有关变更事项没有及时处理或忘记了处理。
|
中
|
大
|
避免
|
5
|
程序员开发能力差或对开发工具不熟
|
程序对开发工具使用不熟悉,造成软件项目开发进度缓慢或出现差错。
|
中
|
大
|
减轻
|
6
|
开发环境没有建好或不稳定
|
造成软件项目不能按时启动或延迟项目进度。
|
中
|
大
|
避免
|
7
|
设计错误带来的实施困难
|
造成程序员在编码过程中,难以实现设计方案的要求。
|
中
|
大
|
避免
|
4、软件测试风险:主要包括如下几方面的风险。
序号
|
风险类型
|
风险描述
|
发生概率
|
影响
程度
|
处理方式
|
应对策略
|
1
|
没有成立专门的测试组织
|
在软件公司内部没有设立专门的测试管理组织和专人管理测试。
|
低
|
大
|
避免
|
1、重视软件测试工作,建立专门的软件测试队伍。
2、提前准备好测试环境,包括与生产环境一样的投产用测试环境。
3、仔细设计测试案例,建立案例审核机制。
4、编制适合自身的软件测试工具。
5、做好软件项目的功能测试和压力测试。
|
2
|
软件测试不充分
|
测试案例编写不周全、细致。测试人员、测试时间不足。
|
高
|
大
|
避免
|
3
|
测试问题没有统一管理
|
表现在没有建立专用的软件测试管理库,专人管理测试问题。
|
高
|
大
|
避免
|
4
|
测试环境未准备好或不稳定
|
表现在没有建立一个完善的不同软件项目使用的测试环境,造成项目进度延迟。
|
高
|
中
|
避免
|
5、投产运行风险:主要包括如下几方面的风险。
序号
|
风险类型
|
风险描述
|
发生概率
|
影响
程度
|
处理方式
|
应对策略
|
1
|
投产组织不严密
|
软件项目在投产过程中组织不严密、人员不到位、职责不清除等。
|
低
|
大
|
避免
|
1、建立投产牵头部门,根据版本涉及应用范围大小,组织不同的技术人员参加。
2、建立软件项目投产工作流程。
3、做好软件项目投产前,投产软件版本的验证测试工作。
4、制定投产过程中,出现问题的应急预案。
5、使用HELPDESK工具管理生产问题。
6、加强培训学习,提高技术支持人员处理问题,解决问题的能力。
7、树立服务只有起点,满意没有尽头的客户服务思想,对于客户不满意的地方,要与客户沟通后,尽快解决。
8、需求阶段要多和客户沟通,了解客户真正需求,直到双方都达成共识为止。
|
2
|
投产方案存在问题
|
编写的投产方案存在问题,投产后造成系统运行出现错误。
|
低
|
大
|
避免
|
3
|
技术支持不及时
|
技术支持人员不到位,分析问题、解决问题不及时等。
|
中
|
大
|
避免
|
4
|
项目版本风险
|
投产使用的软件版本存在问题。
|
低
|
大
|
避免
|
5
|
系统运行出现错误
|
新软件版本投产后,出现一些功能或影响安全运行的错误。
|
中
|
大
|
避免
|
6
|
客户不满意风险
|
软件项目投产后功能不能满足客户的需要。
|
中
|
大
|
减轻
|
6、其他方面风险:主要包括文档资料风险、人员风险、培训风险、项目管理风险、外包风险及法律风险。
序号
|
风险类型
|
风险描述
|
发生概率
|
影响
程度
|
处理方式
|
应对策略
|
1
|
文档资料风险
|
文档内容描写不符合规定,描写不清楚。
|
中
|
中
|
避免
|
1、制定软件项目生命周期中所有文档的编写模版。
2、加强培训训练,让技术人员掌握正确编写文档。
3、做好文档审核。
4、对一些重要技术内容,可以让测试人员测试验证。
|
文档内容存在错误、存在遗漏。
|
中
|
大
|
避免
|
2
|
人员风险
|
人员流动特别是技术骨干力量流失。
|
中
|
大
|
控制
|
1、公司内部要建立良好的企业文化和绩效考核体系。
2、项目团队内部要做好沟通工作,强化团队建设。
|
3
|
时间风险
|
不能到期完成项目。
|
高
|
中
|
控制
|
制定完善的进度计划和变更控制计划,时刻监控项目进展情况。
|
4
|
费用风险
|
超过项目预期费用。
|
中
|
中
|
控制
|
1、制订财务分配计划。
2、组织项目财务控制小组,过程中密切进行费用分析。
|
5
|
质量风险
|
主要是软件项目投产后出现问题,造成不良影响。
|
中
|
大
|
控制
|
1、加强软件项目管理和软件测试,实现全面质量管理。
2、做好生产问题特别是重大生产问题应急处理预案。
|
6
|
外包风险
|
主要是项目开发过程中,外包商出现问题,造成项目中断。
|
低
|
大
|
预防
|
1、建立外包商备份策略。
2、选择业界信誉好和规模大的软件开发公司。
|
7
|
软件项目管理风险
|
主要是制度建设、流程建设、协调控制、应急管理等方面不完善。
|
高
|
大
|
预防
|
1、设专人负责组织管理。
2、由专人进行技术协调和沟通。
3、核心技术及产权保护措施。
4、合同及采购控制制度。
5、做好应急事件的管理。
|
8
|
培训风险
|
各种技术培训时间不足,授课效果不良等,造成相关人员对软件项目不能熟练掌握。
|
低
|
中
|
预防
|
重视培训,针对不同软件项目阶段,不同授课对象,编写不同培训教材,重视互动式教学。
|
9
|
法律风险
|
与合作公司等产生的一些纠纷。
|
低
|
中
|
避免
|
聘请律师咨询和解决。
|
三、操作风险防范策略
来源:项目管理者联盟
1、建立软件公司全面风险管理文化,实现全面风险管理。美国管理大师杜拉克在论述企业家的创新精神时说:“规模不是创新精神的障碍,真正的障碍是现有企业本身的组织和制度设计”,软件公司要做好组织结构的设计和内控制度的建设,建立以客户为中心,以市场为导向,以风险控制为主线的管理模式,构建基于软件项目研发的全面风险管理体系。同时在公司内部推行全面风险管理,建立风险管理文化,统一使用各种风险标识和用语,使公司上下各个层面的员工,对软件项目研发风险管理流程和各业务环节有相同的理解,形成集员工道德准则于一体的企业文化。
2、做好培训机制和加强交流学习。风险存在于软件项目周期中的每一个环节,控制风险,技术不是决定的因素,更多的是公司自身管理水平问题,要提高软件公司风险管理水平就必须做好培训和知识共享交流工作,而这一点也是目前国内软件公司的薄弱环节,往往重视市场拓展,对项目管理、技术知识培训及公司内部交流沟通工作投入的太少,造成工作人员很难全面了解和识别风险。因此,软件公司需要做好以下三方面的工作:一是投入一定的人力物力,根据公司全面风险管理的需要,设计软件项目研发不同岗位需求的培训教材,采取多种培训形式,特别是采取案例分析的体验式教学方式,对受训对象进行分类,实施有针对性的培训,通过长期反复的培训和宣传,使员工对我行的风险管理系统充分熟悉并持续遵循操作制度,提高广大员工风险识别和防范水平。二是在软件项目管理中必须加强项目团队之间的交流、合作和创新,因为任何一个项目,只靠一个人是不可能完成的,需要整个项目组全体人员开动脑筋,协调一致共同的努力才能完成。这首先需要做好交流工作,你有一个idea,我有一个idea,交换之后我们每个人就有两个ideas,通过交流拓宽思路、统一思想,达成共识。其次是协调合作,要求项目中的每一个成员按照工作标准在做好自己份内工作的同时,善于与同事之间进行有效的配合,从而提高整个项目的质量和效率。最后是善于创新,没有完全相同的项目,创新是由软件项目的特点决定的,软件项目本身就是创造性的工作,要善于学习、善于借鉴其他项目中好的做法,没有落后的技术,只有落后的思想,可以“大胆的设想,小心的求证”,通过创新提高软件项目的整体性能。
3、建立项目信息披露制度。在软件公司内部要大力提倡风险披露制度,加强部门之间、项目组之间、员工之间、领导与员工之间的交流沟通,开设风险管理知识、项目经验、制度规范、典型案例、经验分享、讨论园地等栏目,筛选一些典型的风险案例刊登在园地中,提供给公司所有员工学习、讨论,提高大家识别风险、防范风险的能力。
4、关注操作风险的事前控制。在软件项目风险控制中,要树立正确的风险防范观念,运用现代项目管理的方法,切实将风险管理的时点前移、把各种风险消灭在萌芽状态,而不是通过事后维护来解决。在日常工作中,各种操作风险的前期预兆是会表现出来的,关键是没有及时发现,马上纠正或是对发现的问题思想麻痹,错误扩大化变成案件,形成损失并为纠正错误付出高昂代价。因此,操作风险的预警式维护才是一个理想状态,事后控制不如事中控制,事中控制不如事前控制。根据美国质量保证研究所对软件测试的研究结果表明:越早发现软件中存在的问题,开发费用就越低,在编码后修改软件Bug的成本是编码前的10倍,在产品投产后修改软件Bug的成本是投产前的10倍,软件质量越高,软件发布后的维护费用越低。
总之,软件项目生命周期中的风险管理,并不能靠某一项技术手段和某一种管理方法就可以解决的,应是多种技术手段和管理方法的组合应用,说到底技术不是问题,关键是软件公司内部要建立一套切实可行的全面风险管理体系,只有做好技术与管理有机结合,才能有效地防范风险,提高风险管理水平。
责编:张保军
微信扫一扫实时了解行业动态
微信扫一扫分享本文给好友