張愛玲
(西安理工大學,陜西 西安 710082)
經濟的國際化促進了軟件產業的國際化,軟件國際化生產和全球服務已成為更多國際軟件公司的發展策略。軟件產品要獲得更多的國際市場份額,必須進行軟件國際化設計、開發、測試和服務。
為了滿足國際化軟件世界范圍內發布的需要,軟件的國際化設計和本地化工程處理是兩個重要步驟。作為軟件質量保證的國際化軟件測試過程包含一系列相互關聯的測試技術和流程。在廣泛采用國際化開發模式的基礎之上,如何提高這些測試的效率值得進一步研究。
國際化軟件測試包括軟件國際化測試和軟件本地化能力測試。軟件的國際化測試是重要的測試階段,必須在本地化測試之前進行。國際化軟件的測試目的是判斷軟件的國際化設計程度,確定軟件是否支持可能的區域,本地化是否容易。
軟件本地化測試的對象是本地化的軟件,需要在本地化的操作系統上進行。本地化測試過程中,需要同時運行源程序軟件和本地化軟件,以源程序軟件結果作為本地化軟件的主要參考。
測試工具(尤其是自動化工具)在如今的測試過程中扮演著重要角色。盡管自動化測試無法完全取代手動測試,但許多測試領域都因自動化測試的引入而獲益匪淺。例如,通過使用自動化測試工具,可以有效地驗證本地化產品的功能或測試產品的全球化程度。
測試工具通過對原始應用程序和本地化后的應用程序對照運行自動化測試,可以驗證應用程序的本地化是否對功能造成破壞。使用自動化測試,無論UI語言是什么,工具都可以測試其功能。此外,為確保產品已全球化,在測試過程中需要采用更廣泛的測試輸入范圍以及更多樣的環境設置。自動化操作可更輕松地應對測試方案數量上的增加,并可以有效地跟蹤全球化測試的結果。
雖然自動化測試過程是在全球化環境下針對新產品運行一些可信賴的舊有測試工具,但如果被測應用程序已被翻譯,則檢查應用程序UI功能性的測試工具可能會被中斷。即使未受譯文的影響,其他因素也可能導致測試結果不正確,例如工具驗證日期時認定日期格式是固定的。而在全球化的應用程序中,日期格式會隨著區域和地區的不同而不同,這樣就會造成自動化測試工具不起作用。
為避免上述問題的發生,測試工具的開發人員必須與全球化軟件的開發人員遵循相同的規則。測試工具必須是全球化的,必須動態調整其區域設置,并且應該能夠處理國際化文本數據。此外,如果需要通過名稱來訪問可本地化對象,則測試工具必須是可本地化的。
目前全球化測試的問題主要有:(1)在針對國際化測試技術和策略中實現自動化測試腳本的復用問題。(2)測試環境的語言及字符集設置的選擇,如果缺乏這種選擇或者錯誤地進行了選擇,則可能在具體測試過程中帶來系統由于碼制的切換錯誤而出現亂碼的問題。(3)多種語言顯示的測試問題,軟件的翻譯質量包括翻譯的準確性、完整性、一致性,以及特定區域市場的文化、傳統、習俗等內容。如果要實現對翻譯的檢查,需要根據所測語言而準備相應的翻譯文件進行對比。當測試多種語言時,會增加測試人員的負擔。(4)多語言和字符集的測試數據的自動生成,為了測試軟件對接收、處理和發送不同字符集的能力,需要實現針對不同語言和字符集數據的自動產生。
總之,伴隨對軟件測試的日益重視以及自動化測試的逐步引進,各種自動化測試工具相繼推出。但是各種自動化測試工具的可應用性程度和支持側重有所不同,并且廣泛缺乏對國際化測試的支持。
針對以上論述的國際化軟件測試的技術實現難點,通過對Selenium RC-java工具進行分析用以實現其對國際化支持的擴展。
Selenium是由ThoughtWorks團隊開發的Web應用程序自動化測試的工具,適合進行功能測試、驗收測試。Selenium RC基本測試流程如圖1所示,它提供了一個Selenium Server,可以自動開始/關閉/控制所支持的瀏覽器。Selenium Server與瀏覽器使用AJAX(XmlHttpRequest)直接通信,可以使用簡單的HTTP GET/POST請求直接向服務器發送命令,即可以使用任何可以發出HTTP請求的編程語言在瀏覽器中自動執行Selenium測試。

