计算机应用   2017, Vol. 37 Issue (4): 1143-1148,1173  DOI: 10.11772/j.issn.1001-9081.2017.04.1143
0

引用本文 

程勇, 秦丹, 杨光. 针对JavaScript浏览器兼容性的变异测试方法[J]. 计算机应用, 2017, 37(4): 1143-1148,1173.DOI: 10.11772/j.issn.1001-9081.2017.04.1143.
CHENG Yong, QIN Dan, YANG Guang. Mutation test method for browser compatibility of JavaScript[J]. Journal of Computer Applications, 2017, 37(4): 1143-1148,1173. DOI: 10.11772/j.issn.1001-9081.2017.04.1143.

基金项目

国家自然科学基金资助项目(61672085)

通讯作者

程勇 (1976-), 男, 湖南华容人, 讲师, 博士, CCF会员, 主要研究方向:大规模机器学习、数据挖掘. E-mail:chengyong@mail.buct.edu.cn

作者简介

秦丹 (1991-), 女, 山东临沂人, 硕士, 主要研究方向:软件测试;
杨光 (1984-), 男, 广西北海人, 硕士, 主要研究方向:人工智能、自然语言理解

文章历史

收稿日期:2016-08-17
修回日期:2016-09-23
针对JavaScript浏览器兼容性的变异测试方法
程勇, 秦丹, 杨光    
北京化工大学 信息科学与技术学院, 北京 100029
摘要: 针对JavaScript浏览器兼容性问题缺乏有效的测试方法的问题,基于变异测试技术,对Web应用程序中的JavaScript语言在主流浏览器中的兼容性进行了分析,设计了18个针对浏览器兼容性错误的变异算子并开发了自动化的测试工具Compatibility Mutator。该程序使用抽象语法树(AST)分析JavaScript语法,使用Selenium WebDriver自动调用多个浏览器核心并行执行变异测试。通过对7个广泛使用的JavaScript框架的实验,验证了此方法对每一个框架都能够生成一定数量的变异体,其中对jQuery和YUI框架的变异测试的变异得分分别为43.06%和7.69%,表明了所设计的变异算子能够触发浏览器兼容性方面的错误,并且能够评估测试用例集的完备性。
关键词: 变异测试    JavaScript    兼容性    变异算子    测试工具    
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
Abstract: 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.
Key words: mutation testing    JavaScript    compatibility    mutation operator    testing tool    
0 引言

当前市场上, 无论是桌面设备还是移动设备上都存在多款浏览器,比较主流的如IE、Edge、Chrome、Firefox、Safari、Opera等。这些浏览器对W3C标准的实现存在细微的差异, 这造成了广受诟病的浏览器兼容性问题。这些浏览器在渲染和处理相同的页面时, 展现的行为存在差异。这些差异有可能很小, 甚至不会被注意到; 也可能很大, 甚至造成在某个浏览器下正常的页面在其他浏览器下无法正常解析。兼容性问题在所有浏览器上都存在, 尤以IE为甚。这些冗杂的兼容性问题给前端开发人员带来了相当大的困扰, 降低了开发效率, 增加了测试的成本。对于这些问题, 通常只有基于经验进行规避, 现有的测试方法基本也主要依靠手工操作。如常用的Web兼容性测试工具IE Tester和Multibrowser, 都是简单地执行网页而后依靠人工从外观判断网页的运行效果, 测试效率低且效果差。

通常, Web前端主要由HTML来控制内容、层叠样式表 (Cascading Style Sheets, CSS) 控制样式并使用JavaScript来展现行为, 这三方面都可能存在兼容性问题。在本文中, 主要考虑JavaScript脚本在不同浏览器行为方面的差异。JavaScript是一种动态类型、基于原型的语言, 它由JavaScript引擎实时解释并执行。JavaScript引擎是浏览器的组成部分, 每个浏览器都有自己实现的JavaScript引擎, 因此相同的JavaScript代码就可能在不同浏览器得到不同的解释。为了消除这种“行为差异”, 就要求Web开发者开发大量的测试用例来发现这种兼容性错误。以往的软件测试方法针对比较传统的语言如C++[1]、C#[2]、Java[3]、SQL[4]等, 开发了比较多的测试方法和自动化工具, 而Web编程领域的测试技术一直较为滞后。考虑到当前现状, 本文主要将变异测试应用到Web兼容性测试中, 通过变异的方法在程序中植入兼容性错误并开发相关工具来评价测试用例集在发现兼容性错误方面的能力。

