《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測試測量 > 設(shè)計(jì)應(yīng)用 > 國際化軟件測試技術(shù)的實(shí)現(xiàn)
國際化軟件測試技術(shù)的實(shí)現(xiàn)
來源:微型機(jī)與應(yīng)用2010年第15期
張愛玲
(西安理工大學(xué),陜西 西安 710082)
摘要: 對國際化軟件測試的重要性,、內(nèi)容,、方法等方面作了深入分析,并就當(dāng)前普遍采用的國際化軟件測試自動化工具存在的弱點(diǎn)進(jìn)行了剖析,,最終以Selenium Pc-Java工具做為解決問題的平臺,提出了相應(yīng)的解決辦法,對已有的測試工具在國際化軟件測試方面的功能的擴(kuò)展提出了思路,。
Abstract:
Key words :

摘  要: 對國際化軟件測試的重要性、內(nèi)容,、方法等方面作了深入分析,,并就當(dāng)前普遍采用的國際化軟件測試自動化工具存在的弱點(diǎn)進(jìn)行了剖析,最終以Selenium Pc-Java工具做為解決問題的平臺,,提出了相應(yīng)的解決辦法,,對已有的測試工具在國際化軟件測試方面的功能的擴(kuò)展提出了思路。
關(guān)鍵詞: 軟件測試,;軟件國際化,;軟件國際化測試軟件本地化測試,;軟件測試工具

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


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

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。