張愛玲
(西安理工大學(xué),陜西 西安 710082)
經(jīng)濟(jì)的國(guó)際化促進(jìn)了軟件產(chǎn)業(yè)的國(guó)際化,軟件國(guó)際化生產(chǎn)和全球服務(wù)已成為更多國(guó)際軟件公司的發(fā)展策略。軟件產(chǎn)品要獲得更多的國(guó)際市場(chǎng)份額,必須進(jìn)行軟件國(guó)際化設(shè)計(jì)、開發(fā)、測(cè)試和服務(wù)。
為了滿足國(guó)際化軟件世界范圍內(nèi)發(fā)布的需要,軟件的國(guó)際化設(shè)計(jì)和本地化工程處理是兩個(gè)重要步驟。作為軟件質(zhì)量保證的國(guó)際化軟件測(cè)試過程包含一系列相互關(guān)聯(lián)的測(cè)試技術(shù)和流程。在廣泛采用國(guó)際化開發(fā)模式的基礎(chǔ)之上,如何提高這些測(cè)試的效率值得進(jìn)一步研究。
國(guó)際化軟件測(cè)試包括軟件國(guó)際化測(cè)試和軟件本地化能力測(cè)試。軟件的國(guó)際化測(cè)試是重要的測(cè)試階段,必須在本地化測(cè)試之前進(jìn)行。國(guó)際化軟件的測(cè)試目的是判斷軟件的國(guó)際化設(shè)計(jì)程度,確定軟件是否支持可能的區(qū)域,本地化是否容易。
軟件本地化測(cè)試的對(duì)象是本地化的軟件,需要在本地化的操作系統(tǒng)上進(jìn)行。本地化測(cè)試過程中,需要同時(shí)運(yùn)行源程序軟件和本地化軟件,以源程序軟件結(jié)果作為本地化軟件的主要參考。
測(cè)試工具(尤其是自動(dòng)化工具)在如今的測(cè)試過程中扮演著重要角色。盡管自動(dòng)化測(cè)試無法完全取代手動(dòng)測(cè)試,但許多測(cè)試領(lǐng)域都因自動(dòng)化測(cè)試的引入而獲益匪淺。例如,通過使用自動(dòng)化測(cè)試工具,可以有效地驗(yàn)證本地化產(chǎn)品的功能或測(cè)試產(chǎn)品的全球化程度。
測(cè)試工具通過對(duì)原始應(yīng)用程序和本地化后的應(yīng)用程序?qū)φ者\(yùn)行自動(dòng)化測(cè)試,可以驗(yàn)證應(yīng)用程序的本地化是否對(duì)功能造成破壞。使用自動(dòng)化測(cè)試,無論UI語言是什么,工具都可以測(cè)試其功能。此外,為確保產(chǎn)品已全球化,在測(cè)試過程中需要采用更廣泛的測(cè)試輸入范圍以及更多樣的環(huán)境設(shè)置。自動(dòng)化操作可更輕松地應(yīng)對(duì)測(cè)試方案數(shù)量上的增加,并可以有效地跟蹤全球化測(cè)試的結(jié)果。
雖然自動(dòng)化測(cè)試過程是在全球化環(huán)境下針對(duì)新產(chǎn)品運(yùn)行一些可信賴的舊有測(cè)試工具,但如果被測(cè)應(yīng)用程序已被翻譯,則檢查應(yīng)用程序UI功能性的測(cè)試工具可能會(huì)被中斷。即使未受譯文的影響,其他因素也可能導(dǎo)致測(cè)試結(jié)果不正確,例如工具驗(yàn)證日期時(shí)認(rèn)定日期格式是固定的。而在全球化的應(yīng)用程序中,日期格式會(huì)隨著區(qū)域和地區(qū)的不同而不同,這樣就會(huì)造成自動(dòng)化測(cè)試工具不起作用。
為避免上述問題的發(fā)生,測(cè)試工具的開發(fā)人員必須與全球化軟件的開發(fā)人員遵循相同的規(guī)則。測(cè)試工具必須是全球化的,必須動(dòng)態(tài)調(diào)整其區(qū)域設(shè)置,并且應(yīng)該能夠處理國(guó)際化文本數(shù)據(jù)。此外,如果需要通過名稱來訪問可本地化對(duì)象,則測(cè)試工具必須是可本地化的。
目前全球化測(cè)試的問題主要有:(1)在針對(duì)國(guó)際化測(cè)試技術(shù)和策略中實(shí)現(xiàn)自動(dòng)化測(cè)試腳本的復(fù)用問題。(2)測(cè)試環(huán)境的語言及字符集設(shè)置的選擇,如果缺乏這種選擇或者錯(cuò)誤地進(jìn)行了選擇,則可能在具體測(cè)試過程中帶來系統(tǒng)由于碼制的切換錯(cuò)誤而出現(xiàn)亂碼的問題。(3)多種語言顯示的測(cè)試問題,軟件的翻譯質(zhì)量包括翻譯的準(zhǔn)確性、完整性、一致性,以及特定區(qū)域市場(chǎng)的文化、傳統(tǒng)、習(xí)俗等內(nèi)容。如果要實(shí)現(xiàn)對(duì)翻譯的檢查,需要根據(jù)所測(cè)語言而準(zhǔn)備相應(yīng)的翻譯文件進(jìn)行對(duì)比。當(dāng)測(cè)試多種語言時(shí),會(huì)增加測(cè)試人員的負(fù)擔(dān)。(4)多語言和字符集的測(cè)試數(shù)據(jù)的自動(dòng)生成,為了測(cè)試軟件對(duì)接收、處理和發(fā)送不同字符集的能力,需要實(shí)現(xiàn)針對(duì)不同語言和字符集數(shù)據(jù)的自動(dòng)產(chǎn)生。
總之,伴隨對(duì)軟件測(cè)試的日益重視以及自動(dòng)化測(cè)試的逐步引進(jìn),各種自動(dòng)化測(cè)試工具相繼推出。但是各種自動(dòng)化測(cè)試工具的可應(yīng)用性程度和支持側(cè)重有所不同,并且廣泛缺乏對(duì)國(guó)際化測(cè)試的支持。
針對(duì)以上論述的國(guó)際化軟件測(cè)試的技術(shù)實(shí)現(xiàn)難點(diǎn),通過對(duì)Selenium RC-java工具進(jìn)行分析用以實(shí)現(xiàn)其對(duì)國(guó)際化支持的擴(kuò)展。
Selenium是由ThoughtWorks團(tuán)隊(duì)開發(fā)的Web應(yīng)用程序自動(dòng)化測(cè)試的工具,適合進(jìn)行功能測(cè)試、驗(yàn)收測(cè)試。Selenium RC基本測(cè)試流程如圖1所示,它提供了一個(gè)Selenium Server,可以自動(dòng)開始/關(guān)閉/控制所支持的瀏覽器。Selenium Server與瀏覽器使用AJAX(XmlHttpRequest)直接通信,可以使用簡(jiǎn)單的HTTP GET/POST請(qǐng)求直接向服務(wù)器發(fā)送命令,即可以使用任何可以發(fā)出HTTP請(qǐng)求的編程語言在瀏覽器中自動(dòng)執(zhí)行Selenium測(cè)試。
圖1 基本測(cè)試運(yùn)行流程及國(guó)際化測(cè)試擴(kuò)展
Selenium RC和大多數(shù)的自動(dòng)化測(cè)試工具一樣,也在很多方面缺乏對(duì)國(guó)際化測(cè)試的支持。如在沒有指定瀏覽器參數(shù)文件的情況下,Selenium Server會(huì)啟動(dòng)一個(gè)系統(tǒng)默認(rèn)設(shè)置的瀏覽器執(zhí)行測(cè)試,默認(rèn)設(shè)置語言為當(dāng)前瀏覽器版本語言;操作函數(shù)直接使用大量頁面元素作為參數(shù),對(duì)這類數(shù)據(jù)取值存在依賴,使得Selenium測(cè)試變得脆弱且需要針對(duì)測(cè)試腳本中同一頁面元素文本屬性值進(jìn)行重復(fù)修改;不能提供多語言和字符集的測(cè)試數(shù)據(jù)等。
針對(duì)Selenium工具的不足,通過對(duì)測(cè)試腳本結(jié)構(gòu)的設(shè)計(jì),以及在Selenium RC封裝的Java工具包中添加對(duì)環(huán)境設(shè)置的選擇和參數(shù)文件的處理等改進(jìn),實(shí)現(xiàn)針對(duì)國(guó)際化測(cè)試的擴(kuò)展任務(wù)。
為了達(dá)到在多國(guó)語言測(cè)試時(shí)復(fù)用整套腳本的目的,將所有取決于特定語言文化的測(cè)試元素獨(dú)立于測(cè)試腳本代碼存儲(chǔ)在參數(shù)文件內(nèi)。
(1)存放固定參數(shù)的參數(shù)文件。在這類文件中,存放針對(duì)任何語言版本測(cè)試過程中均不需改變的參數(shù)數(shù)據(jù)。這些固定參數(shù)可以是測(cè)試用例運(yùn)行過程中輸入的字符串,也可以是界面元素的屬性值,例如測(cè)試機(jī)IP地址、界面上按鈕的ID值、界面上表格的xpath值等。
(2)根據(jù)測(cè)試語言和字符集,存放輸入的隨機(jī)數(shù)據(jù)的參數(shù)文件。根據(jù)測(cè)試語言和字符集要求,分析涉及直接或間接處理字符串輸入/輸出的測(cè)試案例,抽取其中可以被替換為任意國(guó)際輸入類型的隨機(jī)數(shù)據(jù)。在執(zhí)行測(cè)試時(shí),通過替換這些輸入數(shù)據(jù),以測(cè)試軟件對(duì)處理不同語言和字符集的能力。例如,在執(zhí)行新建用戶這個(gè)測(cè)試用例時(shí),需要輸入一個(gè)新建用戶的用戶名。在設(shè)計(jì)中,這個(gè)用戶名可以為任意國(guó)際輸入類型的數(shù)據(jù)。為了測(cè)試軟件對(duì)語言為英文、字符編碼為ISO-8859-1的輸入數(shù)據(jù)UserName的處理能力,將該輸入數(shù)據(jù)作為參數(shù)存儲(chǔ)在參數(shù)文件進(jìn)行測(cè)試。
(3)根據(jù)測(cè)試語言,存放界面元素的文本屬性值的參數(shù)文件。在Selenium工具包中,操作函數(shù)直接使用界面元素的屬性值作為參數(shù),而這些屬性值的類型包括name、ID、xpath、txt等等。當(dāng)測(cè)試的目標(biāo)語言發(fā)生改變時(shí),界面元素的文本屬性值也根據(jù)目標(biāo)語言對(duì)應(yīng)的翻譯文本而發(fā)生改變。如果這類參數(shù)與測(cè)試語言不相匹配,測(cè)試會(huì)因?yàn)榻缑嫖谋緮?shù)據(jù)不合法而失敗。因此,將這類參數(shù)存儲(chǔ)在單獨(dú)的參數(shù)文件中,以方便對(duì)其靈活處理。例如,在測(cè)試英文版本軟件時(shí),需要點(diǎn)擊一個(gè)命名為Apply的按鈕,將其名字作為參數(shù)存儲(chǔ)在參數(shù)文件中。
以某具體Web產(chǎn)品的國(guó)際化測(cè)試項(xiàng)目為例,測(cè)試項(xiàng)目全過程是通過使用ant這個(gè)構(gòu)建部署工具作為流程腳本引擎,自動(dòng)調(diào)用程序而完成。整個(gè)過程可以全部自動(dòng)化,測(cè)試人員只需輸入簡(jiǎn)單的配置命令。當(dāng)然在每日構(gòu)建的基礎(chǔ)上,還可以不用輸入命令而通過定時(shí)任務(wù)的設(shè)定實(shí)現(xiàn)每天自動(dòng)執(zhí)行回歸測(cè)試。
滿足這種國(guó)際化回歸測(cè)試的要求,首要條件就是有正確的初始化測(cè)試環(huán)境——需要添加對(duì)測(cè)試環(huán)境語言和字符集的設(shè)置。這種語言及字符集設(shè)置的選擇,不僅包括對(duì)當(dāng)前所測(cè)軟件語言版本的選擇,還需要包括當(dāng)前操作系統(tǒng)等環(huán)境語言與字符集設(shè)置的選擇。
在沒有指定瀏覽器參數(shù)文件的情況下,Selenium Server只會(huì)啟動(dòng)一個(gè)系統(tǒng)默認(rèn)設(shè)置的瀏覽器執(zhí)行測(cè)試,默認(rèn)設(shè)置語言為當(dāng)前瀏覽器版本語言。特定瀏覽器語言和參數(shù)字符編碼的設(shè)定主要通過以下方法實(shí)現(xiàn):首先,根據(jù)測(cè)試人員的選擇,將需要測(cè)試的語言和字符集存儲(chǔ)在配置文件中;然后,根據(jù)測(cè)試要求的瀏覽器語言和字符集設(shè)置,在Firefox的參數(shù)文件prefs.js中添加為用戶語言首選項(xiàng);最后,在啟動(dòng)Selenium Server時(shí),添加“firefox-ProfileTemplate”選項(xiàng)并指向已修改的Firefox的參數(shù)文件目錄。
客戶端操作系統(tǒng)(Redhat4.0)的語言和字符集,可以通過修改文件/etc/sysconfig/i18n或者通過設(shè)置LC_ALL和LANG 2個(gè)參數(shù)實(shí)現(xiàn)。
上述方法也可以擴(kuò)展到多個(gè)語言和字符集環(huán)境的設(shè)置的情況。首先,將所有需要測(cè)試的語言的字符集存儲(chǔ)在配置文件中;然后,串行或者并行地在測(cè)試機(jī)上進(jìn)行測(cè)試。其中,串行執(zhí)行是指依次正確初始化測(cè)試環(huán)境,循環(huán)執(zhí)行測(cè)試流程,而并行執(zhí)行是通過Socket通信將信息傳遞到多臺(tái)目標(biāo)測(cè)試機(jī),并行初始化測(cè)試環(huán)境,執(zhí)行全部測(cè)試流程。
本項(xiàng)目中的翻譯文件采取XLIFF文件格式。XLIFF是一種XML應(yīng)用,每個(gè)文本片段保存在一個(gè)翻譯單元中(
在上述自動(dòng)化的參數(shù)文件替換過程中,需要對(duì)大量的XML格式的翻譯文本數(shù)據(jù)進(jìn)行查找。但是,有一些特殊字符在寫入到XML文件時(shí),會(huì)被實(shí)體引用所替換。所以,目標(biāo)界面上顯示的字符串,可能出現(xiàn)與寫入在XLIFF翻譯文件中存儲(chǔ)的翻譯字符串不一致的現(xiàn)象。
針對(duì)上述這類翻譯字符串與顯示字符串不一致的情況,可以通過正則表達(dá)式解決。利用正則表達(dá)式的模式匹配表達(dá)法,對(duì)字符串進(jìn)行比較、匹配,從而判斷測(cè)試結(jié)果是否正確。例如:軟件界面上存在一個(gè)按鈕,英文版本的按鈕顯示的字符串為“About(A)”,而簡(jiǎn)體中文版本的按鈕顯示的字符串為 “關(guān)于 (A)”。然而,寫入在XLIFF文件時(shí),英文對(duì)應(yīng)的翻譯字符串應(yīng)為“About(&;A)”,簡(jiǎn)體中文對(duì)應(yīng)的翻譯字符串應(yīng)為“關(guān)于(&;A)”。因此,在進(jìn)行簡(jiǎn)體中文本地化測(cè)試時(shí),首先需要利用正則 表 達(dá) 式 符 號(hào) “*” 替 換 “&;”, 通 過 “About*” 查 找XLIFF文件;然后,將查找結(jié)果“關(guān)于(&;A)”處理為“關(guān)于*”,再進(jìn)行界面翻譯測(cè)試。
在執(zhí)行國(guó)際化測(cè)試時(shí),需要測(cè)試軟件對(duì)處理不同語言和字符集的能力。這種能力,可以通過簡(jiǎn)單的預(yù)處理進(jìn)行測(cè)試。即簡(jiǎn)單替換前述的第二類參數(shù)文件。具體步驟如下:(1)需要維護(hù)一個(gè)包含所有待測(cè)語言和字符集的字符庫;(2)根據(jù)參數(shù)文件中參數(shù)的字節(jié)數(shù),從字符庫中抽取制定測(cè)試語言和字符集的字符進(jìn)行替換。
為了實(shí)現(xiàn)自動(dòng)生成指定語言字符集的測(cè)試數(shù)據(jù),上述方法相對(duì)簡(jiǎn)單易行。但是伴隨測(cè)試語言和字符集范圍的擴(kuò)展,字符庫需要覆蓋的語言和字符集也需要相應(yīng)增加,這將帶來巨大的維護(hù)工作量。另外,如果需要字符庫覆蓋較全面的東亞語言字符,也將帶來一定的工作量。
上述擴(kuò)展方案針對(duì)Web技術(shù)的大型國(guó)際化應(yīng)用軟件的測(cè)試,主要使用Selenium RC-java工具開發(fā)測(cè)試腳本。項(xiàng)目要求同時(shí)實(shí)現(xiàn)在Linux+Firefox3.0環(huán)境下,對(duì)軟件的九種語言版本進(jìn)行國(guó)際化測(cè)試。
在實(shí)際的測(cè)試工作中,運(yùn)用了測(cè)試元素獨(dú)立、動(dòng)態(tài)選擇語言字符集、根據(jù)標(biāo)準(zhǔn)化XLIFF格式轉(zhuǎn)化三項(xiàng)測(cè)試軟件,以及特殊字符翻譯處理、測(cè)試數(shù)據(jù)生成兩項(xiàng)實(shí)際技術(shù),對(duì)Selenium RC-Java工具進(jìn)行了必要的擴(kuò)充和修改。實(shí)踐驗(yàn)證了其對(duì)于國(guó)際化測(cè)試的支持,取得了良好的效果。
[1]崔啟亮,胡一鳴.國(guó)際化軟件測(cè)試[M].北京:電子工業(yè)出版社,2006.
[2]李華宇.Java的國(guó)際化和本地化原理及解決方法 [J].微型機(jī)與應(yīng)用,2001(11).
[3]周洪斌.淺析Java國(guó)際化編程及其實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2005(12).
[4]包竹葦,李淼,張建.Java網(wǎng)絡(luò)傳輸中字符編碼問題的研究[J].計(jì)算機(jī)工程與應(yīng)用,2007(4).
[5]許暉,李涓子.J2EE系統(tǒng)國(guó)際化問題的解決方案[J].計(jì)算機(jī)工程,2005(18).
[6]蘇紅帆,黃寧寧,韋錄豐.Windows環(huán)境下軟件國(guó)際化開發(fā)的解決方案[A].廣西計(jì)算機(jī)學(xué)會(huì)2006年年會(huì)論文集[C],2006.
[7]姜湘崗,章小莉.實(shí)現(xiàn)軟件多語言用戶界面方法之分析[J].北京電子科技學(xué)院學(xué)報(bào),2006(2).