变异测试是一种基于错误的用来评估和提高测试用例集质量的技术。“变异”指在符合语法的前提下人为向被测程序中植入故障的过程, 植入故障的规则称之为变异算子。符合某一变异算子变异修改规则的目标代码语句, 称为该变异算子的变异点或称为故障植入点。变异后的程序称为变异体。利用变异算子找到变异点并进行变异, 生成变异体。对变异体执行测试用例集, 检查植入的故障是否能被发现, 如果测试用例集发现了变异体中植入的错误, 那么就称这个变异体被杀死了。这一过程可以形式化表示[5]如下:

$ m\in M, \exists t\in TS, \neg o(t, m) $ (1)

其中:m表示单个变异体; M表示变异体集合; t表示测试用例; TS表示测试用例集; o表示一个程序相对于测试用例的正确性。杀死变异体也就是意味着这个测试用例集可以检测到这类错误。被杀死的变异体在所有生成的变异体 (除去等价变异体) 中所占的比例, 称为变异得分 (Mutation Score), 即:

$ MS\left( P, \left. T \right) \right.=K/\left( M-\left. E \right) \right. $ (2)

其中:P代表被测程序, T代表测试用例集, M代表变异体数量, K代表被杀死的变异体数量, E代表等价变异体数量, MS代表变异得分。参考这个变异得分, 开发者即能够评估测试用例集的完备性。

本文主要针对Web应用程序中的JavaScript语言在各个主流浏览器中的兼容性进行分析, 设计了18个变异算子。选择了7个实际的JavaScript框架进行了实验研究, 其中2个带有测试用例集, 另外5个没有公开的测试用例集。对于带有测试用例集的框架, 本文进行了详细的变异测试实验;对于没有测试用例集的框架, 也进行了变异研究。本文的主要工作包括:针对浏览器的兼容性进行分析, 设计了18个变异算子; 开发了变异测试工具Compatibility Mutator, 它使用Selenium WebDriver自动调用多浏览器核心完成各个浏览器的测试, 并且实现了多浏览器的并发执行, 大大缩短了测试的时间, 提高了测试效率; 在7个实际应用框架上进行实验, 验证所设计的变异算子能够在实际程序中有效地植入浏览器兼容性方面的错误; 实验同时证明了设计的变异算子所生成的变异体能够有效地检测测试用例集的完备性。

1 相关研究

目前针对JavaScript语言进行变异测试的相关研究并不多, 它们主要集中于几个方面:

1) 基于程序的结构和语法设计变异算子。如文献[6]按照Web应用中的特征分类定义了10个覆盖JavaScript特征的变异算子; 文献[7-8]针对变量、分支语句和JavaScript语言专有的变异算子进性了变异测试, 并提出了用于筛选变异点的FunctionRank算法; 文献[9]通过对JavaScript和PHP程序应用一些变异算子对跨站点脚本安全问题进行了研究。

2) JavaScript语言的测试用例自动生成及缩减技术的优化。文献[10]提出了一个自动生成测试用例的框架; 文献[11]提出一个新颖的方法减少测试用例, 尝试有选择地保留冗余测试集。

3) 研究变异测试在Web应用程序中的应用及优化。文献[12]提出将变异分析应用到Web应用程序的软件组件之间的连接; 文献[13]提出通过检测动态常量来评估变异体产生的影响; 文献[14]通过检查变异是否发生在运行路径中来找出等价变异体。

4) 在变异分析中应用的新方法。文献[15]分析了OWL-S (Web Ontology Language for Services) 的错误模式, 并提出了一种基于本体的变异分析方法;文献[16]对弱类型语言提出了动态变异分析方法, 并实现了针对JavaScript语言的变异体缩减; 文献[17]将概念分析应用到用户会话聚类中去选择测试用例。

