软件测试是软件开发过程中的一个重要组成部分,是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。
为了满足国际化软件世界范围内发布的需要,软件的国际化设计和本地化工程处理是两个重要步骤。作为软件质量保证的国际化软件测试过程包含一系列相互关联的测试技术和流程。软件的国际化测试是重要的测试阶段,必须在本地化测试之前进行。国际化软件的测试目的是判断软件的国际化设计程度,确定软件是否支持可能的区域,本地化是否容易。
软件本地化测试的对象是本地化的软件,需要在本地化的操作系统上进行。本地化测试过程中,需要同时运行源程序软件和本地化软件,以源程序软件结果作为本地化软件的主要参考。
1 测试工具国际化弱点
测试工具在如今的测试过程中扮演着重要角色。尽管自动化测试无法完全取代手动测试,但许多测试领域都因自动化测试的引入而获益匪浅。
测试工具通过对原始应用程序和本地化后的应用程序对照运行自动化测试,可以验证应用程序的本地化是否对功能造成破坏。此外,为确保产品已化,在测试过程中需要采用更广泛的测试输入范围以及更多样的环境设置。自动化操作可更轻松地应对测试方案数量上的增加,并可以有效地跟踪化测试的结果。
虽然自动化测试过程是在化环境下针对新产品运行一些可信赖的旧有测试工具,但如果被测应用程序已被翻译,其他因素也可能导致测试结果不正确,例如工具验证日期时认定日期格式是固定的。而在化的应用程序中,日期格式会随着区域和地区的不同而不同,这样就会造成自动化测试工具不起作用。
为避免上述问题的发生,测试工具的开发人员必须与化软件的开发人员遵循相同的规则。测试工具必须是化的,必须动态调整其区域设置,并且应该能够处理国际化文本数据。此外,如果需要通过名称来访问可本地化对象,则测试工具必须是可本地化的。
目前化测试的问题主要有:(1)在针对国际化测试技术和策略中实现自动化测试脚本的复用问题。(2)测试环境的语言及字符集设置的选择。(3)多种语言显示的测试问题,软件的翻译质量包括翻译的准确性、完整性、一致性,以及特定区域市场的文化、传统、习俗等内容。如果要实现对翻译的检查,需要根据所测语言而准备相应的翻译文件进行对比。当测试多种语言时,会增加测试人员的负担。(4)多语言和字符集的测试数据的自动生成,为了测试软件对接收、处理和发送不同字符集的能力,需要实现针对不同语言和字符集数据的自动产生。
总之,伴随对软件测试的日益重视以及自动化测试的逐步引进,各种自动化测试工具相继推出。但是各种自动化测试工具的可应用性程度和支持侧重有所不同,并且广泛缺乏对国际化测试的支持。
2 测试工具国际化的扩展
针对以上论述的国际化软件测试的技术实现难点,通过对Selenium RC-java工具进行分析用以实现其对国际化支持的扩展。
Selenium是由ThoughtWorks团队开发的Web应用程序自动化测试的工具,适合进行功能测试、验收测试。Selenium RC基本测试流程如图1所示,Selenium Server与浏览器使用AJAX(XmlHttpRequeST)直接通信,可以使用简单的HTTP GET/POST请求直接向服务器发送命令,即可以使用任何可以发出HTTP请求的编程语言在浏览器中自动执行Selenium测试。
Selenium RC和大多数的自动化测试工具一样,也在很多方面缺乏对国际化测试的支持。如在没有指定浏览器参数文件的情况下,Selenium Server会启动一个系统默认设置的浏览器执行测试,默认设置语言为当前浏览器版本语言;操作函数直接使用大量页面元素作为参数,对这类数据取值存在依赖,使得Selenium测试变得脆弱且需要针对测试脚本中同一页面元素文本属性值进行重复修改;不能提供多语言和字符集的测试数据等。
针对Selenium工具的不足,通过对测试脚本结构的设计,以及在Selenium RC封装的Java工具包中添加对环境设置的选择和参数文件的处理等改进,实现针对国际化测试的扩展任务。
2.1 将特定语言的测试元素独立于测试脚本代码,支持多语言测试的脚本复用
为了达到在多国语言测试时复用整套脚本的目的,将所有取决于特定语言文化的测试元素独立于测试脚本代码存储在参数文件内。
(1)存放固定参数的参数文件。在这类文件中,存放针对任何语言版本测试过程中均不需改变的参数数据。这些固定参数可以是测试用例运行过程中输入的字符串,也可以是界面元素的属性值,例如测试机IP地址、界面上按钮的ID值、界面上表格的xpath值等。
(2)根据测试语言和字符集,存放输入的随机数据的参数文件。根据测试语言和字符集要求,分析涉及直接或间接处理字符串输入/输出的测试,以测试软件对处理不同语言和字符集的能力。例如,在执行新建用户这个测试用例时,需要输入一个新建用户的用户名。在设计中,这个用户名可以为任意国际输入类型的数据。为了测试软件对语言为英文、字符编码为ISO-8859-1的输入数据Username的处理能力,将该输入数据作为参数存储在参数文件进行测试。
(3)根据测试语言,存放界面元素的文本属性值的参数文件。在Selenium工具包中,操作函数直接使用界面元素的属性值作为参数,而这些属性值的类型包括name、ID、xpath、txt等等。当测试的目标语言发生改变时,界面元素的文本属性值也根据目标语言对应的翻译文本而发生改变。例如,在测试英文版本软件时,需要点击一个命名为Apply的按钮,将其名字作为参数存储在参数文件中。
2.2 动态选择语言和字符集,支持多种语言测试过程
以某具体Web产品的国际化测试项目为例,测试项目全过程是通过使用ant这个构建部署工具作为流程脚本引擎,自动调用程序而完成。整个过程可以全部自动化,测试人员只需输入简单的配置命令。当然在每日构建的基础上,还可以不用输入命令而通过定时任务的设定实现每天自动执行回归测试。
满足这种国际化回归测试的要求,首要条件就是有正确的初始化测试环境——需要添加对测试环境语言和字符集的设置。这种语言及字符集设置的选择,不仅包括对当前所测软件语言版本的选择,还需要包括当前操作系统等环境语言与字符集设置的选择。
在没有指定浏览器参数文件的情况下,Selenium Server只会启动一个系统默认设置的浏览器执行测试,默认设置语言为当前浏览器版本语言。然后,根据测试要求的浏览器语言和字符集设置,在Firefox的参数文件prefs.js中添加为用户语言项;,在启动Selenium Server时,添加“firefoxProfileTemplate”选项并指向已修改的Firefox的参数文件目录。
客户端操作系统(Redhat4.0)的语言和字符集,可以通过修改文件/etc/sysconfig/i18n或者通过设置LC_ALL 和LANG 2个参数实现。
上述方法也可以扩展到多个语言和字符集环境的设置的情况。其中,串行执行是指依次正确初始化测试环境,循环执行测试流程,而并行执行是通过Socket通信将信息传递到多台目标测试机,并行初始化测试环境,执行全部测试流程。
2.3 通过对XLIFF格式的翻译文件的查找,实现测试页面上显示的翻译
本项目中的翻译文件采取XLIFF文件格式。XLIFF是一种XML应用,每个文本片段保存在一个翻译单元中(<trans-unit>)。
2.4 利用正则表达式,处理包含特殊字符的翻译单元
在上述自动化的参数文件替换过程中,需要对大量的XML格式的翻译文本数据进行查找。但是,有一些特殊字符在写入到XML文件时,会被实体引用所替换。所以,目标界面上显示的字符串,可能出现与写入在XLIFF翻译文件中存储的翻译字符串不一致的现象。
针对上述这类翻译字符串与显示字符串不一致的情况,可以通过正则表达式解决。例如:软件界面上存在一个按钮,英文版本的按钮显示的字符串为“About(A)”,而简体中文版本的按钮显示的字符串为“关于(A)”。然而,写入在 XLIFF文件时,英文对应的翻译字符串应为“About(&;A)”,简体中文对应的翻译字符串应为“关于(&;A)”。然后,将查找结果“关于(&;A)”处理为“关于*”,再进行界面翻译测试。
2.5 采用简单替换方式,自动生成指定语言字符集的测试数据
在执行国际化测试时,需要测试软件对处理不同语言和字符集的能力。这种能力,可以通过简单的预处理进行测试。具体步骤如下:(1)需要维护一个包含所有待测语言和字符集的字符库;(2)根据参数文件中参数的字节数,从字符库中抽取制定测试语言和字符集的字符进行替换。
为了实现自动生成指定语言字符集的测试数据,上述方法相对简单易行。但是伴随测试语言和字符集范围的扩展,字符库需要覆盖的语言和字符集也需要相应增加,这将带来巨大的维护工作量。另外,如果需要字符库覆盖较全面的东亚语言字符,也将带来一定的工作量。
上述扩展方案针对Web技术的大型国际化应用软件的测试,主要使用Selenium RC-java工具开发测试脚本。项目要求同时实现在Linux+Firefox3.0环境下,对软件的九种语言版本进行国际化测试。
目前,软件测试自动化的研究领域主要集中在软件测试流程的自动化管理以及动态测试的自动化(如单元测试、功能测试以及性能测试方面)。在这两个领域,与手工测试相比,测试自动化的优势是明显的。首先自动化测试可以提高测试效率,使测试人员更加专注于新的测试模块的建立和开发,从而提高测试覆盖率;其次,自动化测试更便于测试资产的数字化管理,使得测试资产在整个测试生命周期内可以得到复用,这个特点在功能测试和回归测试中尤其具有意义;此外,测试流程自动化管理可以使机构的测试活动开展更加过程化,这很符合CMMI过程改进的思想。根据OppenheimerFunds的调查,在2001年前后的3年中,范围内由于采用了测试自动化手段所实现的投资回报率高达1500%。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。