软件开发外包是指组织为了实现自己的目标,通过合同或协议的方式将部分或全部的信息技术职能交由外部的服务提供商提供的一种管理模式。
一、加强研发人员职业生涯计划与人才培养
对技术部门的研发人员进行项目管理、外包管理、配置管理、系统架构、信息安全、网络安全等方面具有针对性的培训,使研发人员适应岗位角色的转变,从软件开发人员真正的转变为项目经理、系统架构师、系统分析师、关系经理等,同时引进项目外包的法律人才。将软件系统外包开发,甲方往往会认为负责项目开发的是软件公司,尽量节省项目组人力,降低成本,忽视甲方方的技术,避免业务人员的参与。但是,作为建设单位,甲方不能对开发工程不管不问,而要积极参与到项目的开发过程中,对软件工程进行过程化控制管理,才能保证软件的质量。同时,软件开发外包开发后,甲方本身的技术人员逐步由开发转向开发与项目管理并重。甲方技术人员不但要学习最新的开发方式与开发工具,同时要掌握一定的项目管理知识。但事实上,甲方技术人员习惯于独立开发和使用传统的开发工具,这就要求甲方必须定期对开发人员进行知识更新。甲方技术人员也应不停地更新知识,以适应不断发展的技术手段。
二、选择合适的软件开发公司,加强对软件外包公司的管理、沟通和长期稳定的合作
选择合适的外包服务商可以降低部分风险,不同的管理机制和企业文化也会增加整个外包过程的风险。对这些风险的管理除了要求甲方与IT厂商间有很好的合作机制,彼此信任以外,甲方必须保证对整个软件开发外包项目具有决策和控制权,确立“以甲方为主"的方针。在项目招标中,尽量选择实力强大,信誉良好的公司。在项目外包的过程中要主动与供应商进行沟通,即使觉得与供应商没什么可以沟通时也要定期地与他们沟通。同时,应对IT厂商进行整体评价,不仅看其现有产品,而且要通过对厂商的整体实力、资信等级的评估,确认厂商具有良好的发展前景,要有适当的评价和监测手段,商业利益分配也应尽可能合理。
三、软件开发的需求必须规范明确,防止频繁变更
软件需求是软件产品开发的依据,也是整个开发过程各项活动的基础。在实际开发中,往往由于软件需求的不明确和频繁的变更,给项目开发带来不必要的麻烦,造成人、财、物的浪费,最后导致项目的失败。
首先,在明确软件需求之前,甲方必须先对项目的需求、成本、周期、质量等要素及相互之间的平衡关系有个总体的控制分析。需求限制了系统的范围和规模,成本决定了项目的投入,周期定义了项目的交付日期,质量定义了完成系统的成败。这四个要素之间找到平衡点,作为甲方的项目管理人员,必须统筹考虑。
其次,业务人员是系统业务需求的来源,其对需求的描述往往不能让技术部理解,同时业务部门和技术部门之间对需求分析的认识褒贬不一,需求既不规范又不细致,而外包开发商往往对甲方的具体业务更加缺乏了解,因此在项目初期,甲方项目管理人员需要主动协调业务部门、外包商的关系,通过需求分析等形式为外包商建立信息交流、沟通的渠道,保证对沟通的畅快,促使外包商进一步了解甲方的业务需求。
最后,完成软件开发外包需求分析书,它是软件项目各方对项目的共同认识,是软件开发的基础,应该做到完整性、正确性、可行性、必要性和独一无二性。
四、项目进度的监督控制的强化
项目的范围变更和业务需求的变更是影响项目进度的主要因素,因此要严格控制变更。在项目开发过程中,会遇到业务需求不断增加和变更的情况,需要建立需求变更处理过程。遇到需求变更情况,要及时召集业务人员、软件开发公司和有关人员,对项目的需求变更所带来的潜在影响和可能的成本费用进行评估。在项目的后期和项目完成时间不可更改时,要冻结需求,并取得业务部门的理解,以保证项目按己确定的需求和确定的时间完成,而需要新增的功能则可以留待后一个版本。
五、加强合同管理
软件开发外包合同是外包管理中最为重要的文档之一,是对软件开发外包服务商进行有效控制,降低外包风险的重要手段。软件开发外包合同管理主要涉及确定外包商、起草外包合同、签署外包合同、更新或终止外包合同等事项。甲方与外包服务商签订协议,通过监控和合规管理,保护各自自身利益。
六、做好外包软件的系统安全管理和文档编写工作
外包合同都必须包括保密条款。风险管理的思路应体现在所有的应用系统中,尤其是外包开发的系统。在签订外包合同时,条款中必须明确与安全相关的责任与义务,明确规定保密条款、数据量分析、系统配置参数指标等,并要求软件开发公司商制定灾备、应急处理等一系列方案。甲方的软件系统具有一定的特殊性,在与软件公司合作的过程中一定要注意安全保密。例如测试需要的数据进行保密处理;对机器用户、权限、网络路由进行严格控制;当用软件公司的终端进行签到后,必须及时地签退、制定系统级别的安全策略等。在项目开发的最后阶段,甲方的项目管理人员还需要督促开发商提供详细的、完整的开发文档资料,甚至包括代码的保存。并组织对相关文档资料和报告进行评审,以确定产品的质量达到要求。由于甲方在商务谈判时一般无法界定所有文档的细化程度,特别是对于那些只有使用权的软件的开发工具代码和业务代码,在开发的前期都不好确定,以至于在产品交付时部分代码无法完整地有效地交付,不利于今后的二次开发和维护。