5) 在浏览器兼容性测试方面:文献[18-19]先后提出了WebDiff、CrossT、CrossCheck技术, 用于自动检查网页在不同浏览器下运行的差异, 包括DOM差异和外观差异。文献[20]提出了一个检测跨浏览器兼容性问题的方法X-PERT, 这个方法结合了新的和现有的不同技术,对文章中提到的每一种浏览器兼容问题都匹配了最合适检测的方法以实现更高的准确率。文献[21]将网页在不同浏览器下的行为分别捕捉为有限自动机并比较其区别, 从而自动找出DOM层代码中的浏览器兼容问题。

现有的对JavaScript测试的研究主要集中于对测试用例集的约减和对测试方法的优化;在浏览器兼容性测试方面, 主要集中于从外观和DOM层自动检测浏览器兼容性问题的存在;在变异测试方面, 主要集中于对JavaScript标准语法的变异, 或对变异测试方法的优化。但是, 针对JavaScript的浏览器兼容性问题的变异测试目前还没有系统的研究, 本文将针对这个方面进行研究。

2 浏览器兼容性变异测试分析

本文针对Web应用程序中的JavaScript代码在各个主流浏览器中的兼容性进行变异测试分析。针对兼容性问题的特点, 选择了14个存在兼容问题的属性和方法, 并设计了18个变异算子。

2.1 相关方法、属性的兼容性分析

市面上有多款主流的浏览器, 这些浏览器对W3C标准的实现各有细微的不同, 变异算子设计所针对的相关方法和属性在各个浏览器中的支持情况如表 1所示。

表 1 关于浏览器的一些函数和属性的兼容性 Table 1 Some functions and properties about browser compatibility

以下举例说明:

addEventListener () 是DOM2级事件添加事件的处理方法, 它有三个参数:事件名、事件处理函数、事件是否在捕获或冒泡阶段执行。当一个元素同时绑定多个事件时, 按照事件绑定的顺序来执行。

eg: element.addEleventListener ("click", handler, false);

而attachEvent () 是适用于IE下添加事件的处理方法, 它只有两个参数, 分别为事件名和事件处理函数。当一个元素同时绑定多个事件时, 按照事件绑定的相反顺序执行;且事件名也是有差异的, 例如对单击事件, 前者是“onclick”, 后者是“click”。

eg: element.attachEvent ("onclick", handler);

关于表中其他方法和属性, 将在3.2节详细说明。

2.2 变异算子设计

对于普通的Web前端变异测试, 一般的变异算子都是对变量名、属性名等标识符或者其值的直接替换, 例如:

button.click (showDetail)→button.mouseover (showDetail)

而浏览器兼容性问题的测试往往不是简单的关键词替换可以实现的, 例如在IE浏览器下要获得一个DOM对象的样式需要使用如下代码:

var myDi=document.getElementById ("myDiv");

var obj=myDiv.currentStyle;

而在其他浏览器下则需要如下代码:

var myDi=document.getElementById ("myDiv");

var obj=document.defaultView.getComputedStyle (myDiv, null);

所以需要更复杂的变异算子才可能实现变异。下面详细说明这些变异算子的规则。

表 2详细描述了针对JavaScript语言在各个浏览器中的兼容性设计的18个变异算子。由于本研究的核心就是围绕各个浏览器对代码支持的区别, 所以这些变异算子都是针对一个个特定的浏览器设计的, 其所适用的浏览器都标注于“BR”列。

表 2 浏览器兼容性变异算子 Table 2 Mutation operators about the browser compatibility

1) EHR (Event Handler Replacement) 和CS (Confusable Syntax)。

IE浏览器的动态事件添加监听函数与其他浏览器是互相不兼容的。IE使用的是attachEvent () 函数, 非IE浏览器使用的是addEventListener () 函数, 且它们的参数也是不同的。此变异算子用于互换attachEvent () 与addEventListener () 的用法, 它同时修改函数名和参数。由于这两个函数的参数被混淆错用也是开发人员很可能犯的错误, 本文同时设计了另一个变异算子CS, 它专门模拟事件监听函数参数出错的情况。

