论文部分内容阅读
近年来,JavaScript作为客户端Web应用最受欢迎的编程语言,受到了学术界和工业界的广泛关注。客户端JavaScript具有三个显著特性:1)弱类型与高度动态;2)事件驱动;3)操作复杂DOM对象。一方面,上述特性导致客户端JavaScript易于出现多种错误,如数据类型错误、DOM访问错误等。另一方面,这些导致自动化检测客户端JavaScript错误存在一系列挑战。针对客户端JavaScript错误及相关自动检测问题,本文从以下三个方面展开研究: 1)基于代码统计分析的JavaScript API接口规范构建:基于API接口规范检测API误用是检测JavaScript类型错误的一类重要方法。然而,由于JavaScript的弱类型特性,JavaScript API缺乏形式化的接口规范。本文提出一种从大量API使用实例中抽取API接口规范的方法。该方法利用类型推理机制推测API的返回值的类型,并结合代码统计机制,推测无法利用类型推理方法得到的参数及属性的类型。在真实Web应用上的实验表明,本方法可以有效构建JavaScript API的接口规范。 2)基于事件代理模式的DOM事件处理函数识别:作为事件驱动应用,事件及其相应处理函数的识别是客户端JavaScript分析的基础。但是不同的JavaScript类库采用不同的事件处理机制,缺乏统一标准,导致难以识别客户端JavaScript应用上的事件处理函数。本文分析JavaScript类库的典型事件代理模式,基于其具有的共同代码特征,利用动态程序分析方法识别事件处理函数。实验结果表明,本方法可以有效识别主流类库注册的DOM事件处理函数。 3)面向DOM不可访问错误的测试事件序列生成:DOM不可访问错误是在特定DOM树下由于JavaScript代码试图访问不存在的DOM元素或属性或方法、或调用不可访问的方法引起的。本文首先分析DOM事件与其操作DOM元素之间关系,然后建立DOM事件与DOM元素、属性、方法之间的依赖关系,进而构造可能导致DOM不可访问错误的事件序列。实验结果表明,本方法可以有效生成触发DOM不可访问错误的事件序列。 本文的研究工作对于类库设计人员完善API设计、开发工具设计人员实现客户端JavaScript错误检测和调试均具有实际参考意义,对于后续研究工作也具有借鉴意义。