圖1 基本測試運行流程及國際化測試擴展
Selenium RC和大多數的自動化測試工具一樣,也在很多方面缺乏對國際化測試的支持。如在沒有指定瀏覽器參數文件的情況下,Selenium Server會啟動一個系統默認設置的瀏覽器執行測試,默認設置語言為當前瀏覽器版本語言;操作函數直接使用大量頁面元素作為參數,對這類數據取值存在依賴,使得Selenium測試變得脆弱且需要針對測試腳本中同一頁面元素文本屬性值進行重復修改;不能提供多語言和字符集的測試數據等。
針對Selenium工具的不足,通過對測試腳本結構的設計,以及在Selenium RC封裝的Java工具包中添加對環境設置的選擇和參數文件的處理等改進,實現針對國際化測試的擴展任務。
為了達到在多國語言測試時復用整套腳本的目的,將所有取決于特定語言文化的測試元素獨立于測試腳本代碼存儲在參數文件內。
(1)存放固定參數的參數文件。在這類文件中,存放針對任何語言版本測試過程中均不需改變的參數數據。這些固定參數可以是測試用例運行過程中輸入的字符串,也可以是界面元素的屬性值,例如測試機IP地址、界面上按鈕的ID值、界面上表格的xpath值等。
(2)根據測試語言和字符集,存放輸入的隨機數據的參數文件。根據測試語言和字符集要求,分析涉及直接或間接處理字符串輸入/輸出的測試案例,抽取其中可以被替換為任意國際輸入類型的隨機數據。在執行測試時,通過替換這些輸入數據,以測試軟件對處理不同語言和字符集的能力。例如,在執行新建用戶這個測試用例時,需要輸入一個新建用戶的用戶名。在設計中,這個用戶名可以為任意國際輸入類型的數據。為了測試軟件對語言為英文、字符編碼為ISO-8859-1的輸入數據UserName的處理能力,將該輸入數據作為參數存儲在參數文件進行測試。
(3)根據測試語言,存放界面元素的文本屬性值的參數文件。在Selenium工具包中,操作函數直接使用界面元素的屬性值作為參數,而這些屬性值的類型包括name、ID、xpath、txt等等。當測試的目標語言發生改變時,界面元素的文本屬性值也根據目標語言對應的翻譯文本而發生改變。如果這類參數與測試語言不相匹配,測試會因為界面文本數據不合法而失敗。因此,將這類參數存儲在單獨的參數文件中,以方便對其靈活處理。例如,在測試英文版本軟件時,需要點擊一個命名為Apply的按鈕,將其名字作為參數存儲在參數文件中。
以某具體Web產品的國際化測試項目為例,測試項目全過程是通過使用ant這個構建部署工具作為流程腳本引擎,自動調用程序而完成。整個過程可以全部自動化,測試人員只需輸入簡單的配置命令。當然在每日構建的基礎上,還可以不用輸入命令而通過定時任務的設定實現每天自動執行回歸測試。
滿足這種國際化回歸測試的要求,首要條件就是有正確的初始化測試環境——需要添加對測試環境語言和字符集的設置。這種語言及字符集設置的選擇,不僅包括對當前所測軟件語言版本的選擇,還需要包括當前操作系統等環境語言與字符集設置的選擇。
在沒有指定瀏覽器參數文件的情況下,Selenium Server只會啟動一個系統默認設置的瀏覽器執行測試,默認設置語言為當前瀏覽器版本語言。特定瀏覽器語言和參數字符編碼的設定主要通過以下方法實現:首先,根據測試人員的選擇,將需要測試的語言和字符集存儲在配置文件中;然后,根據測試要求的瀏覽器語言和字符集設置,在Firefox的參數文件prefs.js中添加為用戶語言首選項;最后,在啟動Selenium Server時,添加“firefox-ProfileTemplate”選項并指向已修改的Firefox的參數文件目錄。
客戶端操作系統(Redhat4.0)的語言和字符集,可以通過修改文件/etc/sysconfig/i18n或者通過設置LC_ALL和LANG 2個參數實現。
上述方法也可以擴展到多個語言和字符集環境的設置的情況。首先,將所有需要測試的語言的字符集存儲在配置文件中;然后,串行或者并行地在測試機上進行測試。其中,串行執行是指依次正確初始化測試環境,循環執行測試流程,而并行執行是通過Socket通信將信息傳遞到多臺目標測試機,并行初始化測試環境,執行全部測試流程。
本項目中的翻譯文件采取XLIFF文件格式。XLIFF是一種XML應用,每個文本片段保存在一個翻譯單元中(
在上述自動化的參數文件替換過程中,需要對大量的XML格式的翻譯文本數據進行查找。但是,有一些特殊字符在寫入到XML文件時,會被實體引用所替換。所以,目標界面上顯示的字符串,可能出現與寫入在XLIFF翻譯文件中存儲的翻譯字符串不一致的現象。
針對上述這類翻譯字符串與顯示字符串不一致的情況,可以通過正則表達式解決。利用正則表達式的模式匹配表達法,對字符串進行比較、匹配,從而判斷測試結果是否正確。例如:軟件界面上存在一個按鈕,英文版本的按鈕顯示的字符串為“About(A)”,而簡體中文版本的按鈕顯示的字符串為 “關于 (A)”。然而,寫入在XLIFF文件時,英文對應的翻譯字符串應為“About(&;A)”,簡體中文對應的翻譯字符串應為“關于(&;A)”。因此,在進行簡體中文本地化測試時,首先需要利用正則 表 達 式 符 號 “*” 替 換 “&;”, 通 過 “About*” 查 找XLIFF文件;然后,將查找結果“關于(&;A)”處理為“關于*”,再進行界面翻譯測試。
在執行國際化測試時,需要測試軟件對處理不同語言和字符集的能力。這種能力,可以通過簡單的預處理進行測試。即簡單替換前述的第二類參數文件。具體步驟如下:(1)需要維護一個包含所有待測語言和字符集的字符庫;(2)根據參數文件中參數的字節數,從字符庫中抽取制定測試語言和字符集的字符進行替換。
為了實現自動生成指定語言字符集的測試數據,上述方法相對簡單易行。但是伴隨測試語言和字符集范圍的擴展,字符庫需要覆蓋的語言和字符集也需要相應增加,這將帶來巨大的維護工作量。另外,如果需要字符庫覆蓋較全面的東亞語言字符,也將帶來一定的工作量。
上述擴展方案針對Web技術的大型國際化應用軟件的測試,主要使用Selenium RC-java工具開發測試腳本。項目要求同時實現在Linux+Firefox3.0環境下,對軟件的九種語言版本進行國際化測試。
在實際的測試工作中,運用了測試元素獨立、動態選擇語言字符集、根據標準化XLIFF格式轉化三項測試軟件,以及特殊字符翻譯處理、測試數據生成兩項實際技術,對Selenium RC-Java工具進行了必要的擴充和修改。實踐驗證了其對于國際化測試的支持,取得了良好的效果。
[1]崔啟亮,胡一鳴.國際化軟件測試[M].北京:電子工業出版社,2006.
[2]李華宇.Java的國際化和本地化原理及解決方法 [J].微型機與應用,2001(11).
[3]周洪斌.淺析Java國際化編程及其實現[J].電腦編程技巧與維護,2005(12).
[4]包竹葦,李淼,張建.Java網絡傳輸中字符編碼問題的研究[J].計算機工程與應用,2007(4).
[5]許暉,李涓子.J2EE系統國際化問題的解決方案[J].計算機工程,2005(18).
[6]蘇紅帆,黃寧寧,韋錄豐.Windows環境下軟件國際化開發的解決方案[A].廣西計算機學會2006年年會論文集[C],2006.
[7]姜湘崗,章小莉.實現軟件多語言用戶界面方法之分析[J].北京電子科技學院學報,2006(2).