2) AR (Attribute Replacement)。

DOM2级视图模块添加了一个名为defaultView的属性, 其中保存着一个指针, 指向拥有指定文档的窗口。除IE之外所有浏览器都支持defaultView属性, 而IE中使用一个等价的属性parentWindow (Opera也支持这个属性)。此变异算子将其互相替换, 以观察其在各个浏览器中的执行情况。

3) ETR (Event Target Replacement)。

在事件响应函数中, 浏览器会传入一个参数, 通常命名为event。在兼容DOM的浏览器中, event变量只是简单地传入和返回。而在IE中, event参数是未定义的 (undefined), 因此需要使用window.event代替。而window.event和event并不是完全等效的, 非IE浏览器中的event对象存在一个target属性, 用于获取事件源对象, 而IE浏览器的window.event没有target属性, 代替它的是srcElement属性。此变异算子互换这两种用法, 观察其在各个浏览器中的执行情况。

4) SAR (Style Attribute Replacement)。

任何支持style特性的HTML元素在JavaScript中都有一个对应的style属性, 这个style属性是CSSStyleDeclaration的实例。在HTML标签中的“style”属性中指定的任何CSS属性都将表现为这个JavaScript style对象相应的属性, 只是命名略有不同。例如:CSS属性中的background-image对应的JavaScript属性是style.backgroundImage。其中有一个较为特殊的属性float, 由于float是JavaScript的保留字, 因此不能作为属性名直接使用。DOM2级样式规范规定style对象上相应的属性名为CSSFloat, 但IE浏览器对其不兼容, 它使用自己单独的规则, 即styleFloat。此变异算子即互换CSSFloat与styleFloat这两种用法。

5) TAR (Text Attribute Replacement)。

大部分浏览器都支持DOM对象的innerText属性, 除了Firefox。Firefox使用特有的textContent属性来获取HTML标签内的文本, 在Firefox内使用innerText属性是无效的。此变异算子模拟innerText和textContent的错用情况。

6) CSC (Computed Style Changing)。

在大部分浏览器中, document.defaultView. getComputedStyle (x) 方法返回一个CSSStyleDeclaration对象, 其中包含参数x所指定元素的所有计算样式。而IE不支持这个方法, 它使用x.currentStyle属性替代, 返回的同样是CSSStyleDeclaration实例。此变异算子模拟这两种用法的混用。由于用法差异较大, 这个变异算子的变异过程比普通变异算子复杂一些。

2.3 变异测试算法

基于提出的变异算子, 本文开发了兼容性变异测试程序Compatibility Mutator。整个程序使用Java实现, 以便能够跨平台使用 (IE7难以在较新的Windows版本上安装)。使用Mozilla Rhino将JavaScript代码解析成为抽象语法树 (Abstract Syntax Tree, AST), 在抽象语法树上进行变异并生成.diff文件, 然后将.diff文件应用到源文件上生成变异体进行测试。

AST使用树状结构来表示源代码的抽象语法结构, 树上的每一个节点都对应源代码中的一种结构, 它作为程序代码的一种中间表示形式, 在源代码分析、代码重构、语言翻译等领域有广泛的应用。代码:

var btn=document.getElmentById ("myBtn");

生成的抽象语法树如图 1所示。

图 1 抽象语法树示例 Figure 1 Sample of abstract syntax tree

由于在测试执行过程中, 同一个变异体要被多个浏览器分别执行, 为了提高测试效率, 本文使用Selenium WebDriver来自动调用浏览器和获取页内数据, 并实现了多浏览器的并行执行。Selenium WebDriver使浏览器行为自动化, 它可以自动地调用各个主流浏览器的核心, 完成载入指定页面、触发网页事件或从网页内提取信息等操作。它支持多种编程语言环境并提供了丰富的接口。本文利用Selenium实现了多浏览器的自动调用和并发运行, 提高了测试效率。

测试程序从真实的网页中直接抓取结果, 因而不限定测试用例的实现环境和框架, 无论测试用例使用的是QUnit还是Jasmine亦或Karma等, 只要测试结果在网页端显示, 本程序经过简单的扩展就可以执行并自动获取测试结果。

