为了防范软件外包风险,须对其过程进行IT审计。文章就实施IT审计的意义、内容和实施模式进行探讨,以提高软件开发的质量,为提高外包软件的成功率寻找一个理论创新和解决问题的可行方案。
一、基本概念和背景
外包(outsourcing) ,英文的直译是“外部资源”,指企业整合利用其外部最优秀的专业化资源,从而达到降低成本,提高效率,充分发挥自身核心 竞争力和增强企业对环境的应变能力的一种管理模式。在全球化日益加剧的今天,外包这一现代企业管理模式已经被成功地应用到了众多领域, 但是外包应用得最广泛的还是软件外包。软件外包起源于印度,顾名思义,是指把软件生产、销售和维护的某个或某些环节交由其他公司来完成 。软件外包作为一种降低软件开发成本和缩短软件开发时间的有效手段,被许多软件公司应用到软件产品各个生命周期中。软件外包有很多优点 ,但很多企业实施外包最主要的目的并不是为了降低开发成本,而是为了解决企业内部人力资源的限制,使得企业不用招聘新员工就可以接手大型 项目。按照外包的内容不同,可以将软件外包可分为软件产品开发( softwarep roduct & technology services)外包、软件专业服务( software related services) 外包、IT关联服务( IT enabled services) 外包三类。软件是一种逻辑产品,它具有不可见性、不可测量性和高 度弹性,正因为如此,外包风险软件的质量控制就变得十分困难。无论是上述哪一种软件外包方式,也无论在外包过程中哪一阶段(发包阶段、开 发阶段) ,都存在一定的风险。
导致软件外包风险的直接原因是软件外包双方信息的不对称,“委托—代理”关系便是企业和外包承包方之间关系的写照。由于存在信息不对称 ,委托人往往比代理人处于一个更不利的位置。软件发包方与软件承包方之间的关系也是如此,软件承包方往往并不能深入地了解发包方的具体 情况,处于信息劣势状态,而软件发包方也对软件开发过程不了解,这又加剧了软件外包的项目风险。
为了防范软件外包风险,提高外包项目的质量,应在软件外包实施过程中引入IT审计制度对其进行跟踪审计。本文以软件产品开发这一软件外包 形式为例,来探讨软件外包过程中实施IT审计的内容和模式。
二、软件外包的IT审计
IT审计,又被称为信息系统审计( information system audit) , 目前还没有固定通用的定义。1996年日本通产省对IT审计作出如下定义:“为了信息系统的安全、可靠与有效,由独立于审计对象的IT审计师,以第三方的客观立场对以计算机为核心的信息系统进行综合的检查与评价,向IT审计对象的最高领导提出问题与建议的一连串活动。”软件项目开发过程中引入IT审计的目的是控制整个开发的过程,即项目成本、进度和质量等目标,使软件开发过程中出现的偏差迅速显现,从而及时地纠正偏差,使整个开发过程透明、高效。软件运行过程中引入IT审计是保证软件提供的信息的可用性、保密性和完整性,从而达到控制软件的安全性、可靠性与有效性,延长软件生命周期的目的。
软件外包IT审计的对象是外包的软件,它涵盖了软件发包、软件开发和软件运行维护的整个过程。同建筑产品外包一样,软件产品的外包质量是外包的关键所在。抛开外包过程中发包人、承包人责任心等一些主观因素,就外包软件类型而言,目前软件外包的主要内容是重写核心系统、重新设计系统、维护老系统、数据清洗和软件升级。这些工作非常枯燥且费时费力,承包人很容易偷工减料、马虎了事,进而影响到整个软 件的质量。为了保证外包软件的质量,我们在外包过程中引入IT审计制度,对以计算机为核心的软件从发包开始,到软件规划、分析、设计、编程 、测试、运行、维护的整个外包软件生命周期实施IT审计。软件外包IT审计主要包括以下内容。
(1)发包方的审计。主要审计发包方是否具有完善的项目管理体制,是否具有雄厚的技术实力和优秀的技术人员;是否具有良好的信誉度和品牌度 ;是否能够清晰地分析发包软件的产品需求,并用文档的形式记录下来。
(2)承包方的审计。主要是审计承包方是否具有发包方要求的设计技术和人才,软件开发管理是否正规,是否具有良好的业界信誉。
(3)发包流程审计。主要是审计是否具有完整、详细的外包合作过程与计划;合作协议是否规范;发包方是否依据计划跟踪承包方的软件开发过程 ,并按照文档化的规范,对承包方的工作陈述、子合同条款、条件以及其他约定进行更改;发包方和承包方双方的管理者是否一起执行定期的状态 或协调评审;承包商是否参与定期技术评审和交流;按照文档化的规范在所选择的里程碑处进行正式评审,评价承包商的软件工程完成情况与结果 。
(4)软件开发的管理、规划与组织的审计。主要是审计软件的管理、计划与组织方面的策略、政策、标准、程序和相关实务;以软件开发计划为 标准,跟踪软件开发过程,包括软件开发的规划、分析、设计和实施过程, 比照CMM 和ISO9000标准,对出现的问题及时更正;尽量减少软件开发错 误的“水波效应”;审计发包方是否按照文档化的规范进行验收测试,定期评价承包商的能力。
(5)软件技术基础设施与操作实务审计。主要是审计评价承包方在技术与操作基础设施的管理和实施方面的有效性及其效率,以确保其充分支持 软件的目标。
(6)资产的保护审计。主要是对逻辑、环境与信息技术基础设施的安全性进行评价审计,确保发包方能保护信息资产, 防止信息资产在未经授权 的情况下被使用、披露、修改、损坏或丢失,造成不必要的、意想不到的灾难。
(7)灾难恢复与业务持续计划审计。主要审计在发生灾难时,能够使发包方的业务持续进行,并对这种计划的建立和维护流程进行评价。
(8)软件实施与维护及业务流程评价与风险管理审计。主要是对应用软件的实施与维护方面所采用的方法和流程进行审计,评估业务系统与处理 流程,确保根据组织的业务目标对相应风险实施管理。
目前国际上对IT项目进行监控常用的方法是IT项目管理。虽然IT审计和IT项目管理都是由第三方对软件的质量进行监督管理,但IT项目管理的对 象是工程项目,仅覆盖软件的开发阶段,即在一定的成本、进度和质量目标下,控制项目的开发,当项目完成后,项目管理工作就结束了,而对占软 件生命周期60% ~70%的软件运行维护阶段的质量却没有监控。实际上,软件开发过程中的测试工作并不能把软件开发过程的所有bug(故障)全部 测试出来,而这些bug的存在是软件运行过程中的隐患,随时都会转化为软件的运行风险。外包的软件由于软件发包方和承包方的多种原因,在软 件中就可能存在较多的bug,如果不对软件运行和维护阶段进行监控,无形中就加大了软件外包的风险。软件外包过程引入IT审计,不仅是在软件 的开发阶段进行跟踪审计,而且还包括了在软件的运行维护阶段进行监控,这在制度上保证了外包软件的质量,避免了外包风险。
印度软件企业为了承揽一些欧美国家的外包软件业务,花费巨大的财力,想方设法获得有关软件过程管理的CMM (CapabilityMature Model)和 ISO9000认证。我国规模大的软件公司并不是很多,大多是一些100 人以下的小公司,它们的资金状况并不是很好,无法承担进行CMM等认证的费用。但软件外包这块“蛋糕”实在诱人,为了达到规范软件开发过程、获得更多的外包项目这一目的,可以在承包软件项目时,引入IT审计制度。在IT审计过程中借鉴CMM模型的思想,借助“第三方”专业的IT审计师技术及其经验来规范外包项目的计划、开发实施的进度和质量,对后期的运行维护等过程进行监控。在CMM第二级———CMM2中的“软件子合同管理”KPA ( key process area)就已经涉及了软件外包管理问题,它规定了企业应如何管理软件开发业务和软件开发子合同。软件外包管理实际上涵盖了软件生命周期中的各个过程,任何一个软件外包过程都会涉及到需求管理、软件计划、质量管理、项目追踪、配置管理等内容。CMM模型定义了软件子合同管理要达到的目标、实施时必须履行的承诺和需要具备的能力,定义了进行软件子合同管理应该进行的活动。但是, CMM模型中只是给出了“应该做什么”,“应该达到什么样的目标”,而对“如何做”这一关键问题并没有给出相应的指导。我们在软件外包中引入IT审计时,可以借鉴CMM模型的一些成熟的经验,不是孤立地看待CMM的软件子合同管理,而是从管理入手,将其视为能将其他软件开发过程从公司内部部分延伸到公司外部的管理规范、管理技术和管理理念。这样引入IT审计,就可以使软件发包方能够有效地管理与控制其业务分包过程。
三、软件外包IT审计的实施
1. IT审计证据的获取
软件外包IT审计的证据也是通过查询文档、问卷调查、数据抽样等方式获得的。由于计算机技术和信息系统的日益复杂,导致系统的输入和输出的对应关系日趋薄弱,系统中数据处理几乎不会留下痕迹。因此, IT审计人员必须清楚系统的功能模块,才能获得精确可靠的数据资料,不能仅仅通过简单的输入输出审计就作出结论。就是说,需要IT审计人员对软件外包过程进行跟踪审计。
软件外包IT审计的主要目标是提高外包软件的安全性、可靠性和有效性。IT审计人员在对审计证据进行评价时,首先要考虑控制需求。即评估收集的审计证据是否满足事先制定的控制需求和控制目标,如果控制点不清,就需要审计人员根据经验作出判断。在这一过程中,控制矩阵经常被用来衡量系统控制的适当程度。第二,审计人员必须考虑补偿性控制和重叠性控制。补偿性控制指某一系统的健全机制对其他有缺陷的控制机制形成补偿。而重叠性控制则是指某一系统同时拥有两套健全的控制。第三,控制的相关性和效果也必须受到重视。但即使拥有完备的控制机制,软件也有可能出现意外情况,因此, IT审计人员必须执行测试程序并评估控制与控制目标的相关性。一般说来, IT审计人员都应当先审计补偿性审计,再报告控制缺陷。此外, IT审计人员也需要使用一定模型并根据自己的经验收集审计的证据,以判断审计计划中控制目标是否得到实现。在审计过程中,工程可靠性模型、贝叶斯模型和信息系统效果评价模型都是IT审计人员经常使用的。
2. 软件外包IT审计的实施模式
软件外包中的IT审计主体是外部审计主体。即独立于发包方和承包方的“第三方”审计主体,IT审计工作包括审计准备活动和正式的审计活动。IT审计工作的准备包括收集背景信息,估计完成审计需要的资源和技术,包括:合理进行人员分工;与发包方和承包方项目负责人举行一次正式开始审计的会议,确定审计范围,制定日程,解释审计方法;使双方互相认识,阐明问题,强调审计的关注点,使得审计工作得以顺利进行。在IT审计实施的过程中,独立于发、包双方的“第三方”审计人员对照审计目标开展工作,针对出现的问题提出改进的方案。同样,在审计完成后,再召开一次正式会议,双方项目负责人交流审计结果,提出改进建议。这将增加审计建议的接纳程度,也给了审计师一个机会来表达他们的观点。会议之后写出报告,提交发、包双方。
在审计过程中采用什么样的模式来保障IT审计工作的公平有效,是推行IT审计制度的首要问题。IT审计在中国登陆的时间并不是很长,研究其实施模式的学者还不多,借鉴目前在IT工程项目管理中项目监理的应用模式,根据IT审计内容和程度不同,提出以下三种方式。
(1)咨询式监理。所谓咨询式监理,即只对用户方就企业信息化过程中提出的问题进行解答,其性质类似于业务咨询或方案咨询。这种方式费用最少,监理方的责任最轻,适合于对信息化有较好的把握、技术力量较强的用户方采用。
(2)里程碑式监理。是将信息系统的建设划分为若干个阶段,在每一个阶段结尾都设置一个里程碑,在里程碑到来时通知监理方进行审查或测试。一般来讲,这种方式比咨询式监理的费用要多,监理方也要承担一定的责任。不过,里程碑的确定需要乙方的参与,或者说监理合同的确立需要开发方的参与,否则就会因对里程碑的界定不同而互相扯皮。
(3)全程式监理。全程式监理是一种复杂的监理方式,不但要求对系统建设过程中的里程碑进行审查,还应该派相应人员全程跟踪,收集系统开发过程中的信息,不断评估开发方的开发质量和效果。这种方式费用最高,监理方的责任也最大,适合那些对信息系统的开发不太了解、技术力量偏弱的用户方采用。
以上方法各有弊端。因为IT审计与项目监理不同,项目监理在项目开发结束以后就结束了,而IT审计在项目的整个生命中都存在,正因为如此,单独采用咨询的模式就不妥当。里程碑监理所采用的对软件开发过程的审查和测试,在一定程度上能及时发现软件错误,但是由于软件这种产品的特殊性,往往仅对一两个里程碑审查和测试,是不能发现其中的bug的,这样,软件产品就存在很大的风险。另一方面,由于在工程中交流的障碍,造成双方信息的不对称,还会由于交流不充分而造成不必要的错误。因此,综合三种模式,软件外包IT审计应采用图1的模式。
IT审计工作实施时,首先是IT项目发包方向IT审计负责人咨询,并请IT审计负责人派IT审计小组深入承包方工作现场,对项目进行全过程的实时监督、控制和管理,对项目出现的问题,及时提出改进的意见,在审计过程中接受专业审计小组的指导,并及时地向IT审计负责人报告审计结果。
作为软件项目中的项目外包或者部分功能模块的外包,由于软件开发的固有特性(风险大,柔性强,人为因素突出,结果不容易测量等) ,使软件项目的外包管理变得十分复杂。如何控制分包方的开发进度和质量等关键因素,需要在实践中不断探索。