当前位置: X-MOL 学术Software Qual. J. › 论文详情
Our official English website, www.x-mol.net, welcomes your feedback! (Note: you will need to create a separate account there.)
Exposing bugs in JavaScript engines through test transplantation and differential testing
Software Quality Journal ( IF 1.7 ) Pub Date : 2021-01-07 , DOI: 10.1007/s11219-020-09537-8
Igor Lima , Jefferson Silva , Breno Miranda , Gustavo Pinto , Marcelo d’Amorim

JavaScript is a popular programming language today with several implementations competing for market dominance. Although a specification document and a conformance test suite exist to guide engine development, bugs occur and have important practical consequences. Implementing correct engines is challenging because the spec is intentionally incomplete and evolves frequently. This paper investigates the use of test transplantation and differential testing for revealing functional bugs in JavaScript engines. The former technique runs the regression test suite of a given engine on another engine. The latter technique fuzzes existing inputs and then compares the output produced by different engines with a differential oracle. We conducted experiments with engines from five major players—Apple, Facebook, Google, Microsoft, and Mozilla—to assess the effectiveness of test transplantation and differential testing. Our results indicate that both techniques revealed several bugs, many of which are confirmed by developers. We reported 35 bugs with test transplantation (23 of these bugs confirmed and 19 fixed) and reported 24 bugs with differential testing (17 of these confirmed and 10 fixed). Results indicate that most of these bugs affected two engines—Apple’s JSC and Microsoft’s ChakraCore (24 and 26 bugs, respectively). To summarize, our results show that test transplantation and differential testing are easy to apply and very effective in finding bugs in complex software, such as JavaScript engines.

中文翻译:

通过测试移植和差异化测试暴露JavaScript引擎的bug

JavaScript 是当今流行的编程语言,有多种实现方式争夺市场主导地位。尽管存在规范文档和一致性测试套件来指导引擎开发,但会发生错误并产生重要的实际后果。实现正确的引擎是具有挑战性的,因为规范是故意不完整的并且经常变化。本文研究了使用测试移植和差异测试来揭示 JavaScript 引擎中的功能性错误。前一种技术在另一个引擎上运行给定引擎的回归测试套件。后一种技术对现有输入进行模糊测试,然后将不同引擎产生的输出与差分预言机进行比较。我们对来自五个主要参与者的引擎进行了实验——苹果、Facebook、谷歌、微软、和 Mozilla——评估测试移植和差异测试的有效性。我们的结果表明,这两种技术都揭示了几个错误,其中许多已被开发人员确认。我们通过测试移植报告了 35 个错误(其中 23 个已确认,19 个已修复),并报告了 24 个差异测试错误(其中 17 个已确认,10 个已修复)。结果表明,大多数这些错误影响了两个引擎——Apple 的 JSC 和微软的 ChakraCore(分别为 24 和 26 个错误)。总而言之,我们的结果表明,测试移植和差异测试易于应用,并且在查找复杂软件(例如 JavaScript 引擎)中的错误方面非常有效。我们通过测试移植报告了 35 个错误(其中 23 个已确认,19 个已修复),并报告了 24 个差异测试错误(其中 17 个已确认,10 个已修复)。结果表明,大多数这些错误影响了两个引擎——Apple 的 JSC 和微软的 ChakraCore(分别为 24 和 26 个错误)。总而言之,我们的结果表明,测试移植和差异测试易于应用,并且在查找复杂软件(例如 JavaScript 引擎)中的错误方面非常有效。我们通过测试移植报告了 35 个错误(其中 23 个已确认,19 个已修复),并报告了 24 个差异测试错误(其中 17 个已确认,10 个已修复)。结果表明,这些错误中的大部分影响了两个引擎——Apple 的 JSC 和微软的 ChakraCore(分别为 24 和 26 个错误)。总而言之,我们的结果表明,测试移植和差异测试易于应用,并且在查找复杂软件(例如 JavaScript 引擎)中的错误方面非常有效。
更新日期:2021-01-07
down
wechat
bug