本文使用开源的Java包Diffutils来辅助变异。它可用.diff文件保存两个文件之间的差异, 并提供patch接口将.diff文件应用到目标文件, 实现对文件的局部修改。本项目使用Diffutils来保存和生成变异体。

变异测试程序运行流程如图 2所示。

图 2 变异测试流程 Figure 2 Mutation testing process

变异程序的主要算法框架描述如下。

Input:

  P: Source program

  TS: Test suite

  MOS: Mutation operators set

Output:

   RL: Result list

1)     begin

2)       P′←P

3)       parseAST (P)

4)       foreach m∈MOS do

5)         DiffListm(P)

6)         foreach DiffDiffList do

7)           patch (Diff, P)

8)           R←executeTest (P, TS)

9)           addToList (R, RL)

10)           recover (P, P′)

11)         end

12)       end

13        return RL

14)     end

它的输入为源程序P、测试用例集TS和变异算子集合MOS, 输出为测试结果列表RL, 在实际项目中为一个csv文件。具体的流程描述如下:

①在第2) 行中, 首先对源程序P进行备份, 备份的程序保存为P′;

②第3) 行中, 将源程序P转换成抽象语法树 (AST), 这一过程由parseAST () 函数完成, 其核心接口由Mozilla Rhino提供;

③第4)~12) 行中, 从变异算子集合MOS中枚举每一个变异算子, 记为m, 遍历AST, 按照变异规则寻找变异点进行变异, 生成变异结果, 将每个变异点及其变异结果保存为一个.diff文件。这一过程用m(P)(第5) 行) 表示, 它将返回.diff文件的列表DiffList;

④第6)~11) 行中, 从.diff文件列表DiffList中枚举每一个.diff文件应用到源程序并生成变异体, 这一过程由patch ()(第7行) 函数完成;

⑤第8) 行中, executeTest () 函数的任务是:针对当前.diff文件的变异算子所适用的浏览器, 通过Selenium WebDriver调用其中每一个浏览器对变异体并行执行测试用例集TS, 并将测试结果保存为变量R;

⑥第9) 行中, addToList () 函数将测试结果R添加到列表RL, 即csv文件中;

⑦第10) 行中, recover () 函数利用备份程序P′来恢复源程序P, 以便对下一个.diff文件执行变异测试;

所有的变异算子和.diff文件都测试完毕后, 返回测试结果RL(第13) 行)。

3 实验与分析

为了评估本文变异测试方法的有效性, 设计并实施了一系列实验。实验的目的主要是为了验证所设计的变异算子能否有效地触发浏览器兼容性错误, 以及所提出方法能否有效地评估给定程序的测试用例集的完备性。

整个变异测试实验使用Compatibility Mutator进行。

3.1 实验环境和数据

选用了7个真实的JavaScript框架, 它们大多是被广泛使用和测试的成熟的框架, 详细信息如表 3所示。

表 3 实验所用的JavaScript程序 Table 3 JavaScript programs used in the experiment

其中jQuery和YUI发布了公开的自动测试用例集, 针对这两个框架执行了完整的变异测试实验。即对每一个变异体及其所针对的每一个浏览器运行所有的测试用例, 分别统计未通过测试的测试用例数量。另外的5个框架由于没有公开的自动测试用例集, 仅对它们执行了变异操作并统计分析了变异体数量。

jQuery是一个功能丰富且被广泛使用的JavaScript框架。jQuery官方提供了比较完善的测试用例集, 测试用例基于QUnit测试框架实现, 大约包含6 700个测试用例 (由于一些测试用例在特定浏览器下会被自动跳过, 具体在各个浏览器下测试用例数量略有不同)。YUI也是一个成熟的JavaScript框架, 其官方公开的测试用例共有421个。

实验中使用的浏览器版本如表 4所示。

表 4 实验所使用的浏览器 Table 4 Browsers used in the experiment
3.2 实验结果

针对jQuery和YUI的变异测试实验结果如表 5所示。

表 5 jQuery和YUI的变异测试实验结果 Table 5 Mutation testing results about jQuery and YUI

