Award Abstract # 1423645
SHF: Small: A Dynamic Analysis and Test Generation Framework for JavaScript and Web Applications

NSF Org: CCF
Division of Computing and Communication Foundations
Recipient: REGENTS OF THE UNIVERSITY OF CALIFORNIA, THE
Initial Amendment Date: July 17, 2014
Latest Amendment Date: July 17, 2014
Award Number: 1423645
Award Instrument: Standard Grant
Program Manager: Sol Greenspan
sgreensp@nsf.gov
 (703)292-7841
CCF
 Division of Computing and Communication Foundations
CSE
 Directorate for Computer and Information Science and Engineering
Start Date: August 1, 2014
End Date: July 31, 2018 (Estimated)
Total Intended Award Amount: $500,000.00
Total Awarded Amount to Date: $500,000.00
Funds Obligated to Date: FY 2014 = $500,000.00
History of Investigator:
  • Koushik Sen (Principal Investigator)
    ksen@eecs.berkeley.edu
Recipient Sponsored Research Office: University of California-Berkeley
1608 4TH ST STE 201
BERKELEY
CA  US  94710-1749
(510)643-3891
Sponsor Congressional District: 12
Primary Place of Performance: University of California-Berkeley
581 Soda Hall
Berkeley
CA  US  94720-1776
Primary Place of Performance
Congressional District:
12
Unique Entity Identifier (UEI): GS3YEVSS12N6
Parent UEI:
NSF Program(s): Software & Hardware Foundation
Primary Program Source: 01001415DB NSF RESEARCH & RELATED ACTIVIT
Program Reference Code(s): 7923, 8206
Program Element Code(s): 779800
Award Agency Code: 4900
Fund Agency Code: 4900
Assistance Listing Number(s): 47.070

ABSTRACT

JavaScript is the most popular programming language for client-side
web programming. Advances in browser technologies and JavaScript
engines in the recent years have fueled the use of JavaScript in Rich
Internet Applications, and several mobile platforms including Android,
IOS, Tizen OS, Windows 8, Blackberry, and Firefox OS, support
applications written in JavaScript/HTML5. With a renewed interest in
JavaScript, many complex applications such as Google docs, Gmail, and
a variety of games are being developed using
HTML5/JavaScript. However, unlike C/C++, Java, and C#, JavaScript is
significantly shorthanded in the tools landscape. The dynamic and
reflective nature of JavaScript makes it hard to analyze it
statically.

This project investigates a dynamic analysis framework and several
dynamic analysis techniques for JavaScript. The analysis framework
provides a few useful abstractions and an API that significantly
simplifies implementation of dynamic analyses for JavaScript. The
framework works through source code instrumentation and allows
implementation of various heavy-weight dynamic analyses and test
generation techniques. The projects investigates and implements
several dynamic analyses including concolic testing, pure symbolic
execution, a detector of likely type inconsistencies, and a runtime
memory profiler. The techniques developed in this project are
suitable for analyzing and testing that web applications written in
JavaScript/HTML5 are free of common correctness and performance
bugs. The techniques will benefit directly web applications
programmers, and indirectly the numerous users of mobile and web
applications.

PUBLICATIONS PRODUCED AS A RESULT OF THIS RESEARCH

Note:  When clicking on a Digital Object Identifier (DOI) number, you will be taken to an external site maintained by the publisher. Some full text articles may not yet be available without a charge during the embargo (administrative interval).

Some links on this page may take you to non-federal websites. Their policies may differ from this site.

