中国工商银行数据中心(北京) 陈林轶 兰秋颖
早在2009年的时候,美国财政部部长盖特纳就曾表明“美国大型银行十分有必要进行压力测试,而压力测试的重要性在于其透明性”。随后,美联储(FED)主席伯南克也明确表示“金融测试和财政部的注资计划将有利于美国金融体系的稳定性”,由此金融测试一词再度活跃在人们眼前。在国内,“十二五”期间就指出金融监管必须日益重视风险的防控,对金融系统的稳定性也提出越来越高的要求。如何保证系统的稳定和做好风险的防范,这对产品质量提出了更为严格的要求,加之国内商业银行系统的多次升级,同时城市商业银行和农村信用合作社由于自身研发人员与专业测试力量的不足,对专业化的测试人员衍生出更多的需求。
所谓测试是指“为发现软件错误而执行程序的过程”,是一种对程序的验证过程。在日新月异的科技信息时代,这种过程被运用到各行各业,其中不乏银行、保险等金融机构,而国内四大银行也均成立了相关测试机构,以此提高产品的质量、项目的质量和客户满意度。金融系统是一个风险与机遇并存的行业,由于风险的不可控性,开发出的金融产品往往带着不可预知的问题并可能会出现在实际运营中,并给金融系统埋下隐患。一旦触发了这些潜在的危机,会给金融行业带来不可估量的损失。比如:所供服务的不稳定导致服务的中断、柜员操作过程中遇到程序的错误提示等等,这就要求产品在推向客户之前经过大量的测试以维护其稳定性。由此可见,测试是银行业乃至整个金融行业面临的最大挑战之一。
测试有很多种类,包括性能测试、压力测试、功能测试、容错测试、界面测试、安全测试等等,每个测试类型中都有自己的测试方法,比如白盒测试、灰盒测试、黑盒测试等,测试人员运用这些测试方法保证金融产品能够正确满足客户的需求、产品设计流程的正确。但是谁负责承担测试角色,是设计出产品的开发人员,还是产品的项目经理,还是具备计算机基础知识的测试人员,或者说金融背景出身的业务人员等?这些一直是学者们讨论与争论的焦点,本文将从实际业务的角度和定性分析的角度探析独立测试的重要性。
所谓的第三方机构独立测试,就是指在测试过程中扮演测试角色的人员是由经济和管理上独立于开发机构的组织进行的。他们在经济资源和测试工作上不受开发机构的控制,而是单独的职能部门,专门负责产品与产品关联性的测试工作,因此他们测试的结果往往更具有客观性和可靠性,具有其他机构担任测试角色时所无法比拟的优势。
第一,独立的第三方测试机构是由专门的测试队伍构成,其目标就是为了在投产前发现产品缺陷来进一步提高产品的质量。早期开发人员在设计产品的同时会兼顾测试的角色,他们不单是程序编码人员,还是程序检测人员、程序维护人员等,这种多重身份不仅会给程序员增加工作负担,还会使他们的目标变得矛盾而不可协调。作为开发人员总是希望自己的产品是优良的、无缺陷的、能够满足用户需求的;但是作为程序检测人员总是希望自己能发现更多的缺陷,产品的设计过程是有漏洞的。如果程序员既承担开发的角色又承担测试的角色,则其目标难以统一并且不协调,既希望自己的产品是完美的又希望测试过程能发现更多的缺陷,最终的结果难免会出现偏差,工作目标变得矛盾而不统一。所以,研发人员开发出的金融产品,不应该由自己负责测试工作,而是应该由专门的测试人员测试,这样测试的目标不再是矛盾而不可协调的,而是希望在测试的过程中暴露出产品更多的缺陷与漏洞。
第二,金融产品的使用用户分类繁多,比如按资产规模、受教育程度、风险偏好程度分类等等,不同类型的客户对产品的需求是不统一的。比如:风险偏好高的客户会偏向于风险高的金融产品,而风险偏好低的客户会偏向于风险低的金融产品;对于资产规模较高的客户可能偏向理财产品(增值产品),而资产规模较低的客户可能偏向于基本的储蓄产品(保值产品)。多样化的客户群体、多样化的产品需求下,如果开发人员既设计金融产品又测试软件程序,测试任务不但繁重,而测试的重点可能会在程序的代码编码上,设计出的产品难免功能单一化、简单化。相反,如果测试由独立的第三方机构测试,测试人员的重点就放在测试工作上,从客户的角度出发去验证产品是否符合自己的要求,从柜员的角度出发验证产品设计流程是否合理。而测试员作为产品最直接的体验者,在测试的同时体验产品的功能,再将体验结果反馈至开发人员,比如产品界面展现是否合理、用户操作是否方便等。
第三,测试参与人员角色的多样化,意味着测试人员在测试过程中应该做到测试与业务融合。最初开发人员担任测试人员,其专业背景比较单一,可能局限在计算机专业,导致对产品的业务背景与设计原理了解不是很透彻。而如今参与测试的人员专业背景越来越多样化,包括金融相关专业、计算机相关专业、会计相关专业等。在测试的过程中,由这些具有多样化专业背景的测试人员测试,可以拓宽思路,设计出更多有实际意义的测试案例,测试案例也可以更加贴近真实的业务运用。相反,如果由程序员担任测试角色,其专业知识可能局限在计算机知识,而不了解产品背后真正的含义,在这样的情况下,测试只能从代码的正确性验证产品的质量,而不能更好地站在使用者的角度去检验金融产品功能是否正确。
第四,由于第三方测试机构在其经济和管理上具有独立性,所以可以充分发挥自己的测试角色,对产品以及产品之间的关联性做出验证。在产品设计成功后,测试人员应该尽早介入测试工作,了解项目的需求说明书。测试方法可以简单地分为静态测试、动态测试,而静态测试贯穿在整个测试过程中。在项目启动前期,测试人员应该认真审查项目的文档资料,其中包括软件需求说明书等,在分析文档的过程中,应当注意文档设计思路是否正确、是否有遗漏的地方,而测试员还可以在这个过程中提前学习项目的流程,包括项目中新加功能、删除功能、修改功能,这些都是在测试中需要特别注意第地方;动态测试,是静态测试的补充,在测试过程中发挥极其重要的角色,指的是通过运行软件程序来验证产品的质量。在动态测试过程中,独立的测试人员可以发挥自己的想象设计多样化的测试案例,测试中可以用等价类划分法、边界值分析法、错误猜测法等去验证产品设计的正确性。比如存款金额输入项,在测试过程中开发人员可以输入负数(边界值法)或者特殊字符,验证程序运行过程中是否有正确的提示。
软件测试保证产品的质量,而专业的测试是提升软件质量的重要手段,也是金融业防范风险的重要途径。承担软件测试角色的人员,应该是第三方专业化的测试团队,在经济与管理上独立于开发机构,充分发挥自己的测试角色。不但可以在测试过程中利用多种测试方法如静态测试、动态测试、功能测试、性能测试、压力测试、容错测试等,保证产品的质量;还可以从产品使用者的角度验证产品是否满足需求;同时对产品设计提出优化与建议反馈至开发部门,在开发部门的再次设计与修改后,再对产品做出功能性验证。在这种循环模式下,开发人员与第三方测试机构既是相互补充也是相互制约的,这种彼此制衡的关系不但有利于产品的稳定,还可以提升产品的质量甚至提升客户的满意度,让金融行业的创新与稳定都得以保证。所以测试的角色应该由第三方独立机构扮演,利用他们资源上、专业上、技能上等方面的优势,设计出更多精细化并且符合业务场景的测试案例,并及时将测试情况反馈至开发部门进行维护与调整,以此保证金融产品的质量与稳定性和灵活性。
[1] 黄锡滋.软件可靠性、安全性与质量保证[M].北京:电子工业出版社,2002.
[2] 徐中伟,吴芳美.软件测试质量的量度[J].计算机工程与运用,2002.
[3] 张丽波.基于自动化的软件测测与运用[J].广州:华南理工大学,2004.