针对7个JavaScript框架的变异实验结果如表 6所示。

表 6 其他JavaScript框架的变异实验结果 Table 6 Mutation testing results about other JavaScript frameworks

表 6内的数字表示变异体的数量。由于每个变异体可能需要在多个浏览器内执行, 所以在表 5表 6中, 同一个变异体在不同的浏览器下会被重复统计, 而ALL代表实际生成的变异体数, 因此往往会小于各个浏览器变异体数之和。

3.3 结果分析

实验使用的7个测试程序每一个都产生了专门针对兼容性问题的变异体, 其中jQuery和YUI经过了测试用例集的测试, 变异得分分别为43.06%和7.69%, 并且7个被测程序jQuery、YUI、Tangram、AngularJs、Kissy、Avalon、Zepto分别生成了72、13、56、16、50、33、7个变异体。对于进行测试的4个浏览器IE11、Chrome、Firefox、IE7的变异体生成平均个数为11.1、21.1、23.1、1.1。从整体来看, 本文设计的变异算子都能够有效地生成变异体, 这说明了它能够有效地植入并触发兼容性方面的错误。

通过以上分析可以知道, 本文设计的变异算子能够有效地触发浏览器兼容性问题, 导致网页运行错误。但jQuery和YUI在各个浏览器下的变异得分都不超过50%, 其中IE的变异得分几乎全部为0, 这说明现有的测试用例集在覆盖浏览器兼容性错误方面的能力存在严重的不足, 也意味着这两个被测程序的测试用例集有很大的提升空间, 同时说明本文方法能够有效地评估测试用例集的完备性。

4 结语

本文针对Web应用程序中的JavaScript语言在各个主流浏览器中的兼容性差异进行分析, 选择了14个存在兼容问题的属性和方法, 设计了18个变异算子; 开发了自动化的多浏览器变异测试工具Compatibility Mutator, 它使用抽象语法树 (AST) 实现变异操作, 利用Selenium WebDriver调用多浏览器核心完成测试, 并且实现了多浏览器的并发执行, 大大提高了测试效率; 对7个真实的JavaScript框架进行了实验研究, 实验结果表明, Compatibility Mutator对每一个被测程序都能生成一定数量的变异体, 而且变异得分都不超过50%, 证明了本文设计的变异算子确实能够有效地触发浏览器兼容性错误。其中jQuery和YUI框架的变异得分分别为43.06%和7.69%, 这说明本文方法能够有效地评估测试用例集在发现浏览器兼容性问题方面的能力。

本文的研究远未覆盖到所有的浏览器兼容性问题, 浏览器中还存在着很多复杂且不易检测到的兼容性问题。在未来的工作中, 我们将进一步挖掘更多的相关方面的问题, 设计更多的变异算子, 并针对一些难以测试的问题设计新的变异方法, 以解决比较复杂的兼容性问题。

