程 勇,秦 丹,楊 光
北京化工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,北京 100029)(*通信作者電子郵箱chengyong@mail.buct.edu.cn)
針對JavaScript瀏覽器兼容性的變異測試方法
程 勇*,秦 丹,楊 光
北京化工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,北京 100029)(*通信作者電子郵箱chengyong@mail.buct.edu.cn)
針對JavaScript瀏覽器兼容性問題缺乏有效的測試方法的問題,基于變異測試技術(shù),對Web應(yīng)用程序中的JavaScript語言在主流瀏覽器中的兼容性進行了分析,設(shè)計了18個針對瀏覽器兼容性錯誤的變異算子并開發(fā)了自動化的測試工具Compatibility Mutator。該程序使用抽象語法樹(AST)分析JavaScript語法,使用Selenium WebDriver自動調(diào)用多個瀏覽器核心并行執(zhí)行變異測試。通過對7個廣泛使用的JavaScript框架的實驗,驗證了此方法對每一個框架都能夠生成一定數(shù)量的變異體,其中對jQuery和YUI框架的變異測試的變異得分分別為43.06%和7.69%,表明了所設(shè)計的變異算子能夠觸發(fā)瀏覽器兼容性方面的錯誤,并且能夠評估測試用例集的完備性。
變異測試;JavaScript;兼容性;變異算子;測試工具
當前市場上,無論是桌面設(shè)備還是移動設(shè)備上都存在多款瀏覽器,比較主流的如IE、Edge、Chrome、Firefox、Safari、Opera等。這些瀏覽器對W3C標準的實現(xiàn)存在細微的差異,這造成了廣受詬病的瀏覽器兼容性問題。這些瀏覽器在渲染和處理相同的頁面時,展現(xiàn)的行為存在差異。這些差異有可能很小,甚至不會被注意到;也可能很大,甚至造成在某個瀏覽器下正常的頁面在其他瀏覽器下無法正常解析。兼容性問題在所有瀏覽器上都存在,尤以IE為甚。這些冗雜的兼容性問題給前端開發(fā)人員帶來了相當大的困擾,降低了開發(fā)效率,增加了測試的成本。對于這些問題,通常只有基于經(jīng)驗進行規(guī)避,現(xiàn)有的測試方法基本也主要依靠手工操作。如常用的Web兼容性測試工具IE Tester和Multibrowser,都是簡單地執(zhí)行網(wǎng)頁而后依靠人工從外觀判斷網(wǎng)頁的運行效果,測試效率低且效果差。
通常,Web前端主要由HTML來控制內(nèi)容、層疊樣式表(Cascading Style Sheets, CSS)控制樣式并使用JavaScript來展現(xiàn)行為,這三方面都可能存在兼容性問題。在本文中,主要考慮JavaScript腳本在不同瀏覽器行為方面的差異。JavaScript是一種動態(tài)類型、基于原型的語言,它由JavaScript引擎實時解釋并執(zhí)行。JavaScript引擎是瀏覽器的組成部分,每個瀏覽器都有自己實現(xiàn)的JavaScript引擎,因此相同的JavaScript代碼就可能在不同瀏覽器得到不同的解釋。為了消除這種“行為差異”,就要求Web開發(fā)者開發(fā)大量的測試用例來發(fā)現(xiàn)這種兼容性錯誤。以往的軟件測試方法針對比較傳統(tǒng)的語言如C++[1]、C#[2]、Java[3]、SQL[4]等,開發(fā)了比較多的測試方法和自動化工具,而Web編程領(lǐng)域的測試技術(shù)一直較為滯后??紤]到當前現(xiàn)狀,本文主要將變異測試應(yīng)用到Web兼容性測試中,通過變異的方法在程序中植入兼容性錯誤并開發(fā)相關(guān)工具來評價測試用例集在發(fā)現(xiàn)兼容性錯誤方面的能力。
變異測試是一種基于錯誤的用來評估和提高測試用例集質(zhì)量的技術(shù)?!白儺悺敝冈诜险Z法的前提下人為向被測程序中植入故障的過程,植入故障的規(guī)則稱之為變異算子。符合某一變異算子變異修改規(guī)則的目標代碼語句,稱為該變異算子的變異點或稱為故障植入點。變異后的程序稱為變異體。利用變異算子找到變異點并進行變異,生成變異體。對變異體執(zhí)行測試用例集,檢查植入的故障是否能被發(fā)現(xiàn),如果測試用例集發(fā)現(xiàn)了變異體中植入的錯誤,那么就稱這個變異體被殺死了。這一過程可以形式化表示[5]如下:
m∈M,?t∈TS,o(t,m)
(1)
其中:m表示單個變異體;M表示變異體集合;t表示測試用例;TS表示測試用例集;o表示一個程序相對于測試用例的正確性。殺死變異體也就是意味著這個測試用例集可以檢測到這類錯誤。被殺死的變異體在所有生成的變異體(除去等價變異體)中所占的比例,稱為變異得分(MutationScore),即:
MS(P,T)=K/(M-E)
(2)
其中:P代表被測程序,T代表測試用例集,M代表變異體數(shù)量,K代表被殺死的變異體數(shù)量,E代表等價變異體數(shù)量,MS代表變異得分。參考這個變異得分,開發(fā)者即能夠評估測試用例集的完備性。
本文主要針對Web應(yīng)用程序中的JavaScript語言在各個主流瀏覽器中的兼容性進行分析,設(shè)計了18個變異算子。選擇了7個實際的JavaScript框架進行了實驗研究,其中2個帶有測試用例集,另外5個沒有公開的測試用例集。對于帶有測試用例集的框架,本文進行了詳細的變異測試實驗;對于沒有測試用例集的框架,也進行了變異研究。本文的主要工作包括:針對瀏覽器的兼容性進行分析,設(shè)計了18個變異算子;開發(fā)了變異測試工具CompatibilityMutator,它使用SeleniumWebDriver自動調(diào)用多瀏覽器核心完成各個瀏覽器的測試,并且實現(xiàn)了多瀏覽器的并發(fā)執(zhí)行,大大縮短了測試的時間,提高了測試效率;在7個實際應(yīng)用框架上進行實驗,驗證所設(shè)計的變異算子能夠在實際程序中有效地植入瀏覽器兼容性方面的錯誤;實驗同時證明了設(shè)計的變異算子所生成的變異體能夠有效地檢測測試用例集的完備性。
目前針對JavaScript語言進行變異測試的相關(guān)研究并不多,它們主要集中于幾個方面:
1)基于程序的結(jié)構(gòu)和語法設(shè)計變異算子。如文獻[6]按照Web應(yīng)用中的特征分類定義了10個覆蓋JavaScript特征的變異算子;文獻[7-8]針對變量、分支語句和JavaScript語言專有的變異算子進性了變異測試,并提出了用于篩選變異點的FunctionRank算法;文獻[9]通過對JavaScript和PHP程序應(yīng)用一些變異算子對跨站點腳本安全問題進行了研究。
2)JavaScript語言的測試用例自動生成及縮減技術(shù)的優(yōu)化。文獻[10]提出了一個自動生成測試用例的框架;文獻[11]提出一個新穎的方法減少測試用例,嘗試有選擇地保留冗余測試集。
3)研究變異測試在Web應(yīng)用程序中的應(yīng)用及優(yōu)化。文獻[12]提出將變異分析應(yīng)用到Web應(yīng)用程序的軟件組件之間的連接;文獻[13]提出通過檢測動態(tài)常量來評估變異體產(chǎn)生的影響;文獻[14]通過檢查變異是否發(fā)生在運行路徑中來找出等價變異體。
4)在變異分析中應(yīng)用的新方法。文獻[15]分析了OWL-S(WebOntologyLanguageforServices)的錯誤模式,并提出了一種基于本體的變異分析方法;文獻[16]對弱類型語言提出了動態(tài)變異分析方法,并實現(xiàn)了針對JavaScript語言的變異體縮減;文獻[17]將概念分析應(yīng)用到用戶會話聚類中去選擇測試用例。
5)在瀏覽器兼容性測試方面:文獻[18-19]先后提出了WebDiff、CrossT、CrossCheck技術(shù),用于自動檢查網(wǎng)頁在不同瀏覽器下運行的差異,包括DOM差異和外觀差異。文獻[20]提出了一個檢測跨瀏覽器兼容性問題的方法X-PERT,這個方法結(jié)合了新的和現(xiàn)有的不同技術(shù),對文章中提到的每一種瀏覽器兼容問題都匹配了最合適檢測的方法以實現(xiàn)更高的準確率。文獻[21]將網(wǎng)頁在不同瀏覽器下的行為分別捕捉為有限自動機并比較其區(qū)別,從而自動找出DOM層代碼中的瀏覽器兼容問題。
現(xiàn)有的對JavaScript測試的研究主要集中于對測試用例集的約減和對測試方法的優(yōu)化;在瀏覽器兼容性測試方面,主要集中于從外觀和DOM層自動檢測瀏覽器兼容性問題的存在;在變異測試方面,主要集中于對JavaScript標準語法的變異,或?qū)ψ儺悳y試方法的優(yōu)化。但是,針對JavaScript的瀏覽器兼容性問題的變異測試目前還沒有系統(tǒng)的研究,本文將針對這個方面進行研究。
本文針對Web應(yīng)用程序中的JavaScript代碼在各個主流瀏覽器中的兼容性進行變異測試分析。針對兼容性問題的特點,選擇了14個存在兼容問題的屬性和方法,并設(shè)計了18個變異算子。
2.1 相關(guān)方法、屬性的兼容性分析
市面上有多款主流的瀏覽器,這些瀏覽器對W3C標準的實現(xiàn)各有細微的不同,變異算子設(shè)計所針對的相關(guān)方法和屬性在各個瀏覽器中的支持情況如表1所示。
表1 關(guān)于瀏覽器的一些函數(shù)和屬性的兼容性
注:incomplete表示IE9以下不兼容;√表示兼容;×表示不兼容。
以下舉例說明:
addEventListener()是DOM2級事件添加事件的處理方法,它有三個參數(shù):事件名、事件處理函數(shù)、事件是否在捕獲或冒泡階段執(zhí)行。當一個元素同時綁定多個事件時,按照事件綁定的順序來執(zhí)行。
eg:element.addEleventListener("click",handler,false);
而attachEvent()是適用于IE下添加事件的處理方法,它只有兩個參數(shù),分別為事件名和事件處理函數(shù)。當一個元素同時綁定多個事件時,按照事件綁定的相反順序執(zhí)行;且事件名也是有差異的,例如對單擊事件,前者是“onclick”,后者是“click”。
eg:element.attachEvent("onclick",handler);
關(guān)于表中其他方法和屬性,將在3.2節(jié)詳細說明。
2.2 變異算子設(shè)計
對于普通的Web前端變異測試,一般的變異算子都是對變量名、屬性名等標識符或者其值的直接替換,例如:
button.click(showDetail)→button.mouseover(showDetail)
而瀏覽器兼容性問題的測試往往不是簡單的關(guān)鍵詞替換可以實現(xiàn)的,例如在IE瀏覽器下要獲得一個DOM對象的樣式需要使用如下代碼:
varmyDi=document.getElementById("myDiv");varobj=myDiv.currentStyle;
而在其他瀏覽器下則需要如下代碼:
varmyDi=document.getElementById("myDiv");varobj=document.defaultView.getComputedStyle(myDiv,null);
所以需要更復(fù)雜的變異算子才可能實現(xiàn)變異。下面詳細說明這些變異算子的規(guī)則。
表2詳細描述了針對JavaScript語言在各個瀏覽器中的兼容性設(shè)計的18個變異算子。由于本研究的核心就是圍繞各個瀏覽器對代碼支持的區(qū)別,所以這些變異算子都是針對一個個特定的瀏覽器設(shè)計的,其所適用的瀏覽器都標注于“BR”列。
表2 瀏覽器兼容性變異算子
注:FF代表Firefox瀏覽器。
1)EHR(EventHandlerReplacement)和CS(ConfusableSyntax)。
IE瀏覽器的動態(tài)事件添加監(jiān)聽函數(shù)與其他瀏覽器是互相不兼容的。IE使用的是attachEvent()函數(shù),非IE瀏覽器使用的是addEventListener()函數(shù),且它們的參數(shù)也是不同的。此變異算子用于互換attachEvent()與addEventListener()的用法,它同時修改函數(shù)名和參數(shù)。由于這兩個函數(shù)的參數(shù)被混淆錯用也是開發(fā)人員很可能犯的錯誤,本文同時設(shè)計了另一個變異算子CS,它專門模擬事件監(jiān)聽函數(shù)參數(shù)出錯的情況。
2)AR(AttributeReplacement)。
DOM2級視圖模塊添加了一個名為defaultView的屬性,其中保存著一個指針,指向擁有指定文檔的窗口。除IE之外所有瀏覽器都支持defaultView屬性,而IE中使用一個等價的屬性parentWindow(Opera也支持這個屬性)。此變異算子將其互相替換,以觀察其在各個瀏覽器中的執(zhí)行情況。
3)ETR(EventTargetReplacement)。
在事件響應(yīng)函數(shù)中,瀏覽器會傳入一個參數(shù),通常命名為event。在兼容DOM的瀏覽器中,event變量只是簡單地傳入和返回。而在IE中,event參數(shù)是未定義的(undefined),因此需要使用window.event代替。而window.event和event并不是完全等效的,非IE瀏覽器中的event對象存在一個target屬性,用于獲取事件源對象,而IE瀏覽器的window.event沒有target屬性,代替它的是srcElement屬性。此變異算子互換這兩種用法,觀察其在各個瀏覽器中的執(zhí)行情況。
4)SAR(StyleAttributeReplacement)。
任何支持style特性的HTML元素在JavaScript中都有一個對應(yīng)的style屬性,這個style屬性是CSSStyleDeclaration的實例。在HTML標簽中的“style”屬性中指定的任何CSS屬性都將表現(xiàn)為這個JavaScriptstyle對象相應(yīng)的屬性,只是命名略有不同。例如:CSS屬性中的background-image對應(yīng)的JavaScript屬性是style.backgroundImage。其中有一個較為特殊的屬性float,由于float是JavaScript的保留字,因此不能作為屬性名直接使用。DOM2級樣式規(guī)范規(guī)定style對象上相應(yīng)的屬性名為CSSFloat,但IE瀏覽器對其不兼容,它使用自己單獨的規(guī)則,即styleFloat。此變異算子即互換CSSFloat與styleFloat這兩種用法。
5)TAR(TextAttributeReplacement)。
大部分瀏覽器都支持DOM對象的innerText屬性,除了Firefox。Firefox使用特有的textContent屬性來獲取HTML標簽內(nèi)的文本,在Firefox內(nèi)使用innerText屬性是無效的。此變異算子模擬innerText和textContent的錯用情況。
6)CSC(ComputedStyleChanging)。
在大部分瀏覽器中,document.defaultView.getComputedStyle(x)方法返回一個CSSStyleDeclaration對象,其中包含參數(shù)x所指定元素的所有計算樣式。而IE不支持這個方法,它使用x.currentStyle屬性替代,返回的同樣是CSSStyleDeclaration實例。此變異算子模擬這兩種用法的混用。由于用法差異較大,這個變異算子的變異過程比普通變異算子復(fù)雜一些。
2.3 變異測試算法
基于提出的變異算子,本文開發(fā)了兼容性變異測試程序CompatibilityMutator。整個程序使用Java實現(xiàn),以便能夠跨平臺使用(IE7難以在較新的Windows版本上安裝)。使用MozillaRhino將JavaScript代碼解析成為抽象語法樹(AbstractSyntaxTree,AST),在抽象語法樹上進行變異并生成.diff文件,然后將.diff文件應(yīng)用到源文件上生成變異體進行測試。
AST使用樹狀結(jié)構(gòu)來表示源代碼的抽象語法結(jié)構(gòu),樹上的每一個節(jié)點都對應(yīng)源代碼中的一種結(jié)構(gòu),它作為程序代碼的一種中間表示形式,在源代碼分析、代碼重構(gòu)、語言翻譯等領(lǐng)域有廣泛的應(yīng)用。代碼:
varbtn=document.getElmentById("myBtn");
生成的抽象語法樹如圖1所示。
圖1 抽象語法樹示例
由于在測試執(zhí)行過程中,同一個變異體要被多個瀏覽器分別執(zhí)行,為了提高測試效率,本文使用SeleniumWebDriver來自動調(diào)用瀏覽器和獲取頁內(nèi)數(shù)據(jù),并實現(xiàn)了多瀏覽器的并行執(zhí)行。SeleniumWebDriver使瀏覽器行為自動化,它可以自動地調(diào)用各個主流瀏覽器的核心,完成載入指定頁面、觸發(fā)網(wǎng)頁事件或從網(wǎng)頁內(nèi)提取信息等操作。它支持多種編程語言環(huán)境并提供了豐富的接口。本文利用Selenium實現(xiàn)了多瀏覽器的自動調(diào)用和并發(fā)運行,提高了測試效率。
測試程序從真實的網(wǎng)頁中直接抓取結(jié)果,因而不限定測試用例的實現(xiàn)環(huán)境和框架,無論測試用例使用的是QUnit還是Jasmine亦或Karma等,只要測試結(jié)果在網(wǎng)頁端顯示,本程序經(jīng)過簡單的擴展就可以執(zhí)行并自動獲取測試結(jié)果。
本文使用開源的Java包Diffutils來輔助變異。它可用.diff文件保存兩個文件之間的差異,并提供patch接口將.diff文件應(yīng)用到目標文件,實現(xiàn)對文件的局部修改。本項目使用Diffutils來保存和生成變異體。
變異測試程序運行流程如圖2所示。
圖2 變異測試流程
變異程序的主要算法框架描述如下。
Input:P: Source programTS: Test suiteMOS: Mutation operators set
Output:RL: Result list
1)
begin
2)
P′←P
3)
parseAST(P)
4)
foreachm∈MOSdo
5)
DiffList←m(P)
6)
foreachDiff∈DiffListdo
7)
patch(Diff,P)
8)
R←executeTest(P,TS)
9)
addToList(R,RL)
10)
recover(P,P′)
11)
end
12)
end
13
returnRL
14)
end
它的輸入為源程序P、測試用例集TS和變異算子集合MOS,輸出為測試結(jié)果列表RL,在實際項目中為一個csv文件。具體的流程描述如下:
①在第2)行中,首先對源程序P進行備份,備份的程序保存為P′;
②第3)行中,將源程序P轉(zhuǎn)換成抽象語法樹(AST),這一過程由parseAST()函數(shù)完成,其核心接口由Mozilla Rhino提供;
③第4)~12)行中,從變異算子集合MOS中枚舉每一個變異算子,記為m,遍歷AST,按照變異規(guī)則尋找變異點進行變異,生成變異結(jié)果,將每個變異點及其變異結(jié)果保存為一個.diff文件。這一過程用m(P)(第5)行)表示,它將返回.diff文件的列表DiffList;
④第6)~11)行中,從.diff文件列表DiffList中枚舉每一個.diff文件應(yīng)用到源程序并生成變異體,這一過程由patch()(第7行)函數(shù)完成;
⑤第8)行中,executeTest()函數(shù)的任務(wù)是:針對當前.diff文件的變異算子所適用的瀏覽器,通過Selenium WebDriver調(diào)用其中每一個瀏覽器對變異體并行執(zhí)行測試用例集TS,并將測試結(jié)果保存為變量R;
⑥第9)行中,addToList()函數(shù)將測試結(jié)果R添加到列表RL,即csv文件中;
⑦第10)行中,recover()函數(shù)利用備份程序P′來恢復(fù)源程序P,以便對下一個.diff文件執(zhí)行變異測試;
所有的變異算子和.diff文件都測試完畢后,返回測試結(jié)果RL(第13)行)。
為了評估本文變異測試方法的有效性,設(shè)計并實施了一系列實驗。實驗的目的主要是為了驗證所設(shè)計的變異算子能否有效地觸發(fā)瀏覽器兼容性錯誤,以及所提出方法能否有效地評估給定程序的測試用例集的完備性。
整個變異測試實驗使用CompatibilityMutator進行。
3.1 實驗環(huán)境和數(shù)據(jù)
選用了7個真實的JavaScript框架,它們大多是被廣泛使用和測試的成熟的框架,詳細信息如表3所示。
表3 實驗所用的JavaScript程序
其中jQuery和YUI發(fā)布了公開的自動測試用例集,針對這兩個框架執(zhí)行了完整的變異測試實驗。即對每一個變異體及其所針對的每一個瀏覽器運行所有的測試用例,分別統(tǒng)計未通過測試的測試用例數(shù)量。另外的5個框架由于沒有公開的自動測試用例集,僅對它們執(zhí)行了變異操作并統(tǒng)計分析了變異體數(shù)量。
jQuery是一個功能豐富且被廣泛使用的JavaScript框架。jQuery官方提供了比較完善的測試用例集,測試用例基于QUnit測試框架實現(xiàn),大約包含6 700個測試用例(由于一些測試用例在特定瀏覽器下會被自動跳過,具體在各個瀏覽器下測試用例數(shù)量略有不同)。YUI也是一個成熟的JavaScript框架,其官方公開的測試用例共有421個。
實驗中使用的瀏覽器版本如表4所示。
表4 實驗所使用的瀏覽器
3.2 實驗結(jié)果
針對jQuery和YUI的變異測試實驗結(jié)果如表5所示。
表5 jQuery和YUI的變異測試實驗結(jié)果
針對7個JavaScript框架的變異實驗結(jié)果如表6所示。
表6 其他JavaScript框架的變異實驗結(jié)果
表6內(nèi)的數(shù)字表示變異體的數(shù)量。由于每個變異體可能需要在多個瀏覽器內(nèi)執(zhí)行,所以在表5和表6中,同一個變異體在不同的瀏覽器下會被重復(fù)統(tǒng)計,而ALL代表實際生成的變異體數(shù),因此往往會小于各個瀏覽器變異體數(shù)之和。
3.3 結(jié)果分析
實驗使用的7個測試程序每一個都產(chǎn)生了專門針對兼容性問題的變異體,其中jQuery和YUI經(jīng)過了測試用例集的測試,變異得分分別為43.06%和7.69%,并且7個被測程序jQuery、YUI、Tangram、AngularJs、Kissy、Avalon、Zepto分別生成了72、13、56、16、50、33、7個變異體。對于進行測試的4個瀏覽器IE11、Chrome、Firefox、IE7的變異體生成平均個數(shù)為11.1、21.1、23.1、1.1。從整體來看,本文設(shè)計的變異算子都能夠有效地生成變異體,這說明了它能夠有效地植入并觸發(fā)兼容性方面的錯誤。
通過以上分析可以知道,本文設(shè)計的變異算子能夠有效地觸發(fā)瀏覽器兼容性問題,導(dǎo)致網(wǎng)頁運行錯誤。但jQuery和YUI在各個瀏覽器下的變異得分都不超過50%,其中IE的變異得分幾乎全部為0,這說明現(xiàn)有的測試用例集在覆蓋瀏覽器兼容性錯誤方面的能力存在嚴重的不足,也意味著這兩個被測程序的測試用例集有很大的提升空間,同時說明本文方法能夠有效地評估測試用例集的完備性。
本文針對Web應(yīng)用程序中的JavaScript語言在各個主流瀏覽器中的兼容性差異進行分析,選擇了14個存在兼容問題的屬性和方法,設(shè)計了18個變異算子;開發(fā)了自動化的多瀏覽器變異測試工具CompatibilityMutator,它使用抽象語法樹(AST)實現(xiàn)變異操作,利用SeleniumWebDriver調(diào)用多瀏覽器核心完成測試,并且實現(xiàn)了多瀏覽器的并發(fā)執(zhí)行,大大提高了測試效率;對7個真實的JavaScript框架進行了實驗研究,實驗結(jié)果表明,CompatibilityMutator對每一個被測程序都能生成一定數(shù)量的變異體,而且變異得分都不超過50%,證明了本文設(shè)計的變異算子確實能夠有效地觸發(fā)瀏覽器兼容性錯誤。其中jQuery和YUI框架的變異得分分別為43.06%和7.69%,這說明本文方法能夠有效地評估測試用例集在發(fā)現(xiàn)瀏覽器兼容性問題方面的能力。
本文的研究遠未覆蓋到所有的瀏覽器兼容性問題,瀏覽器中還存在著很多復(fù)雜且不易檢測到的兼容性問題。在未來的工作中,我們將進一步挖掘更多的相關(guān)方面的問題,設(shè)計更多的變異算子,并針對一些難以測試的問題設(shè)計新的變異方法,以解決比較復(fù)雜的兼容性問題。
)
[1]BLAHETAD.Unci:aC++-basedunit-testingframeworkforintrostudents[C]//SIGCSE2015:Proceedingsofthe46thACMTechnicalSymposiumonComputerScienceEducation.NewYork:ACM, 2015: 475-480.
[2]DEREZINSKAA.AqualityestimationofmutationclusteringinC#programs[M]//ZAMOJSKIW,MAZURKIEWICZJ,SUGIERJ,etal.NewResultsinDependabilityandComputerSystems.Berlin:Springer, 2013: 119-129.
[3]PRASETYAISWB.T3i:atoolforgeneratingandqueryingtestsuitesforJava[C]//ESEC/FSE2015:Proceedingsofthe2015 10thJointMeetingonFoundationsofSoftwareEngineering.NewYork:ACM, 2015: 950-953.
[4]TUYAJ,SUREZ-CABALMJ,DELARIVAC.Mutatingdatabasequeries[J].InformationandSoftwareTechnology, 2007, 49(4): 398-417.
[5]SHIND,BAED-H.Atheoreticalframeworkforunderstandingmutation-basedtestingmethods[EB/OL]. [2016- 03- 10].https://arxiv.org/pdf/1601.06466v1.pdf.
[6]NISHIURAK,MAEZAWAY,WASHIZAKIH,etal.MutationanalysisforJavaScriptWebapplicationstesting[EB/OL]. [2016- 03- 10].https://ai2-s2-pdfs.s3.amazonaws.com/b823/383c40d9076bea8a3a13db163bab884f7b44.pdf.
[7]MIRSHOKRAIES,MESBAHA,PATTABIRAMANK.EfficientJavaScriptmutationtesting[C]//Proceedingsofthe2013IEEESixthInternationalConferenceonSoftwareTesting,VerificationandValidation.Piscataway,NJ:IEEE, 2013: 74-83.
[8]MIRSHOKRAIES,MESBAHA,PATTABIRAMANK.GuidedmutationtestingforJavaScriptWebapplications[J].IEEETransactionsonSoftwareEngineering, 2015, 41(5): 429-444.
[9]SHAHRIARH,ZULKERNINEM.MUTEC:mutation-basedtestingofcrosssitescripting[C]//SESS2009:Proceedingsofthe2009ICSEWorkshoponSoftwareEngineeringforSecureSystems.Piscataway,NJ:IEEE, 2009: 47-53.
[10]MIRSHOKRAIES,MESBAHA,PATTABIRAMANK.JSEFT:automatedJavaScriptunittestgeneration[C]//Proceedingsofthe2015IEEE8thInternationalConferenceonSoftwareTesting,VerificationandValidation.Piscataway,NJ:IEEE,2015: 1-10.
[11]JEFFREYD,GUPTAR.Testsuitereductionwithselectiveredundancy[C]//ICSM2005:Proceedingsofthe21stIEEEInternationalConferenceonSoftwareMaintenance.Piscataway,NJ:IEEE, 2005:549-558.
[12]PRAPHAMONTRIPONGU,OFFUTTJ.ApplyingmutationtestingtoWebapplications[C]//ICSTW2010:Proceedingsofthe2010ThirdInternationalConferenceonSoftwareTesting,Verification,andValidationWorkshops.Washington,DC:IEEEComputerSociety, 2010:132-141.
[13]SCHULERD,DALLMEIERV,ZELLERA.Efficientmutationtestingbycheckinginvariantviolations[C]//ISSTA2009:ProceedingsoftheEighteenthInternationalSymposiumonSoftwareTestingandAnalysis.Piscataway,NJ:IEEE, 2009:69-80.
[14]SCHULERD,ZELLERA. (Un-)Coveringequivalentmutants[C]//ICST2010:Proceedingsofthe2010ThirdInternationalConferenceonSoftwareTesting,VerificationandValidation.Washington,DC:IEEEComputerSociety,2010: 45-54.
[15]LEES,BAIX,CHENY.AutomaticmutationtestingandsimulationonOWL-SspecifiedWebservices[C]//ANSS2008:Proceedingsofthe41stAnnualSimulationSymposium.Piscataway,NJ:IEEE, 2008: 149-156.
[16]BOTTACIL.Typesensitiveapplicationofmutationoperatorsfordynamicallytypedprograms[C]//ICSTW2010:Proceedingsofthe2010ThirdInternationalConferenceonSoftwareTesting,Verification,andValidationWorkshops.Washington,DC:IEEEComputerSociety, 2010: 126-131.
[17]SAMPATHS,SPRENKLES,GIBSONE,etal.Applyingconceptanalysistouser-session-basedtestingofWebapplications[J].IEEETransactionsonSoftwareEngineering, 2007, 33(10): 643-658.
[18]CHOUDHARYSR,VERSEEH,ORSOA.WEBDIFF:automatedidentificationofcross-browserissuesinWebapplications[C]//Proceedingsofthe2010IEEEInternationalConferenceonSoftwareMaintenance.Washington,DC:IEEEComputerSociety, 2010: 1-10.
[19]CHOUDHARYSR,PRASADMR,ORSOA.CrossCheck:combiningcrawlinganddifferencingtobetterdetectcross-browserincompatibilitiesinWebapplications[C]//ProceedingsoftheIEEEFifthInternationalConferenceonSoftwareTesting,VerificationandValidation.Washington,DC:IEEEComputerSociety, 2012: 171-180.
[20]CHOUDHARYSR,PRASADMR,ORSOA.X-PERT:accurateidentificationofcross-browserissuesinWebapplications[C]//ICSE2013:Proceedingsofthe2013InternationalConferenceonSoftwareEngineering.Piscataway,NJ:IEEE, 2013:702-711.
[21] MESBAH A. Automated cross-browser compatibility testing [C]// ICSE 2011: Proceedings of the 33rd International Conference on Software Engineering. Piscataway, NJ: IEEE, 2011: 561-570.
[22] RAZAK R A, FAHRURAZI F R. Agile testing with Selenium [C]// Proceedings of the 2011 5th Malaysian Conference in Software Engineering. Piscataway, NJ: IEEE, 2011: 217-219.
[23] LI Y-F, DAS P K, DOWE D L. Two decades of Web application testing — a survey of recent advances[J]. Information Systems, 2014, 43: 20-54.
This work is partially supported by the National Natural Science Foundation of China (61672085).
CHENG Yong, born in 1976, Ph. D., lecturer. His research interests include large-scale machine learning, data mining.
QIN Dan, born in 1991, M. S. Her research interests include software testing.
YANG Guang, born in 1984, M. S. Her research interests include artificial intelligence, natural language understanding.
Mutation test method for browser compatibility of JavaScript
CHENG Yong*, QIN Dan, YANG Guang
(College of Information Science and Technology, Beijing University of Chemical Technology, Beijing 100029, China)
Since the research on testing technology for JavaScript browser compatibility problems is insufficient, based on mutation testing method and the analysis on the compatibility of JavaScript in Web applications in major browsers, eighteen mutation operators was designed, and an automated testing tool named Compatibility Mutator was implemented. Compatibility Mutator analyze JavaScript syntax with Abstract Syntax Tree (AST), calls various browsers with Selenium WebDriver to run mutation testing automatically and concurrently. The experiments on 7 widely-used JavaScript frameworks showed that the proposed mutation operators could generate a certain amount of mutants, the mutation scores got from mutation testing on jQuery and YUI were 43.06% and 7.69% respectively. Experimental results prove that the proposed operators can trigger the compatibility issues effectively, and evaluate the completeness of test suite effectively in finding the browser compatibility issues.
mutation testing; JavaScript; compatibility; mutation operator; testing tool
2016- 08- 17;
2016- 09- 23。 基金項目:國家自然科學(xué)基金資助項目(61672085)。
程勇(1976—),男,湖南華容人,講師,博士,CCF會員,主要研究方向:大規(guī)模機器學(xué)習(xí)、數(shù)據(jù)挖掘; 秦丹(1991—),女,山東臨沂人,碩士,主要研究方向:軟件測試; 楊光(1984—),男,廣西北海人,碩士,主要研究方向:人工智能、自然語言理解。
1001- 9081(2017)04- 1143- 06
10.11772/j.issn.1001- 9081.2017.04.1143
TP311.56
A