JavaScript对象动态行为的实证研究外文翻译资料
2021-12-13 22:21:15
英语原文共 23 页
JavaScript对象动态行为的实证研究
摘要
尽管JavaScript在客户端Web应用程序中很受欢迎,但缺乏有效的软件工具支持JavaScript的发展和测试。JavaScript的动态特性给软件工程带来了诸如程序理解和安全性等挑战。JavaScript的一个重要特性是,它的对象支持灵活的机制,例如运行时的属性更改和基于原型的继承,这使得它很难解释对象行为。我们为了了解JavaScript对象的动态行为,从而对实际的JavaScript应用程序进行了实证研究。我们提供了在执行期间度量JavaScript的对象行为的指标(例如,与对象相关联的操作、对象大小和属性类型更改)。我们还研究了观察对象的行为模式,以便了解JavaScript软件中的编码或用户交互实践。
关键词:JavaScript;网站研究;对象行为度量和模式
1介绍
JavaScript是一种动态编程语言,以其编程的灵活性、支持运行时代码加载和生成的机制而著名。JavaScript是开发交互式客户端Web应用程序最广泛使用的编程语言。根据最近的使用统计,89%的网站软件都使用JavaScript,总体上,JavaScript正在成为最流行的编程语言。此外,开发人员通常使用大型库和框架(如jquery)来构建JavaScript应用程序。JavaScript是最广泛被使用的开发交互式客户端Web应用程序编程语言。根据最近的使用统计,89%的网站软件都使用JavaScript,总的来说,JavaScript成为最流行的编程语言是现在的一种不可扭转的趋势。此外,开发人员通常使用大型库和框架(如jquery)来构建JavaScript应用程序。
不像其他流行的面向对象语言(例如,Java、C和C),JavaScript之中没有类,而是支持基于原型的继承。我们将在第2.1和4.3节中讨论基于原型的继承。此外,JavaScript对象属性可能在任何程序点发生更改(例如,属性删除)。这些特性是我们很难理解JavaScript对象的行为的原因。因此,这些特性对JavaScript应用软件提出了若干软件工程挑战:(1)强有力的集成开发环境(IDEs)能够使得编程语言,如:Java和C#更加有效的进行软件开发;然而,缺乏开发或者理解JavaScript程序的IDE支撑。因为JavaScript对象的属性和继承在执行过程中可能会发生改变,代码的完整性建议太不精确以至于不能发挥作用。(2)因为JavaScript网站容易受到Web攻击者的攻击,所以有能够检测安全漏洞的软件工具是十分重要的。当程序行为的粗略估计值不准确时,检测可能的安全漏洞变得具有挑战性。(3)由于对象的动态特性(例如,动态类型),JavaScript程序的最优化是很难实现的。
研究人员提出了几种方法来处理程序理解、安全性和优化方面的这些挑战。这项工作通常对JavaScript程序的行为进行假设,重点是语言特性的子集。我们相信,深入研究JavaScript应用程序可以帮助研究人员们更好地理解程序行为,并在设计JavaScript工具时更了解他们的技术选择。理查兹等人对JavaScript应用程序的动态行为进行了创新性研究。作者评估了JavaScript网站(第2.2节)的几个动态指标(例如,调用站点动态性、功能多样性和使用评价)。
在本文中,我们实施了一项实证研究,重点是了解JavaScript对象的运行时行为。由于在基于原型的编程中使用了委托,因此JavaScript对象的属性和继承可能在运行时发生更改。这个设计特性会使得预测JavaScript对象行为变得困难,同时需要深入研究为了更好地理解网站中JavaScript对象的运行时行为。为了加强这些执行对象行为特征的现有观察,我们的研究是在与理查兹等人相同的一组JavaScript网站动态跟踪上进行的。每个跟踪都包含来自执行的信息,如已执行的代码和指令(详见第3.2节)。我们的研究提供了对JavaScript对象行为第一个深入研究的方法。我们报告了与对象相关联的操作的数量和类型、对象属性的类型更改、基于原型继承的动态特性等。我们还总结了某些对象(即用户对象)的行为模式,提出了对程序理解造成困难的常见实践。我们设计了用于测量JavaScript对象及其行为的具体指标,通过离线分析聚合结果。我们把我们的研究结果和分析JavaScript应用程序的现有方法假设相关联。
本研究的主要贡献如下:
- 我们设计了测量JavaScript对象的指标,并且根据经验收集和总结了JavaScript网站跟踪的结果。我们测量了对象特性,包括对象大小、动态类型和原型。最有意思的发现包括:(1)一个用户对象的局部大小(即局部属性的数量)在不同程序点发生明显的变化;(2)单例构造函数(即只创建一个观察到的对象实例的构造函数)广泛存在于JavaScript应用程序中;(3)基于原型的继承通常不用于代码重用。
- 我们研究了用户对象的行为模式,并将它们与编码或用户交互实践关联起来。我们研究了每个对象/属性的操作发生序列模式和属性类型变化模式。我们报告了几个有趣JavaScript对象行为,包括以下几点:(1)相同属性的读取操作在不同的程序点触发不同的查找机制(本地或继承的属性)的情况,使得难以理解JavaScript属性访问;(2)JavaScript程序员似乎有意使用删除操作为了确保某个属性在程序点不存在的情况,不知道该属性以前是否存在;以及(3)当一个属性的类型改变时,该属性在其生命周期的不同阶段表现出不同行为的情况。
总的来看。论文的其余部分组织如下。第2节提供了JavaScript对象的背景,然后讨论了相关工作。第3节描述了我们的实证研究的设计、实验装置以及对有效性的威胁。第4节介绍了总结的度量标准,第5节讨论了JavaScript对象的行为模式。第6节提供结论和未来工作
2背景及相关工作
在本节中,我们将介绍可能影响对象行为的JavaScript动态特性。我们还将介绍与我们的实证研究相关的工作。
2.1javascript对象的动态行为
JavaScript是一种动态的面向对象编程语言。它的动态特性使JavaScript应用程序的运行时行为变得不可预测。除了能够在执行过程中生成和加载代码的反射机制外,JavaScript中还有一些程序特性使得精确地建立对象行为模型变得困难。
JavaScript是一种动态类型语言。一个JavaScript变量可以在不同的程序点绑定到不同的类型。因此,静态类型检查是一种广泛应用于诸如Java和C的编程语言的软件优化工具中的技术,静态类型检查可能是不准确的。在这项研究中,我们展示了流行网站中JavaScript对象属性类型变化的频率和模式。对象属性在运行时可以添加、更新或删除。JavaScript对象的可能的行为由它的属性定义。在JavaScript中,可以通过间接赋值语句(例如x.p=y)添加或更新对象属性;也可以通过delete语句(例如delete x.p)删除对象属性。这意味着在执行过程中一个JavaScript对象可能会在不同的时间表现出不同的行为。我们研究了属性变化及它们对对象行为的影响。JavaScript支持基于原型的继承。JavaScript对象继承的不是基于类的继承,而是从执行期间通过定义的原型对象链继承属性进行继承。由于缺乏类的概念,在特定的程序点处很难总结出一个JavaScript对象的类型。无法准确的预测JavaScript对象的继承属性,因为它们是在运行时确定的。在本研究中,我们研究了JavaScript继承的动态行为。
由原生语言创建的对象。许多用原生代码执行的JavaScript应用程序(例如,C和C )对于JavaScript工具是不可用的。在这项研究中,我们报告了这些原生语言创建的对象的行为。
2.2相关工作
我们介绍了与我们的研究最相关的工作:(1)对于JavaScript应用程序的实证研究;(2)对于JavaScript对象动态行为的相关分析;以及(3)其他编程语言的动态度量。
JavaScript应用程序的动态研究。程序中使用的JavaScript特性引入了先前研究中研究过的动态行为。为了研究动态行为的几个方面,理查兹等人对从浏览器中运行的流行网站下载的JavaScript程序进行了实验。对流行网站进行了研究,得出了几个结论性的结论:(1)原型层次结构经常在库中发生变化;(2)属性不仅仅是在对象初始化时添加的;(3)属性删除在某些网站中很常见。回想一下,在我们的研究中,我们重用了这些基准(即痕迹),并修改了理查兹等人的分析基础设施。我们关注的是关于单个JavaScript对象行为模式的更详细的观察。理查兹等人还提出了一个评估JavaScript中的运行时代码生成机制,重点是eval构造。作者分析了eval的使用细节,并列举了几个案例。我们关注其他重要的编程语言特性(例如,通过原型生成的对象继承),这些特性会影响JavaScript应用程序的动态行为。拉塔纳沃拉邦等人介绍了一项JavaScript对照基准(如SunSpider和V8)与真实Web应用程序行为的研究。作者评估了基准和网站之间的行为差异,得出结论:基准并不代表真实的JavaScript应用程序的行为。这项研究促使我们对从网站上提取的JavaScript代码进行实验。
马丁森和格兰对社交网络应用程序进行了研究,以了解社交网络和既定基准之间的不同行为。本文主要研究了JavaScript函数行为。例如,他们发现社交网络应用程序中各个功能的执行时间差异很大,而且匿名功能经常使用。社交网络应用程序的行为与基准非常不同。在我们的研究中,我们分析了一组更大的Web应用程序,重点关注的是JavaScript对象的行为,而不是函数。Ocariza Jr.等人研究了Web应用程序中的JavaScript错误。作者对运行时观测到的错误进行了分类,并总结了它们与JavaScript网站特性的相关性。例如,他们观察到在JavaScript代码中,空异常的数量和属性删除的平均数量之间存在中等相关性。在Ocariza 等人的研究中,作者主要关注由文档对象模型(DOM)引起的JavaScript错误,我们的报告超过了总结的结果。在未来,我们计划研究JavaScript错误与对象的行为模式之间的相关性。
岳和王进行了一项动态研究,重点是Web上的非安全JavaScript实践。作者安装使用了工具的Firefox版本来收集跟踪文件,并通过执行离线分析来评估不安全实践(例如eval)。我们关注的是JavaScript对象的性质和它们的行为,但并不特别关注安全性。
分析JavaScript对象的动态行为。我们的研究目标是更好地理解JavaScript对象行为。我们还将根据第4节中的经验观察讨论现有或可能的程序分析技术的有效性。有几种分析方法适用于JavaScript对象。为了跟踪对象属性的变化,维和赖德提出了一个内容敏感点来进行分析。此分析使用一种近似的接收器对象类型作为调用内容,并使用部分流敏感分析计算对象属性。该算法在JavaScript混合分析框架中实现,并扩展到真实的网站。我们的研究结果表明,在JavaScript应用程序中经常发生对象属性的更改;对这些更改进行建模的分析可能会产生更准确的解决方案。延森等人提出了一种能够精确建模JavaScript对象及其原型的静态分析方法。他们的流敏感分析处理了JavaScript对象的几个特性(例如,基于原型的继承和运行时的属性更改);但是,它不能有效地分析真实的网站。我们对网站代码中JavaScript对象的动态特性的研究,可以通过专门分析真实代码中经常出现的特性,帮助这种分析提高其性能。瓜尔涅里等人提出了一个静态污点分析,在JavaScript网站中发现安全漏洞。分析的重点是解决JavaScript的动态特性,包括对象创建和通过构造的属性名进行访问。其他特性(例如继承和运行时属性更改)的建模比较保守。我们的研究表明,后一个特征应该得到更精确的处理,以产生更精确的分析解决方案。
马德森等人介绍了对处理原生代码带来的一些挑战的JavaScript应用程序的静态分析。作者设计了一个结合指针分析的使用分析来恢复对象结构的信息,并推断出不可用代码引入的缺失过程间流。我们的研究表明,由原生代码创建的对象经常出现在JavaScript网站中,因此,分析可能非常有用。
尽管很难建立精确的模型(第2.1节),但还是引入了几个JavaScript静态类型系统。然而,没有实证证据表明考虑到JavaScript特性(如属性变化)的这些类型系统可以扩展到真实的网站。本文所做的观察可能有助于对JavaScript对象的表示进行合理的近似,以提高这些类型系统的可伸缩性。
斯卡福尔等人在JavaScript程序中,提出了一种动态分析来识别确定性(即在给定程序点始终具有相同的值)变量和表达式。该方法合理地推断了任何执行都适用的确定性事实。作者认为该结果有助于改进静态指针分析。同样,安卓森和米勒提出了一种静态方法来推断和利用确定性信息。我们的研究表明,尽管在JavaScript网站中,对象属性的变化频繁,但在观察到的执行中,有许多属性的值从未发生变化,这表明可能存在确定性。因此,确定性分析可用于实际的JavaScript应用程序,以确定其在实践中的有效性。
其他编程语言的动态度量。杜福尔等人提出了应用动态度量的Java程序的研究。作者开发了几个通用的度量标准,也可以用于研究JavaScript应用程序。在我们的工作中,我们将这些思想用于在JavaScript对象上下文中测量多态性和对象大小。
霍克纳和哈兰德在python程序上进行了实验,研究了它们的动态行为。作
资料编号:[5434]