Esben Andreasen and Liang Gong and Anders Moller and Michael Pradel and Marija Selakovic and Koushik Sen and Cristian-Alexandru Staicu "A Survey of Dynamic Analysis and Test Generation for JavaScript" {ACM} Comput. Surv. , v.50 , 2017 , p.66:1--66:
Esben Andreasen and Liang Gong and Anders Møller and Michael Pradel and Marija Selakovic and Koushik Sen and Cristian-Alexandru Staicu "A Survey of Dynamic Analysis and Test Generation for JavaScript" ACM Computing Surveys , 2017
Koushik Sen and George Necula and Liang Gong and Wontae Choi "MultiSE: Multi-Path Symbolic Execution using Value Summaries" 10th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE'15) , 2015
Liang Gong and Michael Pradel and Koushik Sen "JITProf: Pinpointing JIT-unfriendly JavaScript Code" 10th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE'15) , 2015
Magnus Madsen and Frank Tip and Esben Andreasen and Koushik Sen and Anders Møller "Feedback-Directed Instrumentation for Deployed JavaScript Applications" 38th International Conference on Software Engineering (ICSE'16) , 2016
Wontae Choi and Satish Chandra and George Necula and Koushik Sen "SJS: A Type System for JavaScript with Fixed Object Layout" 22nd International Static Analysis Symposium (SAS'15) , 2015

PROJECT OUTCOMES REPORT

Disclaimer

This Project Outcomes Report for the General Public is displayed verbatim as submitted by the Principal Investigator (PI) for this award. Any opinions, findings, and conclusions or recommendations expressed in this Report are those of the PI and do not necessarily reflect the views of the National Science Foundation; NSF has not approved or endorsed its content.

In this project we built a framework, called Jalangi, for developing correctness and performance analysis tools for JavaScript.  We focussed on developing tools for JavaScript because JavaScript is the predominant programming language for building websites and client-side internet applications, such as Gmail, Facebook.com, Twitter.com, Netflix.com, Google Docs, and Amazon.com.  Unfortunately, JavaScript programs are prone to various programming errors which result in correctness, performance, and security issues.  Unlike other popular programming languages, such as Java and C, JavaScript has very little tool support to analyze and to debug these programming errors.
We have developed a simple yet powerful framework, called Jalangi, for writing dynamic analyses (i.e. techniques that analyze an execution of a program) for JavaScript.  Jalangi has two key features.  First, the framework works on any modern browser, such as Chrome, Safari, Firefox, or server-side JavaScript framework such as node.js.  Browser independence allows our dynamic analyses to have wider impact. Additionally, independence from browsers and JavaScript engines also enables us to easily maintain the framework in the face of a rapidly evolving browser landscape---we do not need to upgrade or rebuild our framework whenever there is a JavaScript engine update. Secondly, Jalangi takes care of various challenging details of JavaScript.  One can easily implement a dynamic analysis in the Jalangi framework without worrying about the problematic issues of JavaScript.
Due to Jalangi's simplicity and ease-of-use, we were able to design and implement several dynamic analyses for JavaScript within a short period.  One such analysis, called DLint, managed to find 49 programming issues in average on over 200 of the most popular websites, including visible bugs on the websites of IKEA, Hilton, eBay, and CNBC.  These bugs sometimes led to wrong output on websites or led to serious security vulnerabilities.  Another analysis, called JITProf, managed to improve the performance of the 15 most popular JavaScript benchmarks by up to 26.3%.  A memory analysis tool, called MemInsight, discovered several memory bugs in Tizen apps.  We used Jalangi to study the use of type coercions in JavaScript.  For this we developed the tool called TypeDevil on top of Jalangi.  We dynamically analyzed hundreds of programs, including real-world web applications and popular benchmark programs. Applying TypeDevil to widely used benchmark suites and real-world web applications revealed 15 problematic type inconsistencies, including correctness problems, performance problems, and dangerous coding practices.  We have developed trace typing: a framework on top of Jalangi for automatically and quantitatively evaluating variations of a retrofitted type system on large code bases.   Another analysis, called TRAVIOLI, was developed for visualizing data-structure traversals, for manually generating performance regression tests, and for discovering performance bugs caused by redundant traversals.  TRAVIOLI produced fewer than 4% false positives. We were able to construct performance tests for 93.75% of the reported true traversals. TRAVIOLI also found two asymptotic performance bugs in widely used JavaScript frameworks D3 and express.   We also implemented a scalable symbolic execution engine with state merging, called MultiSE, in a publicly available open-source tool. Our evaluation of MultiSE on several programs shows that MultiSE can run significantly faster than traditional symbolic execution.  Another tool for feedback-directed instrumentation, called Crowdie, was evaluated on 10 real-world issues for which error messages and stack traces are insufficient to debug the problem. Our results showed that feedback-directed instrumentation requires 5% to 25% of the program to be instrumented, that the same crash must be observed 3 to 10 times to discover the crash path, and that feedback-directed instrumentation typically slows down execution by a factor 2x-9x compared to 8x-90x for an approach where applications are fully instrumented.  
We published the key paper on this project at ESEC/FSE, the flagship conference of ACM SIGSOFT.  We have released Jalangi version 1.0 and version 2.0 as open-source software.  Jalangi has powered several research and software tool projects both in academia and industry.  Jalangi has garnered interest from several companies, including Samsung Electronics, NTT Japan, Coverity, Mozilla, and Awake networks, a recent security startup.  The PI has given several invited talks at conferences and workshops, including a tutorial on Jalangi at PLDI 2016.  Two of our papers based on analyses developed on top of Jalangi have won ACM SIGSOFT Distinguished Paper Awards at ICSE 2016 and ESEC/FSE 2015.


Last Modified: 11/26/2018
Modified by: Koushik Sen

Please report errors in award information by writing to: awardsearch@nsf.gov.

Print this page

Back to Top of page