参考文献
[1] BLAHETA D. Unci: a C++-based unit-testing framework for intro students[C]//SIGCSE 2015: Proceedings of the 46th ACM Technical Symposium on Computer Science Education. New York: ACM, 2015: 475-480.
[2] DEREZINSKA A. A quality estimation of mutation clustering in C# programs[M]//ZAMOJSKI W, MAZURKIEWICZ J, SUGIER J, et al. New Results in Dependability and Computer Systems. Berlin: Springer, 2013: 119-129.
[3] PRASETYA I S W B. T3i: a tool for generating and querying test suites for Java[C]//ESEC/FSE 2015: Proceedings of the 201510th Joint Meeting on Foundations of Software Engineering. New York: ACM, 2015: 950-953.
[4] TUYA J, SUÁREZ-CABAL M J, DE LA RIVA C. Mutating database queries[J]. Information and Software Technology, 2007, 49 (4) : 398-417. doi: 10.1016/j.infsof.2006.06.009
[5] SHIN D, BAE D-H. A theoretical framework for understanding mutation-based testing methods[EB/OL].[2016-03-10]. https://arxiv.org/pdf/1601.06466v1.pdf.
[6] NISHIURA K, MAEZAWA Y, WASHIZAKI H, et al. Mutation analysis for JavaScript Web applications testing[EB/OL].[2016-03-10]. https://ai2-s2-pdfs.s3.amazonaws.com/b823/383c40d9076bea8a3a13db163bab884f7b44.pdf.
[7] MIRSHOKRAIE S, MESBAH A, PATTABIRAMAN K. Efficient JavaScript mutation testing[C]//Proceedings of the 2013 IEEE Sixth International Conference on Software Testing, Verification and Validation. Piscataway, NJ: IEEE, 2013: 74-83.
[8] MIRSHOKRAIE S, MESBAH A, PATTABIRAMAN K. Guided mutation testing for JavaScript Web applications[J]. IEEE Transactions on Software Engineering, 2015, 41 (5) : 429-444. doi: 10.1109/TSE.2014.2371458
[9] SHAHRIAR H, ZULKERNINE M. MUTEC: mutation-based testing of cross site scripting[C]//SESS 2009: Proceedings of the 2009 ICSE Workshop on Software Engineering for Secure Systems. Piscataway, NJ: IEEE, 2009: 47-53.
[10] MIRSHOKRAIE S, MESBAH A, PATTABIRAMAN K. JSEFT: automated JavaScript unit test generation[C]//Proceedings of the 2015 IEEE 8th International Conference on Software Testing, Verification and Validation. Piscataway, NJ: IEEE, 2015: 1-10.
[11] JEFFREY D, GUPTA R. Test suite reduction with selective redundancy[C]//ICSM 2005: Proceedings of the 21st IEEE International Conference on Software Maintenance. Piscataway, NJ: IEEE, 2005:549-558.
[12] PRAPHAMONTRIPONG U, OFFUTT J. Applying mutation testing to Web applications[C]//ICSTW 2010: Proceedings of the 2010 Third International Conference on Software Testing, Verification, and Validation Workshops. Washington, DC: IEEE Computer Society, 2010:132-141.
[13] SCHULER D, DALLMEIER V, ZELLER A. Efficient mutation testing by checking invariant violations[C]//ISSTA 2009: Proceedings of the Eighteenth International Symposium on Software Testing and Analysis. Piscataway, NJ: IEEE, 2009:69-80.
[14] SCHULER D, ZELLER A. (Un-) Covering equivalent mutants[C]//ICST 2010: Proceedings of the 2010 Third International Conference on Software Testing, Verification and Validation. Washington, DC: IEEE Computer Society, 2010: 45-54.
[15] LEE S, BAI X, CHEN Y. Automatic mutation testing and simulation on OWL-S specified Web services[C]//ANSS 2008: Proceedings of the 41st Annual Simulation Symposium. Piscataway, NJ: IEEE, 2008: 149-156.
[16] BOTTACI L. Type sensitive application of mutation operators for dynamically typed programs[C]//ICSTW 2010: Proceedings of the 2010 Third International Conference on Software Testing, Verification, and Validation Workshops. Washington, DC: IEEE Computer Society, 2010: 126-131.
[17] SAMPATH S, SPRENKLE S, GIBSON E, et al. Applying concept analysis to user-session-based testing of Web applications[J]. IEEE Transactions on Software Engineering, 2007, 33 (10) : 643-658. doi: 10.1109/TSE.2007.70723
[18] CHOUDHARY S R, VERSEE H, ORSO A. WEBDIFF: automated identification of cross-browser issues in Web applications[C]//Proceedings of the 2010 IEEE International Conference on Software Maintenance. Washington, DC: IEEE Computer Society, 2010: 1-10.
[19] CHOUDHARY S R, PRASAD M R, ORSO A. CrossCheck: combining crawling and differencing to better detect cross-browser incompatibilities in Web applications[C]//Proceedings of the IEEE Fifth International Conference on Software Testing, Verification and Validation. Washington, DC: IEEE Computer Society, 2012: 171-180.
[20] CHOUDHARY S R, PRASAD M R, ORSO A. X-PERT: accurate identification of cross-browser issues in Web applications[C]//ICSE 2013: Proceedings of the 2013 International Conference on Software Engineering. 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 20115th 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. doi: 10.1016/j.is.2014.02.001