银行软件自动化测试技术的应用
作者:网络转载 发布时间:[ 2010/11/30 15:45:27 ] 推荐标签:
20世纪70年代以前,软件测试的目的是寻找系统中存在的问题,找到Bug(错误和缺陷)算测试有效。随着测试理论的不断发展,近两年金融业对软件测试工作的重视程度不断提高,测试的目的不再是系统检测并发现问题,而是根据一系列模型的功能需求描述,在系统整个生命周期内对软件脚本的维护和用例管理。从这一发展脉络来看,软件测试已逐渐成为一项相对独立的工作,商业银行不仅要注重测试的过程,还要根据CMMI(能力成熟度模型集成)的规范要求,提出测试过程改进方法。
在银行软件项目开发周期中,软件测试是保障软件质量的后一道关口。当前,商业银行实施前后台分离是大势所趋,随着银行后台业务集中处理的需求不断增加,其后台系统开发规模将不断加大,各类系统的集成统一也渐趋专业化。测试作为与系统开发独立并行的领域已得到各商业银行的认可,对测试人员的能力要求也不断提高,甚至超过了一般开发人员。测试人员在开发项目组中的比例也在不断提高,并逐渐形成一个专业性的测试部门。由于有些测试活动靠手工方式是难以实现的,一些银行在软件测试工作中现已采用相对应的自动化测试工具,这意味着在测试活动中减少相当部分资源开销。一些测试项目用手工来做一般需要很长的时间,而采用自动化测试工具可能会大大缩短所需时间,所以正确选择自动化测试工具是非常重要的。
一、银行软件系统测试的特点
1.银行应用系统的特点
目前,每个商业银行郁有一个核心业务系统,其主要功能是对客户账务进行实时处理,其他各类系统会直接或间接地与核心业务系统进行交互,在核心业务系统中记录和更新客户账务的变动,还包括计息、清算等实时业务。业务应用范围除网上银行、ACE/}E面、呼叫中心、信贷、资产托管、资金风险分析等,还包括大量的中间业务,如外汇买卖业务、基金业务等。有的系统之间关联特别紧密,所以在软件测试中会涉及相关系统接口的测试,往往还需要搭建系统的测试环境和准备测试所需数据、业务用例等。
2.银行软件系统的复杂性
软件系统本身具有复杂性。开发人员在系统设计时会考虑到各种各样的业务需求,例如,客户服务系统包含信贷管理子系统、风险分析和监控子系统、资金交易和分析子系统、网上银行子系统等,还会涉及账务处理,而账务处理流程相对比较复杂,精确性要求很高。如果系统是面向互联网客户的,则首先考虑的是其安全性,其次是在线用户数量和并发用户数量等。银行软件系统开发使用的编程语言、工具较多,往往采用一些非常用的技术,需要在测试中特别考虑。例如,采用Pushlet技术的测试用例,主要模拟数万用户同时在线的系统环境。
3.部署网络和硬件环境复杂
基于系统资源利用率和性能的技术要求,银行往往会采用集群技术,这也是软件测试的一个方面。即使不使用服务器集群,通常会实施双机热备,这也是关键测试点之一。如果总行部署软件系统,则不仅要考虑各地分支行网络带宽的问题,还要考虑模拟测试环境的问题。如果采用总行、分行多级数据库服务器的架构,还要考虑数据一致性、账户并账等问题。另外,银行的中间件服务器(~tlTuxdeo)往往也需要进行相应的测试。
4.数据移植
在新系统上线运行前,往往需要把原有系统的数据移植过来,这涉及数据移植的问题。数据移植不是简单的数据迁移,因为新旧系统之间数据字典是不同的,对没有的字段的处理是麻烦的,而比对移植后的数据也是比较麻烦的,可能需要开发比对工具。
5.核心批处理及财务并账处理
银行的核心系统每天都要进行批处理,这需要提前设计好批处理测试方案及批处理与正常测试之间的协调计划等。批处理测试完成后,重要的是报表的检查测试,有时需要核实几十份报表,要求测试人员具备一定的银行业务知识才能看懂。
二、银行软件测试流程和自动化测试的要求
从商业银行应用开发工作的环节设置来看,包括前期的需求设计、整体设计、系统设计、编码、模块自测、集成测试、系统测试等软件项目开发周期中的全部环节。一般来讲,一个项目开始前要先进行需求分析,然后根据项目的技术特点和需求编写总体方案,在方案通过评审以后进行系统设计,并细化需求报告,直至达到可以编程的程度再进行编码。编码过程中开发人员主要采用自测、代码检查等方法进行白盒测试。在各模块的编码结构测试通过后,需将项目的所有模块或子系统进行集成,即生成系统界面、业务处理逻辑过程和主机账务处理等环节,从而保障系统功能符合设计的基本需求,但测试工作仍比较粗糙。下一环节则需进行比较全面的系统测试,遍历项目的所有用例及用例的各种情况,包括边界值的测试和优化需求、解决生产问题的回归测试等。此阶段结束表明系统测试结束,并形成具有完整功能的软件版本。
基于以上流程,从项目启动之Et起,测试人员要参与并了解需求报告的评审,以便进行测试方案的制定和系统的总体设计,这一过程是与开发人员的工作同步进行的。测试方案的设计包括使用何种策略和用例,是否使用自动测试脚本等。测试方案确定后即可准备测试环境和相关测试所需数据。在集成测试开始前,开发与测试工作都是并行的,直到集成测试阶段才彼此进行沟通和合并。在人员组成方面,测试人员与开发人员的比例一般要求为1:2。新测试人员上岗前要接受基本的银行业务培训,之后再对他们进行测试理论、测试规范、测试方法的具体培训,形成对于测试的基本概念。目前,商业银行开发的自助渠道系统比较多,使用网上银行和电话银行的客户本身不具备一定的金融基础知识,也不熟悉系统的架构组成,所以新测试人员以普通客户的身份进行模拟测试,可发现软件中的问题,比如,让他们开立网上银行账户,先熟悉相关系统的功能,再参与到项目中去。通过有针对性的培训,他们会在具体的项目中锻炼成长。
$News_page$
在测试技术和工具应用方面,采用自动化测试技
术可节省大量的人力,自动化测试主要应用在压力测试上,用来模拟系统压力和并发环境。自动化测试是需要写测试脚本的,这些脚本都是由测试经验丰富的开发人员编写的,因为自动化测试需建立在对系统了解的基础上,并且测试人员要把这些结果全部用程序的方式写出来,相当于用程序去测试程序。此外还要考虑测试工具、方法及平台的支持,这是进行自动化测试的基础。
三、自动化测试技术在银行软件开发中的应用
自动化测试的本质在于通过事先编译好的程序来调用测试设备的底层API,使测试设备具有一定的自动执行功能。目前这类程序通常由语言来编写,前者能提供较好的封装性和可重用性,后者则是一种脚本语言,简单易学,开发速度快且支持高级正则表达式和强大的文本处理能力,但不容易集成到一个统一的测试平台中。孰优孰劣不在本文讨论的范围之中,但是无论用哪种语言开发自动化测试软件,它只能是测试的一种手段,它使测试人员能快速实施一个复杂的测试用例。测试人员可以将更多的精力放在测试用例的方案制定上,而不是繁琐的配置和长时间的等待。。自动化测试的目的是减少部分手工测试,将更多人力资源投入到更有价值的工作中。自动化测试技术是将来大部分测试工程师必备的一项技能。在银行软件开发中实施自动化测试,必须保障实施自动化测试的项目具备开展自动化测试的一些先决条件。那么,什么项目可采用自动化测试?实施过程中该注意什么?实施自动化测试必须具备以下条件。
(1)需要得到银行高层领导的认同,同时成立专业的测试部门是很重要的。比尔?盖茨曾经说过“很多人都认为微软是一家软件开发公司,而事实上,我们是一家软件测试公司”这样的话,从中可以看出测试是非常重要的。从长远发展来看,自动化测试将是今后的一个发展方向。
(2)在大规模使用自动化测试工具前,必须要有专人针对不同的测试对象,了解选用哪种测试工具为宜。自动化测试工具分为单元测试工具、功能自动化工具和性能自动化工具,究竟哪种工具更适合相关系统的测试,还需要专业人员进行评估。
在选用工具方面,还要充分考虑到工具的可集成性、可扩展性及平台兼容性。因为实际工作中,我们常常需要把测试流程、需求管理、缺陷管理、配置管理结合得更紧密,通过工具去统一管理。这些都是在选用工具时要考虑到的因素。比如,无论是采用Java还是.NET技术开发系统,大多数商用自动化工具会根据现今流行的开发平台提供一种自动化测试的解决方案,而不同的测试项目又有相应的测试工具。
如果考虑到采购成套商业软件比较昂贵,还可以考虑一下开源的测试工具。这些工具往往具有小巧、灵活多变、免费的特性,还有个好处是它的开源。已经比较出名的有Apache的Jmeter,Jtest,OpenStar等。另外由IBM出资1000多万元的开源项目Eclipse,也许是能和JBuilder相媲美的开源的开发环境。目前此平台上虽然有了TPTP,但我们同样可以在Eclipse上完成相关系统的功能和性能测试。
也许以上工具无法满足测试的特殊需求,那么好的方法是自行开发测试工具。这主要集中在嵌入式系统方面,比如手机银行需要做到即时、无误的发送短消息,而一般常用的工具是没有办法做到的,那只能考虑自行开发测试工具了。
(3)在全面实施自动化测试前,笔者建议好进行小规模的实验。这样做的好处既能够以小见大,从实验看出自动化测试的雏形,也可以总结不足之处,在后期的全面实施中尽量避免。此外,还可以把实验的成效推广开来,为后期工作做好铺垫。
(4)自动化测试推广中,适当进行一些工具的使用技能以及相关知识的培训还是很有必要的。在以往的测试中,我们发现由于测试工程师掌握的技能知识存在差距,每个人对自动化测试工具的操作有快有慢。为使其能尽快应用到日常测试工作中,减轻部分重复性测试的强度,对测试工程师进行培训是必不可少的。
(5)正如软件生命周期有需求分析阶段一样,在编写自动化测试脚本之前也需要收集需求,这些需求主要是为后期编写脚本所选取的。这些需求可以根据需求文档,或选择测试用例来转化成脚本,还可以让需求分析人员推荐几个常用的、相对简单的流程转化成脚本。需求好比源头,从源头抓起才能开发出高质量的脚本。
(6)做好以上一系列准备工作后,要求对收集来的需求进行分析,设计出一个好的测试方案。工具只能帮助测试人员去更好地进行测试,至于怎样使用才能提高工作效率,需要测试人员在实施前期进行更多的思考,比如把一个好的设计方案转化成后期的自动化脚本等。因为脚本是不会创造性地发现本身没有涉及的缺陷,所以制定一个全面、详细的设计方案显得尤其重要。另外,从程序可复用的角度考虑,按照模块粒度大小对脚本进行规划也很重要。例如,将一些使用率高的模块录制成共享脚本,使用者只需要进行一些简单的参数设置,而无需考虑内部的具体实现机制,这可以有效减少测试人员的工作量。
(7)对工具有了一定认识以后,开发测试脚本还必须遵循一些规范,类似于程序员编程规范,测试脚本的开发同样要有编写规范。养成这样的好习惯是为了能更方便地维护脚本,避免增加后期的维护量和方便测试人员使用。在保障开发脚本回放没有问题的基础上,可适当增加出错处理功能来增强脚本的功能。同时,在脚本中加入检查点,把原来需要人工校验的软件功能让脚本去检测。在脚本中增加数据驱动方法,使脚本能覆盖更的分支路径,进一步提高脚本的集成度,不断增强脚本测试的自动化水平。
(8)必须安排专人负责推动自动化测试的开展,同时还需配备专人负责维护脚本,甚至可以引入配置管理工具来统一管理脚本。只有这样,我们才会从中积累更多的测试资源,才能更广泛地推广自动化测试。总之,自动化测试的优势是显而易见的,它不仅可以帮助我们提高测试准确性和测试效率,还可以降低测试中的人工错误率。但自动化测试要求被测试软件版本比较稳定、功能基本不变。对于开发周期短且不断更新中的项目,采用自动化测试手段是不现实的。目前,自动化测试工具主要应用于重复性很高的测试上。因此,合理应用自动化测试,对提高银行软件测试效率大有裨益。

sales@spasvo.com